home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!lll-winken!sun-barr!newstop!exodus!sushi.Solbourne.COM
- From: gerber@sushi.Solbourne.COM (Andrew Gerber)
- Newsgroups: comp.sources.x
- Subject: v10i098: hpgl -- HPGL for X11, Part02/02
- Message-ID: <4813@exodus.Eng.Sun.COM>
- Date: 19 Dec 90 02:43:16 GMT
- References: <csx-10i097:xhpgl@uunet.UU.NET>
- Sender: news@exodus.Eng.Sun.COM
- Lines: 1220
- Approved: argv@sun.com
-
- Submitted-by: gerber@sushi.Solbourne.COM (Andrew Gerber)
- Posting-number: Volume 10, Issue 98
- Archive-name: xhpgl/part02
-
-
- ---- Cut Here and unpack ----
- #!/bin/sh
- # shar: Shell Archiver (v1.22)
- #
- # Run the following text with /bin/sh to create:
- # parse.c
- # pc.xw
- # shuttle.uuencoded
- # xhpgl.1
- #
- if test -f parse.c; then echo "File parse.c exists"; else
- echo "x - extracting parse.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > parse.c &&
- X/*
- X * parse.c -- This is a hand-coded HPGL parser, to see if I can get
- X * somewhat better performance than the YACC parser gives
- X * me.
- X *
- X * Author : Dieter Muller
- X * Ported to X11 & Line Type fixes: Andy Gerber
- X * Created : Wed Oct 31 21:13:38 1990
- X */
- X
- X/* Header Files */
- X
- X#include <stdio.h>
- X#include <math.h>
- X#include <varargs.h>
- X#include <sys/param.h>
- X#include <X11/X.h>
- X#include <X11/Xlib.h>
- X#include <math.h>
- X# include "y.tab.h" /* as generated by the original grammar */
- X
- X/* X windows variables. */
- Xextern XColor pen[];
- Xextern Window main_window;
- Xextern Font text_font;
- Xextern XFontStruct *font_info;
- Xextern short font_offset;
- Xextern GC gc;
- Xextern Display *dpy;
- Xextern int span_count;
- Xextern initialize_plotter();
- Xextern int dont_scale; /* should we scale coordinates? Not done if zooming */
- Xextern int minWidth,minHeight; /* size of X window for plotting */
- X/* Macro Definitions */
- X
- X/* Variable Definitions */
- X
- XYYSTYPE yylval;
- Xdouble xScale = 1.0;
- Xdouble yScale = 1.0;
- Xstatic int pushed_token = -1;
- X
- X/* Function Declarations */
- X
- Xvoid unget_token ();
- Xint next_token ();
- Xvoid eat_to_semi ();
- Xvoid ignored ();
- Xvoid error ();
- Xint yywrap ();
- Xvoid draw_line ();
- Xvoid draw_rectangle();
- Xvoid draw_text ();
- Xvoid scale_coord ();
- Xint get_coord_pair ();
- Xvoid coord_list ();
- Xvoid yyparse ();
- Xvoid line_type_change();
- X
- X/* pattern definitions for drawing dashed lines */
- X/* default |________| */
- X/* line 0 | | */
- X/* line 1 |_ | */
- X/* line 2 |____ | */
- X/* line 3 |______ | */
- X/* line 4 |______ _| */
- X/* line 5 |_____ __| */
- X/* line 6 |____ _ _| */
- X
- Xstatic unsigned char line_types[][6] = {
- X {1, 15},
- X {1, 15},
- X {8, 8},
- X {12, 4},
- X {13, 1, 1, 1},
- X {12, 1, 2, 1},
- X {9, 1, 2, 1, 2, 1}
- X};
- X
- Xstatic int line_type_elements[] = {2, 2, 2, 2, 4, 4, 6};
- X
- X
- X/**********************************************************************
- X * yyparse () --- Read HPGL statements, drawing the results as we
- X * go.
- X */
- X
- Xvoid yyparse ()
- X{
- X extern FILE * yyin;
- X extern YYSTYPE yylval;
- X extern char yytext [];
- X extern int absolute;
- X extern int pen_down;
- X extern int is_color;
- X extern int cur_pen;
- X extern int rectangle;
- X
- X int token;
- X
- X while ((token = next_token ()) > 0)
- X {
- X/* getc(stdin);
- X printf("%s", yytext);
- X*/
- X switch (token)
- X {
- X case LT:
- X line_type_change();
- X break;
- X case LB:
- X draw_text (yylval.sb);
- X break;
- X case PA:
- X absolute = 1;
- X coord_list ();
- X break;
- X case PR:
- X absolute = 0;
- X coord_list ();
- X break;
- X case PU:
- X pen_down = 0;
- X coord_list ();
- X break;
- X case PD:
- X pen_down = 1;
- X coord_list ();
- X break;
- X case EA:
- X /* draw a rectangle */
- X rectangle = 1;
- X coord_list();
- X rectangle = 0;
- X break;
- X case RA:
- X /* This is a filled rectangle, not supported */
- X rectangle = 1;
- X coord_list();
- X rectangle = 0;
- X break;
- X case SP:
- X if (is_color)
- X {
- X cur_pen = pen[yylval.i].pixel;
- X XSetForeground(dpy, gc, cur_pen);
- X }
- X break;
- X case SC:
- X scale_coord ();
- X break;
- X case RESET:
- X initialize_plotter ();
- X break;
- X case SEMICOLON:
- X break;
- X case EAT_TO_SEMI:
- X eat_to_semi();
- X break;
- X default:
- X error ("Unexpected token %d, symbol `%s'\n", token, yytext);
- X /*NOTREACHED*/
- X }
- X }
- X
- X return;
- X} /* end of yyparse () */
- X
- X/**********************************************************************
- X * line_type_change() --- change line type
- X *
- X *
- X * Handle getting a LT changes, sees if line type was specified
- X */
- X
- Xvoid line_type_change()
- X{
- X int token;
- X int new_lt;
- X int result;
- X XGCValues gc_vals;
- X new_lt = -1;
- X result = 0;
- X token = next_token ();
- X if (token == DIGIT)
- X {
- X new_lt = yylval.i;
- X token = next_token (token);
- X
- X if (token != SEMICOLON)
- X {
- X error ("Unexpected token %d, symbol `%s'\n", token, yytext);
- X eat_to_semi();
- X }
- X result = 1;
- X }
- X else if (token == SEMICOLON)
- X {
- X new_lt = -99;
- X result = 1;
- X }
- X
- X if (new_lt == -99)
- X {
- X gc_vals.line_style = LineSolid;
- X XChangeGC(dpy, gc, GCLineStyle, &gc_vals);
- X }
- X else if (new_lt >= 0 && new_lt <= 6)
- X {
- X gc_vals.line_style = LineOnOffDash;
- X XChangeGC(dpy, gc, GCLineStyle, &gc_vals);
- X XSetDashes(dpy, gc, 0, line_types[new_lt], line_type_elements[new_lt]);
- X }
- X
- X if (!result)
- X {
- X unget_token (token);
- X eat_to_semi ();
- X }
- X
- X}
- X
- X/**********************************************************************
- X * coord_list () --- Handle parsing an optional list of
- X * coordinates.
- X *
- X * A list of coordinates looks like INT, INT [, INT, INT]. Basically,
- X * coordinate pairs separated by commas.
- X */
- X
- Xvoid coord_list ()
- X{
- X int token;
- X
- X while (get_coord_pair ())
- X {
- X token = next_token ();
- X if (token != COMMA)
- X {
- X unget_token (token);
- X break;
- X }
- X }
- X
- X return;
- X} /* end of coord_list () */
- X
- X/**********************************************************************
- X * get_coord_pair () --- Reads a pair of coordinates of the form
- X * INTEGER COMMA INTEGER
- X *
- X * Returns:
- X *
- X * SUCCESS --- True, if we got a valid pair
- X * FAILURE --- False, if something's wrong. We also eat
- X * through to the next semi-colon, if any.
- X */
- X
- Xint get_coord_pair ()
- X{
- X extern int last_x;
- X extern int last_y;
- X extern int x;
- X extern int y;
- X extern YYSTYPE yylval;
- X extern int absolute;
- X extern int pen_down;
- X extern double xMin;
- X extern double xMax;
- X extern double yMin;
- X extern double yMax;
- X extern double xScale;
- X extern double yScale;
- X extern int minWidth;
- X extern int minHeight;
- X extern int rectangle;
- X
- X int token;
- X int result;
- X double scratch_x;
- X double scratch_y;
- X
- X result = 0;
- X token = next_token ();
- X if (token == DIGIT || token == NUMBER)
- X {
- X if (token == DIGIT) scratch_x = yylval.i;
- X else scratch_x = yylval.f;
- X
- X token = next_token (token);
- X if (token == COMMA)
- X {
- X token = next_token ();
- X if (token == DIGIT || token == NUMBER)
- X {
- X if (token == DIGIT) scratch_y = yylval.i;
- X else scratch_y = yylval.f;
- X
- X last_x = x;
- X last_y = y;
- X
- X if (absolute)
- X {
- X x = (scratch_x - xMin) * xScale;
- X y = (scratch_y - yMin) * yScale;
- X }
- X else
- X {
- X x = x + (scratch_x - xMin) * xScale;
- X y = minHeight - y + (scratch_y - yMin) * yScale;
- X }
- X
- X y = minHeight - y;
- X
- X if (pen_down && !rectangle)
- X draw_line ();
- X else if (rectangle)
- X draw_rectangle();
- X
- X result = 1;
- X }
- X }
- X }
- X
- X if (!result)
- X {
- X unget_token (token);
- X eat_to_semi ();
- X }
- X
- X return (result);
- X} /* end of get_coord_pair () */
- X
- X/**********************************************************************
- X * scale_coord () --- set up new user coordinate boundaries
- X *
- X * We need two pairs of comma-separated coordinates, a total of four
- X * INTEGERs and three COMMAs.
- X */
- X
- Xvoid scale_coord ()
- X{
- X extern double xMin;
- X extern double xMax;
- X extern double yMin;
- X extern double yMax;
- X extern double xScale;
- X extern double yScale;
- X extern int minWidth;
- X extern int minHeight;
- X
- X double scratch [4];
- X int count;
- X int token;
- X int done;
- X int result;
- X
- X result = 0;
- X done = 0;
- X count = 0;
- X while (!done)
- X {
- X token = next_token ();
- X if (token == DIGIT || token == NUMBER)
- X {
- X if (token == DIGIT) scratch [count++] = yylval.i;
- X else scratch [count++] = yylval.f;
- X
- X if (count < 4)
- X {
- X token = next_token ();
- X if (token != COMMA) /* die with !result */
- X done = 1;
- X }
- X else
- X {
- X if (!dont_scale)
- X {
- X xMin = scratch [0];
- X xMax = scratch [1];
- X yMin = scratch [2];
- X yMax = scratch [3];
- X
- X xScale = minWidth / (xMax - xMin);
- X yScale = minHeight / (yMax - yMin);
- X
- X /* Make sure x is in proportion to y */
- X
- X if (yScale < xScale)
- X {
- X xMax = xMin + minWidth/yScale;
- X xScale = minWidth / (xMax - xMin);
- X yScale = minHeight / (yMax - yMin);
- X }
- X else
- X {
- X yMax = yMin + minHeight/xScale;
- X xScale = minWidth / (xMax - xMin);
- X yScale = minHeight / (yMax - yMin);
- X }
- X }
- X
- X result = 1;
- X done = 1;
- X }
- X }
- X }
- X
- X if (!result)
- X {
- X unget_token (token);
- X eat_to_semi ();
- X }
- X
- X return;
- X} /* end of scale_coord () */
- X
- X/**********************************************************************
- X * draw_text () --- Display some text at the current point
- X *
- X * Arguments:
- X *
- X * text -i- What to draw.
- X */
- X
- Xvoid draw_text (txt)
- Xchar * txt;
- X{
- X extern int x;
- X extern int y;
- X XTextItem text;
- X
- X text.nchars = strlen(txt);
- X text.delta = 0;
- X text.font = text_font;
- X text.chars = txt;
- X
- X XDrawText(dpy, main_window, gc, x,y-font_offset, &text, 1);
- X x += XTextWidth(font_info, txt, text.nchars);
- X return;
- X} /* end of draw_text () */
- X
- X/**********************************************************************
- X * draw_line () --- Draw a vector between the last coordinate pair
- X * and the current one
- X */
- X
- Xvoid draw_line ()
- X{
- X extern int last_x;
- X extern int last_y;
- X extern int x;
- X extern int y;
- X
- X/* printf("Draw line %d %d %d %d\n", last_x, last_y, x, y); */
- X XDrawLine(dpy, main_window, gc, last_x, last_y, x, y);
- X ++span_count;
- X return;
- X} /* end of draw_line () */
- X
- X/**********************************************************************
- X * draw_line () --- Draw a rectangle between the last coordinate pair
- X * and the current one
- X */
- X
- Xvoid draw_rectangle()
- X{
- X extern int last_x;
- X extern int last_y;
- X extern int x;
- X extern int y;
- X
- X XDrawLine(dpy, main_window, gc, last_x, last_y, last_x, y);
- X XDrawLine(dpy, main_window, gc, last_x, last_y, x, last_y);
- X XDrawLine(dpy, main_window, gc, last_x, y, x, y);
- X XDrawLine(dpy, main_window, gc, x, last_y, x, y);
- X
- X span_count = span_count + 4;
- X return;
- X} /* end of draw_line () */
- X
- X/**********************************************************************
- X * yywrap () --- Pacify yylex()
- X *
- X * Returns:
- X *
- X * SUCCESS --- Always true, to indicate EOF
- X */
- X
- Xint yywrap ()
- X{
- X return (1);
- X} /* end of yywrap () */
- X
- X/**********************************************************************
- X * error () --- Handles reporting syntax errors in a reasonably
- X * nice way.
- X * Arguments:
- X *
- X * va_alist --- A printf-like set of arguments.
- X */
- X
- Xvoid error (va_alist)
- Xva_dcl
- X{
- X va_list args;
- X char * fmt;
- X char err_buf [MAXPATHLEN * 2];
- X
- X va_start (args);
- X
- X fmt = va_arg (args, char *);
- X strcpy (err_buf, "\nSyntax error: ");
- X (void) vsprintf (err_buf + strlen (err_buf), fmt, args);
- X
- X va_end (args);
- X
- X fflush (stdout);
- X fputs (err_buf, stderr);
- X
- X return;
- X} /* end of error () */
- X
- X/**********************************************************************
- X * ignored () --- Handles reporting that we're ignoring something
- X * nicely.
- X *
- X * Arguments:
- X *
- X * va_alist --- A printf-like set of arguments.
- X */
- X
- Xvoid ignored (va_alist)
- Xva_dcl
- X{
- X va_list args;
- X char * fmt;
- X char err_buf [MAXPATHLEN * 2];
- X
- X va_start (args);
- X
- X fmt = va_arg (args, char *);
- X strcpy (err_buf, "\nUnsupported command ignored: ");
- X (void) vsprintf (err_buf + strlen (err_buf), fmt, args);
- X va_end (args);
- X
- X fflush (stdout);
- X fputs (err_buf, stderr);
- X
- X return;
- X} /* end of ignored () */
- X
- X/**********************************************************************
- X * eat_to_semi () --- Throw away input until we hit EOF or a
- X * semi-colon
- X */
- X
- Xvoid eat_to_semi ()
- X{
- X int token;
- X
- X while (1)
- X {
- X token = next_token ();
- X if ( token < 0
- X || token == SEMICOLON)
- X {
- X break;
- X }
- X }
- X
- X return;
- X} /* end of eat_to_semi () */
- X
- X/**********************************************************************
- X * next_token () --- Returns the next token
- X */
- X
- Xint next_token ()
- X{
- X extern pushed_token;
- X
- X int token;
- X
- X if (pushed_token != -1)
- X {
- X token = pushed_token;
- X pushed_token = -1;
- X }
- X else
- X {
- X token = yylex ();
- X }
- X
- X return (token);
- X} /* end of next_token () */
- X
- X/**********************************************************************
- X * unget_token () --- Push a token back for later examination
- X *
- X * Arguments:
- X *
- X * token -i- The token to push back.
- X */
- X
- Xvoid unget_token (token)
- Xint token;
- X{
- X extern int pushed_token;
- X
- X if (pushed_token != -1)
- X {
- X error ("Two pushes in a row");
- X exit (1);
- X }
- X
- X pushed_token = token;
- X
- X return;
- X} /* end of unget_token () */
- X
- X
- X
- X
- X
- X
- X
- X
- SHAR_EOF
- chmod 0644 parse.c || echo "restore of parse.c fails"
- set `wc -c parse.c`;Sum=$1
- if test "$Sum" != "12859"
- then echo original size 12859, current size $Sum;fi
- fi
- if test -f pc.xw; then echo "File pc.xw exists"; else
- echo "x - extracting pc.xw (Text)"
- sed 's/^X//' << 'SHAR_EOF' > pc.xw &&
- X.(.@;0:.I40;;17:.N;19:DF;SC0,1999,0,1439;.(
- XSR0.733333,1.354167;DI1,0;PU;SP7;SL0;LT;.).(
- XPU;SP1;PU;PA820,604;PD;PA1112,604;
- XPD;PA1108,650;
- XPD;PA1098,694;
- XPD;PA1080,737;
- XPD;PA1056,776;
- XPD;PA820,604;
- XPU;SP2;PD;PA1056,776;
- XPD;PA1026,810;
- XPD;PA992,840;
- XPD;PA953,864;
- XPD;PA910,882;
- XPD;PA866,892;
- XPD;PA820,896;
- XPD;PA774,892;
- XPD;PA730,882;
- XPD;PA820,604;
- XPU;PA731,877;PD;PA738,884;
- XPU;PA736,862;PD;PA765,891;
- XPU;PA741,847;PD;PA788,894;
- XPU;PA746,832;PD;PA810,896;
- XPU;PA751,817;PD;PA830,896;
- XPU;PA756,802;PD;PA849,895;
- XPU;PA761,787;PD;PA866,892;
- XPU;PA766,772;PD;PA883,889;
- XPU;PA771,757;PD;PA899,885;
- XPU;PA775,741;PD;PA914,880;
- XPU;PA780,726;PD;PA929,875;
- XPU;PA785,711;PD;PA943,869;
- XPU;PA790,696;PD;PA956,862;
- XPU;PA795,681;PD;PA969,855;
- XPU;PA800,666;PD;PA981,847;
- XPU;PA805,651;PD;PA993,839;
- XPU;PA810,636;PD;PA1004,830;
- XPU;PA815,621;PD;PA1015,821;
- XPU;PA820,606;PD;PA1025,811;
- XPU;PA886,652;PD;PA1035,801;
- XPU;PA960,706;PD;PA1045,791;
- XPU;PA1034,760;PD;PA1053,779;
- XPU;SP3;PU;PA820,604;PD;PA730,882;
- XPD;PA687,864;
- XPD;PA648,840;
- XPD;PA614,810;
- XPD;PA584,776;
- XPD;PA560,737;
- XPD;PA542,694;
- XPD;PA532,650;
- XPD;PA528,604;
- XPD;PA532,558;
- XPD;PA542,514;
- XPD;PA560,471;
- XPD;PA584,432;
- XPD;PA820,604;
- XPU;PA577,442;PD;PA586,433;
- XPU;PA553,486;PD;PA597,442;
- XPU;PA541,518;PD;PA609,450;
- XPU;PA534,545;PD;PA620,459;
- XPU;PA530,569;PD;PA632,467;
- XPU;PA528,591;PD;PA644,475;
- XPU;PA528,611;PD;PA655,484;
- XPU;PA529,630;PD;PA667,492;
- XPU;PA531,648;PD;PA678,501;
- XPU;PA534,665;PD;PA690,509;
- XPU;PA538,681;PD;PA701,518;
- XPU;PA543,696;PD;PA713,526;
- XPU;PA548,711;PD;PA725,534;
- XPU;PA554,725;PD;PA736,543;
- XPU;PA561,738;PD;PA748,551;
- XPU;PA568,751;PD;PA759,560;
- XPU;PA575,764;PD;PA771,568;
- XPU;PA584,775;PD;PA782,577;
- XPU;PA592,787;PD;PA794,585;
- XPU;PA601,798;PD;PA806,593;
- XPU;PA611,808;PD;PA817,602;
- XPU;PA621,818;PD;PA813,626;
- XPU;PA632,827;PD;PA803,656;
- XPU;PA643,836;PD;PA794,685;
- XPU;PA654,845;PD;PA784,715;
- XPU;PA667,852;PD;PA775,744;
- XPU;PA679,860;PD;PA765,774;
- XPU;PA692,867;PD;PA755,804;
- XPU;PA706,873;PD;PA746,833;
- XPU;PA720,879;PD;PA736,863;
- XPU;SP4;PU;PA820,604;PD;PA584,432;
- XPD;PA614,398;
- XPD;PA648,368;
- XPD;PA687,344;
- XPD;PA730,326;
- XPD;PA774,316;
- XPD;PA820,312;
- XPD;PA866,316;
- XPD;PA910,326;
- XPD;PA953,344;
- XPD;PA992,368;
- XPD;PA1026,398;
- XPD;PA1056,432;
- XPD;PA1080,471;
- XPD;PA1098,514;
- XPD;PA1108,558;
- XPD;PA1112,604;
- XPD;PA820,604;
- XPU;PA600,444;PD;PA600,412;
- XPU;PA620,458;PD;PA620,391;
- XPU;PA640,473;PD;PA640,374;
- XPU;PA660,487;PD;PA660,360;
- XPU;PA680,502;PD;PA680,348;
- XPU;PA700,517;PD;PA700,338;
- XPU;PA720,531;PD;PA720,330;
- XPU;PA740,546;PD;PA740,323;
- XPU;PA760,560;PD;PA760,318;
- XPU;PA780,575;PD;PA780,315;
- XPU;PA800,589;PD;PA800,313;
- XPU;PA820,604;PD;PA820,312;
- XPU;PA840,604;PD;PA840,313;
- XPU;PA860,604;PD;PA860,315;
- XPU;PA880,604;PD;PA880,318;
- XPU;PA900,604;PD;PA900,323;
- XPU;PA920,604;PD;PA920,330;
- XPU;PA940,604;PD;PA940,338;
- XPU;PA960,604;PD;PA960,348;
- XPU;PA980,604;PD;PA980,360;
- XPU;PA1000,604;PD;PA1000,374;
- XPU;PA1020,604;PD;PA1020,391;
- XPU;PA1040,604;PD;PA1040,412;
- XPU;PA1060,604;PD;PA1060,438;
- XPU;PA1080,604;PD;PA1080,471;
- XPU;PA1100,604;PD;PA1100,521;
- XPU;SP7;PU;PA644,1311;
- XPU;LBDATA FROM @PIEME
- XPU;PA748,1233;
- XPU;LBPIE 1
- XPU;SP1;PU;PA1706,740;PD;PA1823,740;
- XPD;PA1823,778;
- XPD;PA1706,778;
- XPD;PA1706,740;
- XPU;SP7;PU;PA1846,747;
- XPU;LBSLICE 1
- XPU;SP2;PU;PA1706,662;PD;PA1823,662;
- XPD;PA1823,700;
- XPD;PA1706,700;
- XPD;PA1706,662;
- XPU;PA1706,685;PD;PA1721,700;
- XPU;PA1706,665;PD;PA1741,700;
- XPU;PA1723,662;PD;PA1761,700;
- XPU;PA1743,662;PD;PA1781,700;
- XPU;PA1763,662;PD;PA1801,700;
- XPU;PA1783,662;PD;PA1821,700;
- XPU;PA1803,662;PD;PA1823,682;
- XPU;PA1823,662;PD;PA1823,662;
- XPU;SP7;PU;PA1846,669;
- XPU;LBSLICE 2
- XPU;SP3;PU;PA1706,584;PD;PA1823,584;
- XPD;PA1823,622;
- XPD;PA1706,622;
- XPD;PA1706,584;
- XPU;PA1706,593;PD;PA1715,584;
- XPU;PA1706,613;PD;PA1735,584;
- XPU;PA1717,622;PD;PA1755,584;
- XPU;PA1737,622;PD;PA1775,584;
- XPU;PA1757,622;PD;PA1795,584;
- XPU;PA1777,622;PD;PA1815,584;
- XPU;PA1797,622;PD;PA1823,597;
- XPU;PA1817,622;PD;PA1823,616;
- XPU;SP7;PU;PA1846,591;
- XPU;LBSLICE 3
- XPU;SP4;PU;PA1706,506;PD;PA1823,506;
- XPD;PA1823,544;
- XPD;PA1706,544;
- XPD;PA1706,506;
- XPU;PA1720,506;PD;PA1720,544;
- XPU;PA1740,506;PD;PA1740,544;
- XPU;PA1760,506;PD;PA1760,544;
- XPU;PA1780,506;PD;PA1780,544;
- XPU;PA1800,506;PD;PA1800,544;
- XPU;PA1820,506;PD;PA1820,544;
- XPU;SP7;PU;PA1846,513;
- XPU;LBSLICE 4
- XPU;PA0,1389;
- XPU;LBPC 11-JUL-89 12:06 Page 1
- XPU;SP0;.).(PU;PA0,1439;DF;SP0;.)
- SHAR_EOF
- chmod 0644 pc.xw || echo "restore of pc.xw fails"
- set `wc -c pc.xw`;Sum=$1
- if test "$Sum" != "4280"
- then echo original size 4280, current size $Sum;fi
- fi
- if test -f shuttle.uuencoded; then echo "File shuttle.uuencoded exists"; else
- echo "x - extracting shuttle.uuencoded (Text)"
- sed 's/^X//' << 'SHAR_EOF' > shuttle.uuencoded &&
- Xbegin 666 shuttle.Z
- XM'YV04X: @,$"1 P8" D.+'@PX0X%4Z#(> BE"L4@-6;8J,&"1HX:-B@2N5A#
- XM1@V.-'#8F*@ "L88,W!TM#%CALB+'G/(8%$CADZ*%EL&\7B#8$D8.&X*K0%#
- XMQ@R>)F$ )8E09LD:25N.%.H1QM.>-VC@Q'$C!T^8-<;>B,$31EFJ,,S2.!EC
- XM*M>/;.?&$*MU; P;;6W4Y8IC!MN>,OBZ3)G#J$^I=W&8+6DCQU@<5F7$2$M8
- XMQLZ>6''>V!C8)N$<@&FDA%R1JN297I4NSD'CQMG:.&E/CC$Z=U&H2.VZ[!GC
- XM\PS<?9<6MYTQIO @-W#XY%GSAFSH.-Q2WWOQ1MG),B0_CSZ]N?7D+J/7I%[#
- XMLM#H/:E'[T[V\(R/]'-\I1&W>P[>/-'@DW\T?%9@2.^A9E6![J67 VT!AG=1
- XM=N45J%@0V:D6X%\3PF##@C!PYE)VKV7TGW!;C7C09#/<8)J*)K'W(H8PL6C8
- XMA'NQZ!:.($&% TLJVF"420BJV!Y4,[!&XTG B4AC;6=EAZ-&9X&$HV=GS>"D
- XM=##0<-9F'>+@)5,Y9#6BAY\AM:575KEU(85?>7A>:^A!5R9S'EY8EF"!*184
- XM%"G:2253'_H7PV%N%8D=66V1]5QX3.YY77A-L> =D'\&*D-89MU0$HH7R5"9
- XMERX6F6FH-,ET0V*A8L766G,&85)BEL(4*@TV +;6C(G%5:N9LFKYU*JQ>I:#
- XM;6$IZ5F!EM90; RO>?=LBRQD!Z2L2-E6F+)=$J02II-Z!9A*BOKT8[7'7N23
- XMJ"SHY"2T'[;+%*A"0>OKL8.YQ)M'[8I7[X>V-33C7S$>9&N](#UE<(-!;(80
- XM"P=IIBX-U$;,VI\-']CN?'7N%5:_P&[F5+NTJ>LL6P^6NQ)!#XIXZK^5D:PD
- XM;P"6>?%UO-G@)6JQ0GN0O#=WC$,-.R>IKF2V-68JSOK)1!;#/HU6K4>APE!<
- XMM6 *)4.7''G'\-:>6BH@O2YI9K6E"(5:'$<;/3L7"X)=JQF?("FJV<<]?0WM
- XM3K7EB[%G,_ MW:3\C=EBJ[0ZR^O0G89(4IDR.87:<T)NS<*FA5TW%\405P;L
- XM?=K!1'5+&,?D(L0UY1OH7$)V7N9%0JYZ>5BQKJ3EY6*^B/%*1./>7YV">3B[
- XMA%Q]2!#-L<Z%5.<4A\JXI>F2'JI3@JM>=>NJO5N8;=D?S6SW]5K;T5SJCL;W
- XMO/6N>G[('SY5V\PZIS:TNL&W=>%FWD%5+M$<G73M9@#"RLP\PA;!Y"MC\=+9
- XM_50C$^.1+6.!JU7/"D003[U+0*_"3[WX,RXM34P[A3G@7FAU+#-A;"]_:9?5
- XM<(8KP#3F?ST9UX-,EBMT_4\P',&,"'/U%'*5[V=B"ID%JR6J\CVH6BL,'W\L
- XMM:JCE45L,_M/UQQ7+]HTT 8].Y995E(LA &*T[:F@PFPY^J\<LC%]I:#54S
- XMI[]9#27DZ]B#W/>3*F)1/NK2SV2D5$7MK,R).]D(U KCI5$9D52;*E])FE6N
- XMHB K<S!C2W94!A,B[D]G4X/A7JI%M(G1I%HKF=BA0-G&QV'F<O<I4J"R4ZF:
- XMI$TH0QLC"X[S(W4="BNSI,W_'.8E 8G)EH))37CNMY>A=>0X2ZL7+SL"+<4$
- XMZE :Z>6F!G:0UPA(-;;<C$SN4Z#G' HI<MF+,R>4),"T*#2P+(E9: DN6.IL
- XM)UIJRG5BN<[HF)"<PCNGF0+EHNC,DC\,&PV5#'.?\?S(G)ZQWGN$Y*7CE$QZ
- XM[RD+6[2DLWDB!)Y)"MJ($M/0F+QHE5YIZ$:2F9X6;1.@UUG)1V:W$=C9ZW*5
- XM\9M+<;FI@Z2T)CLQ"?KHY!*: &A3O0%>3F!J$LIAD2";DJ=0WP8I/\$.*[89
- XMH]& )R:V8$ZF[VF*6<)3*."Y:)M-<1GL)-/00^VS.\:ZW$=TUQT+S;)+JNP.
- XM4N!I+,IM;:MD$5&@*H=4]3P'JG@-7$JU.3N;0G0XJB%(2@1;IY(DZ2QA(8E&
- XMP*.2ORZ'.LZI4TX^LZ[G>*1$HFI0H$#3OQ:1%"->84YB@+2Z,H&G,G_5:4>^
- XM=9V,8*DV.]T=TGCBK+-F]3B\[>9[-M4_'*)5>,X*Y7N>QD1/&919WL'B=4:3
- XMD6;AJJUEJI60QGHLWG*,IT&H#+M \JDZK:I2)SG18:%CM3$1S;?I*0JIB'9:
- XMZ@Z+OM/-SGV1 U[OK,=%8S-O;RVE);&^ARE=X\V<^'E4[6H4.@:$V['B^AX&
- XM2=BYZRT5V[(CVN[0%V[1'4]* @G5Z8XQD$*ZYW KJ;/@F%= ;(N)4]]S'-L(
- XM9G[F'2'< #<>MSQ%2 4U[S#AYI ,+XLGTODH[%*&Y""#ERSGBHG$ZB09X!:X
- XMG2[128PTTJ7K*&V;*F&K4/2SEEQ2$5 7T<U3--*3YQR+6I,=YYACETL/KA=R
- XM!+E/4-%<+X1$L$7"!>]!#&/.LNA5759[(G^R)FBXRB5$A^ZSLS@BXP=7$T(Q
- XMF5S'D (M9GK(F\7YF8!FV#&8G Z@08O(FVIB%FO)>435L=2/2@G+XWBK*:_&
- XMD&&<UA1@10>ZU#7HN:05Z?2015?1P3*&XE+!%\[S(%V3S&FETR/!%.79LKOQ
- XM :7SFAL#ZT?+$XQZ-[HIN$&+83]ZVXUG=- "[FM"Q#6W8.!].AQ^F]#F_F6M
- XM^;0R18DIW)[9TES8UJL),:60LS)X[U8R;W=V:<<M=>?"1>5O^4+\39Y".#I'
- XMI-\=IV1"L=SQ<4!^Q)7P9D*-*>#=#,ZH]CSTR>_=<7OFZ90?A^C;/BGD06@]
- XMHI3O^.14I@W!8[->LMI8(PKM>8QHTN:BT^;H#>=SSW]#DZ[V7#]P:]$!4W[T
- XM:X^Y6UF/>)8]]&,MQ:HQA<GZ=<<<L:S?B.W3\>F%_A-!E1HX/7]IX(FGZ[&L
- XMOQ+O[*))E]\S:+\[J2C2\?N,BM(ZE<9*O@19"6;DJID=[QEC1:E[>#HLE%$!
- XM9B6LZGR8S6VESB>;R)4U_<.%5!S829XG^G'21GH$1D7-_HM#DWU[C$*6"^5J
- XMO)AA6*X^N?MK'?4P_SD@%N\#>Z#S=*_>L<I_A"\=YOP'6!^B/=VY.Z;&^%X_
- XMGZGRDN,%55]?%,DSS[#5I*]IJ8>W3)^WFO(_$LBFS"BF-O:*DCZ4>"#[7DQL
- XM$U)C]3- MG_>$8"> 3MA44!68X"^XG*RAT72YQVNQQ2P=Q*NESCZ\6"S]Q5#
- XM0V$]11E(-D9/A5[?\4 ZDQT\,1JU@RN?X2+WQT8\X3FP0S'%%77A52#,83LU
- XM.#(G@6,]52"?030MF#A,@7T48Q3O0SEN!1+0DE)S,1DT(7P>\46S]U2W4S?8
- XM-VDSN&?AA4,SR$<]-5)=*'R5886197J#DBNRYQUCLA'&)QV'01,SUE/9T3_1
- XML6 *2!K.HD$]M2IC<H*=]R%CPDJNIR%]:'L,M8+^$H)\Z#5/56[)Y7M=L8)K
- XM%X2TMRIW%UYWR(AZ*'J<XRQ>R'^',1KS%T!A87QXL8)3UE_K!WOMQT]=,ADE
- XMU&-0DF))QUX$"$Y+EFUQ\7W )21^R(G=)8SW]SPI5CL_4G_?%5YY2&1BYXR+
- XMQ%#"MQ9;I'^4,S0_MA=*)GII9V]+ED+!)'RZ86ZC6";;^!99!2#69G[Q86V+
- XMAQ0Z5U&$MQFDAU5X=S6VDXN(%WE.H2CRI7<:(5?L6'-+IA([EDB=]Q$$YWSO
- XM5VXK<W^-$7GP,E9A$TSUU27Y-SCFA10V!UL9=BB!Y!3\R(T)*6: %WGQ-%U>
- XM,9*-B'F<AEF<UU-6))/9."C1E%(N8A0:H6)VB)/TZ'X?@B5$4T09%A-*.) O
- XM5GE$TSP5MA(!<HG0<7!1J2?\$R!.-I7&1#13E1XK,28"\GB_%R!_!V'9E1'J
- XM&%\1E!$8&%'$%SB^5A:?,4:^5GWZ<WB% 1Y=B1VXE#>+1Q9?L1EX*29?@I?_
- XMT19I:&P0PA0UD1]T-&Z8EQW<@R_3)2UM4501]39,X87>\8#% 9"YLALNTAU<
- XM!!5/>G<A4!E1%C0I=M19C-L7@48QS1V$_,<1\H"6'\XBQ;,UUGR(J/%Q:!
- XMN)=>\X(DN%S,QYM_B9 GHR?@MX)E6192 Q*U!$M6(X7;99U'DC!K<I9"XF\P
- XM\16*@R-\F!$^N4HYQUMEN8Q*F)T;Q2Q$XY 'Q9.C"4N;8C@*N5&P22GP!EJ-
- XM:9^'V1- B"'A816F]AR%<4<_"(*Z-EZ"AZ#1MX*Q:'"5$CL-@C&2@74KDVL9
- XM^F-;4X=!H#0C649U(J(>]V!TIW(46*(PH:(\%Z(M2F08YGXI*J.;.'U;)))>
- XMYA,YVGIW)BH-]!>?F&5 *F\O2AXJ"E_046/YMHFK4G)=PEJD>2X&I&S4)7W2
- XM)62:"9CCD5"LJ*0 9A2I2#FKJ)PI)8<S.'*#>#HGT8P;@5Z.A8*J,1D]$8,I
- XM$2#U"5[Q\T5H H6=1B@@NJ>!(:5+88/'A$WKQ3_N8QBLL5<I,9DOEX,U1"C*
- XMEH*0FFL;L1XIT4E+@6#,1&K@!1);]B!#^H4QT1%K4:E',1/YN5<\U!'JU&/"
- XMPSH,&CN4AG:40QP=<7U\)VH<-AY),IE1YZA7TQ-)I*=,,9>',EVVA9CX"!UA
- XM(1.KT8W#02ZSE#=_)1T-Y2RY)E#R\VD1U2.K@67\9$^H.CI/AC^FJ:0_4B('
- XMZG3:@5NYJ!N($D?@]1%>83^$FF7B-%L9X6:'(A=#4ZJW5$FJP6@G%!>6HQIV
- XMYG[5%$$ZF)LKHJGA0; *JU@VZ$T>HA/CXW4.ZQ7,1T&G%3&:^A@X<YTHD20#
- XM8S5062!*V6CRV!&:0:T-XT6*]1<7BFB'TDLY<[(Q6R '<Z\,R4P<2:-DP3T:
- XM0:YIIA+A5+084R:=YDOS^FLR.VXA2K6CEK-S5K*-X64FUQ'9XF8@H5ANT:AI
- XMQI7,9)19)H+\X;%/JR6]5+9>IK(RNU,A6J0"LB-WQJ.>5JK7AQ)"FF9_@1*\
- XM>&=(0;;ZX65- 4^HL8E&ETO_&G2C6K08\A]Y1AO3]HQZ-I,8XBEY(3(34A03
- XMI44(FBNV<1_1XW[?0K8T\4 J<39ZEIM#4TFH2[-B$B^FX[@ -4LJP:ZHFTO<
- XM473JQ+N.0F5UFDN)6W09PDS*I;J%(:V:L6V R;S*)AFT(B#-NTKH>$R_,W:B
- XM)DYN=KA@F[PT"FVYE)9/&Q>IP:@[ZBL40[XP>J>SZ9,P>D<%(H:!HF7<4QO7
- XMHA/&1#&&=:\<=$P)6*):5[<@2ANS&CC[&J)SP3W_*+8/=[\TNU9RX4MG2QHN
- XMF\ TX3XF6Z( XVFGA1J?E%CSFBO2:JP/A"]P=*Q/.QJIL6A>QF&PP3!ELD@,
- XM2[\-,3*JT;HE^B"*Q68:VR5Y(<2;9G_CX\.-]DW')';/]$;GTY;/I[.*)L/K
- XM%3&*UI,GFQA(2SR-AF_SN\59;'4)VY,$K*0',7"PZF+ZTB540C&7F+ EP3?(
- XM=+(I ;V0B6AS?*@,"FT?$[$:FV)5FXL'41GNTS>(-BIG++:<,Z<5S)@SL7$.
- XM?)AL=*/\ 4?.,K?L,A=9"7X8.Z-O6VZ<S+D9FAJ5@W+QZKD(VAC<DQ%FRW::
- XMNA:*\A\:["PHNBXSF+KYBR9(EJ<A&FM\Y69.T7U.C'*T$DRQ0A8C8SO?EEX0
- XM]V"]1W#II[K)*J-:NU'K(20;QT]B\H)..R%Y&X8,"H!6&&!/IC.3X2FDW!Y6
- XM(1TCS+=]R+DXBGX)+%5(5LQC-LRP)W9/JQEZMV?Y&Z,JY6^ZM&.#]V0Z44A:
- XMDHN8(3Q?>:2$!#?@XWXN4G(U45^; S=,\<K&MG"V/!Y0!3<Z4VS0484B?9S]
- XM]6%8!-"DN71R"=(7Z4/FY7T2=IK]I1^Z@D*^V3JIFINCT7\/TL"F:&-W,AX6
- XMIXE"_1'(4J#CH45B<SCFY2G#<A_T&QW:X2E!R4\/TBE84;WR9RFF6YG;J1//
- XMZJU(%FA:S3D"Y=/2!M9Z2]&X@H?_V5^&,8=03='=W"R0U%\TC-4D32+(4A2.
- XM:[[1,:$)$AY$EI^8IV6PU[ @M:5LC*&;X8%I"5)GP\XO2FWNEJ6J&S@_QI8(
- XM"D!&:F)AXX1..MG4H<MCA5SWFXU025]*2HA6<81D:A@;4JJC8A6LUF.P.7"^
- XMF5T>H=BDV<B84:H+2$=J2M?B"L0F=I:;8J6U04:76*ZI^:0&U5TGPX]8 99O
- XMUU_62!WXK"+V^(/73*"(W90D_6NM6<!\W1B-8KOA\17A4;UC-"3=R\T<BV!L
- XMO9C727/NFI@8FBOX:;O:G-K0+-@!LE.K1%W4\<VPU-"\55ZJ2W\!4D?WZB:\
- XME=6H7%S%>Z\QFE[&C=6SI53>?4JU@:ZCA1EK-M$8TUMYEGDII7_$JR3M 6<)
- XM_5>TX3YP55L=)R#LC1&\([.^?!)\0C%BV.(E(:VXPM$8 <F<K&SQ*1<>Y:=M
- XM$I0YF*\]@:Z[$])UBMLG(=_\M3N5P2(*OH=XDL>=UQS^BJFI@JH^:H>BS'1D
- XM"B!ST8BR.*MUTQW%T4NQ&I++HQ<E^>=D0J9,<K -C$5%'MW9&".S2;._)^6I
- XMAZS3D<,WE7B<O'^2,Q.<'5Z\(1>%33DP(:U<"CPKLJM.J:=CE!<VDU*B@B?N
- XMN3N!TTN84:LMXNFE%X(+RT6Y6BFX<NI[91+<(X&@'K*G##Q:$L7E31._ <>'
- XM[AG[FUD]E2VP"I+13N?M@^/G4AM6-UH4GA*GWN+MBJJ9W%AB(A>(GJV*UAZY
- XMV!Y0PD#[%Q>+FI_A19)UFYM5QS<^0=)M<[.(*NGK>]#0-\%.\:)'):UOE%+)
- XM=ZT=#AVBTE!&;HOF=!SZKL[_5)TA6%V@LXE36$^&/88A,DLM$H>X,DO ;E2/
- XM16B.KCPDCX-?N4V&M%YQ(U(!_.LK91C3G(-;YB9VE4)TZ>A[_E;F/)46R!_)
- XMO6RV'<;I9.E@Y+JL+.[;]E5M\7(8ZBG&D:>[?/1)!K :LJFV.V%0@=+I>T3J
- XM),^!HUC'HFP*W#]5L:/YO=#"C$DF0K/1@4E16-7F>N*D_-4 [*3'@A)295&6
- XM_HM-'38,4L&7#+9%K\ &SUAMC-H#-[)<P^=O_<2)1KUN5MS,U.^K5%/C ^T8
- XM:A*]]/!4YMDR^[*?+ZX4(_?'TDLZ45]DM:L=OOGN>M>G;Q1A:[Q+1*L("A)\
- XM#H2K1!-TO-<8ZBJPZOMZ+#LN^Z*%G.T)MVG7U_D2J[YRD>HSS"C7-'>< K:-
- XMV*!K-C1*8HK;U![&QQN10\*@3BM)8L[<;F4CAN.GTR*,/UJCT5 4\E<1>DT-
- XM_.5YH1F;J(7<N^X3"8'A.. "M&*;CV$FGL^E*)JYPNJ6'=> '3$A+QP\F#<K
- XM<@EF$DHPP9S@*]C!)I#7BZIQTL2FR;__U2)B!6]2<N2KQ56&5I:81DN#B6L/
- XMIDU)*YW Y%P9HFA>&(%N$0H:YZDH@Z*@"X>!XI"$+W<6I-X0#%""J;8$N2,$
- XMY=1=H\A_3I"T_)4>^*[<#Q#4'^7-//6/85);KHEIRDU<J7_DG"Y89HA#%APU
- XM7X)SA<$B"*+8DF-H@9)E*W'!1)48= 3-*@F_ 2W9GD/Q1?A3HMIJP"'_U4'J
- XM0'1"55*1#PR*M"#"V)(_2L*R:BQ)PD )MZ4@6^H42>-6;<+TD83VT18D'+=#
- XM+OSOK\04)*$&2T66^( K[0DJP0 E.3;A*2D)]BH':K"/\ -C@JB;9BTNGLP6
- XM7R=99N&MRX5;J2F4*K9DH()6#EP/!^>TJ!/%(AG6'9=!59>')'B[767A1LL1
- XM:A0_T$3LJB:2J$+(^ !70LDMT#$M]SA6BEY@<BMC?XT[/17.:L.,<E6W!<!0
- XMCK6@6(922FD/KB[9N2'[@0XQ'ZY8"SVF9<44OG,V.%E]$15\@W>8&(,E'<H;
- XMK)!6+^W%"(AS55^80E[P'Y4I7L&$!R,M;A:U6W (Z3YX,0RE$AJ*'IEA[DL8
- XM23#WL1'8U33A78R/0)49CW) I!K?2#3=01>JACBFY\SA<>!'I@5XE35\$Q.V
- XMG7^P,H@'I-$N_-*1"%.+8&.<*%Y@D".UN&26VN(G@(-W!:W(5.26A6\J=%<H
- XMPTBF7<79\!OKZW"2[;Q9#=O5MM:8[,(B"3'^@;-LIQMV'U%*#+:KL,T$--=S
- XM4EG3<5C%)&5)I9V%D.!8N0 @H0]A91.(9<4^%FJ8?GRQ9H4EF:7A^HRA EKE
- XM33>D"7L5T&P;B$LS90_V=*]?MG"*29HY?#?&2<0>C6/#($5"ZE]SP_*<G08T
- XMVF!)0=M0".HE@J.HEIRJ3T[T)URI)IJ4U :B2D4?#%JN2C,9!H(W>NB+<2-B
- XMT) CXK*NP.08#U@Z,YBG.*BD,K=B?@Q_J&HZI+G8+EN#1$+/DZDJ$8)!T4#!
- XM :J"0D18/(\QZPP(*A,7 EL PU#'81XUL,*0S4QCK5DZ,.%:% ;+84!63=Q1
- XM7^2D\L2.>P.1/,2VN6A$)A82D@;2DL@)5*H<SRJ(7"/N."*( C3R-]4LQ; ;
- XM2!8\MHU%-#?SL4.N%,'PLC!$2O@\H N6G#AYXV^6G#E*9CNQ28&SP//!.F2X
- XM\0D/TKW=&'0#__(-NS$[YFC5:(A@4KUB".E99YN$1:(;)QDW-,HJV6,ETN#8
- XMMA3S)IH2-)J21T*;@4BIP5"267L(0$%/)41)KX!NZ%"$W#9P*$(FLP8C)B=$
- XM]OF2=K(8R:/0Y4<,1NC21]K1=:T%G>-D7L:(2%5/DD_:&/*7)Q?E,.I=#<E*
- XMVDFJXQD$9)RT'98R& T\.QDE6V$Z69&;,IV02>JA<+9(I30X2])LN*Z,X&[\
- XMD*'$$%B241Z6*RF.-D-Y&Y"?S;%U"-+0P916@F 2/B6SO9 +-,XP0_>!=AB"
- XM:36?9#8TVID1I#+>KY<I"6/)' "0ZQ(3U3)%ODK,L$CZT)MX72O(8R5+V8$)
- XM0<XK7!7?1FFLH !6N231&4(Y%H@Z;8G5UX6 Q40R"EA$-8:5+J0OXZ4#^3IX
- XMXT/8,/4%G;8.'UR79R<\K: 6^1^@Q*1Y40VS^XA P?58:IP-$TD7:#8&J+.7
- XM9C86[-EK(:I+=!^KE7)HT:-\$"-S7L8,EX./M)=F0D=,CRA1IEF)RCX#+11F
- XMKU!+*"F;81]:T23;C'<G?Q$0^_$N?$;HNWEF991DCY[Q%U+(_0)1MT13Q3J<
- XMP1MP"1N16+;R(@8OP,A QH?:.B&(<7PPFF>2-6'5U@2;0@A6;3-;4M_&QR^T
- XM)05F?'!&6Y(V!XX.VX@7<?*4FN*@Y/2-H E8A\SJP<V"B!7N9H"<"5WIB74[
- XM;'7%#$8K.S-D\W#BBJX$-O4>#SE9_!%6D:A&H^)@5>*T)993B26LH[47:58A
- XMBQD/S-+XF(LXK! -Z<05*1#1#$I4==>>&%5:<LHFC4&L8'*R% <T_!]:Q=R9
- XMLX3%M^(:&F,3* '<Z*RC=U2&V*G"%7KS8ZT6?Z4::4->D"^7[VWP+].)$,Z(
- XM]TDSZH%VHKT7*-6\3 !$(UNGP&D[B(D84%6DRU]K 244M3'S'4?<",,ILV5B
- XMCAG>=YG.CJAP'P.2D>&)[I:_* 1U:$4):W;6AMIY_'J?DQ)QXXK'19DJ9/^Z
- XM"]+A1YYC5TW"^)*O@AL&17ZU:*%0"\9DE<3>[4L//RA+^)HL%R4 TC]$$C5Q
- XM,N)!/<%FML/BJ6O4 5TQO-YAGJZ%-?HB&$3/#0J*\7C<0O^(0@3)0+BIFD0T
- XMX!?_<2^%D!.5!Q5F>GAHG7(]KQ Q9"#Q]-;"2PIMHDAH,;W(&N0982<$7)ES
- XMZHR");O%.W1;8L((8X2,6)V7P"3T(".D3XG0H00(T2E90I$6:RQW+,'1.(KQ
- XM173F7VDA,J*VL#NLQ#!.0E_*CZ(P<=2$2[B (L2% E8Q[;0K^3R%0+'NGM]
- XM\8G&A3M6"0:'I2O3=Y"&.)J2/O@LHUW%K&^#107U4+OR2.$@)5PC@_*OZ$2/
- XMX.B"B'JB7Q_BM4'/VA(3,!DJQ#HY@9*JQ4<X'!A<LIH1 B1.=#>,@!X9DY,
- XM+&VA86&$Y\>8:-S02E8'A&6V!:A8.5)#4.. 1X(HE+7,HT'YD8O("[0E7"5/
- XM%Y8@<^5?BS7))IE)N\[DN-:BA+F JX3TK<#3$DW628C@7 LMI\"?BU 3_@S(
- XM8JBL8Y94$X::@MX*+H2H/X.@-##/=KIP%D,]F$FB_02!P#$3#RI$]14$1<Q$
- XMA .R-6H&2M,4#E*%I)%J4BU )O_+(5;.,SP<[S<]>L?S"A7IKUI0SDD1-P_*
- XMK1 >/R*,/# B4BPVDU!-(VUJ:O *.O.!4 63&'7@Q3.\AH<U*9P"1RADS^*)
- XM0!N[41P41I< %FH$,*2Q,((0S,):S2.+!-K,C+8&;0;)$MDY_^,[0 RWT#,\
- XMA4RH)HT$0*P(J"&!(,8MH1\3$9J\B^]D6"49_M@)9F5@Q">(H1DTB<+ B]ZD
- XMFHU5%O(;-NL&B:LA8F1IUM"*,\S37HU<^D(8[=6@1S,@Z_HY&N6F9>01>S0S
- XMRT;ETP_/"H,H#&ND.=8&Q*"'#T1 G"K><-"& FHCKM<">_U5[+E>=.MO39&K
- XM(XW]UKT$4)9KOQL*<>&K^E6<4!]_:Y["&+XDIRB8WJJ"-(-(#4M>(J$X">S%
- XM$0!'<A49ER,Q* KA&E5, K# (%M%"'*%AA!? 2)7B$G.+KGR,L] QAX']B"M
- XMC85><A!O:N(\Q+OC=0BVVA$N'5HY"!>R!#(Z3FV%E]0"MM[<AK5QKP/FI=*\
- XMA=OD!#-AIAM6!6$0Y:.P/ WV*3QY:_Q=#8#B>P*6]KL_915L<4,]%1>D%;09
- XM+&OD+^S!,H.]<*RX(JXN)62]F\Y3'/#=&PT>@$M<"B./6*EH!O/R>?]KLKD4
- XMU)#Y,-T$6QNP8VOX6')Z5\;74-PR]M"\+,=9@L)R(NW*5&X6GB@[-TMI0$].
- XMQ!)<QM<TU&LE4@&,.2DQ-(9/Z$PKI1$*#<#+B?'A*7Z_6#-9;BB:M7B8I]#.
- XM$N9*T:3,I"VN%>UT%06.R$)-2K<J2I-V^WF*WU#KOA\["[6^AN&$VIH8)TO@
- XM]TN%YP0T'1'X%U"^F]:)2[=CLAR>[*<1Q.4!<GG]#O/8#C9[WTC3FTV1$ 9V
- XMZ3K4Y/)BXJ@5*44/J^69#N9A1E[26DU6QLX>F)&!='PH:""V-9%,*+P5JAW,
- XMCE4JM^G%PV14IDC7:@C<2F^ YEHYI*]":8(;L'*W_&.Z)*UKY<M*Q41A/3F1
- XM-%S;W[AF1DI.=(IIMJ3,6L;35@!$R/,U1F[2\I>2!I5,BVQB%"40('7:7P/2
- XM+&CN\4W<UEHN%&L;0!<*[J(V4ZK0#*/.-%$NQ7@P9+G$;S(8?Z)G4JW 51 O
- XM%^M0M6Y%#V-N<&(75&W7,@NJ]OU$G)[QH3\ME[RZ[G" QI?<\ZOC*SA-Q.K*
- XM=*^7X(LH?^Z$FJ6XQ9DX(0?QH?D2;$DE%G0341J$07Y6PTHU78#R="F9FJ /
- XM$TSG99A5Q$W2&]W%K?ZA=]R'>8L:+A>FC8^9!CX^$5M8A[0:QS(=]$L.K9/O
- XM264V(N^*G8UWZ,XZ'D%I= B.(+50!D<XQ8:&([(+X84WHR339,B9A;PXU-;0
- XM<6>&1KBW1<-N<D:'Q3E%KK_!DKV0&G#B[(58\N=*D*UC12-"KVO!$1]/SP1-
- XMX+MF^J[KXJ^I9%H>BM/5&(9O1,&SZ<:H05\."6$P;G$C30/E^E88**%/7F[^
- XM."<\%\\:FJH+3WAJAG$1MPJZ^@?$=LE\*&JXB8K1O* ID6CW7H-(3&]YK9AR
- XM1/]B 9^NN)J 7HG(IEW2A/&T;W\A0WN7R7&)R[5T%PJW58GFQ:?PV2/U\^;"
- XM2Y4K]NOE]1<;NT#E7HX]<7JB F,U/5=YM)VOV5G0\ 1_O-HPH(H"A! 66N
- XMH*JNE56([-R3*S9XX>V*Y.D4QL-? *!;DY^@8!8L':T)TC QO"[EH!5[U!5:
- XM)EIAOY+!UV0ZQE 3!^$=J\*%CFFA%:M958<+%_YV.5%[0BU]B]UD;WKP)>.4
- XMAA+9OM=6.NA'T!/9 _;)IA+V&!LN<BN._@,K@:D/0U\6#]IZ+RLT%%W1 W.G
- XMOMP*I3VBRL,HJ*6'FC[#=_(P8D\A+I3RT&*&&[Y$K1 &[EW.A5(B0A/3W20@
- XM8<>^2O\BA?QK?-'$N8+IOL*V01]&">\#2-XP8=3$:.F$_E)Y@E]Y:+:9XD7!
- XM'-Z+8^(M/7BYK!0P^HN)D _%# MBXMH3)60>L0/Y:8Q\J9-2+O506I08=@#%
- XM-8;IMCUM&EUTV]=DNH3/+;C3$N8A !+5 UOK$%HULAT749ZG &K'M;<WM6.#
- XM!P[5<?'%Q>>8JB'=3Z)G]$33326UUO[R#+A;?*G=-=: ;S39:$"+AQUR[1RA
- XM#[G/BT#DLOO]_@WBTQ.%8<+"XDT6(AZ/.P-;J7BY=%!QK(H?3;]=NR2YZ,"+
- XM\T7*%(S2Q3FRXSY(,1I!:G7)Y65<7HPF,U\.,7M#8O/MO.;D"-LGE-H,X4W(
- XMI<'8+"A;K72S3H3R1CD2&0_>X"Y:1F^*;TZ>-;<JT,C$XCN3#\HVP;GV"2J3
- XM+OO$+ZA:,OM'R$M 9D74]2;*+.H2D#YA(2>SE;RY1,S)"S$O)J-&Q))R2I#2
- XMX:FA$9"&3D0I(QQ3B)19/*F.=_VX5>%N?>-PD;RC47V\N!";'K;&BQ-^?"?Q
- XMF!:2(H3=;5C@S'I.[P(B/:<AGJ(3)CS,I]<"I S(9O\B= AU;%;##LJ"2^)>
- XM\R(Q.R>8'Q,Y/4=S,\)JYK(+30H;9L:$5DZ50ZG"%;?]#9>0J.W<[$3!+3EQ
- XMH+C#@/N<(6U;X;[;]<7<Y6BX?:_G=$.TS#!U15HQ7+2$L!&FS*_Y=HR8Q7-N
- XM[.<6%G6GKJ09+/T ARD9>1 Q\SFY\1.)!_O*FE>=+>2K,P/AXMB>5P.#2E77
- XM,R:NC$>S_6*>CGUWQIE4N92,:E1%;,RH=4K*Y3"NH+0[.B#J&H;H<M)RY^&@
- XMR(IBANYV(<+XC-B=PP&M"<' P)XN>L*D[M(WNM5FX'.YA0,"MQ\+/"I?X2!X
- XM7@3D!6&J,!$UP^8TKCN((H@*)67:YFZ3LM]8"$U\O1LYKK@ 52A..3%(=(
- XM)5^]Q)9.(QG%L')I<V%8<2"/8@LBZ5WX')$D0CQ7F;XAMBU@00U6B3JZJ,@(
- XM&"%U>M00T&<W4H)5&5B/PL?-#OZB*2Q,36&IAAJX:HUG:!) 5;!H':V.5PCJ
- XM^_2B5LM6"8ON)S$DGD;]-28U8[@5HZ0.LM3 1AF19^6):)"BOV-SW(YFM*D
- XM",67 XZUB@BB58N%GXZO"X^CE&I$IC58->@#416K5->ZZY#^(@>78:@>HKV2
- XM2JTQ%LUK&!%Q 4=9'!M4@KX^*G#Y1TRNH6Z582T4:L(2&7@,(S\^!??Z4>,#
- XMN>[6H@.5-&"7<!S8!5[,-0XEO48%BLHOP#5#31BQ>OM1E/1ZQR"JNY;5Z\4T
- XM0XQ?52<DQU?EFT 50H@DM&K/N.IZ<:\RE6F,C)3Q0P)&B! A+_2;;*(1LC.^
- XMRS/!@W6ZO G9K^I5PX6OV%F\(KM25JMU5]0J]4L?\2$#W@\V1%D;U@FAESB+
- XMI!%8M:IMRT:LX0W35(PTZ847-;QT9=A$\E5A'*Q)D:D@1N$,%5!OLBV.T+&T
- XMM8:0.!ZT!%6<#='1J;5TU<ZJ-X:RRN-,K1/P=*0;J<G:L/I-61&UQ06JZ#1-
- XM]L&(BDY#&^!UDB#9D:K&X&D=6FC5JD-AJ$V/:S\'TZ$P4@>Q'CXK^T(<.[=*
- XM7!@JZ"O38:1IUX=' 7K:A>8#JC\98-ZA&Q [;7\QA*2F#;B_*F9]0J"ZXM
- XM1I1*2[*X<;J(&*CS)V,D)%M!YA+?*E64(GE7D2K0%&UB%R+">BTG,"5ZKHXU
- XMV^JDM"N!*>G8,,(4J41(TVNJP D>!:;,M:% ]*3WC% -6.)_;J(DU%X%IN8P
- XM"58E6N$$9S<[O%#6\AU* GOA%9\I7$MU7L();0=27.]RC#MP(-%#*KT+<&,=
- XMKG+- H5,=M^RNW3@"]\!KQ78[!#/@'OD;8KP-E*?'W%Y4=RD5 >;.E&ZRW?Z
- XM1@CMU3M(::^0P0TR!TFO H6[[N_RN5\MQWV2TGLA@U] )!TY&.Y^?0U ZD)0
- XMD*B2*Z1TI93>VWN,..^7-;RS=_" WHO$OM[78MJJ/3@%:=6<:C%$U%_M6?0"
- XM*BG/.$';/?$'DSVL2@34'#KHB<_7PH%*AI&1&]=M"WICDM627)D41S'>U]H%
- XM>18@&:OGYGX]'5PL>8BVJ"#'RXU)T*8 9:N,+>X:,^RK@#U5HJ(L\8>',[>=
- XM!$ F*K$"-^44.=>MV]K__!S/XY$/[@%.*7+-(,\IDHF[K@=*<5_SA.]8K[_H
- XM@-_7GX<Y1GEU 2KS]:4L\/2]-3)XT!-"4>6\C.\[%5KFZR"LY>/[-U <&:[#
- XMI?=I27U;Y3-_[R="*6PXS]-&\-M<*^'_2IAT>/)H+VI%7^>XMR+O3$>>Z5/=
- XMVM"\E;R]%K9)DZ77$X7VWNN**V0A:MK9-=?"UL"3?,=0&1C)BZ*Q+L^(V7*]
- XM3NX*LJ:Y:B14D"J)2IE?9:KKJ+EZ>TA44:R_;]6A_:_N5HK [PC]XX#6Y5KA
- XM]PLGRW!A ;P8!O9.OU+:I&6:^UHWB%=R93J\RWZS4X]R7T=#4T:QBZ6A6+6Q
- XM8$&%^5W )4\16%A$E[?I-I-(^7&(89U,&I+P4H[=-4TK->9:X,%ZZY!FZ#^Q
- XM:<<PXJ5>$T%I:(8N33O9XQ).TH[U [G*^(A4CB4U##KE\+^. D_75'C0-5S$
- XM:9JLY *K] VM;"1&<>83K;'X3RDX7(&;Q->B1T21"DF"W@K<(,7UD0$XAOC#
- XM6!;WE5+$5_<T%!!B?[7E>=V+ZS.29,O==4T([+1BF+'RGV):QK?P2 PHG8US
- XM%,>E4T6.2V067VG;-+P3U9\(CC;=%I_'V25(A,-H=,U$7!D9,G 0'-4&H/Q1
- XMZB)0P'+O%!W9OF-H.ZQI/&-D2\AUR?-MLC@7*>[ W<J5.W_T<8J.AV0Z?RVN
- XMA9TW <#"#I$L1EK'0I8=@\P?59)R'R-'YVW6&N;S3DA9"91H6KFJ?!X+#,ZJ
- XM39T#9UPV?DQ+WRS1)-G 6N\2#D. (07B*T=$TR[O=K+;^+C0=<SV;NBJ-KTV
- XM="$D.C0MDXQ\E)0/[E0=]U6VS-P>M(SO4^[!\<H@&N$#"1$-7<4(B<(2BJ<S
- XMFI$RBSQH),!''@1C)\G[(!X1^%"CR2='*N-!)(O1HC(RVQP<<%9W[&VMT5#-
- XMN=:X]W2<D?$[NFG/0Q)!/?<",T^&%QT:D8T'+K&<!L*^W(D]4BG3LL5 G&EC
- XMNHB,%%MP; HUR*YN+AI)V?2JDR/^B;#(IZ?F R2G1$#3DLSOGLSHSL7?O-*%
- XMZDY)D)EJ.8P4V&$X6J?1!W7A+,.PFLR,$#I[I(L^'6^FYT?,"G+-5L0JK(JM
- XM4XDP*:5?Q3C(BGP%GW(: V9MQER'@5N=QI%W$IJ[ "M6O,_+H,'THAI=U@S2
- XML+IDTTLRZRF%D+(#<\6R?,S\KDFCYV5,N+27DE: S)W\.(* O>78;O:REV.%
- XM )YF7".W8G*M+Q#=O(0FID!9L]]*R6)N8;EN#AHI<:32#YZQS>KZY*0SM@ZQ
- XMK\4K#)GP%B#T*NFS>+IUOVR$)CG0*(F2E3!C4U241LTWWL+XVGW%BG"JL4!Y
- XMEV3/G(H=D7HBHBK@K\SXT>QIS_!I]DN$.AUZ+X5)D_W#L&69T5:F*7EF91.^
- XMX$H\8\M>0HM>3#+9>)OJ7[C,D1[Z]OSEYDXSX2T\^5Z9USW:P.A/+Q9#(8IH
- XMX,NMF?-W4PHZ6SR4$ ']+Y+KUU9UF32SC ]+E!7&ED:0:G2$Z,=>0K+":<,<
- XMO;JSETN5W<V=)+3/SLZB^9C /F9<;=4((5D/_;*>0Z@R$OK+QIKNO7B:><V>
- XM;GSJ?*:9>+4AQ*5#VFIC7+> 5IMVDOAQFV=<HTM_+<$G;E%LKU4%<$-JF09>
- XMN$E?Z7@CM2V&%K2:UU)U&!%%;X6>6FW8M;B8]M[_+G^#]5#S!G;'%>JFT]1_
- XM>AVN:D;!54K5-(D<E*%5U.N9]2B@GJDFU@-+>I/N_Q#+D[C_KG7+^VM :Y<S
- XMJY'*S0S83G77.,.AQTOMW]OHOIH%0E+J*.[#6Z2+B\U9$#/ $PJJ698J$^<*
- XM:?-__O+.KKTUA[>.U<T+O,Y(>TWNSCF+>QP8[\-W_V\]KYLK:V[EEGSY7HZ4
- XMO!@(IIB5X0?073&_T7)Q@46'Q)@-!P3JLE44@(#;QR F[FVI[4K6T@^]\N
- XMMG=9%2&"XB89M%<<'$.E_>U_/)_I %D]" F@M1*7)7(E$<1@DS5R-020A +*
- XM#N?&C& +059D@9*0:7Q5Y0[@-DI "WL);G(\9#T38,QFB$R 'T.GDP "0N0/
- XM*#<RD#\#X'(UH+0MNY75PJ0-;(*<_N<S7&^L&0^8OL%7S81%-[@,;.)26((#
- XMPB^^Q/' ^\%OYT+.\5ZI("<@_!8VG&GP&VG04LEP\-7IM5[=?QF@9U&VJ(!*
- XMS.K@8*F ODSA\%>-9?W?[6 N"%B51]1@ )YL;X;^YE:)>?K;".B:H2YFX%W3
- XMP'$LZX+BA@0F']P5(UB;\0>)X :HR8V!3># YL7]@8^!@-59<8+_5?Z0"7)7
- XM8A69 0L'@!+&@&\E$0 10 D+0,X=*!!K4\>H?' *<XN%^/"%2T)SAB:]N>
- XM(.L%% I"FA(,-D(&A']0(NP>'<+'TZ9,2TB,RM<A"&)'VB3Q1?0Y9X)[XS_
- XM9: 8XZ0B)"=>W>P%]\!"FE<O%A-Q&]_@],8XM#,QGWYWV3AF_ITKEOA9>=62
- XM[*;?E0?6"Z=D?<@G]0.[8RE=?.9/TO-%S$\PGMB'$)A)_$+E,"(U2"V2]V-S
- XM2$@LF)<W+5E@7IZ 9-S-(N!,A1*ED!/^!)#Q(#D+1(9\$C>Q'KO@,(:7/1F5
- XM58!@YW1>S '_HGD=4?E=]0%$35/5QV& 4JB#+,+"4WWP),I=U91#P66PB2<%
- XME!%"HMW/D.2T99)(: %OD'HECWVBH&AJ_0EXD-X9!G-)-SC5P4(GH6HAE6P/
- XMF4$2IVLX-_Y@5;$%X7SJG8_0X(F#Z=:# Q<2=I(!VP<RU8522!?5##EB[^!_
- XMX(@1>4T/=2(@92C0B;\QZWPI($<>)+X].-W2!,=Q5$R0R(.C'?06Z$;XE(@<
- XM>,Q!6?!MN @OB$A5 V:&ME[O$HA0+KW+5[#2V2>RQ$D012TC=$IQ]2,4*W,?
- X,>$$00 81P4.@ "@
- X
- Xend
- SHAR_EOF
- chmod 0666 shuttle.uuencoded || echo "restore of shuttle.uuencoded fails"
- set `wc -c shuttle.uuencoded`;Sum=$1
- if test "$Sum" != "17714"
- then echo original size 17714, current size $Sum;fi
- fi
- if test -f xhpgl.1; then echo "File xhpgl.1 exists"; else
- echo "x - extracting xhpgl.1 (Text)"
- sed 's/^X//' << 'SHAR_EOF' > xhpgl.1 &&
- X.TH XHPGL 1 "Dec 1990" "Version 2.0"
- X.SH NAME
- Xxhpgl \- HPGL version 7470a Xwindow display program
- X.SH SYNOPSIS
- X.B xhpgl
- X-cf [color_file] -fn [font] -geom [window geometry] file
- X.SH DESCRIPTION
- X.I xhpgl
- Xis an Xwindow display program that will read a file in HPGL syntax and
- Xdisplay it on a X server DISPLAY.
- X.I xhpgl
- Xis compatible with X11. The HPGL Syntax is restricted to that
- Xdescribed in the 7470A manual. Most of the commands are supported,
- Xbut some are not (see supported commands).
- X
- X.I Xhpgl
- Xalso has some added features.
- X.I Xhpgl
- Xsupports up to 8 different pens where the 7470A routine only supports 2.
- XThe color/pen assignments are user definable. All pen colors are read from
- Xa file called $HOME/.hpcolors. The colors supported are: black, red, green,
- Xblue, yellow, cyan, magenta, gold, maroon, turquoise, violet, orange and white.
- XThe .hpcolors file is of the form "pen# color". Only pens 1 to 8 are used.
- Xan error will occur if a pen number larger than 8 is given. If no color
- Xfile is found the program will display a message and use internal values.
- XThe -cf color_file option may be used to over-ride the default color file
- Xon a case by case bases.
- X
- XThe text used in
- X.I xhpgl
- Xis of fixed size. That means that there is no scaling or slanting of text
- Xallowed. To help make text more usable
- X.I xhpgl
- Xwill select a font based on the window size. Also, the -fn
- Xoption may be used to specify any user font instead of the default selection.
- X
- X.I Xhpgl
- Xhas simple commands built into it for controlling the display window. 'z' allows
- Xthe user to zoom into a portion of the xhpgl display. 'u'
- Xunzooms, effectivly quadrupling the area shown. 'o' returns to the
- Xoriginal display, 'r' redraws the screen, and 'q' quits the program.
- XAll other keys and mouse activity are ignored.
- X.SH OPTIONS
- X.I xhpgl
- Xwill take any font supplied by the user. The -fn parameter is used for this
- Xpurpose.
- X.I xhpgl
- Xwill take only one file in HPGL syntax at a time and display it.
- XThe -cf color_file option is used to instruct
- X.I xhpgl
- Xto use a different color file other than $HOME/.hpcolors.
- X
- X.SH SUPPORTED COMMANDS
- X.I xhpgl
- Xwill recognize and execute the following HPGL commands:
- XLT, LB, PA, PR, PU, PD, IN, DF, SP, and SC.
- XAll others are read and accepted however no action will be taken.
- X
- X.SH AUTHOR
- XOriginal xhpgl program: Randy L. Yach
- X.br
- XPort to X11: Andrew Gerber (gerber@solbourne.com)
- X.br
- XParser: Dieter Muller (dworkin@solbourne.com)
- SHAR_EOF
- chmod 0644 xhpgl.1 || echo "restore of xhpgl.1 fails"
- set `wc -c xhpgl.1`;Sum=$1
- if test "$Sum" != "2448"
- then echo original size 2448, current size $Sum;fi
- fi
- exit 0
-
- --
- dan
- ----------------------------------------------------
- O'Reilly && Associates argv@sun.com / argv@ora.com
- Opinions expressed reflect those of the author only.
-