home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / x / volume10 / xhpgl / part02 < prev    next >
Internet Message Format  |  1990-12-18  |  41KB

  1. Path: uunet!lll-winken!sun-barr!newstop!exodus!sushi.Solbourne.COM
  2. From: gerber@sushi.Solbourne.COM (Andrew Gerber)
  3. Newsgroups: comp.sources.x
  4. Subject: v10i098: hpgl -- HPGL for X11, Part02/02
  5. Message-ID: <4813@exodus.Eng.Sun.COM>
  6. Date: 19 Dec 90 02:43:16 GMT
  7. References: <csx-10i097:xhpgl@uunet.UU.NET>
  8. Sender: news@exodus.Eng.Sun.COM
  9. Lines: 1220
  10. Approved: argv@sun.com
  11.  
  12. Submitted-by: gerber@sushi.Solbourne.COM (Andrew Gerber)
  13. Posting-number: Volume 10, Issue 98
  14. Archive-name: xhpgl/part02
  15.  
  16.  
  17. ---- Cut Here and unpack ----
  18. #!/bin/sh
  19. # shar:    Shell Archiver  (v1.22)
  20. #
  21. #    Run the following text with /bin/sh to create:
  22. #      parse.c
  23. #      pc.xw
  24. #      shuttle.uuencoded
  25. #      xhpgl.1
  26. #
  27. if test -f parse.c; then echo "File parse.c exists"; else
  28. echo "x - extracting parse.c (Text)"
  29. sed 's/^X//' << 'SHAR_EOF' > parse.c &&
  30. X/*
  31. X * parse.c -- This is a hand-coded HPGL parser, to see if I can get
  32. X *            somewhat better performance than the YACC parser gives
  33. X *            me.
  34. X *
  35. X * Author  : Dieter Muller
  36. X * Ported to X11 & Line Type fixes: Andy Gerber            
  37. X * Created : Wed Oct 31 21:13:38 1990
  38. X */
  39. X
  40. X/* Header Files */
  41. X
  42. X#include <stdio.h>
  43. X#include <math.h>
  44. X#include <varargs.h>
  45. X#include <sys/param.h>
  46. X#include <X11/X.h>
  47. X#include <X11/Xlib.h>
  48. X#include <math.h>
  49. X# include "y.tab.h"        /* as generated by the original grammar */
  50. X
  51. X/*   X windows variables. */
  52. Xextern XColor pen[];
  53. Xextern Window main_window;
  54. Xextern Font text_font;
  55. Xextern XFontStruct *font_info;
  56. Xextern short font_offset;
  57. Xextern GC gc;
  58. Xextern Display *dpy;
  59. Xextern int span_count;
  60. Xextern initialize_plotter();
  61. Xextern int dont_scale;      /* should we scale coordinates? Not done if zooming */
  62. Xextern int minWidth,minHeight;  /* size of X window for plotting */
  63. X/* Macro Definitions */
  64. X
  65. X/* Variable Definitions */
  66. X
  67. XYYSTYPE yylval;
  68. Xdouble xScale = 1.0;
  69. Xdouble yScale = 1.0;
  70. Xstatic int pushed_token = -1;
  71. X
  72. X/* Function Declarations */
  73. X
  74. Xvoid unget_token ();
  75. Xint next_token ();
  76. Xvoid eat_to_semi ();
  77. Xvoid ignored ();
  78. Xvoid error ();
  79. Xint yywrap ();
  80. Xvoid draw_line ();
  81. Xvoid draw_rectangle();
  82. Xvoid draw_text ();
  83. Xvoid scale_coord ();
  84. Xint get_coord_pair ();
  85. Xvoid coord_list ();
  86. Xvoid yyparse ();
  87. Xvoid line_type_change();
  88. X
  89. X/* pattern definitions for drawing dashed lines */
  90. X/* default |________|  */
  91. X/* line 0  |        |  */
  92. X/* line 1  |_       |  */
  93. X/* line 2  |____    |  */
  94. X/* line 3  |______  |  */
  95. X/* line 4  |______ _|  */
  96. X/* line 5  |_____ __|  */
  97. X/* line 6  |____ _ _|  */
  98. X
  99. Xstatic unsigned char line_types[][6] = {
  100. X  {1, 15},
  101. X  {1, 15},
  102. X  {8, 8},
  103. X  {12, 4},
  104. X  {13, 1, 1, 1},
  105. X  {12, 1, 2, 1},
  106. X  {9, 1, 2, 1, 2, 1}
  107. X};
  108. X
  109. Xstatic int line_type_elements[] = {2, 2, 2, 2, 4, 4, 6};
  110. X
  111. X
  112. X/**********************************************************************
  113. X *     yyparse () --- Read HPGL statements, drawing the results as we
  114. X *                    go.
  115. X */
  116. X
  117. Xvoid yyparse ()
  118. X{
  119. X    extern FILE    * yyin;
  120. X    extern YYSTYPE   yylval;
  121. X    extern char      yytext [];
  122. X    extern int       absolute;
  123. X    extern int       pen_down;
  124. X    extern int       is_color;
  125. X    extern int       cur_pen;
  126. X    extern int       rectangle;
  127. X
  128. X    int token;
  129. X    
  130. X    while ((token = next_token ()) > 0)
  131. X      {
  132. X/*     getc(stdin);
  133. X    printf("%s", yytext);
  134. X*/
  135. X    switch (token)
  136. X    {
  137. X      case LT:
  138. X        line_type_change();
  139. X        break;
  140. X      case LB:
  141. X        draw_text (yylval.sb);
  142. X        break;
  143. X      case PA:
  144. X        absolute = 1;
  145. X        coord_list ();
  146. X        break;
  147. X      case PR:
  148. X        absolute = 0;
  149. X        coord_list ();
  150. X        break;
  151. X      case PU:
  152. X        pen_down = 0;
  153. X        coord_list ();
  154. X        break;
  155. X      case PD:
  156. X        pen_down = 1;
  157. X        coord_list ();
  158. X        break;
  159. X      case EA:
  160. X        /* draw a rectangle */
  161. X        rectangle = 1;
  162. X        coord_list();
  163. X        rectangle = 0;
  164. X        break;
  165. X      case RA:
  166. X        /* This is a filled rectangle, not supported */
  167. X        rectangle = 1;
  168. X        coord_list();
  169. X        rectangle = 0;
  170. X        break;
  171. X      case SP:
  172. X        if (is_color)
  173. X          {
  174. X        cur_pen = pen[yylval.i].pixel; 
  175. X        XSetForeground(dpy, gc, cur_pen); 
  176. X          }
  177. X        break;
  178. X      case SC:
  179. X        scale_coord ();
  180. X        break;
  181. X      case RESET:
  182. X        initialize_plotter ();
  183. X        break;
  184. X      case SEMICOLON:
  185. X        break;
  186. X      case EAT_TO_SEMI:
  187. X        eat_to_semi();
  188. X        break;
  189. X      default:
  190. X        error ("Unexpected token %d, symbol `%s'\n", token, yytext);
  191. X        /*NOTREACHED*/
  192. X    }
  193. X    }
  194. X
  195. X    return;
  196. X}    /* end of yyparse () */
  197. X
  198. X/**********************************************************************
  199. X *     line_type_change() --- change line type
  200. X *
  201. X *
  202. X * Handle getting a LT changes, sees if line type was specified
  203. X */
  204. X
  205. Xvoid line_type_change()
  206. X{
  207. X  int token;
  208. X  int new_lt;
  209. X  int result;
  210. X  XGCValues gc_vals;
  211. X  new_lt = -1;
  212. X  result = 0;
  213. X  token = next_token ();
  214. X  if (token == DIGIT)
  215. X    {
  216. X      new_lt = yylval.i;
  217. X      token = next_token (token);
  218. X      
  219. X      if (token != SEMICOLON)
  220. X    {
  221. X      error ("Unexpected token %d, symbol `%s'\n", token, yytext);
  222. X      eat_to_semi();
  223. X    }    
  224. X      result = 1;
  225. X    }
  226. X  else if (token == SEMICOLON)
  227. X    {
  228. X      new_lt = -99;
  229. X      result = 1;
  230. X    }
  231. X
  232. X  if (new_lt == -99)
  233. X    {
  234. X      gc_vals.line_style = LineSolid;
  235. X      XChangeGC(dpy, gc, GCLineStyle, &gc_vals);
  236. X    }
  237. X  else if (new_lt >= 0 && new_lt <= 6)
  238. X    {
  239. X      gc_vals.line_style = LineOnOffDash;
  240. X      XChangeGC(dpy, gc, GCLineStyle, &gc_vals);
  241. X      XSetDashes(dpy, gc, 0, line_types[new_lt], line_type_elements[new_lt]);
  242. X    }
  243. X
  244. X  if (!result)
  245. X    {
  246. X    unget_token (token);
  247. X    eat_to_semi ();
  248. X    }
  249. X      
  250. X}
  251. X
  252. X/**********************************************************************
  253. X *     coord_list () --- Handle parsing an optional list of
  254. X *                       coordinates.
  255. X *
  256. X * A list of coordinates looks like INT, INT [, INT, INT].  Basically,
  257. X * coordinate pairs separated by commas.
  258. X */
  259. X
  260. Xvoid coord_list ()
  261. X{
  262. X    int token;
  263. X
  264. X    while (get_coord_pair ())
  265. X    {
  266. X    token = next_token ();
  267. X    if (token != COMMA)
  268. X    {
  269. X        unget_token (token);
  270. X        break;
  271. X    }
  272. X    }
  273. X
  274. X    return;
  275. X}    /* end of coord_list () */
  276. X
  277. X/**********************************************************************
  278. X *     get_coord_pair () --- Reads a pair of coordinates of the form
  279. X *                           INTEGER COMMA INTEGER
  280. X * 
  281. X * Returns:
  282. X * 
  283. X *     SUCCESS           --- True, if we got a valid pair
  284. X *     FAILURE           --- False, if something's wrong.  We also eat
  285. X *                           through to the next semi-colon, if any.
  286. X */
  287. X
  288. Xint get_coord_pair ()
  289. X{
  290. X    extern int last_x;
  291. X    extern int last_y;
  292. X    extern int x;
  293. X    extern int y;
  294. X    extern YYSTYPE yylval;
  295. X    extern int absolute;
  296. X    extern int pen_down;
  297. X    extern double xMin;
  298. X    extern double xMax;
  299. X    extern double yMin;
  300. X    extern double yMax;
  301. X    extern double xScale;
  302. X    extern double yScale;
  303. X    extern int minWidth;
  304. X    extern int minHeight;
  305. X    extern int rectangle;
  306. X
  307. X    int token;
  308. X    int result;
  309. X    double scratch_x;
  310. X    double scratch_y;
  311. X    
  312. X    result = 0;
  313. X    token = next_token ();
  314. X    if (token == DIGIT || token == NUMBER)
  315. X    {
  316. X    if (token == DIGIT) scratch_x = yylval.i;
  317. X    else scratch_x = yylval.f;
  318. X
  319. X    token = next_token (token);
  320. X    if (token == COMMA)
  321. X    {
  322. X        token = next_token ();
  323. X        if (token == DIGIT || token == NUMBER)
  324. X        {
  325. X          if (token == DIGIT) scratch_y = yylval.i;
  326. X          else scratch_y = yylval.f;
  327. X
  328. X          last_x = x;
  329. X          last_y = y;
  330. X
  331. X        if (absolute)
  332. X        {
  333. X          x = (scratch_x - xMin) * xScale;
  334. X          y = (scratch_y - yMin) * yScale;
  335. X        }
  336. X        else
  337. X        {
  338. X          x = x + (scratch_x - xMin) * xScale;
  339. X          y = minHeight - y  + (scratch_y - yMin) * yScale;
  340. X        }
  341. X
  342. X         y = minHeight - y; 
  343. X
  344. X        if (pen_down && !rectangle)
  345. X          draw_line ();
  346. X        else if (rectangle)
  347. X          draw_rectangle();
  348. X        
  349. X        result = 1;
  350. X        }
  351. X    }
  352. X    }
  353. X
  354. X    if (!result)
  355. X    {
  356. X    unget_token (token);
  357. X    eat_to_semi ();
  358. X    }
  359. X
  360. X    return (result);
  361. X}    /* end of get_coord_pair () */
  362. X
  363. X/**********************************************************************
  364. X *     scale_coord () --- set up new user coordinate boundaries
  365. X *
  366. X * We need two pairs of comma-separated coordinates, a total of four
  367. X * INTEGERs and three COMMAs.
  368. X */
  369. X
  370. Xvoid scale_coord ()
  371. X{
  372. X    extern double xMin;
  373. X    extern double xMax;
  374. X    extern double yMin;
  375. X    extern double yMax;
  376. X    extern double xScale;
  377. X    extern double yScale;
  378. X    extern int minWidth;
  379. X    extern int minHeight;
  380. X
  381. X    double scratch [4];
  382. X    int count;
  383. X    int token;
  384. X    int done;
  385. X    int result;
  386. X
  387. X    result = 0;
  388. X    done = 0;
  389. X    count = 0;
  390. X    while (!done)
  391. X    {
  392. X    token = next_token ();
  393. X    if (token == DIGIT || token == NUMBER)
  394. X    {
  395. X        if (token == DIGIT) scratch [count++] = yylval.i;
  396. X        else scratch [count++] = yylval.f;
  397. X
  398. X        if (count < 4)
  399. X        {
  400. X        token = next_token ();
  401. X        if (token != COMMA) /* die with !result */
  402. X            done = 1;
  403. X        }
  404. X        else
  405. X        {
  406. X         if (!dont_scale)
  407. X           {
  408. X         xMin = scratch [0];
  409. X         xMax = scratch [1];
  410. X         yMin = scratch [2];
  411. X         yMax = scratch [3];
  412. X
  413. X         xScale = minWidth / (xMax - xMin);
  414. X         yScale = minHeight / (yMax - yMin);
  415. X
  416. X         /* Make sure x is in proportion to y */
  417. X
  418. X          if (yScale < xScale)
  419. X           {
  420. X             xMax = xMin + minWidth/yScale;
  421. X             xScale = minWidth / (xMax - xMin);
  422. X             yScale = minHeight / (yMax - yMin);
  423. X           }
  424. X         else
  425. X           {
  426. X             yMax = yMin + minHeight/xScale;
  427. X             xScale = minWidth / (xMax - xMin);
  428. X             yScale = minHeight / (yMax - yMin);
  429. X           }
  430. X           }
  431. X
  432. X          result = 1;
  433. X          done = 1;
  434. X        }
  435. X    }
  436. X    }
  437. X
  438. X    if (!result)
  439. X    {
  440. X    unget_token (token);
  441. X    eat_to_semi ();
  442. X    }
  443. X
  444. X    return;
  445. X}    /* end of scale_coord () */
  446. X
  447. X/**********************************************************************
  448. X *     draw_text () --- Display some text at the current point
  449. X * 
  450. X * Arguments:
  451. X * 
  452. X *     text         -i- What to draw.
  453. X */
  454. X
  455. Xvoid draw_text (txt)
  456. Xchar * txt;
  457. X{
  458. X    extern int x;
  459. X    extern int y;
  460. X    XTextItem text;
  461. X
  462. X    text.nchars = strlen(txt);
  463. X    text.delta = 0;
  464. X    text.font = text_font;
  465. X    text.chars = txt;
  466. X
  467. X    XDrawText(dpy, main_window, gc, x,y-font_offset, &text, 1);
  468. X    x += XTextWidth(font_info, txt, text.nchars);
  469. X    return;
  470. X}    /* end of draw_text () */
  471. X
  472. X/**********************************************************************
  473. X *     draw_line () --- Draw a vector between the last coordinate pair
  474. X *                      and the current one
  475. X */
  476. X
  477. Xvoid draw_line ()
  478. X{
  479. X    extern int last_x;
  480. X    extern int last_y;
  481. X    extern int x;
  482. X    extern int y;
  483. X
  484. X/*     printf("Draw line %d %d %d %d\n", last_x, last_y, x, y); */
  485. X    XDrawLine(dpy, main_window, gc, last_x, last_y, x, y);
  486. X    ++span_count;
  487. X    return;
  488. X}    /* end of draw_line () */
  489. X
  490. X/**********************************************************************
  491. X *     draw_line () --- Draw a rectangle between the last coordinate pair
  492. X *                      and the current one
  493. X */
  494. X
  495. Xvoid draw_rectangle()
  496. X{
  497. X    extern int last_x;
  498. X    extern int last_y;
  499. X    extern int x;
  500. X    extern int y;
  501. X
  502. X    XDrawLine(dpy, main_window, gc, last_x, last_y, last_x, y);
  503. X    XDrawLine(dpy, main_window, gc, last_x, last_y, x, last_y);
  504. X    XDrawLine(dpy, main_window, gc, last_x, y, x, y);
  505. X    XDrawLine(dpy, main_window, gc, x, last_y, x, y);
  506. X
  507. X    span_count = span_count + 4;
  508. X    return;
  509. X}    /* end of draw_line () */
  510. X
  511. X/**********************************************************************
  512. X *     yywrap () --- Pacify yylex()
  513. X * 
  514. X * Returns:
  515. X * 
  516. X *     SUCCESS   --- Always true, to indicate EOF
  517. X */
  518. X
  519. Xint yywrap ()
  520. X{
  521. X    return (1);
  522. X}    /* end of yywrap () */
  523. X
  524. X/**********************************************************************
  525. X *     error () --- Handles reporting syntax errors in a reasonably
  526. X *                  nice way.
  527. X * Arguments:
  528. X *
  529. X *     va_alist  --- A printf-like set of arguments.
  530. X */
  531. X
  532. Xvoid error (va_alist)
  533. Xva_dcl
  534. X{
  535. X    va_list args;
  536. X    char  * fmt;
  537. X    char    err_buf [MAXPATHLEN * 2];
  538. X    
  539. X    va_start (args);
  540. X
  541. X    fmt = va_arg (args, char *);
  542. X    strcpy (err_buf, "\nSyntax error: ");
  543. X    (void) vsprintf (err_buf + strlen (err_buf), fmt, args);
  544. X
  545. X    va_end (args);
  546. X
  547. X    fflush (stdout);
  548. X    fputs (err_buf, stderr);
  549. X
  550. X    return;
  551. X}    /* end of error () */
  552. X
  553. X/**********************************************************************
  554. X *     ignored () --- Handles reporting that we're ignoring something
  555. X *                    nicely.
  556. X *
  557. X * Arguments:
  558. X *
  559. X *     va_alist  --- A printf-like set of arguments.
  560. X */
  561. X
  562. Xvoid ignored (va_alist)
  563. Xva_dcl
  564. X{
  565. X    va_list args;
  566. X    char  * fmt;
  567. X    char    err_buf [MAXPATHLEN * 2];
  568. X    
  569. X    va_start (args);
  570. X
  571. X    fmt = va_arg (args, char *);
  572. X    strcpy (err_buf, "\nUnsupported command ignored: ");
  573. X    (void) vsprintf (err_buf + strlen (err_buf), fmt, args);
  574. X    va_end (args);
  575. X
  576. X    fflush (stdout);
  577. X    fputs (err_buf, stderr);
  578. X
  579. X    return;
  580. X}    /* end of ignored () */
  581. X
  582. X/**********************************************************************
  583. X *     eat_to_semi () --- Throw away input until we hit EOF or a
  584. X *                        semi-colon
  585. X */
  586. X
  587. Xvoid eat_to_semi ()
  588. X{
  589. X    int token;
  590. X
  591. X    while (1)
  592. X    {
  593. X    token = next_token ();
  594. X    if (   token < 0
  595. X        || token == SEMICOLON)
  596. X    {
  597. X        break;
  598. X    }
  599. X    }
  600. X
  601. X    return;
  602. X}    /* end of eat_to_semi () */
  603. X
  604. X/**********************************************************************
  605. X *     next_token () --- Returns the next token
  606. X */
  607. X
  608. Xint next_token ()
  609. X{
  610. X    extern pushed_token;
  611. X
  612. X    int token;
  613. X    
  614. X    if (pushed_token != -1)
  615. X    {
  616. X    token = pushed_token;
  617. X    pushed_token = -1;
  618. X    }
  619. X    else
  620. X    {
  621. X    token = yylex ();
  622. X    }
  623. X
  624. X    return (token);
  625. X}    /* end of next_token () */
  626. X
  627. X/**********************************************************************
  628. X *     unget_token () --- Push a token back for later examination
  629. X * 
  630. X * Arguments:
  631. X * 
  632. X *     token          -i- The token to push back.
  633. X */
  634. X
  635. Xvoid unget_token (token)
  636. Xint token;
  637. X{
  638. X    extern int pushed_token;
  639. X
  640. X    if (pushed_token != -1)
  641. X    {
  642. X    error ("Two pushes in a row");
  643. X    exit (1);
  644. X    }
  645. X
  646. X    pushed_token = token;
  647. X
  648. X    return;
  649. X}    /* end of unget_token () */
  650. X
  651. X
  652. X
  653. X
  654. X
  655. X
  656. X
  657. X
  658. SHAR_EOF
  659. chmod 0644 parse.c || echo "restore of parse.c fails"
  660. set `wc -c parse.c`;Sum=$1
  661. if test "$Sum" != "12859"
  662. then echo original size 12859, current size $Sum;fi
  663. fi
  664. if test -f pc.xw; then echo "File pc.xw exists"; else
  665. echo "x - extracting pc.xw (Text)"
  666. sed 's/^X//' << 'SHAR_EOF' > pc.xw &&
  667. X.(.@;0:.I40;;17:.N;19:DF;SC0,1999,0,1439;.(
  668. XSR0.733333,1.354167;DI1,0;PU;SP7;SL0;LT;.).(
  669. XPU;SP1;PU;PA820,604;PD;PA1112,604;
  670. XPD;PA1108,650;
  671. XPD;PA1098,694;
  672. XPD;PA1080,737;
  673. XPD;PA1056,776;
  674. XPD;PA820,604;
  675. XPU;SP2;PD;PA1056,776;
  676. XPD;PA1026,810;
  677. XPD;PA992,840;
  678. XPD;PA953,864;
  679. XPD;PA910,882;
  680. XPD;PA866,892;
  681. XPD;PA820,896;
  682. XPD;PA774,892;
  683. XPD;PA730,882;
  684. XPD;PA820,604;
  685. XPU;PA731,877;PD;PA738,884;
  686. XPU;PA736,862;PD;PA765,891;
  687. XPU;PA741,847;PD;PA788,894;
  688. XPU;PA746,832;PD;PA810,896;
  689. XPU;PA751,817;PD;PA830,896;
  690. XPU;PA756,802;PD;PA849,895;
  691. XPU;PA761,787;PD;PA866,892;
  692. XPU;PA766,772;PD;PA883,889;
  693. XPU;PA771,757;PD;PA899,885;
  694. XPU;PA775,741;PD;PA914,880;
  695. XPU;PA780,726;PD;PA929,875;
  696. XPU;PA785,711;PD;PA943,869;
  697. XPU;PA790,696;PD;PA956,862;
  698. XPU;PA795,681;PD;PA969,855;
  699. XPU;PA800,666;PD;PA981,847;
  700. XPU;PA805,651;PD;PA993,839;
  701. XPU;PA810,636;PD;PA1004,830;
  702. XPU;PA815,621;PD;PA1015,821;
  703. XPU;PA820,606;PD;PA1025,811;
  704. XPU;PA886,652;PD;PA1035,801;
  705. XPU;PA960,706;PD;PA1045,791;
  706. XPU;PA1034,760;PD;PA1053,779;
  707. XPU;SP3;PU;PA820,604;PD;PA730,882;
  708. XPD;PA687,864;
  709. XPD;PA648,840;
  710. XPD;PA614,810;
  711. XPD;PA584,776;
  712. XPD;PA560,737;
  713. XPD;PA542,694;
  714. XPD;PA532,650;
  715. XPD;PA528,604;
  716. XPD;PA532,558;
  717. XPD;PA542,514;
  718. XPD;PA560,471;
  719. XPD;PA584,432;
  720. XPD;PA820,604;
  721. XPU;PA577,442;PD;PA586,433;
  722. XPU;PA553,486;PD;PA597,442;
  723. XPU;PA541,518;PD;PA609,450;
  724. XPU;PA534,545;PD;PA620,459;
  725. XPU;PA530,569;PD;PA632,467;
  726. XPU;PA528,591;PD;PA644,475;
  727. XPU;PA528,611;PD;PA655,484;
  728. XPU;PA529,630;PD;PA667,492;
  729. XPU;PA531,648;PD;PA678,501;
  730. XPU;PA534,665;PD;PA690,509;
  731. XPU;PA538,681;PD;PA701,518;
  732. XPU;PA543,696;PD;PA713,526;
  733. XPU;PA548,711;PD;PA725,534;
  734. XPU;PA554,725;PD;PA736,543;
  735. XPU;PA561,738;PD;PA748,551;
  736. XPU;PA568,751;PD;PA759,560;
  737. XPU;PA575,764;PD;PA771,568;
  738. XPU;PA584,775;PD;PA782,577;
  739. XPU;PA592,787;PD;PA794,585;
  740. XPU;PA601,798;PD;PA806,593;
  741. XPU;PA611,808;PD;PA817,602;
  742. XPU;PA621,818;PD;PA813,626;
  743. XPU;PA632,827;PD;PA803,656;
  744. XPU;PA643,836;PD;PA794,685;
  745. XPU;PA654,845;PD;PA784,715;
  746. XPU;PA667,852;PD;PA775,744;
  747. XPU;PA679,860;PD;PA765,774;
  748. XPU;PA692,867;PD;PA755,804;
  749. XPU;PA706,873;PD;PA746,833;
  750. XPU;PA720,879;PD;PA736,863;
  751. XPU;SP4;PU;PA820,604;PD;PA584,432;
  752. XPD;PA614,398;
  753. XPD;PA648,368;
  754. XPD;PA687,344;
  755. XPD;PA730,326;
  756. XPD;PA774,316;
  757. XPD;PA820,312;
  758. XPD;PA866,316;
  759. XPD;PA910,326;
  760. XPD;PA953,344;
  761. XPD;PA992,368;
  762. XPD;PA1026,398;
  763. XPD;PA1056,432;
  764. XPD;PA1080,471;
  765. XPD;PA1098,514;
  766. XPD;PA1108,558;
  767. XPD;PA1112,604;
  768. XPD;PA820,604;
  769. XPU;PA600,444;PD;PA600,412;
  770. XPU;PA620,458;PD;PA620,391;
  771. XPU;PA640,473;PD;PA640,374;
  772. XPU;PA660,487;PD;PA660,360;
  773. XPU;PA680,502;PD;PA680,348;
  774. XPU;PA700,517;PD;PA700,338;
  775. XPU;PA720,531;PD;PA720,330;
  776. XPU;PA740,546;PD;PA740,323;
  777. XPU;PA760,560;PD;PA760,318;
  778. XPU;PA780,575;PD;PA780,315;
  779. XPU;PA800,589;PD;PA800,313;
  780. XPU;PA820,604;PD;PA820,312;
  781. XPU;PA840,604;PD;PA840,313;
  782. XPU;PA860,604;PD;PA860,315;
  783. XPU;PA880,604;PD;PA880,318;
  784. XPU;PA900,604;PD;PA900,323;
  785. XPU;PA920,604;PD;PA920,330;
  786. XPU;PA940,604;PD;PA940,338;
  787. XPU;PA960,604;PD;PA960,348;
  788. XPU;PA980,604;PD;PA980,360;
  789. XPU;PA1000,604;PD;PA1000,374;
  790. XPU;PA1020,604;PD;PA1020,391;
  791. XPU;PA1040,604;PD;PA1040,412;
  792. XPU;PA1060,604;PD;PA1060,438;
  793. XPU;PA1080,604;PD;PA1080,471;
  794. XPU;PA1100,604;PD;PA1100,521;
  795. XPU;SP7;PU;PA644,1311;
  796. XPU;LBDATA FROM @PIEME
  797. XPU;PA748,1233;
  798. XPU;LBPIE 1
  799. XPU;SP1;PU;PA1706,740;PD;PA1823,740;
  800. XPD;PA1823,778;
  801. XPD;PA1706,778;
  802. XPD;PA1706,740;
  803. XPU;SP7;PU;PA1846,747;
  804. XPU;LBSLICE 1
  805. XPU;SP2;PU;PA1706,662;PD;PA1823,662;
  806. XPD;PA1823,700;
  807. XPD;PA1706,700;
  808. XPD;PA1706,662;
  809. XPU;PA1706,685;PD;PA1721,700;
  810. XPU;PA1706,665;PD;PA1741,700;
  811. XPU;PA1723,662;PD;PA1761,700;
  812. XPU;PA1743,662;PD;PA1781,700;
  813. XPU;PA1763,662;PD;PA1801,700;
  814. XPU;PA1783,662;PD;PA1821,700;
  815. XPU;PA1803,662;PD;PA1823,682;
  816. XPU;PA1823,662;PD;PA1823,662;
  817. XPU;SP7;PU;PA1846,669;
  818. XPU;LBSLICE 2
  819. XPU;SP3;PU;PA1706,584;PD;PA1823,584;
  820. XPD;PA1823,622;
  821. XPD;PA1706,622;
  822. XPD;PA1706,584;
  823. XPU;PA1706,593;PD;PA1715,584;
  824. XPU;PA1706,613;PD;PA1735,584;
  825. XPU;PA1717,622;PD;PA1755,584;
  826. XPU;PA1737,622;PD;PA1775,584;
  827. XPU;PA1757,622;PD;PA1795,584;
  828. XPU;PA1777,622;PD;PA1815,584;
  829. XPU;PA1797,622;PD;PA1823,597;
  830. XPU;PA1817,622;PD;PA1823,616;
  831. XPU;SP7;PU;PA1846,591;
  832. XPU;LBSLICE 3
  833. XPU;SP4;PU;PA1706,506;PD;PA1823,506;
  834. XPD;PA1823,544;
  835. XPD;PA1706,544;
  836. XPD;PA1706,506;
  837. XPU;PA1720,506;PD;PA1720,544;
  838. XPU;PA1740,506;PD;PA1740,544;
  839. XPU;PA1760,506;PD;PA1760,544;
  840. XPU;PA1780,506;PD;PA1780,544;
  841. XPU;PA1800,506;PD;PA1800,544;
  842. XPU;PA1820,506;PD;PA1820,544;
  843. XPU;SP7;PU;PA1846,513;
  844. XPU;LBSLICE 4
  845. XPU;PA0,1389;
  846. XPU;LBPC                                                                 11-JUL-89 12:06 Page 1 
  847. XPU;SP0;.).(PU;PA0,1439;DF;SP0;.)
  848. SHAR_EOF
  849. chmod 0644 pc.xw || echo "restore of pc.xw fails"
  850. set `wc -c pc.xw`;Sum=$1
  851. if test "$Sum" != "4280"
  852. then echo original size 4280, current size $Sum;fi
  853. fi
  854. if test -f shuttle.uuencoded; then echo "File shuttle.uuencoded exists"; else
  855. echo "x - extracting shuttle.uuencoded (Text)"
  856. sed 's/^X//' << 'SHAR_EOF' > shuttle.uuencoded &&
  857. Xbegin 666 shuttle.Z
  858. XM'YV04X: @,$"1 P8" D.+'@PX0X%4Z#(> BE"L4@-6;8J,&"1HX:-B@2N5A#
  859. XM1@V.-'#8F*@ "L88,W!TM#%CALB+'G/(8%$CADZ*%EL&\7B#8$D8.&X*K0%#
  860. XMQ@R>)F$ )8E09LD:25N.%.H1QM.>-VC@Q'$C!T^8-<;>B,$31EFJ,,S2.!EC
  861. XM*M>/;.?&$*MU; P;;6W4Y8IC!MN>,OBZ3)G#J$^I=W&8+6DCQU@<5F7$2$M8
  862. XMQLZ>6''>V!C8)N$<@&FDA%R1JN297I4NSD'CQMG:.&E/CC$Z=U&H2.VZ[!GC
  863. XM\PS<?9<6MYTQIO @-W#XY%GSAFSH.-Q2WWOQ1MG),B0_CSZ]N?7D+J/7I%[#
  864. XMLM#H/:E'[T[V\(R/]'-\I1&W>P[>/-'@DW\T?%9@2.^A9E6![J67 VT!AG=1
  865. XM=N45J%@0V:D6X%\3PF##@C!PYE)VKV7TGW!;C7C09#/<8)J*)K'W(H8PL6C8
  866. XMA'NQZ!:.($&% TLJVF"420BJV!Y4,[!&XTG B4AC;6=EAZ-&9X&$HV=GS>"D
  867. XM=##0<-9F'>+@)5,Y9#6BAY\AM:575KEU(85?>7A>:^A!5R9S'EY8EF"!*184
  868. XM%"G:2253'_H7PV%N%8D=66V1]5QX3.YY77A-L> =D'\&*D-89MU0$HH7R5"9
  869. XMERX6F6FH-,ET0V*A8L766G,&85)BEL(4*@TV +;6C(G%5:N9LFKYU*JQ>I:#
  870. XM;6$IZ5F!EM90; RO>?=LBRQD!Z2L2-E6F+)=$J02II-Z!9A*BOKT8[7'7N23
  871. XMJ"SHY"2T'[;+%*A"0>OKL8.YQ)M'[8I7[X>V-33C7S$>9&N](#UE<(-!;(80
  872. XM"P=IIBX-U$;,VI\-']CN?'7N%5:_P&[F5+NTJ>LL6P^6NQ)!#XIXZK^5D:PD
  873. XM;P"6>?%UO-G@)6JQ0GN0O#=WC$,-.R>IKF2V-68JSOK)1!;#/HU6K4>APE!<
  874. XMM6 *)4.7''G'\-:>6BH@O2YI9K6E"(5:'$<;/3L7"X)=JQF?("FJV<<]?0WM
  875. XM3K7EB[%G,_ MW:3\C=EBJ[0ZR^O0G89(4IDR.87:<T)NS<*FA5TW%\405P;L
  876. XM?=K!1'5+&,?D(L0UY1OH7$)V7N9%0JYZ>5BQKJ3EY6*^B/%*1./>7YV">3B[
  877. XMA%Q]2!#-L<Z%5.<4A\JXI>F2'JI3@JM>=>NJO5N8;=D?S6SW]5K;T5SJCL;W
  878. XMO/6N>G[('SY5V\PZIS:TNL&W=>%FWD%5+M$<G73M9@#"RLP\PA;!Y"MC\=+9
  879. XM_50C$^.1+6.!JU7/"D003[U+0*_"3[WX,RXM34P[A3G@7FAU+#-A;"]_:9?5
  880. XM<(8KP#3F?ST9UX-,EBMT_4\P',&,"'/U%'*5[V=B"ID%JR6J\CVH6BL,'W\L
  881. XMM:JCE45L,_M/UQQ7+]HTT 8].Y995E(LA  &*T[:F@PFPY^J\<LC%]I:#54S
  882. XMI[]9#27DZ]B#W/>3*F)1/NK2SV2D5$7MK,R).]D(U KCI5$9D52;*E])FE6N
  883. XMHB K<S!C2W94!A,B[D]G4X/A7JI%M(G1I%HKF=BA0-G&QV'F<O<I4J"R4ZF:
  884. XMI$TH0QLC"X[S(W4="BNSI,W_'.8E 8G)EH))37CNMY>A=>0X2ZL7+SL"+<4$
  885. XMZE :Z>6F!G:0UPA(-;;<C$SN4Z#G' HI<MF+,R>4),"T*#2P+(E9: DN6.IL
  886. XM)UIJRG5BN<[HF)"<PCNGF0+EHNC,DC\,&PV5#'.?\?S(G)ZQWGN$Y*7CE$QZ
  887. XM[RD+6[2DLWDB!)Y)"MJ($M/0F+QHE5YIZ$:2F9X6;1.@UUG)1V:W$=C9ZW*5
  888. XM\9M+<;FI@Z2T)CLQ"?KHY!*: &A3O0%>3F!J$LIAD2";DJ=0WP8I/\$.*[89
  889. XMH]& )R:V8$ZF[VF*6<)3*."Y:)M-<1GL)-/00^VS.\:ZW$=TUQT+S;)+JNP.
  890. XM4N!I+,IM;:MD$5&@*H=4]3P'JG@-7$JU.3N;0G0XJB%(2@1;IY(DZ2QA(8E&
  891. XMP*.2ORZ'.LZI4TX^LZ[G>*1$HFI0H$#3OQ:1%"->84YB@+2Z,H&G,G_5:4>^
  892. XM=9V,8*DV.]T=TGCBK+-F]3B\[>9[-M4_'*)5>,X*Y7N>QD1/&919WL'B=4:3
  893. XMD6;AJJUEJI60QGHLWG*,IT&H#+M \JDZK:I2)SG18:%CM3$1S;?I*0JIB'9:
  894. XMZ@Z+OM/-SGV1 U[OK,=%8S-O;RVE);&^ARE=X\V<^'E4[6H4.@:$V['B^AX&
  895. XM2=BYZRT5V[(CVN[0%V[1'4]* @G5Z8XQD$*ZYW KJ;/@F%= ;(N)4]]S'-L(
  896. XM9G[F'2'< #<>MSQ%2 4U[S#AYI ,+XLGTODH[%*&Y""#ERSGBHG$ZB09X!:X
  897. XMG2[128PTTJ7K*&V;*F&K4/2SEEQ2$5 7T<U3--*3YQR+6I,=YYACETL/KA=R
  898. XM!+E/4-%<+X1$L$7"!>]!#&/.LNA5759[(G^R)FBXRB5$A^ZSLS@BXP=7$T(Q
  899. XMF5S'D (M9GK(F\7YF8!FV#&8G Z@08O(FVIB%FO)>435L=2/2@G+XWBK*:_&
  900. XMD&&<UA1@10>ZU#7HN:05Z?2015?1P3*&XE+!%\[S(%V3S&FETR/!%.79LKOQ
  901. XM :7SFAL#ZT?+$XQZ-[HIN$&+83]ZVXUG=- "[FM"Q#6W8.!].AQ^F]#F_F6M
  902. XM^;0R18DIW)[9TES8UJL),:60LS)X[U8R;W=V:<<M=>?"1>5O^4+\39Y".#I'
  903. XMI-\=IV1"L=SQ<4!^Q)7P9D*-*>#=#,ZH]CSTR>_=<7OFZ90?A^C;/BGD06@]
  904. XMHI3O^.14I@W!8[->LMI8(PKM>8QHTN:BT^;H#>=SSW]#DZ[V7#]P:]$!4W[T
  905. XM:X^Y6UF/>)8]]&,MQ:HQA<GZ=<<<L:S?B.W3\>F%_A-!E1HX/7]IX(FGZ[&L
  906. XMOQ+O[*))E]\S:+\[J2C2\?N,BM(ZE<9*O@19"6;DJID=[QEC1:E[>#HLE%$!
  907. XM9B6LZGR8S6VESB>;R)4U_<.%5!S829XG^G'21GH$1D7-_HM#DWU[C$*6"^5J
  908. XMO)AA6*X^N?MK'?4P_SD@%N\#>Z#S=*_>L<I_A"\=YOP'6!^B/=VY.Z;&^%X_
  909. XMGZGRDN,%55]?%,DSS[#5I*]IJ8>W3)^WFO(_$LBFS"BF-O:*DCZ4>"#[7DQL
  910. XM$U)C]3- MG_>$8"> 3MA44!68X"^XG*RAT72YQVNQQ2P=Q*NESCZ\6"S]Q5#
  911. XM0V$]11E(-D9/A5[?\4 ZDQT\,1JU@RN?X2+WQT8\X3FP0S'%%77A52#,83LU
  912. XM.#(G@6,]52"?030MF#A,@7T48Q3O0SEN!1+0DE)S,1DT(7P>\46S]U2W4S?8
  913. XM-VDSN&?AA4,SR$<]-5)=*'R5886197J#DBNRYQUCLA'&)QV'01,SUE/9T3_1
  914. XML6 *2!K.HD$]M2IC<H*=]R%CPDJNIR%]:'L,M8+^$H)\Z#5/56[)Y7M=L8)K
  915. XM%X2TMRIW%UYWR(AZ*'J<XRQ>R'^',1KS%T!A87QXL8)3UE_K!WOMQT]=,ADE
  916. XMU&-0DF))QUX$"$Y+EFUQ\7W )21^R(G=)8SW]SPI5CL_4G_?%5YY2&1BYXR+
  917. XMQ%#"MQ9;I'^4,S0_MA=*)GII9V]+ED+!)'RZ86ZC6";;^!99!2#69G[Q86V+
  918. XMAQ0Z5U&$MQFDAU5X=S6VDXN(%WE.H2CRI7<:(5?L6'-+IA([EDB=]Q$$YWSO
  919. XM5VXK<W^-$7GP,E9A$TSUU27Y-SCFA10V!UL9=BB!Y!3\R(T)*6: %WGQ-%U>
  920. XM,9*-B'F<AEF<UU-6))/9."C1E%(N8A0:H6)VB)/TZ'X?@B5$4T09%A-*.) O
  921. XM5GE$TSP5MA(!<HG0<7!1J2?\$R!.-I7&1#13E1XK,28"\GB_%R!_!V'9E1'J
  922. XM&%\1E!$8&%'$%SB^5A:?,4:^5GWZ<WB% 1Y=B1VXE#>+1Q9?L1EX*29?@I?_
  923. XMT19I:&P0PA0UD1]T-&Z8EQW<@R_3)2UM4501]39,X87>\8#% 9"YLALNTAU<
  924. XM!!5/>&#G<A4!E1%C0I=M19C-L7@48QS1V$_,<1\H"6'\XBQ;,UUGR(J/%Q:!
  925. XMN)=>\X(DN%S,QYM_B9 GHR?@MX)E6192 Q*U!$M6(X7;99U'DC!K<I9"XF\P
  926. XM\16*@R-\F!$^N4HYQUMEN8Q*F)T;Q2Q$XY 'Q9.C"4N;8C@*N5&P22GP!EJ-
  927. XM:9^'V1- B"'A816F]AR%<4<_"(*Z-EZ"AZ#1MX*Q:'"5$CL-@C&2@74KDVL9
  928. XM^F-;4X=!H#0C649U(J(>]V!TIW(46*(PH:(\%Z(M2F08YGXI*J.;.'U;)))>
  929. XMYA,YVGIW)BH-]!>?F&5 *F\O2AXJ"E_046/YMHFK4G)=PEJD>2X&I&S4)7W2
  930. XM)62:"9CCD5"LJ*0 9A2I2#FKJ)PI)8<S.'*#>#HGT8P;@5Z.A8*J,1D]$8,I
  931. XM$2#U"5[Q\T5H H6=1B@@NJ>!(:5+88/'A$WKQ3_N8QBLL5<I,9DOEX,U1"C*
  932. XMEH*0FFL;L1XIT4E+@6#,1&K@!1);]B!#^H4QT1%K4:E',1/YN5<\U!'JU&/"
  933. XMPSH,&CN4AG:40QP=<7U\)VH<-AY),IE1YZA7TQ-)I*=,,9>',EVVA9CX"!UA
  934. XM(1.KT8W#02ZSE#=_)1T-Y2RY)E#R\VD1U2.K@67\9$^H.CI/AC^FJ:0_4B('
  935. XMZG3:@5NYJ!N($D?@]1%>83^$FF7B-%L9X6:'(A=#4ZJW5$FJP6@G%!>6HQIV
  936. XMYG[5%$$ZF)LKHJGA0; *JU@VZ$T>HA/CXW4.ZQ7,1T&G%3&:^A@X<YTHD20#
  937. XM8S5062!*V6CRV!&:0:T-XT6*]1<7BFB'TDLY<[(Q6R '<Z\,R4P<2:-DP3T:
  938. XM0:YIIA+A5+084R:=YDOS^FLR.VXA2K6CEK-S5K*-X64FUQ'9XF8@H5ANT:AI
  939. XMQI7,9)19)H+\X;%/JR6]5+9>IK(RNU,A6J0"LB-WQJ.>5JK7AQ)"FF9_@1*\
  940. XM>&=(0;;ZX65- 4^HL8E&ETO_&G2C6K08\A]Y1AO3]HQZ-I,8XBEY(3(34A03
  941. XMI44(FBNV<1_1XW[?0K8T\4 J<39ZEIM#4TFH2[-B$B^FX[@ -4LJP:ZHFTO<
  942. XM473JQ+N.0F5UFDN)6W09PDS*I;J%(:V:L6V R;S*)AFT(B#-NTKH>$R_,W:B
  943. XM)DYN=KA@F[PT"FVYE)9/&Q>IP:@[ZBL40[XP>J>SZ9,P>D<%(H:!HF7<4QO7
  944. XMHA/&1#&&=:\<=$P)6*):5[<@2ANS&CC[&J)SP3W_*+8/=[\TNU9RX4MG2QHN
  945. XMF\ TX3XF6Z( XVFGA1J?E%CSFBO2:JP/A"]P=*Q/.QJIL6A>QF&PP3!ELD@,
  946. XM2[\-,3*JT;HE^B"*Q68:VR5Y(<2;9G_CX\.-]DW')';/]$;GTY;/I[.*)L/K
  947. XM%3&*UI,GFQA(2SR-AF_SN\59;'4)VY,$K*0',7"PZF+ZTB540C&7F+ EP3?(
  948. XM=+(I ;V0B6AS?*@,"FT?$[$:FV)5FXL'41GNTS>(-BIG++:<,Z<5S)@SL7$.
  949. XM?)AL=*/\ 4?.,K?L,A=9"7X8.Z-O6VZ<S+D9FAJ5@W+QZKD(VAC<DQ%FRW::
  950. XMNA:*\A\:["PHNBXSF+KYBR9(EJ<A&FM\Y69.T7U.C'*T$DRQ0A8C8SO?EEX0
  951. XM]V"]1W#II[K)*J-:NU'K(20;QT]B\H)..R%Y&X8,"H!6&&!/IC.3X2FDW!Y6
  952. XM(1TCS+=]R+DXBGX)+%5(5LQC-LRP)W9/JQEZMV?Y&Z,JY6^ZM&.#]V0Z44A:
  953. XMDHN8(3Q?>:2$!#?@XWXN4G(U45^; S=,\<K&MG"V/!Y0!3<Z4VS0484B?9S]
  954. XM]6%8!-"DN71R"=(7Z4/FY7T2=IK]I1^Z@D*^V3JIFINCT7\/TL"F:&-W,AX6
  955. XMIXE"_1'(4J#CH45B<SCFY2G#<A_T&QW:X2E!R4\/TBE84;WR9RFF6YG;J1//
  956. XMZJU(%FA:S3D"Y=/2!M9Z2]&X@H?_V5^&,8=03='=W"R0U%\TC-4D32+(4A2.
  957. XM:[[1,:$)$AY$EI^8IV6PU[ @M:5LC*&;X8%I"5)GP\XO2FWNEJ6J&S@_QI8(
  958. XM"D!&:F)AXX1..MG4H<MCA5SWFXU025]*2HA6<81D:A@;4JJC8A6LUF.P.7"^
  959. XMF5T>H=BDV<B84:H+2$=J2M?B"L0F=I:;8J6U04:76*ZI^:0&U5TGPX]8 99O
  960. XMUU_62!WXK"+V^(/73*"(W90D_6NM6<!\W1B-8KOA\17A4;UC-"3=R\T<BV!L
  961. XMO9C727/NFI@8FBOX:;O:G-K0+-@!LE.K1%W4\<VPU-"\55ZJ2W\!4D?WZB:\
  962. XME=6H7%S%>Z\QFE[&C=6SI53>?4JU@:ZCA1EK-M$8TUMYEGDII7_$JR3M 6<)
  963. XM_5>TX3YP55L=)R#LC1&\([.^?!)\0C%BV.(E(:VXPM$8 <F<K&SQ*1<>Y:=M
  964. XM$I0YF*\]@:Z[$])UBMLG(=_\M3N5P2(*OH=XDL>=UQS^BJFI@JH^:H>BS'1D
  965. XM"B!ST8BR.*MUTQW%T4NQ&I++HQ<E^>=D0J9,<K -C$5%'MW9&".S2;._)^6I
  966. XMAZS3D<,WE7B<O'^2,Q.<'5Z\(1>%33DP(:U<"CPKLJM.J:=CE!<VDU*B@B?N
  967. XMN3N!TTN84:LMXNFE%X(+RT6Y6BFX<NI[91+<(X&@'K*G##Q:$L7E31._ <>'
  968. XM[AG[FUD]E2VP"I+13N?M@^/G4AM6-UH4GA*GWN+MBJJ9W%AB(A>(GJV*UAZY
  969. XMV!Y0PD#[%Q>+FI_A19)UFYM5QS<^0=)M<[.(*NGK>]#0-\%.\:)'):UOE%+)
  970. XM=ZT=#AVBTE!&;HOF=!SZKL[_5)TA6%V@LXE36$^&/88A,DLM$H>X,DO ;E2/
  971. XM16B.KCPDCX-?N4V&M%YQ(U(!_.LK91C3G(-;YB9VE4)TZ>A[_E;F/)46R!_)
  972. XMO6RV'<;I9.E@Y+JL+.[;]E5M\7(8ZBG&D:>[?/1)!K :LJFV.V%0@=+I>T3J
  973. XM),^!HUC'HFP*W#]5L:/YO=#"C$DF0K/1@4E16-7F>N*D_-4 [*3'@A)295&6
  974. XM_HM-'38,4L&7#+9%K\ &SUAMC-H#-[)<P^=O_<2)1KUN5MS,U.^K5%/C ^T8
  975. XM:A*]]/!4YMDR^[*?+ZX4(_?'TDLZ45]DM:L=OOGN>M>G;Q1A:[Q+1*L("A)\
  976. XM#H2K1!-TO-<8ZBJPZOMZ+#LN^Z*%G.T)MVG7U_D2J[YRD>HSS"C7-'>< K:-
  977. XMV*!K-C1*8HK;U![&QQN10\*@3BM)8L[<;F4CAN.GTR*,/UJCT5 4\E<1>DT-
  978. XM_.5YH1F;J(7<N^X3"8'A.. "M&*;CV$FGL^E*)JYPNJ6'=> '3$A+QP\F#<K
  979. XM<@EF$DHPP9S@*]C!)I#7BZIQTL2FR;__U2)B!6]2<N2KQ56&5I:81DN#B6L/
  980. XMIDU)*YW Y%P9HFA>&(%N$0H:YZDH@Z*@"X>!XI"$+W<6I-X0#%""J;8$N2,$
  981. XMY=1=H\A_3I"T_)4>^*[<#Q#4'^7-//6/85);KHEIRDU<J7_DG"Y89HA#%APU
  982. XM7X)SA<$B"*+8DF-H@9)E*W'!1)48= 3-*@F_ 2W9GD/Q1?A3HMIJP"'_U4'J
  983. XM0'1"55*1#PR*M"#"V)(_2L*R:BQ)PD )MZ4@6^H42>-6;<+TD83VT18D'+=#
  984. XM+OSOK\04)*$&2T66^( K[0DJP0 E.3;A*2D)]BH':K"/\ -C@JB;9BTNGLP6
  985. XM7R=99N&MRX5;J2F4*K9DH()6#EP/!^>TJ!/%(AG6'9=!59>')'B[767A1LL1
  986. XM:A0_T$3LJB:2J$+(^ !70LDMT#$M]SA6BEY@<BMC?XT[/17.:L.,<E6W!<!0
  987. XMCK6@6(922FD/KB[9N2'[@0XQ'ZY8"SVF9<44OG,V.%E]$15\@W>8&(,E'<H;
  988. XMK)!6+^W%"(AS55^80E[P'Y4I7L&$!R,M;A:U6W (Z3YX,0RE$AJ*'IEA[DL8
  989. XM23#WL1'8U33A78R/0)49CW) I!K?2#3=01>JACBFY\SA<>!'I@5XE35\$Q.V
  990. XMG7^P,H@'I-$N_-*1"%.+8&.<*%Y@D".UN&26VN(G@(-W!:W(5.26A6\J=%<H
  991. XMPTBF7<79\!OKZW"2[;Q9#=O5MM:8[,(B"3'^@;-LIQMV'U%*#+:KL,T$--=S
  992. XM4EG3<5C%)&5)I9V%D.!8N0 @H0]A91.(9<4^%FJ8?GRQ9H4EF:7A^HRA EKE
  993. XM33>D"7L5T&P;B$LS90_V=*]?MG"*29HY?#?&2<0>C6/#($5"ZE]SP_*<G08T
  994. XMVF!)0=M0".HE@J.HEIRJ3T[T)URI)IJ4U :B2D4?#%JN2C,9!H(W>NB+<2-B
  995. XMT) CXK*NP.08#U@Z,YBG.*BD,K=B?@Q_J&HZI+G8+EN#1$+/DZDJ$8)!T4#!
  996. XM :J"0D18/(\QZPP(*A,7 EL PU#'81XUL,*0S4QCK5DZ,.%:% ;+84!63=Q1
  997. XM7^2D\L2.>P.1/,2VN6A$)A82D@;2DL@)5*H<SRJ(7"/N."*( C3R-]4LQ; ;
  998. XM2!8\MHU%-#?SL4.N%,'PLC!$2O@\H N6G#AYXV^6G#E*9CNQ28&SP//!.F2X
  999. XM\0D/TKW=&'0#__(-NS$[YFC5:(A@4KUB".E99YN$1:(;)QDW-,HJV6,ETN#8
  1000. XMMA3S)IH2-)J21T*;@4BIP5"267L(0$%/)41)KX!NZ%"$W#9P*$(FLP8C)B=$
  1001. XM]OF2=K(8R:/0Y4<,1NC21]K1=:T%G>-D7L:(2%5/DD_:&/*7)Q?E,.I=#<E*
  1002. XMVDFJXQD$9)RT'98R& T\.QDE6V$Z69&;,IV02>JA<+9(I30X2])LN*Z,X&[\
  1003. XMD*'$$%B241Z6*RF.-D-Y&Y"?S;%U"-+0P916@F 2/B6SO9 +-,XP0_>!=AB"
  1004. XM:36?9#8TVID1I#+>KY<I"6/)' "0ZQ(3U3)%ODK,L$CZT)MX72O(8R5+V8$)
  1005. XM0<XK7!7?1FFLH !6N231&4(Y%H@Z;8G5UX6 Q40R"EA$-8:5+J0OXZ4#^3IX
  1006. XMXT/8,/4%G;8.'UR79R<\K: 6^1^@Q*1Y40VS^XA P?58:IP-$TD7:#8&J+.7
  1007. XM9C86[-EK(:I+=!^KE7)HT:-\$"-S7L8,EX./M)=F0D=,CRA1IEF)RCX#+11F
  1008. XMKU!+*"F;81]:T23;C'<G?Q$0^_$N?$;HNWEF991DCY[Q%U+(_0)1MT13Q3J<
  1009. XMP1MP"1N16+;R(@8OP,A QH?:.B&(<7PPFF>2-6'5U@2;0@A6;3-;4M_&QR^T
  1010. XM)05F?'!&6Y(V!XX.VX@7<?*4FN*@Y/2-H E8A\SJP<V"B!7N9H"<"5WIB74[
  1011. XM;'7%#$8K.S-D\W#BBJX$-O4>#SE9_!%6D:A&H^)@5>*T)993B26LH[47:58A
  1012. XMBQD/S-+XF(LXK! -Z<05*1#1#$I4==>>&%5:<LHFC4&L8'*R% <T_!]:Q=R9
  1013. XMLX3%M^(:&F,3* '<Z*RC=U2&V*G"%7KS8ZT6?Z4::4->D"^7[VWP+].)$,Z(
  1014. XM]TDSZH%VHKT7*-6\3 !$(UNGP&D[B(D84%6DRU]K 244M3'S'4?<",,ILV5B
  1015. XMCAG>=YG.CJAP'P.2D>&)[I:_* 1U:$4):W;6AMIY_'J?DQ)QXXK'19DJ9/^Z
  1016. XM"]+A1YYC5TW"^)*O@AL&17ZU:*%0"\9DE<3>[4L//RA+^)HL%R4 TC]$$C5Q
  1017. XM,N)!/<%FML/BJ6O4 5TQO-YAGJZ%-?HB&$3/#0J*\7C<0O^(0@3)0+BIFD0T
  1018. XMX!?_<2^%D!.5!Q5F>GAHG7(]KQ Q9"#Q]-;"2PIMHDAH,;W(&N0982<$7)ES
  1019. XMZHR");O%.W1;8L((8X2,6)V7P"3T(".D3XG0H00(T2E90I$6:RQW+,'1.(KQ
  1020. XM173F7VDA,J*VL#NLQ#!.0E_*CZ(P<=2$2[B (L2%  E8Q[;0K^3R%0+'NGM]
  1021. XM\8G&A3M6"0:'I2O3=Y"&.)J2/O@LHUW%K&^#107U4+OR2.$@)5PC@_*OZ$2/
  1022. XMX.B"B'JB7Q_BM4'/VA(3,!DJQ#HY@9*JQ4<X'!A<LIH1 B1.=#>,@!X9DY, 
  1023. XM+&VA86&$Y\>8:-S02E8'A&6V!:A8.5)#4.. 1X(HE+7,HT'YD8O("[0E7"5/
  1024. XM%Y8@<^5?BS7))IE)N\[DN-:BA+F JX3TK<#3$DW628C@7 LMI\"?BU 3_@S(
  1025. XM8JBL8Y94$X::@MX*+H2H/X.@-##/=KIP%D,]F$FB_02!P#$3#RI$]14$1<Q$
  1026. XMA .R-6H&2M,4#E*%I)%J4BU )O_+(5;.,SP<[S<]>L?S"A7IKUI0SDD1-P_*
  1027. XMK1 >/R*,/# B4BPVDU!-(VUJ:O *.O.!4 63&'7@Q3.\AH<U*9P"1RADS^*)
  1028. XM0!N[41P41I< %FH$,*2Q,((0S,):S2.+!-K,C+8&;0;)$MDY_^,[0 RWT#,\
  1029. XMA4RH)HT$0*P(J"&!(,8MH1\3$9J\B^]D6"49_M@)9F5@Q">(H1DTB<+ B]ZD
  1030. XMFHU5%O(;-NL&B:LA8F1IUM"*,\S37HU<^D(8[=6@1S,@Z_HY&N6F9>01>S0S
  1031. XMRT;ETP_/"H,H#&ND.=8&Q*"'#T1 G"K><-"& FHCKM<">_U5[+E>=.MO39&K
  1032. XM(XW]UKT$4)9KOQL*<>&K^E6<4!]_:Y["&+XDIRB8WJJ"-(-(#4M>(J$X">S%
  1033. XM$0!'<A49ER,Q* KA&E5, K# (%M%"'*%AA!? 2)7B$G.+KGR,L] QAX']B"M
  1034. XMC85><A!O:N(\Q+OC=0BVVA$N'5HY"!>R!#(Z3FV%E]0"MM[<AK5QKP/FI=*\
  1035. XMA=OD!#-AIAM6!6$0Y:.P/ WV*3QY:_Q=#8#B>P*6]KL_915L<4,]%1>D%;09
  1036. XM+&OD+^S!,H.]<*RX(JXN)62]F\Y3'/#=&PT>@$M<"B./6*EH!O/R>?]KLKD4
  1037. XMU)#Y,-T$6QNP8VOX6')Z5\;74-PR]M"\+,=9@L)R(NW*5&X6GB@[-TMI0$].
  1038. XMQ!)<QM<TU&LE4@&,.2DQ-(9/Z$PKI1$*#<#+B?'A*7Z_6#-9;BB:M7B8I]#.
  1039. XM$N9*T:3,I"VN%>UT%06.R$)-2K<J2I-V^WF*WU#KOA\["[6^AN&$VIH8)TO@
  1040. XM]TN%YP0T'1'X%U"^F]:)2[=CLAR>[*<1Q.4!<GG]#O/8#C9[WTC3FTV1$ 9V
  1041. XMZ3K4Y/)BXJ@5*44/J^69#N9A1E[26DU6QLX>F)&!='PH:""V-9%,*+P5JAW,
  1042. XMCE4JM^G%PV14IDC7:@C<2F^ YEHYI*]":8(;L'*W_&.Z)*UKY<M*Q41A/3F1
  1043. XM-%S;W[AF1DI.=(IIMJ3,6L;35@!$R/,U1F[2\I>2!I5,BVQB%"40('7:7P/2
  1044. XM+&CN\4W<UEHN%&L;0!<*[J(V4ZK0#*/.-%$NQ7@P9+G$;S(8?Z)G4JW 51 O
  1045. XM%^M0M6Y%#V-N<&(75&W7,@NJ]OU$G)[QH3\ME[RZ[G" QI?<\ZOC*SA-Q.K*
  1046. XM=*^7X(LH?^Z$FJ6XQ9DX(0?QH?D2;$DE%G0341J$07Y6PTHU78#R="F9FJ /
  1047. XM$TSG99A5Q$W2&]W%K?ZA=]R'>8L:+A>FC8^9!CX^$5M8A[0:QS(=]$L.K9/O
  1048. XM264V(N^*G8UWZ,XZ'D%I= B.(+50!D<XQ8:&([(+X84WHR339,B9A;PXU-;0
  1049. XM<6>&1KBW1<-N<D:'Q3E%KK_!DKV0&G#B[(58\N=*D*UC12-"KVO!$1]/SP1-
  1050. XMX+MF^J[KXJ^I9%H>BM/5&(9O1,&SZ<:H05\."6$P;G$C30/E^E88**%/7F[^
  1051. XM."<\%\\:FJH+3WAJAG$1MPJZ^@?$=LE\*&JXB8K1O* ID6CW7H-(3&]YK9AR
  1052. XM1/]B 9^NN)J 7HG(IEW2A/&T;W\A0WN7R7&)R[5T%PJW58GFQ:?PV2/U\^;"
  1053. XM2Y4K]NOE]1<;NT#E7HX]<7JB F,U/5=YM)VOV5G0\ 1_O-HPH(H"A&#! 66N
  1054. XMH*JNE56([-R3*S9XX>V*Y.D4QL-? *!;DY^@8!8L':T)TC QO"[EH!5[U!5:
  1055. XM)EIAOY+!UV0ZQE 3!^$=J\*%CFFA%:M958<+%_YV.5%[0BU]B]UD;WKP)>.4
  1056. XMAA+9OM=6.NA'T!/9 _;)IA+V&!LN<BN._@,K@:D/0U\6#]IZ+RLT%%W1 W.G
  1057. XMOMP*I3VBRL,HJ*6'FC[#=_(P8D\A+I3RT&*&&[Y$K1 &[EW.A5(B0A/3W20@
  1058. XM8<>^2O\BA?QK?-'$N8+IOL*V01]&">\#2-XP8=3$:.F$_E)Y@E]Y:+:9XD7!
  1059. XM'-Z+8^(M/7BYK!0P^HN)D _%# MBXMH3)60>L0/Y:8Q\J9-2+O506I08=@#%
  1060. XM-8;IMCUM&EUTV]=DNH3/+;C3$N8A !+5 UOK$%HULAT749ZG &K'M;<WM6.#
  1061. XM!P[5<?'%Q>>8JB'=3Z)G]$33326UUO[R#+A;?*G=-=: ;S39:$"+AQUR[1RA
  1062. XM#[G/BT#DLOO]_@WBTQ.%8<+"XDT6(AZ/.P-;J7BY=%!QK(H?3;]=NR2YZ,"+
  1063. XM\T7*%(S2Q3FRXSY(,1I!:G7)Y65<7HPF,U\.,7M#8O/MO.;D"-LGE-H,X4W(
  1064. XMI<'8+"A;K72S3H3R1CD2&0_>X"Y:1F^*;TZ>-;<JT,C$XCN3#\HVP;GV"2J3
  1065. XM+OO$+ZA:,OM'R$M 9D74]2;*+.H2D#YA(2>SE;RY1,S)"S$O)J-&Q))R2I#2
  1066. XMX:FA$9"&3D0I(QQ3B)19/*F.=_VX5>%N?>-PD;RC47V\N!";'K;&BQ-^?"?Q
  1067. XMF!:2(H3=;5C@S'I.[P(B/:<AGJ(3)CS,I]<"I S(9O\B= AU;%;##LJ"2^)>
  1068. XM\R(Q.R>8'Q,Y/4=S,\)JYK(+30H;9L:$5DZ50ZG"%;?]#9>0J.W<[$3!+3EQ
  1069. XMH+C#@/N<(6U;X;[;]<7<Y6BX?:_G=$.TS#!U15HQ7+2$L!&FS*_Y=HR8Q7-N
  1070. XM[.<6%G6GKJ09+/T ARD9>1 Q\SFY\1.)!_O*FE>=+>2K,P/AXMB>5P.#2E77
  1071. XM,R:NC$>S_6*>CGUWQIE4N92,:E1%;,RH=4K*Y3"NH+0[.B#J&H;H<M)RY^&@
  1072. XMR(IBANYV(<+XC-B=PP&M"<' P)XN>L*D[M(WNM5FX'.YA0,"MQ\+/"I?X2!X
  1073. XM7@3D!6&J,!$UP^8TKC&#N((H@*)67:YFZ3LM]8"$U\O1LYKK@ 52A..3%(=(
  1074. XM)5^]Q)9.(QG%L')I<V%8<2"/8@LBZ5WX')$D0CQ7F;XAMBU@00U6B3JZJ,@(
  1075. XM&"%U>M00T&<W4H)5&5B/PL?-#OZB*2Q,36&IAAJX:HUG:!) 5;!H':V.5PCJ
  1076. XM^_2B5LM6"8ON)S$DGD;]-28U8[@5HZ0.LM3  1AF19^6):)"BOV-SW(YFM*D
  1077. XM",67 XZUB@BB58N%GXZO"X^CE&I$IC58->@#416K5->ZZY#^(@>78:@>HKV2
  1078. XM2JTQ%LUK&!%Q 4=9'!M4@KX^*G#Y1TRNH6Z582T4:L(2&7@,(S\^!??Z4>,#
  1079. XMN>[6H@.5-&"7<!S8!5[,-0XEO48%BLHOP#5#31BQ>OM1E/1ZQR"JNY;5Z\4T
  1080. XM0XQ?52<DQU?EFT 50H@DM&K/N.IZ<:\RE6F,C)3Q0P)&B! A+_2;;*(1LC.^
  1081. XMRS/!@W6ZO G9K^I5PX6OV%F\(KM25JMU5]0J]4L?\2$#W@\V1%D;U@FAESB+
  1082. XMI!%8M:IMRT:LX0W35(PTZ847-;QT9=A$\E5A'*Q)D:D@1N$,%5!OLBV.T+&T
  1083. XMM8:0.!ZT!%6<#='1J;5TU<ZJ-X:RRN-,K1/P=*0;J<G:L/I-61&UQ06JZ#1-
  1084. XM]L&(BDY#&^!UDB#9D:K&X&D=6FC5JD-AJ$V/:S\'TZ$P4@>Q'CXK^T(<.[=*
  1085. XM7!@JZ"O38:1IUX=' 7K:A>8#JC&#\98-ZA&Q [;7\QA*2F#;B_*F9]0J"ZXM
  1086. XM1I1*2[*X<;J(&*CS)V,D)%M!YA+?*E64(GE7D2K0%&UB%R+">BTG,"5ZKHXU
  1087. XMV^JDM"N!*>G8,,(4J41(TVNJP D>!:;,M:% ]*3WC% -6.)_;J(DU%X%IN8P
  1088. XM"58E6N$$9S<[O%#6\AU* GOA%9\I7$MU7L();0=27.]RC#MP(-%#*KT+<&,=
  1089. XMKG+- H5,=M^RNW3@"]\!KQ78[!#/@'OD;8KP-E*?'W%Y4=RD5 >;.E&ZRW?Z
  1090. XM1@CMU3M(::^0P0TR!TFO H6[[N_RN5\MQWV2TGLA@U] )!TY&.Y^?0U ZD)0
  1091. XMD*B2*Z1TI93>VWN,..^7-;RS=_" WHO$OM[78MJJ/3@%:=6<:C%$U%_M6?0"
  1092. XM*BG/.$';/?$'DSVL2@34'#KHB<_7PH%*AI&1&]=M"WICDM627)D41S'>U]H%
  1093. XM>18@&:OGYGX]'5PL>8BVJ"#'RXU)T*8 9:N,+>X:,^RK@#U5HJ(L\8>',[>=
  1094. XM!$ F*K$"-^44.=>MV]K__!S/XY$/[@%.*7+-(,\IDHF[K@=*<5_SA.]8K[_H
  1095. XM@-_7GX<Y1GEU 2KS]:4L\/2]-3)XT!-"4>6\C.\[%5KFZR"LY>/[-U <&:[#
  1096. XMI?=I27U;Y3-_[R="*6PXS]-&\-M<*^'_2IAT>/)H+VI%7^>XMR+O3$>>Z5/=
  1097. XMVM"\E;R]%K9)DZ77$X7VWNN**V0A:MK9-=?"UL"3?,=0&1C)BZ*Q+L^(V7*]
  1098. XM3NX*LJ:Y:B14D"J)2IE?9:KKJ+EZ>TA44:R_;]6A_:_N5HK [PC]XX#6Y5KA
  1099. XM]PLGRW!A ;P8!O9.OU+:I&6:^UHWB%=R93J\RWZS4X]R7T=#4T:QBZ6A6+6Q
  1100. XM8$&%^5W )4\16%A$E[?I-I-(^7&(89U,&I+P4H[=-4TK->9:X,%ZZY!FZ#^Q
  1101. XM:<<PXJ5>$T%I:(8N33O9XQ).TH[U [G*^(A4CB4U##KE\+^. D_75'C0-5S$
  1102. XM:9JLY *K] VM;"1&<>83K;'X3RDX7(&;Q->B1T21"DF"W@K<(,7UD0$XAOC#
  1103. XM6!;WE5+$5_<T%!!B?[7E>=V+ZS.29,O==4T([+1BF+'RGV):QK?P2 PHG8US
  1104. XM%,>E4T6.2V067VG;-+P3U9\(CC;=%I_'V25(A,-H=,U$7!D9,G 0'-4&H/Q1
  1105. XMZB)0P'+O%!W9OF-H.ZQI/&-D2\AUR?-MLC@7*>[ W<J5.W_T<8J.AV0Z?RVN
  1106. XMA9TW <#"#I$L1EK'0I8=@\P?59)R'R-'YVW6&N;S3DA9"91H6KFJ?!X+#,ZJ
  1107. XM39T#9UPV?DQ+WRS1)-G 6N\2#D. (07B*T=$TR[O=K+;^+C0=<SV;NBJ-KTV
  1108. XM="$D.C0MDXQ\E)0/[E0=]U6VS-P>M(SO4^[!\<H@&N$#"1$-7<4(B<(2BJ<S
  1109. XMFI$RBSQH),!''@1C)\G[(!X1^%"CR2='*N-!)(O1HC(RVQP<<%9W[&VMT5#-
  1110. XMN=:X]W2<D?$[NFG/0Q)!/?<",T^&%QT:D8T'+K&<!L*^W(D]4BG3LL5 G&EC
  1111. XMNHB,%%MP; HUR*YN+AI)V?2JDR/^B;#(IZ?F R2G1$#3DLSOGLSHSL7?O-*%
  1112. XMZDY)D)EJ.8P4V&$X6J?1!W7A+,.PFLR,$#I[I(L^'6^FYT?,"G+-5L0JK(JM
  1113. XM4XDP*:5?Q3C(BGP%GW(: V9MQER'@5N=QI%W$IJ[ "M6O,_+H,'THAI=U@S2
  1114. XML+IDTTLRZRF%D+(#<\6R?,S\KDFCYV5,N+27DE: S)W\.(* O>78;O:REV.%
  1115. XM )YF7".W8G*M+Q#=O(0FID!9L]]*R6)N8;EN#AHI<:32#YZQS>KZY*0SM@ZQ
  1116. XMK\4K#)GP%B#T*NFS>+IUOVR$)CG0*(F2E3!C4U241LTWWL+XVGW%BG"JL4!Y
  1117. XMEV3/G(H=D7HBHBK@K\SXT>QIS_!I]DN$.AUZ+X5)D_W#L&69T5:F*7EF91.^
  1118. XMX$H\8\M>0HM>3#+9>)OJ7[C,D1[Z]OSEYDXSX2T\^5Z9USW:P.A/+Q9#(8IH
  1119. XMX,NMF?-W4PHZ6SR4$ ']+Y+KUU9UF32SC ]+E!7&ED:0:G2$Z,=>0K+":<,<
  1120. XMO;JSETN5W<V=)+3/SLZB^9C /F9<;=4((5D/_;*>0Z@R$OK+QIKNO7B:><V>
  1121. XM;GSJ?*:9>+4AQ*5#VFIC7+> 5IMVDOAQFV=<HTM_+<$G;E%LKU4%<$-JF09>
  1122. XMN$E?Z7@CM2V&%K2:UU)U&!%%;X6>6FW8M;B8]M[_+G^#]5#S!G;'%>JFT]1_
  1123. XM>AVN:D;!54K5-(D<E*%5U.N9]2B@GJDFU@-+>I/N_Q#+D[C_KG7+^VM :Y<S
  1124. XMJY'*S0S83G77.,.AQTOMW]OHOIH%0E+J*.[#6Z2+B\U9$#/ $PJJ698J$^<*
  1125. XM:?-__O+.KKTUA[>.U<T+O,Y(>TWNSCF+>QP8[\-W_V\]KYLK:V[EEGSY7HZ4
  1126. XMO!@(IIB5X0?073&_T7)Q@46'Q)@-!P3JLE44@(#;QR   F[FVI[4K6T@^]\N
  1127. XMMG=9%2&"XB89M%<<'$.E_>U_/)_I %D]" F@M1*7)7(E$<1@DS5R-020A +*
  1128. XM#N?&C& +059D@9*0:7Q5Y0[@-DI "WL);G(\9#T38,QFB$R 'T.GDP "0N0/
  1129. XM*#<RD#\#X'(UH+0MNY75PJ0-;(*<_N<S7&^L&0^8OL%7S81%-[@,;.)26((#
  1130. XMPB^^Q/' ^\%OYT+.\5ZI("<@_!8VG&GP&VG04LEP\-7IM5[=?QF@9U&VJ(!*
  1131. XMS.K@8*F ODSA\%>-9?W?[6 N"%B51]1@ )YL;X;^YE:)>?K;".B:H2YFX%W3
  1132. XMP'$LZX+BA@0F']P5(UB;\0>)X :HR8V!3># YL7]@8^!@-59<8+_5?Z0"7)7
  1133. XM8A69 0L&#'@!+&@&\E$0 10 D+0,X=*!!K4\>H?' *<XN%^/"%2T)SAB:]N>
  1134. XM(.L%% I"FA(,-D(&A']0(NP>'<+'TZ9,2TB,RM<A"&)'VB3Q1?0Y9X)[XS_ 
  1135. XM9: 8XZ0B)"=>W>P%]\!"FE<O%A-Q&]_@],8XM#,QGWYWV3AF_ITKEOA9>=62
  1136. XM[*;?E0?6"Z=D?<@G]0.[8RE=?.9/TO-%S$\PGMB'$)A)_$+E,"(U2"V2]V-S
  1137. XM2$@LF)<W+5E@7IZ 9-S-(N!,A1*ED!/^!)#Q(#D+1(9\$C>Q'KO@,(:7/1F5
  1138. XM58!@YW1>S '_HGD=4?E=]0%$35/5QV& 4JB#+,+"4WWP),I=U91#P66PB2<%
  1139. XME!%"HMW/D.2T99)(: %OD'HECWVBH&AJ_0EXD-X9!G-)-SC5P4(GH6HAE6P/
  1140. XMF4$2IVLX-_Y@5;$%X7SJG8_0X(F#Z=:# Q<2=I(!VP<RU8522!?5##EB[^!_
  1141. XMX(@1>4T/=2(@92C0B;\QZWPI($<>)+X].-W2!,=Q5$R0R(.C'?06Z$;XE(@<
  1142. XM>,Q!6?!MN @OB$A5 V:&ME[O$HA0+KW+5[#2V2>RQ$D012TC=$IQ]2,4*W,?
  1143. X,>$$00 81P4.@ "@ 
  1144. Xend
  1145. SHAR_EOF
  1146. chmod 0666 shuttle.uuencoded || echo "restore of shuttle.uuencoded fails"
  1147. set `wc -c shuttle.uuencoded`;Sum=$1
  1148. if test "$Sum" != "17714"
  1149. then echo original size 17714, current size $Sum;fi
  1150. fi
  1151. if test -f xhpgl.1; then echo "File xhpgl.1 exists"; else
  1152. echo "x - extracting xhpgl.1 (Text)"
  1153. sed 's/^X//' << 'SHAR_EOF' > xhpgl.1 &&
  1154. X.TH XHPGL 1 "Dec 1990" "Version 2.0"
  1155. X.SH NAME
  1156. Xxhpgl \- HPGL version 7470a Xwindow display program
  1157. X.SH SYNOPSIS
  1158. X.B xhpgl
  1159. X-cf [color_file] -fn [font] -geom [window geometry] file 
  1160. X.SH DESCRIPTION
  1161. X.I xhpgl
  1162. Xis an Xwindow display program that will read a file in HPGL syntax and
  1163. Xdisplay it on a X server DISPLAY.  
  1164. X.I xhpgl
  1165. Xis compatible with X11.  The HPGL Syntax is restricted to that
  1166. Xdescribed in the 7470A manual.  Most of the commands are supported,
  1167. Xbut some are not (see supported commands).
  1168. X
  1169. X.I Xhpgl 
  1170. Xalso has some added features.
  1171. X.I Xhpgl
  1172. Xsupports up to 8 different pens where the 7470A routine only supports 2.
  1173. XThe color/pen assignments are user definable.  All pen colors are read from
  1174. Xa file called $HOME/.hpcolors.  The colors supported are: black, red, green,
  1175. Xblue, yellow, cyan, magenta, gold, maroon, turquoise, violet, orange and white.
  1176. XThe .hpcolors file is of the form "pen# color".  Only pens 1 to 8 are used.
  1177. Xan error will occur if a pen number larger than 8 is given.  If no color
  1178. Xfile is found the program will display a message and use internal values.
  1179. XThe -cf color_file option may be used to over-ride the default color file
  1180. Xon a case by case bases.
  1181. X
  1182. XThe text used in
  1183. X.I xhpgl
  1184. Xis of fixed size.  That means that there is no scaling or slanting of text
  1185. Xallowed.  To help make text more usable 
  1186. X.I xhpgl
  1187. Xwill select a font based on the window size.  Also, the -fn
  1188. Xoption may be used to specify any user font instead of the default selection.
  1189. X
  1190. X.I Xhpgl
  1191. Xhas simple commands built into it for controlling the display window.  'z' allows
  1192. Xthe user to zoom into a portion of the xhpgl display.  'u'
  1193. Xunzooms, effectivly quadrupling the area shown.  'o' returns to the
  1194. Xoriginal display, 'r' redraws the screen, and 'q' quits the program.
  1195. XAll other keys and mouse activity are ignored.
  1196. X.SH OPTIONS
  1197. X.I xhpgl 
  1198. Xwill take any font supplied by the user.  The -fn parameter is used for this
  1199. Xpurpose.
  1200. X.I xhpgl
  1201. Xwill take only one file in HPGL syntax at a time and display it.
  1202. XThe -cf color_file option is used to instruct
  1203. X.I xhpgl
  1204. Xto use a different color file other than $HOME/.hpcolors.
  1205. X
  1206. X.SH SUPPORTED COMMANDS
  1207. X.I xhpgl 
  1208. Xwill recognize and execute the following HPGL commands:
  1209. XLT, LB, PA, PR, PU, PD, IN, DF, SP, and SC.  
  1210. XAll others are read and accepted however no action will be taken.
  1211. X
  1212. X.SH AUTHOR
  1213. XOriginal xhpgl program: Randy L. Yach 
  1214. X.br
  1215. XPort to X11: Andrew Gerber (gerber@solbourne.com)
  1216. X.br
  1217. XParser: Dieter Muller (dworkin@solbourne.com)
  1218. SHAR_EOF
  1219. chmod 0644 xhpgl.1 || echo "restore of xhpgl.1 fails"
  1220. set `wc -c xhpgl.1`;Sum=$1
  1221. if test "$Sum" != "2448"
  1222. then echo original size 2448, current size $Sum;fi
  1223. fi
  1224. exit 0
  1225.  
  1226. --
  1227. dan
  1228. ----------------------------------------------------
  1229. O'Reilly && Associates   argv@sun.com / argv@ora.com
  1230. Opinions expressed reflect those of the author only.
  1231.