home *** CD-ROM | disk | FTP | other *** search
- From: matt@srs.UUCP (Matt Goheen)
- Newsgroups: comp.sources.misc
- Subject: Wasting time on a Sun3 (suntool that plots a graph)
- Message-ID: <4161@ncoast.UUCP>
- Date: 13 Aug 87 13:55:36 GMT
- Sender: allbery@ncoast.UUCP
- Lines: 693
- Approved: allbery@ncoast.UUCP
- X-Archive: comp.sources.misc/8708/13
-
- Here is a little program I cooked up. This version is Sun3 only, if
- I get enough responce, I'll adapt it to Sun2s (pretty trivial actually,
- but see included README for details).
-
- Matt Goheen
- S.R. Systems
- {seismo,rutgers,ames}!rochester!srs!matt
-
- -----cut-----here-----and-----have-----your-----way-----with-----me-----
- #!/bin/sh
- #
- # shar archiver, delete everything above the #!/bin/sh line
- # and run through sh (not csh)
- #
- echo 'shar: extracting "README" (3051 characters)'
- # 'README' has a checksum of 15571 on BSD and 1790 on System V.
- sed 's/^X//' > README << 'XXX_EOF_XXX'
- X
- XTAKE NOTE: brottool as distributed here will only run on a Sun3. That
- X is only because the f_sqrt() function uses some 68020
- X instructions. However, it wouldn't be much fun on a Sun2
- X anyway (too slow) so I didn't supply a Sun2 f_sqrt() routine.
- X Also, because the array used for plotting is so large (2 Meg),
- X most Sun2 systems will fall a bit short. This was developed
- X on Sun OS 3.2, no promises about other versions (no way for
- X 2.x, probably works for any 3.x).
- X
- X
- XBrottool is a little program that takes the following equation:
- X
- X tmp = y - SIGN(x) * sqrt(fabs(b*x-c));
- X y = a - x;
- X x = tmp;
- X
- Xand goes nuts with it. Preferably, it should be started up like:
- X
- X brottool -Ws 1100 700
- X
- Xsince brottool scales its control panel according to the size of the frame,
- Xthis allows for greater accuracy when selecting the seed values. I've
- Xfound that the best setup is to set the X offset around the middle, set the
- Xhorizontal scrollbar around the middle so that the origin is about in the
- Xcenter of the screen, and set the Y offset to around 300 (it defaults to 120).
- X
- XBrottool clears the screen and restarts anytime one of the seeds changes,
- Xthe scale changes or the X or Y offsets change. It does NOT restart if you
- Xscroll (the canvas is a "window" into the larger background, the X and Y
- Xoffsets control where in the background the program will plot, you can then
- Xscroll your window around viewing the picture).
- X
- XClicking the "Stop" botton halts the plotting. This is actually rather
- Xuseless (until I add something like screendump - maybe).
- X
- XBrottool allocates a 2 Meg. array for plotting (monocrome). If your system
- Xhas only 4 meg (or heaven forbid - less), you will want to make sure that
- Xnothing else is running (esp. other tools). They can be on the desktop, they
- Xjust shouldn't be in the run state or you will get some pretty massive paging
- Xand swapping (i.e. no perfmeter, clocktool, etc.).
- X
- XThe f_sqrt() routine has restricted use because half of it was developed
- Xon company time. Run "sccs what f_tab_sqrt.o" (once it is unpacked) on
- Xthe file to see the Copyright notice. The rest of the program is purely
- Xpublic domain, although I would appreciate it if people sent me any neat
- Xchanges they make.
- X
- XTo make brottool, do the following (assuming you have already unpacked
- Xthe shell archive):
- X
- X 1) Type "make"
- X 2) As mentioned above, type "brottool -Ws 1100 700 &"
- X 3) Play
- X
- XPOSSIBLE ENHANCEMENTS:
- X
- X1) Add Sun2 f_sqrt() routine.
- X2) Add floating point support. The patterns generated are VERY accuracy
- X dependant. Although floating point looks better, it was too slow for
- X me, so I did the integer implementation.
- X3) Add a "screendump" command.
- X4) Add a "don't clear" button so that multiple images can be viewed (either
- X overlayed or offset).
- X5) Other wizbang stuff, like XORing new points, reverse video (although
- X this can be done with suntools), etc.
- X
- X
- X Have fun, and don't
- X hypnotize yourself,
- X
- X Matt Goheen
- X {seismo,allegra,ames,rutgers}!rochester!srs!matt
- X
- XXX_EOF_XXX
- if test 3051 -ne "`wc -c < README`"
- then
- echo 'shar: transmission error on "README"'
- fi
- chk=`sum README | awk '{print $1}'`
- if test 15571 -ne $chk -a 1790 -ne $chk
- then
- echo 'shar: checksum error on "README"'
- fi
- echo 'shar: extracting "Makefile" (268 characters)'
- # 'Makefile' has a checksum of 64750 on BSD and 21309 on System V.
- sed 's/^X//' > Makefile << 'XXX_EOF_XXX'
- X#
- X# Makefile for brottool.
- X#
- X
- XPACKAGE = brottool
- XGLIBS = -lsuntool -lsunwindow -lpixrect
- XCFLAGS = -O
- X.PRECIOUS: f_tab_sqrt.o
- X
- X${PACKAGE}: ${PACKAGE}.o f_tab_sqrt.o
- X cc ${CFLAGS} -o ${PACKAGE} ${PACKAGE}.o f_tab_sqrt.o $(GLIBS)
- X
- X${PACKAGE}.o: brottool.h brottool.icon
- X
- XXX_EOF_XXX
- if test 268 -ne "`wc -c < Makefile`"
- then
- echo 'shar: transmission error on "Makefile"'
- fi
- chk=`sum Makefile | awk '{print $1}'`
- if test 64750 -ne $chk -a 21309 -ne $chk
- then
- echo 'shar: checksum error on "Makefile"'
- fi
- echo 'shar: extracting "brottool.c" (9322 characters)'
- # 'brottool.c' has a checksum of 19388 on BSD and 28013 on System V.
- sed 's/^X//' > brottool.c << 'XXX_EOF_XXX'
- X/*
- X** Overview: Plot stuff in window...
- X*/
- X
- X#include <stdio.h>
- X#include <suntool/sunview.h>
- X#include <suntool/canvas.h>
- X#include <suntool/panel.h>
- X#include "brottool.h"
- X
- X/*
- Xstatic void resize_proc();
- Xstatic void repaint_proc();
- X*/
- Xstatic Notify_value my_notice_destroy();
- Xstatic short bits[16] = { 0x8000, 0x4000, 0x2000, 0x1000, 0x800,
- X 0x400, 0x200, 0x100, 0x80, 0x40, 0x20,
- X 0x10, 0x8, 0x4, 0x2, 0x1 };
- X
- Xstatic short icon_image[] = {
- X#include "brottool.icon"
- X};
- XDEFINE_ICON_FROM_IMAGE(brot_icon, icon_image);
- X
- X
- Xextern Notify_error notify_dispatch();
- Xvoid do_batch();
- X
- X/* twice as wide as tall */
- Xstatic int Xmax = MAX_X_OFF;
- Xstatic int Ymax = MAX_Y_OFF;
- Xstatic int Stop; /* Are we stopped? */
- Xstatic int my_done; /* set in my_notice_destroy() */
- Xstatic int linebytes; /* to get Y index into display array */
- Xstatic int a, b, c; /* seed values */
- Xstatic int factor; /* scaling factor */
- Xstatic int count; /* number of STEP points plotted */
- Xstatic int xoff, yoff; /* current X and Y offsets */
- Xstatic int sx, sy; /* current values of X and Y */
- Xstatic char *image; /* pointer to display array (NOT screen) */
- Xstatic Pixwin *pw; /* screen pixwin */
- Xstatic Pixrect *Mypr; /* display array pixrect */
- X
- X/* pointers to panel items */
- Xstatic Panel_item panel_item_A, panel_item_B, panel_item_C;
- Xstatic Panel_item panel_item_X, panel_item_Y, panel_stop_toggle;
- X
- X/* All the notify procs for the panel items call this one procedure.
- X** It merely changes the values and restarts the display (unless the
- X** item is the "Stop" button, in which case the display isn't restarted).
- X*/
- X
- Xchange_proc(item, value, event)
- XPanel_item item;
- Xint value;
- XEvent *event;
- X{
- X if (item == panel_item_A)
- X a = value;
- X else if (item == panel_item_B)
- X b = value;
- X else if (item == panel_item_C)
- X c = value << SHIFT;
- X else if (item == panel_item_X)
- X xoff = value;
- X else if (item == panel_item_Y)
- X yoff = value;
- X else if (item == panel_stop_toggle) {
- X Stop = value;
- X return;
- X } else
- X factor = SHIFT - value;
- X /* could just use bzero() on "image", but Sun OS 3.2 bzero()
- X ** is broken for > 256K (64K * 4 bytes/long)
- X */
- X pr_rop(Mypr, 0, 0, Xmax, Ymax, PIX_CLR | PIX_DONTCLIP, 0, 0, 0);
- X sx = 0; sy = 0; count = 0; /* start over */
- X}
- X
- Xmain(argc, argv)
- Xint argc;
- Xchar **argv;
- X{
- X int Xsize; /* panel items scaled to frame size */
- X Frame frame; /* the tool */
- X Panel panel; /* the control panel */
- X Canvas canvas; /* the canvas for drawing */
- X Panel_item panel_iters; /* for number of STEP iterations */
- X char panel_iter_string[30]; /* ditto */
- X
- X frame = window_create(NULL, FRAME,
- X FRAME_LABEL, "BrotTool",
- X FRAME_ARGC_PTR_ARGV, &argc, argv,
- X FRAME_ICON, &brot_icon,
- X FRAME_SUBWINDOWS_ADJUSTABLE, FALSE,
- X WIN_ERROR_MSG, "Can't create frame",
- X 0);
- X
- X /* get width of the frame to scale panel items by */
- X Xsize = ((Rect *) window_get(frame, WIN_RECT))->r_width;
- X
- X panel = window_create(frame, PANEL,
- X PANEL_LABEL_BOLD, TRUE,
- X 0);
- X
- X panel_item_A = panel_create_item(panel, PANEL_SLIDER,
- X PANEL_VALUE, DEF_A,
- X PANEL_MIN_VALUE, (-4 << SHIFT),
- X PANEL_MAX_VALUE, (4 << SHIFT),
- X PANEL_NOTIFY_PROC, change_proc,
- X PANEL_LABEL_STRING, "Seed 'A': ",
- X PANEL_NOTIFY_LEVEL, PANEL_DONE,
- X PANEL_SHOW_VALUE, TRUE,
- X PANEL_SLIDER_WIDTH, Xsize-200,
- X PANEL_SHOW_RANGE, FALSE,
- X 0);
- X panel_item_B = panel_create_item(panel, PANEL_SLIDER,
- X PANEL_VALUE, DEF_B,
- X PANEL_MIN_VALUE, (-4 << SHIFT),
- X PANEL_MAX_VALUE, (4 << SHIFT),
- X PANEL_NOTIFY_PROC, change_proc,
- X PANEL_LABEL_STRING, "Seed 'B': ",
- X PANEL_NOTIFY_LEVEL, PANEL_DONE,
- X PANEL_SHOW_VALUE, TRUE,
- X PANEL_SLIDER_WIDTH, Xsize-200,
- X PANEL_SHOW_RANGE, FALSE,
- X 0);
- X panel_item_C = panel_create_item(panel, PANEL_SLIDER,
- X PANEL_VALUE, DEF_C >> SHIFT,
- X PANEL_MIN_VALUE, (-4 << SHIFT),
- X PANEL_MAX_VALUE, (4 << SHIFT),
- X PANEL_NOTIFY_PROC, change_proc,
- X PANEL_LABEL_STRING, "Seed 'C': ",
- X PANEL_NOTIFY_LEVEL, PANEL_DONE,
- X PANEL_SHOW_VALUE, TRUE,
- X PANEL_SLIDER_WIDTH, Xsize-200,
- X PANEL_SHOW_RANGE, FALSE,
- X 0);
- X
- X panel_item_X = panel_create_item(panel, PANEL_SLIDER,
- X PANEL_VALUE, DEF_X_OFF,
- X PANEL_MIN_VALUE, 0,
- X PANEL_MAX_VALUE, MAX_X_OFF,
- X PANEL_NOTIFY_PROC, change_proc,
- X PANEL_LABEL_STRING, "X Offset: ",
- X PANEL_NOTIFY_LEVEL, PANEL_DONE,
- X PANEL_SHOW_VALUE, TRUE,
- X PANEL_SLIDER_WIDTH, Xsize-370,
- X PANEL_SHOW_RANGE, FALSE,
- X 0);
- X
- X /* This is a little strange because there are no PANEL_CHOICE_STRINGS.
- X ** Instead, we use the PANEL_LABEL_STRING to label our button. This
- X ** is easier than loading a pixfont to get the string to come up bold
- X ** like the rest of the panel items.
- X */
- X panel_stop_toggle = panel_create_item(panel, PANEL_TOGGLE,
- X PANEL_LABEL_STRING, "Stop",
- X PANEL_CHOICE_STRINGS, "", 0,
- X PANEL_NOTIFY_PROC, change_proc,
- X PANEL_TOGGLE_VALUE, 0, FALSE,
- X 0);
- X panel_create_item(panel, PANEL_CYCLE,
- X PANEL_NOTIFY_PROC, change_proc,
- X PANEL_LABEL_STRING, " Scale:",
- X PANEL_CHOICE_STRINGS, "1", "2", "4", "8", "16",
- X "32", "64", "128", 0,
- X PANEL_VALUE, DEF_FAC,
- X 0);
- X
- X panel_item_Y = panel_create_item(panel, PANEL_SLIDER,
- X PANEL_VALUE, DEF_Y_OFF,
- X PANEL_MIN_VALUE, 0,
- X PANEL_MAX_VALUE, MAX_Y_OFF,
- X PANEL_NOTIFY_PROC, change_proc,
- X PANEL_LABEL_STRING, "Y Offset: ",
- X PANEL_NOTIFY_LEVEL, PANEL_DONE,
- X PANEL_SHOW_VALUE, TRUE,
- X PANEL_SLIDER_WIDTH, Xsize-370,
- X PANEL_SHOW_RANGE, FALSE,
- X 0);
- X
- X panel_create_item(panel, PANEL_MESSAGE,
- X PANEL_LABEL_STRING, "Points:",
- X 0);
- X panel_iters = panel_create_item(panel, PANEL_MESSAGE,
- X PANEL_LABEL_STRING, " 0",
- X 0);
- X (void) sprintf(panel_iter_string, "x %d", STEP);
- X panel_create_item(panel, PANEL_MESSAGE,
- X PANEL_LABEL_STRING, panel_iter_string,
- X 0);
- X
- X window_fit_height(panel); /* squeeze everything together */
- X
- X canvas = window_create(frame, CANVAS,
- X /* CANVAS_RESIZE_PROC, resize_proc, */
- X /* CANVAS_REPAINT_PROC, repaint_proc, */
- X CANVAS_RETAINED, FALSE,
- X CANVAS_AUTO_CLEAR, FALSE,
- X CANVAS_WIDTH, Xmax,
- X CANVAS_HEIGHT, Ymax,
- X CANVAS_AUTO_SHRINK, FALSE,
- X WIN_VERTICAL_SCROLLBAR, scrollbar_create(0),
- X WIN_HORIZONTAL_SCROLLBAR, scrollbar_create(0),
- X WIN_ERROR_MSG, "Can't create canvas",
- X 0);
- X
- X pw = canvas_pixwin(canvas);
- X
- X (void) notify_interpose_destroy_func(frame, my_notice_destroy);
- X
- X /* initialize defaults */
- X a = DEF_A; b = DEF_B; c = DEF_C; factor = SHIFT - DEF_FAC;
- X xoff = DEF_X_OFF; yoff = DEF_Y_OFF; Stop = FALSE;
- X
- X /* allocate the memory pixrect for the actual display */
- X if ((Mypr = mem_create(Xmax, Ymax, 1)) == NULL) {
- X fprintf(stderr, "%s: not enough memory for display array", argv[0]);
- X exit(1);
- X }
- X
- X image = (char *) ((struct mpr_data *) Mypr->pr_data)->md_image;
- X linebytes = ((struct mpr_data *) Mypr->pr_data)->md_linebytes;
- X window_set(frame, WIN_SHOW, TRUE, 0);
- X
- X while (TRUE) {
- X (void) notify_dispatch(); /* any windowing to do? */
- X if (my_done)
- X break;
- X
- X /* Might be easier to call window_main_loop()? */
- X if (Stop) { /* don't draw, sleep for 2/10 sec */
- X usleep(200000);
- X continue;
- X }
- X do_batch(&sx, &sy);
- X (void) sprintf(panel_iter_string, "%5d", ++count);
- X panel_set(panel_iters,
- X PANEL_LABEL_STRING, panel_iter_string,
- X 0);
- X }
- X}
- X
- X/* NOT NECESSARY...
- Xstatic void
- Xresize_proc()
- X{
- X}
- X*/
- X
- X/* Since do_batch() periodically updates the screen anyway,
- X** we don't need this at all...
- Xstatic void
- Xrepaint_proc()
- X{
- X pw_write(pw, 0, 0, Xmax, Ymax, PIX_SRC, Mypr, 0, 0);
- X}
- X*/
- X
- Xstatic Notify_value
- Xmy_notice_destroy(frame, status)
- XFrame frame;
- XDestroy_status status;
- X{
- X if (status != DESTROY_CHECKING) {
- X my_done = 1;
- X (void) notify_stop();
- X }
- X return(notify_next_destroy_func(frame, status));
- X}
- X
- X/* The basic equation is:
- X**
- X** tmp = y - SIGN(x) * sqrt(fabs(b*x-c));
- X** y = a - x;
- X** x = tmp;
- X*/
- X
- Xvoid
- Xdo_batch()
- X{
- X register int tmp, ix, iy, ifactor, i, ibytes;
- X register char *ia, *ib, *ic;
- X register short *ttmp;
- X
- X ia = (char *) a; ib = (char *) b; ic = (char *) c;
- X ix = sx; iy = sy;
- X ibytes = linebytes;
- X ifactor = factor;
- X
- X for (i=STEP; i--; ) {
- X tmp = iy; tmp >>= ifactor; tmp += yoff; /* y */
- X if (tmp < Ymax && tmp >= 0) {
- X tmp *= ibytes;
- X ttmp = (short *) (image + tmp);
- X tmp = ix; tmp >>= ifactor; tmp += xoff; /* x */
- X if (tmp < Xmax && tmp >= 0)
- X *(ttmp + (tmp >> 4)) |= bits[tmp & 0x0f];
- X }
- X tmp = (int) ib;
- X tmp *= ix;
- X tmp -= (int) ic;
- X if (tmp < 0)
- X tmp = -tmp;
- X tmp = f_sqrt(tmp);
- X if (ix < 0)
- X tmp = -tmp;
- X tmp = iy - tmp;
- X iy = (int) ia - ix;
- X ix = tmp;
- X }
- X
- X /* Maybe this would be faster if we kept track of the canvases
- X ** current viewport and only did a pw_write of that area. For
- X ** now, this appears to be fast enough.
- X */
- X pw_write(pw, 0, 0, Xmax, Ymax, PIX_SRC, Mypr, 0, 0);
- X
- X sx = ix; /* save the x value for the next call */
- X sy = iy; /* save the y value for the next call */
- X}
- XXX_EOF_XXX
- if test 9322 -ne "`wc -c < brottool.c`"
- then
- echo 'shar: transmission error on "brottool.c"'
- fi
- chk=`sum brottool.c | awk '{print $1}'`
- if test 19388 -ne $chk -a 28013 -ne $chk
- then
- echo 'shar: checksum error on "brottool.c"'
- fi
- echo 'shar: extracting "brottool.h" (863 characters)'
- # 'brottool.h' has a checksum of 24498 on BSD and 65017 on System V.
- sed 's/^X//' > brottool.h << 'XXX_EOF_XXX'
- X/* Number of points to plot before updating the screen */
- X#define STEP 5000
- X
- X/* Default seed values */
- X#define DEF_A (-22938)
- X#define DEF_B (-1638)
- X#define DEF_C 221459251
- X
- X/* Index of default screen magnification factor (1, 2, 4, 8, 16, 32, 64, 128) */
- X#define DEF_FAC 6
- X
- X/* Size of display area:
- X** X=(DEF_SIZE << (WIN_SHIFT+1)),
- X** Y=(DEF_SIZE << (WIN_SHIFT-1))
- X*/
- X#define DEF_SIZE 512
- X#define WIN_SHIFT 3
- X
- X/* Default X and Y offsets into display area (NOT the same as scrolling) */
- X#define DEF_X_OFF 100
- X#define DEF_Y_OFF 120
- X
- X/* For scrollbars, display size */
- X#define MAX_X_OFF (DEF_SIZE << (WIN_SHIFT+1))
- X#define MAX_Y_OFF (DEF_SIZE << (WIN_SHIFT-1))
- X
- X/* Number of bits in fixed point calculations, probably shouldn't mess
- X** with this one. 14 seems to overflow, 12 gives poor (or poorer) results.
- X** This seems to be the best.
- X*/
- X#define SHIFT 13
- X
- XXX_EOF_XXX
- if test 863 -ne "`wc -c < brottool.h`"
- then
- echo 'shar: transmission error on "brottool.h"'
- fi
- chk=`sum brottool.h | awk '{print $1}'`
- if test 24498 -ne $chk -a 65017 -ne $chk
- then
- echo 'shar: checksum error on "brottool.h"'
- fi
- echo 'shar: extracting "brottool.icon" (1933 characters)'
- # 'brottool.icon' has a checksum of 43697 on BSD and 49786 on System V.
- sed 's/^X//' > brottool.icon << 'XXX_EOF_XXX'
- X/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
- X */
- X 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x8000,0x00C0,0x0300,0x0001,
- X 0x8000,0x00C0,0x0300,0x0001,0x800F,0xE060,0x0607,0xF001,
- X 0x803F,0xF860,0x061F,0xFC01,0x80F0,0x1E30,0x0C78,0x0F01,
- X 0x8140,0x051C,0x38A0,0x0281,0x8380,0x0387,0xE1C0,0x01C1,
- X 0x8500,0x0140,0x0280,0x00A1,0x8600,0x00C0,0x0300,0x0061,
- X 0x8C00,0x0060,0x0600,0x0031,0x8C00,0x0060,0x0600,0x0031,
- X 0x9800,0x0030,0x0C00,0x0019,0x9800,0x0030,0x0C00,0x0019,
- X 0x9800,0x0030,0x0C00,0x0019,0x9800,0x0030,0x0C00,0x0019,
- X 0x9800,0x0030,0x0C00,0x0019,0x9800,0x0030,0x0C00,0x0019,
- X 0x9800,0x0030,0x0C00,0x0019,0x8C00,0x0070,0x0E00,0x0031,
- X 0x8C00,0x0070,0x0E00,0x0031,0x8600,0x00D0,0x0B00,0x0061,
- X 0x8500,0x016F,0xF680,0x00A1,0x8380,0x039F,0xF9C0,0x01C1,
- X 0x8140,0x0500,0x00A0,0x0281,0x82F0,0x1E00,0x0078,0x0F41,
- X 0x87FF,0xF800,0x001F,0xFFE1,0x8C0F,0xE018,0x1807,0xF031,
- X 0x9800,0x0024,0x2400,0x0019,0x9800,0x0024,0x2400,0x0019,
- X 0x9800,0x0022,0x4400,0x0019,0x9800,0x001F,0xF800,0x0019,
- X 0x9800,0x001F,0xF800,0x0019,0x9800,0x0022,0x4400,0x0019,
- X 0x9800,0x0024,0x2400,0x0019,0x9800,0x0024,0x2400,0x0019,
- X 0x8C0F,0xE018,0x1807,0xF031,0x87FF,0xF800,0x001F,0xFFE1,
- X 0x82F0,0x1E00,0x0078,0x0F41,0x8140,0x0500,0x00A0,0x0281,
- X 0x8380,0x039F,0xF9C0,0x01C1,0x8500,0x016F,0xF680,0x00A1,
- X 0x8600,0x00D0,0x0B00,0x0061,0x8C00,0x0070,0x0E00,0x0031,
- X 0x8C00,0x0070,0x0E00,0x0031,0x9800,0x0030,0x0C00,0x0019,
- X 0x9800,0x0030,0x0C00,0x0019,0x9800,0x0030,0x0C00,0x0019,
- X 0x9800,0x0030,0x0C00,0x0019,0x9800,0x0030,0x0C00,0x0019,
- X 0x9800,0x0030,0x0C00,0x0019,0x9800,0x0030,0x0C00,0x0019,
- X 0x8C00,0x0060,0x0600,0x0031,0x8C00,0x0060,0x0600,0x0031,
- X 0x8600,0x00C0,0x0300,0x0061,0x8500,0x0140,0x0280,0x00A1,
- X 0x8380,0x0387,0xE1C0,0x01C1,0x8140,0x051C,0x38A0,0x0281,
- X 0x80F0,0x1E30,0x0C78,0x0F01,0x803F,0xF860,0x061F,0xFC01,
- X 0x800F,0xE060,0x0607,0xF001,0x8000,0x00C0,0x0300,0x0001,
- X 0x8000,0x00C0,0x0300,0x0001,0xFFFF,0xFFFF,0xFFFF,0xFFFF
- XXX_EOF_XXX
- if test 1933 -ne "`wc -c < brottool.icon`"
- then
- echo 'shar: transmission error on "brottool.icon"'
- fi
- chk=`sum brottool.icon | awk '{print $1}'`
- if test 43697 -ne $chk -a 49786 -ne $chk
- then
- echo 'shar: checksum error on "brottool.icon"'
- fi
- echo 'shar: extracting "encoded" (6239 characters)'
- # 'encoded' has a checksum of 18293 on BSD and 3096 on System V.
- sed 's/^X//' > encoded << 'XXX_EOF_XXX'
- Xbegin 755 f_tab_sqrt.o
- XM``(!!P```%0``!#H`````````!@`````````$``````O`B0O``CMPA``4D'B
- XM0>-!<!:004C`;QS@JN.*!H(```!4($+B@'(*DH!"@#`0XF@D'TYU<@&2@..J
- XM!H(```!4($+B@'(*DH!"@#`0XF@D'TYU``````3F!E,'>PA\"6$*,@KT"ZD,
- XM5`SV#9`.)`ZR#SL/OQ`_$+L1-!&I$AP2C!+Y$V03S!0R%)<4^15:%;D6%Q9S
- XM%LT7)A=^%]48*AA^&-$9(QET&<0:$QIA&JX:^QM&&Y$;VQPD'&P<M!S['4$=
- XMAQW,'A$>5!Z8'MH?'!]>'Y\?WR`?(%\@GB#=(1LA6"&5(=(B#R)*(H8BP2+\
- XM(S8C<".J(^,D'"14)(TDQ23\)3,E:B6A)=<F#29#)G@FK2;B)Q8G2R=_)[(G
- XMYB@9*$PH?RBQ*.,I%2E'*7DIJBG;*@PJ/"IM*ITJS2K]*RPK6RN+*[DKZ"P7
- XM+$4L<RRA+,\L_2TJ+5<MA"VQ+=XN"RXW+F,NCRZ[+N<O$R\^+VDOE"^_+^HP
- XM%3`_,&HPE#"^,.@Q$C$[,64QCC&X,>$R"C(S,ELRA#*L,M4R_3,E,TTS=3.=
- XM,\0S[#03-#HT8C2)-+`TUC3]-20U2C5Q-9<UO37C-@DV+S95-GHVH#;%-NLW
- XM$#<U-UHW?S>D-\DW[3@2.#8X6SA_.*,XQSCK.0\Y,SE7.7HYGCG".>4Z"#HL
- XM.D\Z<CJ5.K@ZVSK].R`[0SME.X@[JCO,.^X\$3PS/%4\=SR8/+H\W#S]/1\]
- XM0#UB/8,]I#W&/><^"#XI/DH^:CZ+/JP^S3[M/PX_+C]//V\_CS^O/\\_[T`/
- XM0"]`3T!O0(]`KT#.0.Y!#4$M04Q!:T&+0:I!R4'H0@=")D)%0F1"@T*B0L!"
- XMWT+^0QQ#.T-90W=#ED.T0])#\$0/1"U$2T1I1(=$I$3"1.!$_D4;13E%5D5T
- XM19%%KT7,1>I&!T8D1D%&7D9[1IA&M4;21N]'#$<I1T9'8D=_1YQ'N$?51_%(
- XM#D@J2$9(8TA_2)M(MTC42/!)#$DH241)8$E\29=)LTG/2>M*!DHB2CY*64IU
- XM2I!*K$K'2N)*_DL92S1+4$MK2X9+H4N\2]=+\DP-3"A,0TQ>3'A,DTRN3,E,
- XMXTS^31A-,TU-36A-@DV=3;=-T4WL3@9.($XZ3E5.;TZ)3J-.O4[73O%/"T\E
- XM3S]/6$]R3XQ/ID^_3]E/\U`,4"90/U!94')0C%"E4+]0V%#Q40M1)%$]4591
- XM;U&)4:)1NU'44>U2!E(?4CA245)I4H)2FU*T4LU2Y5+^4Q=3+U-(4V!3>5.2
- XM4ZI3PE/;4_-4#%0D5#Q4551M5(54G52V5,Y4YE3^5195+E5&55Y5=E6.5:95
- XMOE765>Y6!58=5C56359D5GQ6E%:K5L-6VU;R5PI7(5<Y5U!7:%=_5Y=7KE?%
- XM5]U7]%@+6")8.EA16&A8?UB66*U8Q%C<6/-9"EDA63A93EEE67Q9DUFJ6<%9
- XMV%GN6@5:'%HS6DE:8%IW6HU:I%JZ6M%:Z%K^6Q5;*UM"6UA;;EN%6YM;L5O(
- XM6]Y;]%P+7"%<-UQ-7&-<>ER07*9<O%S27.A<_ET472I=0%U676Q=@EV87:Y=
- XMQ%W97>]>!5X;7C!>1EY<7G)>AUZ=7K->R%[>7O-?"5\>7S1?25]?7W1?BE^?
- XM7[5?RE_?7_5@"F`?8#5@2F!?8'5@BF"?8+1@R6#>8/1A"6$>83-A2&%=87)A
- XMAV&<8;%AQF';8?!B!6(:8BYB0V)88FUB@F*78JMBP&+58NIB_F,38RAC/&-1
- XM8V5C>F./8Z-CN&/,8^%C]60*9!YD,V1'9%MD<&2$9)EDK63!9-9DZF3^91-E
- XM)V4[94]E8V5X98QEH&6T9<AEW&7P9@5F&68M9D%F569I9GUFD6:E9KEFS&;@
- XM9O1G"&<<9S!G1&=89VMG?V>39Z=GNF?.9^)G]F@):!UH,6A$:%AH;&A_:)-H
- XMIFBZ:,UHX6CU:0AI'&DO:4)I5FEI:7UID&FD:;=IRFG>:?%J!&H8:BMJ/FI1
- XM:F5J>&J+:IYJLFK%:MAJZVK^:Q%K)6LX:TMK7FMQ:X1KEVNJ:[UKT&OC:_9L
- XM"6P<;"]L0FQ5;&AL>FR-;*!LLVS&;-EL[&S^;1%M)&TW;4EM7&UO;8)ME&VG
- XM;;IMS&W?;?)N!&X7;BEN/&Y/;F%N=&Z&;IENJVZ^;M!NXV[U;PAO&F\L;S]O
- XM46]D;W9OB&^;;ZUOOV_2;^1O]G`)<!MP+7`_<%)P9'!V<(APFW"M<+]PT7#C
- XM</5Q!W$:<2QQ/G%0<6)Q='&&<9AQJG&\<<YQX''R<@1R%G(H<CIR3')><G!R
- XM@7*3<J5RMW+)<MMR[7+^<Q!S(G,T<T9S5W-I<WMSC7.><[!SPG/3<^5S]W0(
- XM=!IT+'0]=$]T8'1R=(1TE72G=+ATRG3;=.UT_G40=2%U,W5$=59U9W5Y=8IU
- XMG'6M=;YUT'7A=?)V!'85=B=V.'9)=EIV;'9]=HYVH':Q=L)VTW;E=O9W!W<8
- XM=REW.W=,=UUW;G=_=Y!WH7>S=\1WU7?F=_=X"'@9>"IX.WA,>%UX;GA_>)!X
- XMH7BR>,-XU'CE>/9Y!WD8>2EY.GE+>5MY;'E]>8YYGWFP><!YT7GB>?-Z!'H4
- XM>B5Z-GI'>EAZ:'IY>HIZFGJK>KQZS'K=>NYZ_GL/>R![,'M!>U)[8GMS>X-[
- XME'NE>[5[QGO6>^=[]WP(?!A\*7PY?$I\6GQK?'M\C'R<?*Q\O7S-?-Y\[GS^
- XM?0]]'WTP?4!]4'UA?7%]@7V2?:)]LGW"?=-]XWWS?@1^%'XD?C1^17Y5?F5^
- XM=7Z%?I9^IGZV?L9^UG[F?O9_!W\7?R=_-W]'?U=_9W]W?X=_EW^G?[=_QW_7
- XM?^=_]X`'@!>`)X`W@$>`5X!G@'>`AX"7@*>`MX#'@->`YX#W@0:!%H$F@3:!
- XM1H%6@6:!=8&%@96!I8&U@<2!U('D@?2"`X(3@B.",X)"@E*"8H)R@H&"D8*A
- XM@K""P(+0@M^"[X+_@PZ#'H,M@SV#38-<@VR#>X.+@YN#JH.Z@\F#V8/H@_B$
- XM!X07A":$-H1%A%6$9(1TA(.$DX2BA+&$P830A."$[X3_A0Z%'84MA3R%2X5;
- XMA6J%>H6)A9B%J(6WA<:%U87EA?2&`X83AB*&,89`AE"&7X9NAGV&C8:<AJN&
- XMNH;)AMF&Z(;WAP:'%8<DAS2'0X=2AV&'<(=_AXZ'G8>MA[R'RX?:A^F'^(@'
- XMB!:()8@TB$.(4HAAB'"(?XB.B)V(K(B[B,J(V8CHB/>)!HD5B22),XE"B5&)
- XM8(EOB7V)C(F;B:J)N8G(B=>)YHGTB@.*$HHABC"*/XI-BER*:XIZBHF*EXJF
- XMBK6*Q(K2BN&*\(K_BPV+'(LKBSF+2(M7BV:+=(N#BY*+H(NOB[Z+S(O;B^J+
- XM^(P'C!6,)(PSC$&,4(Q>C&V,?(R*C)F,IXRVC,2,TXSBC/",_XT-C1R-*HTY
- XMC4>-5HUDC7.-@8V0C9Z-K(V[C<F-V(WFC?6.`XX2CB".+HX]CDN.6HYHCG:.
- XMA8Z3CJ&.L(Z^CLR.VX[ICO>/!H\4CR*/,8\_CTV/7(]JCWB/AH^5CZ./L8^_
- XMC\Z/W(_JC_B0!Y`5D".0,9`_D$Z07)!JD'B0AI"5D*.0L9"_D,V0VY#ID/B1
- XM!I$4D2*1,)$^D4R16I%HD7:1A9&3D:&1KY&]D<N1V9'GD?62`Y(1DA^2+9([
- XMDDF25Y)EDG.2@9*/DIV2JY*YDL>2U9+CDO&2_Y,-DQJ3*),VDT234I-@DVZ3
- XM?).*DYB3I9.SD\&3SY/=D^N3^90&E!24(I0PE#Z43)19E&>4=92#E)&4GI2L
- XME+J4R)35E..4\93_E0R5&I4HE3:50Y51E5^5;)5ZE8B5EI6CE;&5OY7,E=J5
- XMZ)7UE@.6$98>EBR6.99'EE668I9PEGZ6BY:9EJ:6M);"EL^6W9;JEOB7!9<3
- XMER&7+I<\ETF75Y=DEW*7?Y>-EYJ7J)>UE\.7T)?>E^N7^9@&F!28(9@OF#R8
- XM2IA7F&28<IA_F(V8FIBHF+68PIC0F-V8ZYCXF069$YD@F2V9.YE(F5:98YEP
- XMF7Z9BYF8F::9LYG`F<Z9VYGHF?::`YH0FAV:*YHXFD6:4YI@FFV:>IJ(FI6:
- XMHIJOFKV:RIK7FN2:\9K_FPR;&9LFFS.;09M.FUN;:)MUFX.;D)N=FZJ;MYO$
- XMF]*;WYOLF_F<!IP3G""<+9P[G$B<59QBG&^<?)R)G):<HYRPG+V<RIS8G.6<
- XM\IS_G0R=&9TFG3.=0)U-G5J=9YUTG8&=CIV;G:B=M9W"G<^=W)WIG?:>`YX0
- XMGAV>*IXWGD.>4)Y=GFJ>=YZ$GI&>GIZKGKB>Q9[2GMZ>ZY[XGP6?$I\?GRR?
- XM.9]%GU*?7Y]LGWF?AI^3GY^?K)^YG\:?TY_?G^R?^:`&H!.@'Z`LH#F@1J!3
- XMH%^@;*!YH(:@DJ"?H*R@N:#%H-*@WZ#LH/BA!:$2H1ZA*Z$XH46A4:%>H6NA
- XM=Z&$H9&AG:&JH;>APZ'0H=VAZ:'VH@.B#Z(<HBFB-:)"HDZB6Z)HHG2B@:*-
- XMHIJBIZ*SHL"BS*+9HN:B\J+_HPNC&*,DHS&C/:-*HU>C8Z-PHWRCB:.5HZ*C
- XMKJ.[H\>CU*/@H^VC^:0&I!*D'Z0KI#BD1*11I%VD:J1VI(*DCZ2;I*BDM*3!
- XMI,VDV:3FI/*D_Z4+I1BE)*4PI3VE2:56I6*E;J5[I8>EDZ6@I:REN:7%I=&E
- XMWJ7JI?:F`Z8/IANF**8TID"F3:99IF6F<:9^IHJFEJ:CIJ^FNZ;(IM2FX*;L
- XMIOFG!:<1IQVG*J<VIT*G3J=;IV>G<Z=_IXRGF*>DI["GO*?)I]6GX:?MI_FH
- XM!J@2J!ZH*J@VJ$*H3ZA;J&>H<ZA_J(NHF*BDJ+"HO*C(J-2HX*CMJ/FI!:D1
- XMJ1VI*:DUJ4&I3:E:J6:I<JE^J8JIEJFBJ:ZINJG&J=*IWJGJJ?:J`ZH/JANJ
- XM)ZHSJC^J2ZI7JF.J;ZI[JH>JDZJ?JJNJMZK#JL^JVZKGJO.J_ZL+JQ>K(ZLO
- XMJSNK1ZM3JUZK:JMVJX*KCJN:JZ:KLJN^J\JKUJOBJ^ZK^JP%K!&L':PIK#6L
- XM0:Q-K%FL9:QPK'RLB*R4K*"LK*RXK,2LSZS;K.>L\ZS_K0NM%JTBK2ZM.JU&
- XMK5*M7:UIK76M@:V-K9BMI*VPK;RMR*W3K=^MZZWWK@*N#JX:KB:N,:X]KDFN
- XM5:Y@KFRN>*Z$KH^NFZZGKK.NOJ[*KM:NXJ[MKOFO!:\0KQRO**\SKS^O2Z]6
- XMKV*O;J]YKX6OD:^<KZBOM*^_K\NOUZ_BK^ZO^K`%L!&P';`HL#2P/[!+L%>P
- XM8K!NL'JPA;"1L)RPJ+"TL+^PR[#6L.*P[;#YL06Q$+$<L2>Q,[$^L4JQ5;%A
- XML6VQ>+&$L8^QF[&FL;*QO;')L=2QX+'KL?>R`K(.LAFR);(PLCRR1[)3LEZR
- XM:K)ULH&RC+*8LJ.RK[*ZLL:RT;+<LNBR\[+_LPJS%K,ALRVS.+-#LT^S6K-F
- XMLW&S?+.(LY.SG[.JL[6SP;/,L]BSX[/NL_JT!;01M!RT)[0SM#ZT2;15M&"T
- XM:[1WM(*TCK29M*2TL+2[M,:TTK3=M.BT\[3_0"@C*69?=&%B7W-Q<G0N<R`Q
- XM+C$@0V]P>7)I9VAT("A#*2`X+S$Q+S@W(%-P965C:"!296-O9VYI=&EO;B!3
- XM>7-T96US"D`H(RE4:&ES(&-O9&4@;6%Y($Y/5"!B92!S;VQD(&%N9"]O<B!U
- XM<V5D(&9O<B!P<F]F:70N("!#;W!I97,@9F]R"D`H(REN;VXM<')O9FET('5S
- XM92!M87D@8F4@;6%D92P@87,@;&]N9R!A<R!T:&ES(&-O<'ER:6=H="!N;W1I
- XM8V4*0"@C*6ES(&YO="!R96UO=F5D(&]R(&%L=&5R960N`````!X```9`````
- XM/```!D`````$!P`!7````%0````.!0`@`````````67W-Q<G1?=&%B`%]F
- X&7W-Q<G0`
- X`
- Xend
- XXX_EOF_XXX
- if test 6239 -ne "`wc -c < encoded`"
- then
- echo 'shar: transmission error on "encoded"'
- fi
- chk=`sum encoded | awk '{print $1}'`
- if test 18293 -ne $chk -a 3096 -ne $chk
- then
- echo 'shar: checksum error on "encoded"'
- else
- echo 'shar: decoding "encoded" to "f_tab_sqrt.o"'
- uudecode encoded
- fi
- echo 'shar: extracting "Copyright.c" (269 characters)'
- # 'Copyright.c' has a checksum of 19970 on BSD and 22893 on System V.
- sed 's/^X//' > Copyright.c << 'XXX_EOF_XXX'
- Xstatic char Sccsid[] = "\
- X@(#)f_tab_sqrt.s 1.1 Copyright (C) 8/11/87 Speech Recognition Systems\n\
- X@(#)This code may NOT be sold and/or used for profit. Copies for\n\
- X@(#)non-profit use may be made, as long as this copyright notice\n\
- X@(#)is not removed or altered.";
- XXX_EOF_XXX
- if test 269 -ne "`wc -c < Copyright.c`"
- then
- echo 'shar: transmission error on "Copyright.c"'
- fi
- chk=`sum Copyright.c | awk '{print $1}'`
- if test 19970 -ne $chk -a 22893 -ne $chk
- then
- echo 'shar: checksum error on "Copyright.c"'
- fi
-