dfk@romeo.cs.duke.edu (David F. Kotz) (02/13/89)
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
# patch5b
# This archive created: Sun Feb 12 13:21:42 1989
export PATH; PATH=/bin:$PATH
if test -f 'patch5b'
then
echo shar: will not over-write existing file "'patch5b'"
else
sed 's/^X//' << \SHAR_EOF > 'patch5b'
Xdiff -cr ../gnutex.old/lasergnu ./lasergnu
X*** ../gnutex.old/lasergnu Mon Dec 5 13:25:57 1988
X--- ./lasergnu Thu Feb 2 13:33:13 1989
X***************
X*** 9,15 ****
X set print_banner = on # Print a banner page unless told otherwise.
X unset input_file # the plot input command file
X set output_file = () # the output file (used only by the old laserism)
X! set plot_args = (-p) # arguments to the plotting program (if any)
X unset plot_command # command line arguments may be plot commands
X if !($?LASER) then
X set LASER = "imagen018"
X--- 9,15 ----
X set print_banner = on # Print a banner page unless told otherwise.
X unset input_file # the plot input command file
X set output_file = () # the output file (used only by the old laserism)
X! set plot_args = () # arguments to the plotting program (if any)
X unset plot_command # command line arguments may be plot commands
X if !($?LASER) then
X set LASER = "imagen018"
X***************
X*** 16,25 ****
X endif
X set printer = (-P$LASER) # Default printer set by shell variable LASER.
X
X! # Plot-program-dependent stuff
X set TMP=/tmp/gnu$$
X! echo "set term tek40xx" > $TMP
X
X # Loop through the command-line arguments.
X
X top:
X--- 16,30 ----
X endif
X set printer = (-P$LASER) # Default printer set by shell variable LASER.
X
X! # File for plot commands
X set TMP=/tmp/gnu$$
X! onintr cleanup
X
X+ # default is tektronix mode for printer
X+ set setterm="set terminal tek40xx"
X+ set setsize=""
X+ set LANG="-Ltektronix"
X+
X # Loop through the command-line arguments.
X
X top:
X***************
X*** 97,102 ****
X--- 102,116 ----
X endif
X goto top
X
X+ # use impress instead of tektronix language
X+ case -I:
X+ set setterm="set term imagen"
X+ # set setsize="set size 4,3"
X+ set setsize="set size 9,6.5"
X+ set LANG=""
X+ shift argv
X+ goto top
X+
X case -?*:
X echo "I do not recognize option $argv[1]."
X echo "usage: lasergnu [-Pprinter] [-b] [-l] [-t title] [-f file] ['plot command']...."
X***************
X*** 121,136 ****
X
X set iflags = ($iflags $printer)
X
X! if ($?plot_command) then
X! /usr/local/bin/gnutex $plot_args < $TMP | /usr/local/bin/ipr -Ltektronix \
X! $iflags -f gnutex \
X! -D"jobheader $print_banner" \
X! -D"program lasergnu"
X! else
X! # cat $TMP - | /usr/local/bin/gnutex $plot_args | /usr/local/bin/ipr -Ltektronix \
X! cat $TMP | /usr/local/bin/gnutex $plot_args | /usr/local/bin/ipr -Ltektronix \
X! $iflags -f gnutex \
X! -D"jobheader $print_banner" \
X! -D"program lasergnu"
X! endif
X rm $TMP
X--- 135,147 ----
X
X set iflags = ($iflags $printer)
X
X! if ($LANG == -Ltektronix) set plot_args=($plot_args -p)
X!
X! (echo $setterm; echo $setsize; cat $TMP) \
X! | gnutex $plot_args | /usr/local/bin/ipr $LANG \
X! $iflags -f gnutex \
X! -D"jobheader $print_banner" \
X! -D"program lasergnu"
X!
X! cleanup:
X rm $TMP
Xdiff -cr ../gnutex.old/maildfk ./maildfk
X*** ../gnutex.old/maildfk Fri Feb 10 12:24:38 1989
X--- ./maildfk Wed Feb 1 18:05:42 1989
X***************
X*** 0 ****
X--- 1,44 ----
X+ #!/bin/sh
X+ # maildfk - send mail to GnuTeX author to register use of program
X+ #
X+
X+ # Don't do this more than once
X+ if test ! -r FIRST
X+ then exit
X+ fi
X+
X+ echo ""
X+ echo The author of GnuTeX would like to hear that you have a
X+ echo copy. Unless you object, mail will be sent to him now.
X+ echo This mail will be used only to see how many copies exist.
X+ echo You can also ask to have your name added to the mailing list,
X+ echo to keep you informed of future patches.
X+ echo ""
X+
X+ echo -n Do you wish to have your name on the list '[y] '
X+ read yes
X+ if test -s "$yes" -o "$yes" = yes -o "$yes" = YES -o "$yes" = y -o "$yes" = Y
X+ then
X+ echo Please enter your e-mail address from the ARPAnet:
X+ read addr
X+ name="Please put this name on the list: $addr"
X+ else
X+ name="Please do not put me on the list."
X+ fi
X+
X+ echo -n Do you wish to send the mail '[y] '
X+ read yes
X+ if test -s "$yes" -o "$yes" = yes -o "$yes" = YES -o "$yes" = y -o "$yes" = Y
X+ then
X+ patch=`cat PATCHLEVEL`
X+ dfk=dfk@cs.duke.edu
X+
X+ echo GnuTeX was installed here. $name \
X+ | mail -s "GnuTeX 1.$patch installed" $dfk
X+ echo mail sent to $dfk
X+ else
X+ echo No mail sent.
X+ fi
X+
X+ # Don't run this again
X+ rm FIRST
Xdiff -cr ../gnutex.old/plot.h ./plot.h
X*** ../gnutex.old/plot.h Fri Feb 10 12:16:14 1989
X--- ./plot.h Wed Feb 1 17:35:59 1989
X***************
X*** 23,33 ****
X #define PROGRAM "gnutex"
X #define PROMPT "gnutex> "
X #define SHELL "/bin/sh"
X- #ifdef vms
X- #define HELP ""
X- #else /* vms */
X- #define HELP "echo Sorry, no help for gnutex"
X- #endif
X
X #define TRUE 1
X #define FALSE 0
X--- 23,28 ----
Xdiff -cr ../gnutex.old/term.c ./term.c
X*** ../gnutex.old/term.c Fri Feb 10 12:16:17 1989
X--- ./term.c Thu Feb 2 15:10:54 1989
X***************
X*** 19,24 ****
X--- 19,31 ----
X */
X /* modified 1/14/89 for Microsoft C5.1 by JDM (mcdonald@uxe.cso.uiuc.edu)
X */
X+ /*
X+ * Modification for direct Imagen output (but retaining many of the
X+ * LaTeX extensions) by Paul E. McKenney, 1989.
X+ * Information Science and Technology Division, SRI International,
X+ * 333 Ravenswood Ave, Menlo Park, CA 94025.
X+ * Mail to mckenney@sri.com.
X+ */
X
X #include <stdio.h>
X #include "plot.h"
X***************
X*** 1103,1108 ****
X--- 1110,1117 ----
X
X #define LATEX_TICSIZ 101 /* no more than 100 chars in a tic label */
X
X+ #define LATEX_FORMAT "$%g$" /* default format for tic marks */
X+
X static long LATEX_posx;
X static long LATEX_posy;
X static BOOLEAN LATEX_inplot;
X***************
X*** 1138,1144 ****
X LATEX_inplot = FALSE;
X LATEX_style = NULL;
X LATEX_type = -1;
X!
X fprintf(outfile, "\\setlength{\\unitlength}{%gpt}\n", LATEX_UNIT);
X }
X
X--- 1147,1153 ----
X LATEX_inplot = FALSE;
X LATEX_style = NULL;
X LATEX_type = -1;
X!
X fprintf(outfile, "\\setlength{\\unitlength}{%gpt}\n", LATEX_UNIT);
X }
X
X***************
X*** 1342,1351 ****
X str);
X }
X
X- #ifdef MSDOS
X- # define index(s,c) strchr(s,c)
X- #endif MSDOS
X-
X LATEX_xyput_text(x, y, str, pos, length, dx, dy)
X unsigned int x,y; /* reference point of string */
X char str[]; /* the text */
X--- 1351,1356 ----
X***************
X*** 1367,1376 ****
X /* optional arrow */
X if (length != 0 && pos != NULL && *pos != NULL) {
X if (dx == 0 && dy == 0) { /* determine slope from pos */
X! if (index(pos, 'l') != NULL) dx = -1;
X! if (index(pos, 'r') != NULL) dx = 1;
X! if (index(pos, 't') != NULL) dy = 1;
X! if (index(pos, 'b') != NULL) dy = -1;
X }
X fprintf(outfile, "\\vector(%d,%d){%u}\n", dx, dy, length);
X }
X--- 1372,1381 ----
X /* optional arrow */
X if (length != 0 && pos != NULL && *pos != NULL) {
X if (dx == 0 && dy == 0) { /* determine slope from pos */
X! if (INDEX(pos, 'l') != NULL) dx = -1;
X! if (INDEX(pos, 'r') != NULL) dx = 1;
X! if (INDEX(pos, 't') != NULL) dy = 1;
X! if (INDEX(pos, 'b') != NULL) dy = -1;
X }
X fprintf(outfile, "\\vector(%d,%d){%u}\n", dx, dy, length);
X }
X***************
X*** 1483,1488 ****
X--- 1488,1495 ----
X {
X char mark[LATEX_TICSIZ];
X
X+ if (*format == '\0')
X+ format = LATEX_FORMAT;
X sprintf(mark, format, number);
X fprintf(outfile, "\\put(%ld,%ld){\\makebox(0,0)[t]{%s}}\n",
X (long)x, (long)(-LATEX_HTIC), mark);
X***************
X*** 1495,1500 ****
X--- 1502,1509 ----
X {
X char mark[LATEX_TICSIZ];
X
X+ if (*format == '\0')
X+ format = LATEX_FORMAT;
X sprintf(mark, format, number);
X fprintf(outfile, "\\put(%ld,%ld){\\makebox(0,0)[r]{%s}}\n",
X (long)(-LATEX_VTIC), (long)y, mark);
X***************
X*** 1512,1518 ****
X--- 1521,2066 ----
X
X #endif /* LATEX */
X
X+ #ifdef IMAGEN
X
X+ #include "imPcodes.h"
X+
X+ #define IMAGEN_PTS_PER_INCH (300)
X+ #define IMAGEN_UNIT (.01) /* points */
X+
X+ #define IMAGEN_HTIC 20
X+ #define IMAGEN_VTIC 20
X+ #define IMAGEN_HCHAR (4./IMAGEN_UNIT)
X+ #define IMAGEN_VCHAR (12./IMAGEN_UNIT)
X+
X+ #define IMAGEN_TICSIZ 101 /* no more than 100 chars in a tic label */
X+
X+ #define IMAGEN_FORMAT "%g" /* default tick mark format */
X+
X+ static int IMAGEN_orgx; /* absolute-pixel-ORIgin of graph. */
X+ static int IMAGEN_orgy;
X+ static int IMAGEN_posx; /* current drawing position (lines). */
X+ static int IMAGEN_posy;
X+ static int IMAGEN_inplot;
X+ static int IMAGEN_xmax; /* width of graph in pixels. */
X+ static int IMAGEN_ymax; /* height of graph in pixels. */
X+ static int IMAGEN_hchar; /* Height of CHAR in current font. */
X+ static int IMAGEN_wchar; /* Width of CHAR in current font. */
X+ static int IMAGEN_blofs; /* BaseLine OFfSet from bounding box. */
X+ static int IMAGEN_rotated = -1; /* text printing is ROTATED (y-axis label) */
X+
X+ static int IMAGEN_titlefsz = 15;
X+ static int IMAGEN_axisfsz = 12;
X+ static int IMAGEN_labelfsz = 10;
X+ static int IMAGEN_tickfsz = 9;
X+ static int IMAGEN_cursize = -1; /* pointer to one of above. */
X+
X+ static IMAGEN_endplot();
X+ extern char *malloc();
X+
X+ #ifndef sign
X+ #define sign(x) ((x) >= 0 ? 1 : -1)
X+ #define abs(x) ((x) >= 0 ? (x) : -(x))
X+ #define max(a,b) ((a) > (b) ? (a) : (b))
X+ #define min(a,b) ((a) < (b) ? (a) : (b))
X+ #endif /* sign */
X+
X+ /* Default line-drawing character */
X+ #define IMAGEN_DOT_SPACING (2.0/IMAGEN_UNIT)
X+
X+ static int IMAGEN_type; /* negative types use real lines */
X+ static struct st_entry *IMAGEN_style = NULL; /* NULL => use default styles */
X+ static IMAGEN_seq_pos; /* position in sequence */
X+
X+ IMAGEN_init()
X+ {
X+ IMAGEN_posx = IMAGEN_posy = 0;
X+ IMAGEN_inplot = FALSE;
X+ IMAGEN_style = NULL;
X+ IMAGEN_type = -1;
X+
X+ IMAGEN_rotated = -1;
X+
X+ fputs("@document(language impress)", outfile);
X+ putc(imP_SET_HV_SYSTEM, outfile);
X+ putc((3<<3)|5, outfile);
X+ putc(imP_SET_ADV_DIRS, outfile); /* up and to the right, landscape. */
X+ putc(7, outfile);
X+ IMAGEN_createfamily("cour06", 6);
X+ IMAGEN_createfamily("cour07", 7);
X+ IMAGEN_createfamily("cour08", 8);
X+ IMAGEN_createfamily("cour09", 9);
X+ IMAGEN_createfamily("cour10", 10);
X+ IMAGEN_createfamily("cour12", 12);
X+ IMAGEN_createfamily("cour14", 14);
X+ IMAGEN_createfamily("cour15", 15);
X+ IMAGEN_setfont(IMAGEN_titlefsz);
X+ IMAGEN_unrotate();
X+ putc(imP_SET_ABS_H, outfile);
X+ IMAGEN_putwd(0);
X+ putc(imP_SET_ABS_V, outfile);
X+ IMAGEN_putwd(0);
X+ }
X+ IMAGEN_putwd(w)
X+ {
X+ putc(w>>8, outfile);
X+ putc(w, outfile);
X+ }
X+ IMAGEN_createfamily(c, sz)
X+
X+ char *c;
X+ int sz;
X+
X+ {
X+ putc(imP_CREATE_FAMILY_TABLE, outfile);
X+ putc(sz, outfile);
X+ putc(1, outfile);
X+ putc(0, outfile);
X+ fputs(c, outfile);
X+ putc(0, outfile);
X+ }
X+ IMAGEN_setfont(sz) int sz;
X+ {
X+ if (IMAGEN_cursize == sz)
X+ return;
X+ IMAGEN_hchar = sz * 5;
X+ IMAGEN_wchar = IMAGEN_hchar / 2;
X+ IMAGEN_blofs = IMAGEN_hchar / 3;
X+ putc(imP_SET_FAMILY, outfile);
X+ putc(sz, outfile);
X+ putc(imP_SET_SP, outfile);
X+ IMAGEN_putwd(IMAGEN_wchar);
X+ putc(imP_SET_IL, outfile);
X+ IMAGEN_putwd(IMAGEN_hchar);
X+ IMAGEN_cursize = sz;
X+ }
X+
X+
X+ IMAGEN_graphics(xmax, ymax, t, xlabel, ylabel, yskip, title)
X+ float xmax, ymax; /* in inches */
X+ struct termentry *t;
X+ char *xlabel; /* x-axis label */
X+ char *ylabel; /* y-axis label */
X+ int yskip; /* y-axis label skip factor */
X+ char *title; /* plot title */
X+ {
X+ int h, w;
X+ char *s;
X+
X+ if (IMAGEN_inplot)
X+ IMAGEN_newpage();
X+ IMAGEN_inplot = TRUE;
X+
X+ /* Convert inches to points to coordinates */
X+ IMAGEN_xmax = (int) (xmax * IMAGEN_PTS_PER_INCH);
X+ IMAGEN_ymax = (int) (ymax * IMAGEN_PTS_PER_INCH);
X+ IMAGEN_orgx = ((int) (11.0 - xmax)) * IMAGEN_PTS_PER_INCH / 2;
X+ IMAGEN_orgy = ((int) (8.5 - ymax)) * IMAGEN_PTS_PER_INCH / 2;
X+
X+ /* store these away for the use of plotting routines */
X+ t->xmax = IMAGEN_xmax;
X+ t->ymax = IMAGEN_ymax;
X+
X+ /* Construct the image from the labels and the plot, as a table */
X+
X+ if (title && *title != '\0')
X+ {
X+ IMAGEN_unrotate();
X+ IMAGEN_setfont(IMAGEN_titlefsz);
X+ IMAGEN_xy_text(IMAGEN_xmax / 2,
X+ IMAGEN_ymax + 2 * IMAGEN_hchar,
X+ title, "b");
X+ }
X+ if (ylabel && *ylabel != '\0') {
X+ IMAGEN_rotate();
X+ IMAGEN_setfont(IMAGEN_axisfsz);
X+ IMAGEN_xy_text((-yskip - 3) * IMAGEN_wchar,
X+ IMAGEN_ymax / 2,
X+ ylabel, "r");
X+ }
X+ if (xlabel && *xlabel != '\0') {
X+ IMAGEN_unrotate();
X+ IMAGEN_setfont(IMAGEN_axisfsz);
X+ IMAGEN_xy_text(IMAGEN_xmax / 2,
X+ -2 * IMAGEN_hchar,
X+ xlabel, "t");
X+ }
X+
X+ IMAGEN_move(0, 0);
X+
X+ }
X+
X+
X+ static
X+ IMAGEN_newpage()
X+ {
X+ putc(imP_ENDPAGE, outfile);
X+ }
X+
X+ static
X+ IMAGEN_endplot()
X+ {
X+ putc(imP_EOF, outfile);
X+ }
X+
X+
X+ IMAGEN_text()
X+ {
X+ }
X+
X+
X+ IMAGEN_linetype(linetype)
X+ int linetype;
X+ {
X+ static int lastlinetype = -1;
X+
X+ IMAGEN_type = linetype;
X+ if (linetype < 0)
X+ linetype = -linetype;
X+ else
X+ linetype = 1;
X+ if (lastlinetype == linetype)
X+ return;
X+ lastlinetype = linetype;
X+ putc(imP_SET_PEN, outfile);
X+ putc(linetype, outfile);
X+ IMAGEN_style = NULL;
X+ }
X+
X+
X+ IMAGEN_plotstyle(stp)
X+ struct st_entry *stp;
X+ {
X+ IMAGEN_style = stp;
X+ IMAGEN_seq_pos = 0;
X+ }
X+
X+
X+ IMAGEN_move(x,y)
X+ unsigned int x,y;
X+ {
X+ IMAGEN_posx = x;
X+ IMAGEN_posy = y;
X+ }
X+
X+ IMAGEN_vector(ux,uy)
X+ unsigned int ux,uy;
X+ {
X+ int x=ux, y=uy;
X+
X+ /* Create path. */
X+
X+ putc(imP_CREATE_PATH, outfile);
X+ IMAGEN_putwd(2);
X+ IMAGEN_putwd(IMAGEN_posx + IMAGEN_orgx);
X+ IMAGEN_putwd(IMAGEN_posy + IMAGEN_orgy);
X+ IMAGEN_putwd(ux + IMAGEN_orgx);
X+ IMAGEN_putwd(uy + IMAGEN_orgy);
X+
X+ /* Draw path with black pen. */
X+
X+ putc(imP_DRAW_PATH, outfile);
X+ putc(15, outfile);
X+
X+ /* Set current position to end of line. */
X+
X+ IMAGEN_move(ux, uy);
X+ }
X+
X+ IMAGEN_setpos(ux, uy)
X+
X+ int ux,uy;
X+ {
X+ /* Set x and y position, also set beginning-of-line. */
X+
X+ putc(imP_SET_ABS_H, outfile);
X+ IMAGEN_putwd(ux + IMAGEN_orgx);
X+ putc(imP_SET_ABS_V, outfile);
X+ IMAGEN_putwd(uy + IMAGEN_orgy);
X+ putc(imP_SET_BOL, outfile);
X+ if (IMAGEN_rotated)
X+ IMAGEN_putwd(uy + IMAGEN_orgx);
X+ else
X+ IMAGEN_putwd(ux + IMAGEN_orgx);
X+ }
X+
X+ IMAGEN_rotate()
X+
X+ {
X+ if (IMAGEN_rotated == 1)
X+ return;
X+
X+ /* Cause text to run from bottom to top. */
X+
X+ putc(imP_SET_ADV_DIRS, outfile);
X+ putc(7, outfile);
X+ IMAGEN_rotated = 1;
X+ }
X+
X+ IMAGEN_unrotate()
X+
X+ {
X+ if (IMAGEN_rotated == 0)
X+ return;
X+
X+ /* Cause text to run from left to right. */
X+
X+ putc(imP_SET_ADV_DIRS, outfile);
X+ putc(0, outfile);
X+ IMAGEN_rotated = 0;
X+ }
X+
X+ char *
X+ IMAGEN_cvts(str, width, height)
X+
X+ char *str;
X+ int *width;
X+ int *height;
X+
X+ {
X+ char *cp1;
X+ char *cp2;
X+ static char *buf = NULL;
X+ int h;
X+ int maxw;
X+ int w;
X+
X+ /* Free up old buffer, if there is one, get a new one. Since */
X+ /* all transformations shorten the string, get a buffer that is */
X+ /* the same size as the input string. */
X+
X+ if (buf != NULL)
X+ (void)free(buf);
X+ buf = (char *)malloc(strlen(str));
X+
X+ /* Do the transformations. */
X+
X+ cp1 = str;
X+ cp2 = buf;
X+ h = 1;
X+ maxw = 0;
X+ w = 0;
X+ while (*cp1 != NULL)
X+ {
X+ switch (*cp1)
X+ {
X+ case ' ' :
X+
X+ /* Space character. */
X+
X+ *cp2++ = imP_SP;
X+ w++;
X+ break;
X+
X+ case '\\' :
X+
X+ /* Escape sequence. */
X+
X+ if (*++cp1 == '\\')
X+ {
X+
X+ /* Begin new line. */
X+
X+ h++;
X+ if (w > maxw)
X+ maxw = w;
X+ w = 0;
X+ *cp2++ = imP_CRLF;
X+ break;
X+ }
X+
X+ /* Fall through to just copy next char out. */
X+
X+ default :
X+ *cp2++ = *cp1;
X+ w++;
X+ break;
X+ }
X+ cp1++;
X+ }
X+
X+ *cp2 = '\0';
X+ if (w > maxw)
X+ maxw = w;
X+
X+ if (height != NULL)
X+ *height = IMAGEN_rotated ?
X+ IMAGEN_wchar * maxw :
X+ IMAGEN_hchar * h;
X+ if (width != NULL)
X+ *width = IMAGEN_rotated ?
X+ IMAGEN_hchar * h :
X+ IMAGEN_wchar * maxw;
X+ return (buf);
X+ }
X+
X+ IMAGEN_puts(str)
X+
X+ char *str;
X+
X+ {
X+ str = IMAGEN_cvts(str, NULL, NULL);
X+ fputs(str, outfile);
X+ }
X+
X+ IMAGEN_lrput_text(row,str)
X+ unsigned int row;
X+ char str[];
X+ {
X+ char *imstr;
X+ int width;
X+
X+ imstr = IMAGEN_cvts(str, &width, NULL);
X+ IMAGEN_setpos((int)(IMAGEN_xmax - IMAGEN_HTIC - width),
X+ (int)(IMAGEN_VTIC + 3 + IMAGEN_hchar*row));
X+ fputs(imstr, outfile);
X+ }
X+
X+
X+ IMAGEN_ulput_text(row,str)
X+ unsigned int row;
X+ char str[];
X+ {
X+ IMAGEN_setpos((int)(IMAGEN_HTIC+3),
X+ (int)(IMAGEN_ymax -
X+ IMAGEN_VTIC - IMAGEN_hchar*(row+1)));
X+ IMAGEN_puts(str);
X+ }
X+
X+ /* Invoked from gnutex, puts out optional arrow and forces font. */
X+
X+ IMAGEN_xyput_text(ref_x, ref_y, str, pos, length, dx, dy)
X+ int ref_x,ref_y; /* reference point of string */
X+ char str[]; /* the text */
X+ char pos[]; /* for optional [pos] to \makebox */
X+ unsigned int length; /* optional arrow length */
X+ int dx, dy; /* optional slopes for arrow */
X+
X+ {
X+ IMAGEN_unrotate();
X+ IMAGEN_setfont(IMAGEN_labelfsz);
X+ IMAGEN_xy_text(ref_x, ref_y, str, pos);
X+ if (length != 0 && pos != NULL && *pos != '\0')
X+ {
X+ if (dx == 0 && dy == 0)
X+ {
X+ if (index(pos, 'l'))
X+ dx = -1;
X+ if (index(pos, 'r'))
X+ dx = 1;
X+ if (index(pos, 't'))
X+ dy = 1;
X+ if (index(pos, 'b'))
X+ dy = -1;
X+ }
X+ IMAGEN_move(ref_x, ref_y);
X+ IMAGEN_vector(ref_x + dx * length, ref_y + dy * length);
X+ }
X+ }
X+
X+ /* Called internally, just dumps string. */
X+
X+ IMAGEN_xy_text(ref_x, ref_y, str, pos)
X+
X+ int ref_x,ref_y; /* reference point of string */
X+ char str[]; /* the text */
X+ char pos[]; /* for optional [pos] to \makebox */
X+ {
X+ char *cvstr;
X+ int dy = 0;
X+ int height;
X+ int width;
X+ int x = ref_x;
X+ int y = ref_y;
X+
X+ if (!IMAGEN_inplot)
X+ return;
X+
X+ cvstr = IMAGEN_cvts(str, &width, &height);
X+ x -= width / 2;
X+ dy += height / 2;
X+ if (pos != NULL)
X+ {
X+ if (index(pos, 'l'))
X+ x += width / 2;
X+ if (index(pos, 'r'))
X+ x -= width / 2;
X+ if (index(pos, 't'))
X+ dy -= height / 2;
X+ if (index(pos, 'b'))
X+ dy += height / 2;
X+ }
X+ if (IMAGEN_rotated)
X+ {
X+ x += IMAGEN_hchar;
X+ y -= dy;
X+ }
X+ else
X+ y += dy - IMAGEN_hchar;
X+ IMAGEN_setpos(x, y + IMAGEN_blofs);
X+ fputs(cvstr, outfile);
X+ }
X+
X+ IMAGEN_key(x, y, style, names)
X+ unsigned int x,y;
X+ int style[];
X+ char *names[];
X+ {
X+ /* @@@ maybe someday . . . */
X+ }
X+
X+ static
X+ char * /* pointer to static storage */
X+ IMAGEN_key_point(style, pcount)
X+ int style; /* style number to describe */
X+ int *pcount; /* running counter of point-like styles */
X+ {
X+ /* @@@ Maybe someday . . . */
X+ }
X+
X+ IMAGEN_xtick_text(x, number, format)
X+ unsigned int x; /* place to put on axis */
X+ double number; /* the number to be written at that tick */
X+ char *format;
X+ {
X+ char mark[IMAGEN_TICSIZ];
X+
X+ if (*format == '\0')
X+ format = IMAGEN_FORMAT;
X+ IMAGEN_unrotate();
X+ IMAGEN_setfont(IMAGEN_tickfsz);
X+ sprintf(mark, format, number);
X+ IMAGEN_xy_text(x, (int)(-IMAGEN_HTIC), mark, "t");
X+ }
X+
X+ IMAGEN_ytick_text(y, number, format)
X+ int y; /* place to put on axis */
X+ double number; /* the number to be written at that tick */
X+ char *format;
X+ {
X+ char mark[IMAGEN_TICSIZ];
X+
X+ if (*format == '\0')
X+ format = IMAGEN_FORMAT;
X+ IMAGEN_unrotate();
X+ IMAGEN_setfont(IMAGEN_tickfsz);
X+ sprintf(mark, format, number);
X+ IMAGEN_xy_text((int)(-IMAGEN_VTIC), y, mark, "r");
X+ }
X+
X+
X+ IMAGEN_reset()
X+ {
X+ if (IMAGEN_inplot) {
X+ IMAGEN_endplot();
X+ IMAGEN_inplot = FALSE;
X+ }
X+ IMAGEN_posx = IMAGEN_posy = 0;
X+ }
X+
X+ #endif /* IMAGEN */
X+
X+
X UNKNOWN_null()
X {
X int_error("you must set your terminal type before plotting!",NO_CARET);
X***************
X*** 1620,1625 ****
X--- 2168,2184 ----
X LATEX_vector,
X LATEX_linetype, LATEX_lrput_text, LATEX_ulput_text, LATEX_point,
X LATEX_xyput_text, LATEX_xtick_text, LATEX_ytick_text, LATEX_plotstyle}
X+ #endif
X+
X+ #ifdef IMAGEN
X+ /* xmax and ymax are filled in by IMAGEN_graphics */
X+ /* We supply the absolute maximum here */
X+ ,{"imagen", 11*IMAGEN_PTS_PER_INCH, 8.5*IMAGEN_PTS_PER_INCH,
X+ IMAGEN_VCHAR, IMAGEN_HCHAR, IMAGEN_VTIC, IMAGEN_HTIC,
X+ IMAGEN_init, IMAGEN_reset, IMAGEN_text, IMAGEN_graphics, IMAGEN_move,
X+ IMAGEN_vector,
X+ IMAGEN_linetype, IMAGEN_lrput_text, IMAGEN_ulput_text, do_point,
X+ IMAGEN_xyput_text, IMAGEN_xtick_text, IMAGEN_ytick_text, IMAGEN_plotstyle}
X #endif
X };
X
Xdiff -cr ../gnutex.old/util.c ./util.c
X*** ../gnutex.old/util.c Mon Dec 5 13:25:59 1988
X--- ./util.c Wed Feb 1 17:54:57 1989
X***************
X*** 326,331 ****
X--- 326,345 ----
X return(a);
X }
X
X+ /* Lower-case the given string (DFK) */
X+ /* Done in place. */
X+ void
X+ lower_case(s)
X+ char *s;
X+ {
X+ register char *p = s;
X+
X+ while (*p != '\0') {
X+ if (*p >= 'A' && *p <= 'Z')
X+ *p = *p - 'A' + 'a';
X+ p++;
X+ }
X+ }
X
X
X os_error(str,t_num)
Xdiff -cr ../gnutex.old/version.c ./version.c
X*** ../gnutex.old/version.c Mon Dec 5 13:25:59 1988
X--- ./version.c Thu Feb 2 15:12:17 1989
X***************
X*** 1,2 ****
X! char version[] = "1.0.3 + latex mods 1.3";
X! char date[] = "Mon Dec 5 13:22:46 EST 1988";
X--- 1,2 ----
X! char version[] = "1.0.3 + latex mods 1.5";
X! char date[] = "Thu Feb 2 15:12:10 EST 1989";
XOnly in ../gnutex.old: vmshelp.csh
Xdiff -cr ../gnutex.old/Help/Makefile ./Help/Makefile
X*** ../gnutex.old/Help/Makefile Fri Feb 10 12:26:05 1989
X--- ./Help/Makefile Fri Feb 10 12:10:17 1989
X***************
X*** 0 ****
X--- 1,7 ----
X+ CFLAGS = -g
X+
X+ htest: help.o htest.o
X+ cc $(CFLAGS) htest.o help.o -o htest
X+
X+ clean:
X+ rm -f *~ *.o core
Xdiff -cr ../gnutex.old/Help/README ./Help/README
X*** ../gnutex.old/Help/README Fri Feb 10 12:26:05 1989
X--- ./Help/README Wed Feb 1 13:50:49 1989
X***************
X*** 0 ****
X--- 1,51 ----
X+ These are the files for the customizable help facility.
X+
X+ Contents:
X+ help.3 The man page for help().
X+ help.h Include file showing return status values.
X+ help.c The source for help() itself.
X+
X+ Makefile Makes `htest', the help testing program.
X+ htest.c Source for htest.
X+ helpfile Sample help file.
X+ alt-helpfile Other help file; contains help info for "alternate" key
X+
X+ Suggestion: format the man page (nroff -man help.3 | lp) and read it,
X+ then read the comments in the prologue to the code. Help-file writers
X+ might want to look at the helpfile, and run htest to see how it looks.
X+ Run the help test by typing "make", then "htest".
X+
X+ The basic idea for this routine is to provide a help interface like
X+ Edit/1000: you ask for help, it prints out the help text for that
X+ subject only. You can set up the help file so that several synonyms
X+ will cause the same help text to appear. You can provide context-
X+ sensitive help by setting up the calling routine to use a different
X+ file depending on the context or desired verbosity level.
X+
X+ Advantages to using this help code over using `more' on a help file:
X+
X+ 1. No "skipping" messages or unsightly "(73%)" prompts from `more'.
X+ You get the help text on only the subject you asked for, instead of
X+ being left in the file and being forced to type "q".
X+
X+ 2. Help keywords (the subject that the user asks about) can be made
X+ case-insensitive if you provide keywords in both cases in your help
X+ file. `more' insists on exact matches.
X+
X+ 3. Various speed hacks. Faster than vfork()+exec(), much faster than
X+ system(). Doesn't re-open your help file if the user asks for help
X+ more than once on the same file.
X+
X+ Disadvantage of this help code over `more':
X+
X+ The code as written doesn't scroll, it just cats the text to your
X+ screen. This means that you should try to fit everything on 23 lines
X+ or less. (This is not considered a real problem, especially because
X+ you can end an entry with "Get help on <whatever detail you mentioned>
X+ for more information", and because a screenful is an awful lot of
X+ material for a user to digest.)
X+
X+ Future directions:
X+
X+ The routine could be sped up even more by replacing the stdio calls
X+ with open/read/write/close, but it runs quite swiftly even now.
Xdiff -cr ../gnutex.old/Help/alt-helpfile ./Help/alt-helpfile
X*** ../gnutex.old/Help/alt-helpfile Fri Feb 10 12:26:05 1989
X--- ./Help/alt-helpfile Wed Feb 1 13:50:51 1989
X***************
X*** 0 ****
X--- 1,7 ----
X+ ?alternate
X+ This is the alternate help file right here. It doesn't know about much
X+ for the purposes of the test, but could be quite extensive.
X+
X+ It could also contain auxiliary information (something more in-depth, or
X+ just an interesting side point, or a tutorial). If the user never asks to
X+ see its information, it's never opened and doesn't incur any costs.
Xdiff -cr ../gnutex.old/Help/help.3 ./Help/help.3
X*** ../gnutex.old/Help/help.3 Fri Feb 10 12:26:05 1989
X--- ./Help/help.3 Wed Feb 1 13:50:54 1989
X***************
X*** 0 ****
X--- 1,87 ----
X+ .TH HELP 3:LOCAL "January 1986"
X+ .SH NAME
X+ help \- provide help message about a topic
X+ .SH SYNOPSIS
X+ .nf
X+ .ft B
X+ #include "help.h"
X+
X+ help(keyword, helpfile)
X+ char *keyword;
X+ char *helpfile;
X+ .ft R
X+ .fi
X+ .SH DESCRIPTION
X+ The
X+ .I help
X+ call looks up the
X+ .I keyword
X+ in the specified
X+ .IR helpfile .
X+ If an entry matching the desired
X+ .I keyword
X+ is found, its corresponding description is sent to the standard output.
X+ Thus, you can customize a program's help information merely by editing the
X+ .IR helpfile
X+ instead of re-compiling the program sources.
X+ If
X+ .I helpfile
X+ doesn't change from one call to the next,
X+ .I help
X+ avoids re-opening the file.
X+ .PP
X+ The
X+ .I keyword
X+ should have a trailing newline, and must end with a NULL character.
X+ The format of the
X+ .I helpfile
X+ is (with question marks in column 1 on each line):
X+ .PP
X+ .nf
X+ ?keyword
X+ This line is printed when help on \fBkeyword\fP is requested.
X+ ?Topic
X+ ?topic
X+ These lines are printed when help on \fBTopic\fP or \fBtopic\fP is
X+ requested. No keywords are casefolded before processing, and each
X+ help message may have more than one key that matches it.
X+ ?
X+ ??
X+ These lines are printed out when a null keyword (really just a newline)
X+ or a keyword of \fB?\fP is requested. Typically, this help message is
X+ a command summary or overview.
X+ .fi
X+ .SH EXAMPLE
X+ .nf
X+ /* `buf' contains the user's reply */
X+ switch (help(buf, "/usr/local/lib/helpfile")) {
X+ case H_FOUND:
X+ /* already printed the help info; do nothing */
X+ break;
X+ case H_NOTFOUND:
X+ printf("Sorry, no help for %s", buf);
X+ break;
X+ case H_ERROR:
X+ perror("/usr/local/lib/helpfile");
X+ break;
X+ default:
X+ cannot_happen("help");
X+ break;
X+ }
X+ .fi
X+ .SH DIAGNOSTICS
X+ A return of H_FOUND, defined in ``help.h'', means help was given:
X+ the keyword was found and a message was printed.
X+ A return of H_NOTFOUND means no help was given because the
X+ .I keyword
X+ wasn't found in the
X+ .I helpfile.
X+ A return of H_ERROR means there was an error opening the
X+ .IR helpfile .
X+ H_ERROR returns can be handled by the caller:
X+ write a message to standard error, typically using
X+ .IR perror (),
X+ or call
X+ .IR help ()
X+ using a different pathname in
X+ .IR helpfile .
Xdiff -cr ../gnutex.old/Help/help.c ./Help/help.c
X*** ../gnutex.old/Help/help.c Fri Feb 10 12:26:05 1989
X--- ./Help/help.c Wed Feb 1 13:50:56 1989
X***************
X*** 0 ****
X--- 1,134 ----
X+ #include <stdio.h>
X+ #include <errno.h>
X+ #include <string.h>
X+ #define SAME 0 /* for strcmp() */
X+
X+ #include "help.h" /* values passed back */
X+
X+ /* help -- help subsystem that understands defined keywords
X+ **
X+ ** Looks for the desired keyword in the help file at runtime, so you
X+ ** can give extra help or supply local customizations by merely editing
X+ ** the help file.
X+ **
X+ ** The original (single-file) idea and algorithm is by John D. Johnson,
X+ ** Hewlett-Packard Company. Thanx and a tip of the Hatlo hat!
X+ **
X+ ** The help file looks like (the question marks are really in column 1):
X+ **
X+ ** ?topic
X+ ** This line is printed when the user wants help on "topic".
X+ ** ?keyword
X+ ** ?Keyword
X+ ** ?KEYWORD
X+ ** These lines will be printed on the screen if the user wanted
X+ ** help on "keyword", "Keyword", or "KEYWORD". No casefolding is
X+ ** done on the keywords.
X+ ** ?subject
X+ ** ?alias
X+ ** This line is printed for help on "subject" and "alias".
X+ ** ?
X+ ** ??
X+ ** Since there is a null keyword for this line, this section
X+ ** is printed when the user wants general help (when a help
X+ ** keyword isn't given). A command summary is usually here.
X+ ** Notice that the null keyword is equivalent to a "?" keyword
X+ ** here, because of the '?' and '??' topic lines above.
X+ ** ?last-subject
X+ ** Note that help sections are terminated by the start of the next
X+ ** '?' entry or by EOF. So you can't have a leading '?' on a line
X+ ** of any help section. You can re-define the magic character to
X+ ** recognize in column 1, though, if '?' is too useful. (Try ^A.)
X+ */
X+
X+ #define KEYFLAG '?' /* leading char in help file topic lines */
X+
X+ /*
X+ ** Calling sequence:
X+ ** int result; # 0 == success
X+ ** char *keyword; # topic to give help on
X+ ** char *pathname; # path of help file
X+ ** result = help(keyword, pathname);
X+ ** Sample:
X+ ** cmd = "search\n";
X+ ** helpfile = "/usr/local/lib/program/program.help";
X+ ** if (help(cmd, helpfile) != H_FOUND)
X+ ** printf("Sorry, no help for %s", cmd);
X+ **
X+ **
X+ ** Speed this up by replacing the stdio calls with open/close/read/write.
X+ */
X+ #ifdef WDLEN
X+ # define PATHSIZE WDLEN
X+ #else
X+ # define PATHSIZE BUFSIZ
X+ #endif
X+
X+ help(keyword, path) /* print a help message */
X+ char *keyword; /* on this topic */
X+ char *path; /* from this file */
X+ {
X+ static char oldpath[PATHSIZE] = '\0'; /* previous help file */
X+ char *oldpathp = oldpath; /* pointer to same */
X+
X+ static FILE *helpfp = NULL;
X+ FILE *fopen();
X+
X+ char buf[BUFSIZ]; /* line from help file */
X+ char *bufp = buf; /* pointer to same */
X+ char *bufkeyp = bufp + 1; /* start of key in help line */
X+
X+ /*
X+ ** Open the help file if necessary (say, first time we enter this routine,
X+ ** or if the help file changes from the last time we were called).
X+ */
X+ errno = 0;
X+ if (strcmp(oldpathp, path) == SAME)
X+ rewind(helpfp); /* start at the beginning each time */
X+ else
X+ { /* first time the user asked for help using this file */
X+ if ((helpfp = fopen(path, "r")) == NULL)
X+ { /* can't open help file, so error exit */
X+ return H_ERROR;
X+ }
X+ /* save the new path in oldpath */
X+ if (strlen(path) < sizeof oldpath)
X+ strcpy(oldpathp, path);
X+ else
X+ { /* not enough room in oldpath, sigh */
X+ strncpy(oldpathp, path, sizeof oldpath);
X+ oldpath[sizeof oldpath] = NULL;
X+ }
X+ }
X+
X+ /*
X+ ** The correct help file is open. Look in there for the keyword.
X+ */
X+ while (fgets(buf, sizeof buf, helpfp) != NULL)
X+ { /*
X+ ** If we find the keyword:
X+ ** skip to the first non-keyword line
X+ ** print lines until you find another keyword line or EOF
X+ ** return success
X+ */
X+ if (buf[0] == KEYFLAG && strcmp(keyword, bufkeyp) == SAME)
X+ { /* found the key */
X+ while (fgets(buf, sizeof buf, helpfp) != NULL
X+ && buf[0] == KEYFLAG)
X+ ; /* eat additional keyword lines */
X+
X+ fputs(bufp, stdout); /* print help */
X+ while (fgets(buf, sizeof buf, helpfp) != NULL
X+ && buf[0] != KEYFLAG)
X+ fputs(bufp, stdout); /* print help */
X+ return H_FOUND;
X+ }
X+ }
X+
X+ /*
X+ ** Didn't find anything in the help file for the poor user. Return failure.
X+ ** Don't close the help file! The luser may want further help, and
X+ ** re-opening an already-open help file is wasteful of time.
X+ */
X+ return H_NOTFOUND;
X+ }
Xdiff -cr ../gnutex.old/Help/help.h ./Help/help.h
X*** ../gnutex.old/Help/help.h Fri Feb 10 12:26:05 1989
X--- ./Help/help.h Wed Feb 1 13:50:57 1989
X***************
X*** 0 ****
X--- 1,4 ----
X+ /* Exit status returned by help() */
X+ #define H_FOUND 0 /* found the keyword */
X+ #define H_NOTFOUND 1 /* didn't find the keyword */
X+ #define H_ERROR (-1) /* didn't find the help file */
Xdiff -cr ../gnutex.old/Help/helpfile ./Help/helpfile
X*** ../gnutex.old/Help/helpfile Fri Feb 10 12:26:05 1989
X--- ./Help/helpfile Wed Feb 1 13:50:52 1989
X***************
X*** 0 ****
X--- 1,47 ----
X+ ?topic
X+ This line is printed when the user wants help on "topic".
X+ ?
X+ ??
X+ Help is available on:
X+
X+ alias keyword subject topic last-subject
X+ spaces work space
X+
X+ Since there is a null keyword for this line, this section is printed when the
X+ user wants general help (when a help keyword isn't given). A command summary
X+ is usually here. Notice that the null keyword is equivalent to a "?" keyword
X+ here, because of the '?' and '??' keyword lines above.
X+ ?keyword
X+ ?Keyword
X+ ?KEYWORD
X+ These lines will be printed on the screen if the user wanted help on
X+ "keyword", "Keyword", or "KEYWORD". No casefolding is done on the keywords.
X+ ?subject
X+ ?alias
X+ This line is printed for help on "subject" and "alias".
X+ ?spaces work
X+ ?spaces
X+ ?work
X+ Note that spaces are okay in keywords. This allows you to set up an
X+ entry for, say, "open usage". Then when someone types an unrecognized
X+ argument to the `open' command, you can make a call like:
X+
X+ help("open usage", helpfilename);
X+
X+ so it looks like you have a usage message in your program, whereas you
X+ really are still using the help file.
X+ ?
X+ ? That previous line was just a space, like this line is a comment.
X+ ?space
X+ You can even get help on just a space, although keywording invisible
X+ characters could prove confusing to your users. Note that "comments"
X+ are really just very long keyword entries, above. It's unlikely that
X+ anyone would ask for help on " That previous line was just a space,
X+ like this line is a comment."
X+ ?revision
X+ @(#) 1.1 87/07/23
X+ ?last-subject
X+ Note that help sections are terminated by the start of the next '?' entry or
X+ by EOF. So you can't have a leading '?' on a line of any help section. You
X+ can re-define the magic character to recognize in column 1, though, if '?' is
X+ too useful. (I suggest ^A in such extreme cases.)
Xdiff -cr ../gnutex.old/Help/htest.c ./Help/htest.c
X*** ../gnutex.old/Help/htest.c Fri Feb 10 12:26:05 1989
X--- ./Help/htest.c Wed Feb 1 13:50:53 1989
X***************
X*** 0 ****
X--- 1,32 ----
X+ #include <stdio.h>
X+ #include "help.h"
X+
X+ main() /* test out the help function */
X+ {
X+ char buf[BUFSIZ];
X+ char *hfpn = "helpfile"; /* help file path name */
X+ char *ahfpn = "alt-helpfile"; /* alternate help file name */
X+
X+ printf("Type control-D to quit.\n");
X+ printf("Help on: ");
X+ while (fgets(buf, sizeof buf, stdin) != NULL)
X+ {
X+ switch (help(buf, hfpn)) {
X+ case H_FOUND:
X+ /* already printed the help info; do nothing */
X+ break;
X+ case H_NOTFOUND:
X+ printf("Sorry, no help for %s", buf);
X+ help(buf, ahfpn); /* try other help file */
X+ break;
X+ case H_ERROR:
X+ perror(hfpn);
X+ break;
X+ default: /* defensive programming */
X+ printf("Can't happen\n");
X+ break;
X+ }
X+ printf("Help on: ");
X+ }
X+ exit(0);
X+ }
XCommon subdirectories: ../gnutex.old/doc/example and ./doc/example
Xdiff -cr ../gnutex.old/doc/lasergnu.1 ./doc/lasergnu.1
X*** ../gnutex.old/doc/lasergnu.1 Mon Dec 5 13:25:46 1988
X--- ./doc/lasergnu.1 Thu Feb 2 16:47:07 1989
X***************
X*** 26,31 ****
X--- 26,35 ----
X .fi
X The following switches are recognized:
X .TP
X+ .BI \-I
X+ Use the impress language to make the plot, instead of Tektronix. Many
X+ of the fancier features of gnutex are available in this mode.
X+ .TP
X .BI \-P\0 printer
X The output of this program is intended for
X .I printer.
XCommon subdirectories: ../gnutex.old/doc/manual and ./doc/manual
Xdiff -cr ../gnutex.old/doc/example/Makefile ./doc/example/Makefile
X*** ../gnutex.old/doc/example/Makefile Mon Dec 12 14:36:45 1988
X--- ./doc/example/Makefile Wed Feb 1 13:39:29 1989
X***************
X*** 9,13 ****
X--- 9,19 ----
X demo2:
X lasergnu -l -f demo2.gnu
X
X+ demo2.latex:
X+ (echo 'set terminal latex'; echo 'set output "plot.tex"'; cat demo2.gnu) | gnutex
X+ latex pic
X+ @echo ----------------------
X+ @echo Now print or view pic.dvi with some dvi output program
X+
X clean:
X rm -f *.aux *.log *.dvi *~ plot.tex
Xdiff -cr ../gnutex.old/doc/manual/eg1.tex ./doc/manual/eg1.tex
X*** ../gnutex.old/doc/manual/eg1.tex Fri Feb 10 12:16:18 1989
X--- ./doc/manual/eg1.tex Thu Feb 2 17:23:21 1989
X***************
X*** 66,75 ****
X \put(361,9972){\circle*{1}}
X \put(361,9972){\circle*{1}}
X \put(421,9831){\circle*{1}}
X! \put(482,9689){\circle*{1}}
X! \put(542,9548){\circle*{1}}
X! \put(542,9548){\circle*{1}}
X! \put(602,9408){\circle*{1}}
X \put(662,9267){\circle*{1}}
X \put(722,9127){\circle*{1}}
X \put(722,9127){\circle*{1}}
X--- 66,75 ----
X \put(361,9972){\circle*{1}}
X \put(361,9972){\circle*{1}}
X \put(421,9831){\circle*{1}}
X! \put(481,9689){\circle*{1}}
X! \put(541,9548){\circle*{1}}
X! \put(541,9548){\circle*{1}}
X! \put(601,9408){\circle*{1}}
X \put(662,9267){\circle*{1}}
X \put(722,9127){\circle*{1}}
X \put(722,9127){\circle*{1}}
X***************
X*** 78,87 ****
X \put(903,8708){\circle*{1}}
X \put(903,8708){\circle*{1}}
X \put(963,8570){\circle*{1}}
X! \put(1024,8431){\circle*{1}}
X! \put(1084,8293){\circle*{1}}
X! \put(1084,8293){\circle*{1}}
X! \put(1144,8156){\circle*{1}}
X \put(1204,8019){\circle*{1}}
X \put(1264,7882){\circle*{1}}
X \put(1324,7746){\circle*{1}}
X--- 78,87 ----
X \put(903,8708){\circle*{1}}
X \put(903,8708){\circle*{1}}
X \put(963,8570){\circle*{1}}
X! \put(1023,8431){\circle*{1}}
X! \put(1083,8293){\circle*{1}}
X! \put(1083,8293){\circle*{1}}
X! \put(1143,8156){\circle*{1}}
X \put(1204,8019){\circle*{1}}
X \put(1264,7882){\circle*{1}}
X \put(1324,7746){\circle*{1}}
X***************
X*** 89,201 ****
X \put(1445,7475){\circle*{1}}
X \put(1445,7475){\circle*{1}}
X \put(1505,7341){\circle*{1}}
X! \put(1566,7207){\circle*{1}}
X! \put(1626,7073){\circle*{1}}
X \put(1716,6875){\circle*{1}}
X \put(1806,6677){\circle*{1}}
X \put(1897,6482){\circle*{1}}
X \put(1987,6287){\circle*{1}}
X! \put(2078,6096){\circle*{1}}
X! \put(2168,5905){\circle*{1}}
X \put(2258,5718){\circle*{1}}
X \put(2348,5530){\circle*{1}}
X \put(2439,5347){\circle*{1}}
X \put(2529,5163){\circle*{1}}
X! \put(2620,4984){\circle*{1}}
X! \put(2710,4805){\circle*{1}}
X \put(2800,4631){\circle*{1}}
X \put(2890,4457){\circle*{1}}
X \put(2981,4288){\circle*{1}}
X \put(3071,4118){\circle*{1}}
X! \put(3162,3954){\circle*{1}}
X! \put(3252,3789){\circle*{1}}
X \put(3342,3630){\circle*{1}}
X \put(3432,3471){\circle*{1}}
X \put(3523,3318){\circle*{1}}
X \put(3613,3165){\circle*{1}}
X! \put(3704,3018){\circle*{1}}
X! \put(3794,2871){\circle*{1}}
X \put(3884,2730){\circle*{1}}
X \put(3974,2588){\circle*{1}}
X \put(4065,2454){\circle*{1}}
X \put(4155,2319){\circle*{1}}
X! \put(4246,2191){\circle*{1}}
X! \put(4336,2063){\circle*{1}}
X \put(4426,1942){\circle*{1}}
X \put(4516,1820){\circle*{1}}
X \put(4607,1706){\circle*{1}}
X \put(4697,1591){\circle*{1}}
X! \put(4788,1484){\circle*{1}}
X! \put(4878,1376){\circle*{1}}
X \put(4968,1276){\circle*{1}}
X \put(5058,1176){\circle*{1}}
X \put(5239,991){\circle*{1}}
X! \put(5420,820){\circle*{1}}
X \put(5600,666){\circle*{1}}
X \put(5781,527){\circle*{1}}
X! \put(5962,404){\circle*{1}}
X \put(6142,297){\circle*{1}}
X \put(6323,206){\circle*{1}}
X! \put(6504,131){\circle*{1}}
X \put(6684,74){\circle*{1}}
X \put(6865,32){\circle*{1}}
X! \put(7046,8){\circle*{1}}
X \put(7226,0){\circle*{1}}
X \put(7407,8){\circle*{1}}
X! \put(7588,34){\circle*{1}}
X \put(7768,76){\circle*{1}}
X \put(7949,134){\circle*{1}}
X! \put(8130,209){\circle*{1}}
X \put(8310,301){\circle*{1}}
X \put(8491,408){\circle*{1}}
X! \put(8672,532){\circle*{1}}
X \put(8852,672){\circle*{1}}
X \put(9033,827){\circle*{1}}
X! \put(9214,998){\circle*{1}}
X \put(9394,1184){\circle*{1}}
X \put(9485,1284){\circle*{1}}
X \put(9575,1384){\circle*{1}}
X! \put(9666,1492){\circle*{1}}
X! \put(9756,1600){\circle*{1}}
X \put(9846,1715){\circle*{1}}
X \put(9936,1829){\circle*{1}}
X \put(10027,1951){\circle*{1}}
X \put(10117,2073){\circle*{1}}
X! \put(10208,2202){\circle*{1}}
X! \put(10298,2330){\circle*{1}}
X \put(10388,2465){\circle*{1}}
X \put(10478,2600){\circle*{1}}
X \put(10569,2741){\circle*{1}}
X \put(10659,2882){\circle*{1}}
X! \put(10750,3030){\circle*{1}}
X! \put(10840,3177){\circle*{1}}
X \put(10930,3331){\circle*{1}}
X \put(11020,3484){\circle*{1}}
X \put(11111,3643){\circle*{1}}
X \put(11201,3802){\circle*{1}}
X! \put(11292,3967){\circle*{1}}
X! \put(11382,4131){\circle*{1}}
X \put(11472,4301){\circle*{1}}
X \put(11562,4470){\circle*{1}}
X \put(11653,4645){\circle*{1}}
X \put(11743,4820){\circle*{1}}
X! \put(11834,4999){\circle*{1}}
X! \put(11924,5178){\circle*{1}}
X \put(12014,5362){\circle*{1}}
X \put(12104,5545){\circle*{1}}
X \put(12195,5733){\circle*{1}}
X \put(12285,5920){\circle*{1}}
X! \put(12376,6112){\circle*{1}}
X! \put(12466,6303){\circle*{1}}
X \put(12556,6498){\circle*{1}}
X \put(12646,6693){\circle*{1}}
X \put(12737,6891){\circle*{1}}
X \put(12827,7089){\circle*{1}}
X \put(12887,7223){\circle*{1}}
X! \put(12948,7357){\circle*{1}}
X! \put(13008,7491){\circle*{1}}
X! \put(13008,7491){\circle*{1}}
X! \put(13068,7627){\circle*{1}}
X \put(13128,7762){\circle*{1}}
X \put(13188,7898){\circle*{1}}
X \put(13188,7898){\circle*{1}}
X--- 89,200 ----
X \put(1445,7475){\circle*{1}}
X \put(1445,7475){\circle*{1}}
X \put(1505,7341){\circle*{1}}
X! \put(1565,7207){\circle*{1}}
X! \put(1625,7073){\circle*{1}}
X \put(1716,6875){\circle*{1}}
X \put(1806,6677){\circle*{1}}
X \put(1897,6482){\circle*{1}}
X \put(1987,6287){\circle*{1}}
X! \put(2077,6096){\circle*{1}}
X! \put(2167,5905){\circle*{1}}
X \put(2258,5718){\circle*{1}}
X \put(2348,5530){\circle*{1}}
X \put(2439,5347){\circle*{1}}
X \put(2529,5163){\circle*{1}}
X! \put(2619,4984){\circle*{1}}
X! \put(2709,4805){\circle*{1}}
X \put(2800,4631){\circle*{1}}
X \put(2890,4457){\circle*{1}}
X \put(2981,4288){\circle*{1}}
X \put(3071,4118){\circle*{1}}
X! \put(3161,3954){\circle*{1}}
X! \put(3251,3789){\circle*{1}}
X \put(3342,3630){\circle*{1}}
X \put(3432,3471){\circle*{1}}
X \put(3523,3318){\circle*{1}}
X \put(3613,3165){\circle*{1}}
X! \put(3703,3018){\circle*{1}}
X! \put(3793,2871){\circle*{1}}
X \put(3884,2730){\circle*{1}}
X \put(3974,2588){\circle*{1}}
X \put(4065,2454){\circle*{1}}
X \put(4155,2319){\circle*{1}}
X! \put(4245,2191){\circle*{1}}
X! \put(4335,2063){\circle*{1}}
X \put(4426,1942){\circle*{1}}
X \put(4516,1820){\circle*{1}}
X \put(4607,1706){\circle*{1}}
X \put(4697,1591){\circle*{1}}
X! \put(4787,1484){\circle*{1}}
X! \put(4877,1376){\circle*{1}}
X \put(4968,1276){\circle*{1}}
X \put(5058,1176){\circle*{1}}
X \put(5239,991){\circle*{1}}
X! \put(5419,820){\circle*{1}}
X \put(5600,666){\circle*{1}}
X \put(5781,527){\circle*{1}}
X! \put(5961,404){\circle*{1}}
X \put(6142,297){\circle*{1}}
X \put(6323,206){\circle*{1}}
X! \put(6503,131){\circle*{1}}
X \put(6684,74){\circle*{1}}
X \put(6865,32){\circle*{1}}
X! \put(7045,8){\circle*{1}}
X \put(7226,0){\circle*{1}}
X \put(7407,8){\circle*{1}}
X! \put(7587,34){\circle*{1}}
X \put(7768,76){\circle*{1}}
X \put(7949,134){\circle*{1}}
X! \put(8129,209){\circle*{1}}
X \put(8310,301){\circle*{1}}
X \put(8491,408){\circle*{1}}
X! \put(8671,532){\circle*{1}}
X \put(8852,672){\circle*{1}}
X \put(9033,827){\circle*{1}}
X! \put(9213,998){\circle*{1}}
X \put(9394,1184){\circle*{1}}
X \put(9485,1284){\circle*{1}}
X \put(9575,1384){\circle*{1}}
X! \put(9665,1492){\circle*{1}}
X! \put(9755,1600){\circle*{1}}
X \put(9846,1715){\circle*{1}}
X \put(9936,1829){\circle*{1}}
X \put(10027,1951){\circle*{1}}
X \put(10117,2073){\circle*{1}}
X! \put(10207,2202){\circle*{1}}
X! \put(10297,2330){\circle*{1}}
X \put(10388,2465){\circle*{1}}
X \put(10478,2600){\circle*{1}}
X \put(10569,2741){\circle*{1}}
X \put(10659,2882){\circle*{1}}
X! \put(10749,3030){\circle*{1}}
X! \put(10839,3177){\circle*{1}}
X \put(10930,3331){\circle*{1}}
X \put(11020,3484){\circle*{1}}
X \put(11111,3643){\circle*{1}}
X \put(11201,3802){\circle*{1}}
X! \put(11291,3967){\circle*{1}}
X! \put(11381,4131){\circle*{1}}
X \put(11472,4301){\circle*{1}}
X \put(11562,4470){\circle*{1}}
X \put(11653,4645){\circle*{1}}
X \put(11743,4820){\circle*{1}}
X! \put(11833,4999){\circle*{1}}
X! \put(11923,5178){\circle*{1}}
X \put(12014,5362){\circle*{1}}
X \put(12104,5545){\circle*{1}}
X \put(12195,5733){\circle*{1}}
X \put(12285,5920){\circle*{1}}
X! \put(12375,6112){\circle*{1}}
X! \put(12465,6303){\circle*{1}}
X \put(12556,6498){\circle*{1}}
X \put(12646,6693){\circle*{1}}
X \put(12737,6891){\circle*{1}}
X \put(12827,7089){\circle*{1}}
X \put(12887,7223){\circle*{1}}
X! \put(12947,7357){\circle*{1}}
X! \put(13007,7491){\circle*{1}}
X! \put(13067,7627){\circle*{1}}
X \put(13128,7762){\circle*{1}}
X \put(13188,7898){\circle*{1}}
X \put(13188,7898){\circle*{1}}
X***************
X*** 204,393 ****
X \put(13369,8310){\circle*{1}}
X \put(13369,8310){\circle*{1}}
X \put(13429,8448){\circle*{1}}
X! \put(13490,8587){\circle*{1}}
X! \put(13550,8725){\circle*{1}}
X! \put(13550,8725){\circle*{1}}
X! \put(13610,8865){\circle*{1}}
X \put(13670,9004){\circle*{1}}
X \put(13730,9144){\circle*{1}}
X \put(13790,9285){\circle*{1}}
X \put(13851,9425){\circle*{1}}
X \put(13911,9566){\circle*{1}}
X \put(13911,9566){\circle*{1}}
X \put(13971,9707){\circle*{1}}
X! \put(14032,9848){\circle*{1}}
X! \put(14092,9989){\circle*{1}}
X! \put(14092,9989){\circle*{1}}
X! \put(14152,10131){\circle*{1}}
X \put(14212,10272){\circle*{1}}
X \put(14272,10414){\circle*{1}}
X \put(14332,10556){\circle*{1}}
X \put(14393,10697){\circle*{1}}
X \put(14453,10839){\circle*{1}}
X \put(14453,10839){\circle*{1}}
X \put(14513,10981){\circle*{1}}
X! \put(14574,11122){\circle*{1}}
X! \put(14634,11264){\circle*{1}}
X! \put(14634,11264){\circle*{1}}
X! \put(14694,11406){\circle*{1}}
X \put(14754,11547){\circle*{1}}
X \put(14814,11689){\circle*{1}}
X \put(14874,11830){\circle*{1}}
X! \put(14935,11971){\circle*{1}}
X! \put(14995,12112){\circle*{1}}
X! \put(14995,12112){\circle*{1}}
X! \put(15055,12253){\circle*{1}}
X! \put(15116,12393){\circle*{1}}
X! \put(15176,12534){\circle*{1}}
X! \put(15176,12534){\circle*{1}}
X! \put(15236,12674){\circle*{1}}
X \put(15296,12813){\circle*{1}}
X \put(15356,12953){\circle*{1}}
X \put(15416,13091){\circle*{1}}
X! \put(15477,13230){\circle*{1}}
X! \put(15537,13368){\circle*{1}}
X! \put(15537,13368){\circle*{1}}
X! \put(15597,13505){\circle*{1}}
X! \put(15658,13643){\circle*{1}}
X! \put(15718,13780){\circle*{1}}
X! \put(15718,13780){\circle*{1}}
X! \put(15778,13916){\circle*{1}}
X \put(15838,14051){\circle*{1}}
X \put(15898,14187){\circle*{1}}
X \put(15958,14321){\circle*{1}}
X! \put(16019,14455){\circle*{1}}
X! \put(16079,14589){\circle*{1}}
X! \put(16079,14589){\circle*{1}}
X! \put(16170,14787){\circle*{1}}
X! \put(16260,14985){\circle*{1}}
X \put(16350,15180){\circle*{1}}
X \put(16440,15375){\circle*{1}}
X! \put(16531,15567){\circle*{1}}
X! \put(16621,15758){\circle*{1}}
X! \put(16712,15946){\circle*{1}}
X! \put(16802,16133){\circle*{1}}
X \put(16892,16317){\circle*{1}}
X \put(16982,16500){\circle*{1}}
X! \put(17073,16679){\circle*{1}}
X! \put(17163,16858){\circle*{1}}
X! \put(17254,17033){\circle*{1}}
X! \put(17344,17208){\circle*{1}}
X \put(17434,17378){\circle*{1}}
X \put(17524,17547){\circle*{1}}
X! \put(17615,17712){\circle*{1}}
X! \put(17705,17876){\circle*{1}}
X! \put(17796,18035){\circle*{1}}
X! \put(17886,18194){\circle*{1}}
X \put(17976,18348){\circle*{1}}
X \put(18066,18501){\circle*{1}}
X! \put(18157,18649){\circle*{1}}
X! \put(18247,18796){\circle*{1}}
X! \put(18338,18937){\circle*{1}}
X! \put(18428,19078){\circle*{1}}
X \put(18518,19213){\circle*{1}}
X \put(18608,19348){\circle*{1}}
X! \put(18699,19477){\circle*{1}}
X! \put(18789,19605){\circle*{1}}
X! \put(18880,19727){\circle*{1}}
X! \put(18970,19849){\circle*{1}}
X \put(19060,19964){\circle*{1}}
X \put(19150,20078){\circle*{1}}
X! \put(19241,20186){\circle*{1}}
X! \put(19331,20294){\circle*{1}}
X! \put(19422,20394){\circle*{1}}
X! \put(19512,20494){\circle*{1}}
X \put(19692,20680){\circle*{1}}
X! \put(19873,20851){\circle*{1}}
X! \put(20054,21006){\circle*{1}}
X \put(20234,21146){\circle*{1}}
X! \put(20415,21270){\circle*{1}}
X! \put(20596,21377){\circle*{1}}
X \put(20776,21469){\circle*{1}}
X! \put(20957,21544){\circle*{1}}
X! \put(21138,21602){\circle*{1}}
X \put(21318,21644){\circle*{1}}
X! \put(21499,21670){\circle*{1}}
X! \put(21680,21678){\circle*{1}}
X \put(21860,21670){\circle*{1}}
X! \put(22041,21646){\circle*{1}}
X! \put(22222,21604){\circle*{1}}
X \put(22402,21547){\circle*{1}}
X! \put(22583,21472){\circle*{1}}
X! \put(22764,21381){\circle*{1}}
X \put(22944,21274){\circle*{1}}
X! \put(23125,21151){\circle*{1}}
X! \put(23306,21012){\circle*{1}}
X \put(23486,20858){\circle*{1}}
X! \put(23667,20687){\circle*{1}}
X! \put(23848,20502){\circle*{1}}
X \put(23938,20402){\circle*{1}}
X \put(24028,20302){\circle*{1}}
X! \put(24119,20195){\circle*{1}}
X! \put(24209,20087){\circle*{1}}
X! \put(24300,19973){\circle*{1}}
X! \put(24390,19858){\circle*{1}}
X \put(24480,19737){\circle*{1}}
X \put(24570,19615){\circle*{1}}
X! \put(24661,19487){\circle*{1}}
X! \put(24751,19359){\circle*{1}}
X! \put(24842,19225){\circle*{1}}
X! \put(24932,19090){\circle*{1}}
X \put(25022,18949){\circle*{1}}
X \put(25112,18807){\circle*{1}}
X! \put(25203,18660){\circle*{1}}
X! \put(25293,18513){\circle*{1}}
X! \put(25384,18360){\circle*{1}}
X! \put(25474,18207){\circle*{1}}
X \put(25564,18048){\circle*{1}}
X \put(25654,17889){\circle*{1}}
X! \put(25745,17725){\circle*{1}}
X! \put(25835,17560){\circle*{1}}
X! \put(25926,17391){\circle*{1}}
X! \put(26016,17221){\circle*{1}}
X \put(26106,17047){\circle*{1}}
X \put(26196,16873){\circle*{1}}
X! \put(26287,16694){\circle*{1}}
X! \put(26377,16515){\circle*{1}}
X! \put(26468,16332){\circle*{1}}
X! \put(26558,16148){\circle*{1}}
X \put(26648,15961){\circle*{1}}
X \put(26738,15773){\circle*{1}}
X! \put(26829,15582){\circle*{1}}
X! \put(26919,15391){\circle*{1}}
X! \put(27010,15196){\circle*{1}}
X! \put(27100,15001){\circle*{1}}
X \put(27190,14803){\circle*{1}}
X \put(27280,14605){\circle*{1}}
X \put(27340,14471){\circle*{1}}
X! \put(27401,14337){\circle*{1}}
X! \put(27461,14203){\circle*{1}}
X! \put(27521,14067){\circle*{1}}
X! \put(27582,13932){\circle*{1}}
X! \put(27642,13796){\circle*{1}}
X! \put(27702,13659){\circle*{1}}
X \put(27762,13522){\circle*{1}}
X \put(27822,13385){\circle*{1}}
X \put(27882,13247){\circle*{1}}
X! \put(27943,13108){\circle*{1}}
X! \put(28003,12970){\circle*{1}}
X! \put(28003,12970){\circle*{1}}
X! \put(28063,12830){\circle*{1}}
X! \put(28124,12691){\circle*{1}}
X! \put(28184,12551){\circle*{1}}
X! \put(28244,12411){\circle*{1}}
X \put(28304,12270){\circle*{1}}
X \put(28364,12130){\circle*{1}}
X \put(28364,12130){\circle*{1}}
X \put(28424,11989){\circle*{1}}
X! \put(28485,11847){\circle*{1}}
X! \put(28545,11706){\circle*{1}}
X! \put(28545,11706){\circle*{1}}
X! \put(28605,11565){\circle*{1}}
X! \put(28666,11423){\circle*{1}}
X! \put(28726,11282){\circle*{1}}
X! \put(28726,11282){\circle*{1}}
X! \put(28786,11140){\circle*{1}}
X! \put(28847,10998){\circle*{1}}
X \end{picture}
X \end{tabular}
X
X--- 203,393 ----
X \put(13369,8310){\circle*{1}}
X \put(13369,8310){\circle*{1}}
X \put(13429,8448){\circle*{1}}
X! \put(13489,8587){\circle*{1}}
X! \put(13549,8725){\circle*{1}}
X! \put(13549,8725){\circle*{1}}
X! \put(13609,8865){\circle*{1}}
X \put(13670,9004){\circle*{1}}
X \put(13730,9144){\circle*{1}}
X+ \put(13730,9144){\circle*{1}}
X \put(13790,9285){\circle*{1}}
X \put(13851,9425){\circle*{1}}
X \put(13911,9566){\circle*{1}}
X \put(13911,9566){\circle*{1}}
X \put(13971,9707){\circle*{1}}
X! \put(14031,9848){\circle*{1}}
X! \put(14091,9989){\circle*{1}}
X! \put(14151,10131){\circle*{1}}
X \put(14212,10272){\circle*{1}}
X \put(14272,10414){\circle*{1}}
X+ \put(14272,10414){\circle*{1}}
X \put(14332,10556){\circle*{1}}
X \put(14393,10697){\circle*{1}}
X \put(14453,10839){\circle*{1}}
X \put(14453,10839){\circle*{1}}
X \put(14513,10981){\circle*{1}}
X! \put(14573,11122){\circle*{1}}
X! \put(14633,11264){\circle*{1}}
X! \put(14693,11406){\circle*{1}}
X \put(14754,11547){\circle*{1}}
X \put(14814,11689){\circle*{1}}
X+ \put(14814,11689){\circle*{1}}
X \put(14874,11830){\circle*{1}}
X! \put(14934,11971){\circle*{1}}
X! \put(14994,12112){\circle*{1}}
X! \put(15054,12253){\circle*{1}}
X! \put(15115,12393){\circle*{1}}
X! \put(15175,12534){\circle*{1}}
X! \put(15175,12534){\circle*{1}}
X! \put(15235,12674){\circle*{1}}
X \put(15296,12813){\circle*{1}}
X \put(15356,12953){\circle*{1}}
X+ \put(15356,12953){\circle*{1}}
X \put(15416,13091){\circle*{1}}
X! \put(15476,13230){\circle*{1}}
X! \put(15536,13368){\circle*{1}}
X! \put(15536,13368){\circle*{1}}
X! \put(15596,13505){\circle*{1}}
X! \put(15657,13643){\circle*{1}}
X! \put(15717,13780){\circle*{1}}
X! \put(15717,13780){\circle*{1}}
X! \put(15777,13916){\circle*{1}}
X \put(15838,14051){\circle*{1}}
X \put(15898,14187){\circle*{1}}
X+ \put(15898,14187){\circle*{1}}
X \put(15958,14321){\circle*{1}}
X! \put(16018,14455){\circle*{1}}
X! \put(16078,14589){\circle*{1}}
X! \put(16169,14787){\circle*{1}}
X! \put(16259,14985){\circle*{1}}
X \put(16350,15180){\circle*{1}}
X \put(16440,15375){\circle*{1}}
X! \put(16530,15567){\circle*{1}}
X! \put(16620,15758){\circle*{1}}
X! \put(16711,15946){\circle*{1}}
X! \put(16801,16133){\circle*{1}}
X \put(16892,16317){\circle*{1}}
X \put(16982,16500){\circle*{1}}
X! \put(17072,16679){\circle*{1}}
X! \put(17162,16858){\circle*{1}}
X! \put(17253,17033){\circle*{1}}
X! \put(17343,17208){\circle*{1}}
X \put(17434,17378){\circle*{1}}
X \put(17524,17547){\circle*{1}}
X! \put(17614,17712){\circle*{1}}
X! \put(17704,17876){\circle*{1}}
X! \put(17795,18035){\circle*{1}}
X! \put(17885,18194){\circle*{1}}
X \put(17976,18348){\circle*{1}}
X \put(18066,18501){\circle*{1}}
X! \put(18156,18649){\circle*{1}}
X! \put(18246,18796){\circle*{1}}
X! \put(18337,18937){\circle*{1}}
X! \put(18427,19078){\circle*{1}}
X \put(18518,19213){\circle*{1}}
X \put(18608,19348){\circle*{1}}
X! \put(18698,19477){\circle*{1}}
X! \put(18788,19605){\circle*{1}}
X! \put(18879,19727){\circle*{1}}
X! \put(18969,19849){\circle*{1}}
X \put(19060,19964){\circle*{1}}
X \put(19150,20078){\circle*{1}}
X! \put(19240,20186){\circle*{1}}
X! \put(19330,20294){\circle*{1}}
X! \put(19421,20394){\circle*{1}}
X! \put(19511,20494){\circle*{1}}
X \put(19692,20680){\circle*{1}}
X! \put(19872,20851){\circle*{1}}
X! \put(20053,21006){\circle*{1}}
X \put(20234,21146){\circle*{1}}
X! \put(20414,21270){\circle*{1}}
X! \put(20595,21377){\circle*{1}}
X \put(20776,21469){\circle*{1}}
X! \put(20956,21544){\circle*{1}}
X! \put(21137,21602){\circle*{1}}
X \put(21318,21644){\circle*{1}}
X! \put(21498,21670){\circle*{1}}
X! \put(21679,21678){\circle*{1}}
X \put(21860,21670){\circle*{1}}
X! \put(22040,21646){\circle*{1}}
X! \put(22221,21604){\circle*{1}}
X \put(22402,21547){\circle*{1}}
X! \put(22582,21472){\circle*{1}}
X! \put(22763,21381){\circle*{1}}
X \put(22944,21274){\circle*{1}}
X! \put(23124,21151){\circle*{1}}
X! \put(23305,21012){\circle*{1}}
X \put(23486,20858){\circle*{1}}
X! \put(23666,20687){\circle*{1}}
X! \put(23847,20502){\circle*{1}}
X \put(23938,20402){\circle*{1}}
X \put(24028,20302){\circle*{1}}
X! \put(24118,20195){\circle*{1}}
X! \put(24208,20087){\circle*{1}}
X! \put(24299,19973){\circle*{1}}
X! \put(24389,19858){\circle*{1}}
X \put(24480,19737){\circle*{1}}
X \put(24570,19615){\circle*{1}}
X! \put(24660,19487){\circle*{1}}
X! \put(24750,19359){\circle*{1}}
X! \put(24841,19225){\circle*{1}}
X! \put(24931,19090){\circle*{1}}
X \put(25022,18949){\circle*{1}}
X \put(25112,18807){\circle*{1}}
X! \put(25202,18660){\circle*{1}}
X! \put(25292,18513){\circle*{1}}
X! \put(25383,18360){\circle*{1}}
X! \put(25473,18207){\circle*{1}}
X \put(25564,18048){\circle*{1}}
X \put(25654,17889){\circle*{1}}
X! \put(25744,17725){\circle*{1}}
X! \put(25834,17560){\circle*{1}}
X! \put(25925,17391){\circle*{1}}
X! \put(26015,17221){\circle*{1}}
X \put(26106,17047){\circle*{1}}
X \put(26196,16873){\circle*{1}}
X! \put(26286,16694){\circle*{1}}
X! \put(26376,16515){\circle*{1}}
X! \put(26467,16332){\circle*{1}}
X! \put(26557,16148){\circle*{1}}
X \put(26648,15961){\circle*{1}}
X \put(26738,15773){\circle*{1}}
X! \put(26828,15582){\circle*{1}}
X! \put(26918,15391){\circle*{1}}
X! \put(27009,15196){\circle*{1}}
X! \put(27099,15001){\circle*{1}}
X \put(27190,14803){\circle*{1}}
X \put(27280,14605){\circle*{1}}
X \put(27340,14471){\circle*{1}}
X! \put(27400,14337){\circle*{1}}
X! \put(27460,14203){\circle*{1}}
X! \put(27520,14067){\circle*{1}}
X! \put(27581,13932){\circle*{1}}
X! \put(27641,13796){\circle*{1}}
X! \put(27701,13659){\circle*{1}}
X \put(27762,13522){\circle*{1}}
X \put(27822,13385){\circle*{1}}
X \put(27882,13247){\circle*{1}}
X! \put(27942,13108){\circle*{1}}
X! \put(28002,12970){\circle*{1}}
X! \put(28002,12970){\circle*{1}}
X! \put(28062,12830){\circle*{1}}
X! \put(28123,12691){\circle*{1}}
X! \put(28183,12551){\circle*{1}}
X! \put(28243,12411){\circle*{1}}
X \put(28304,12270){\circle*{1}}
X \put(28364,12130){\circle*{1}}
X \put(28364,12130){\circle*{1}}
X \put(28424,11989){\circle*{1}}
X! \put(28484,11847){\circle*{1}}
X! \put(28544,11706){\circle*{1}}
X! \put(28544,11706){\circle*{1}}
X! \put(28604,11565){\circle*{1}}
X! \put(28665,11423){\circle*{1}}
X! \put(28725,11282){\circle*{1}}
X! \put(28725,11282){\circle*{1}}
X! \put(28785,11140){\circle*{1}}
X! \put(28846,10998){\circle*{1}}
X \end{picture}
X \end{tabular}
X
SHAR_EOF
fi # end of overwriting check
# End of shell archive
exit 0
Department of Computer Science, Duke University, Durham, NC 27706
ARPA: dfk@cs.duke.edu
CSNET: dfk@duke
UUCP: decvax!duke!dfk