lishka@uwslh.slh.wisc.edu (Chris Lishka (hang loose...) ) (07/10/90)
Posting-number: Volume 13, Issue 117 Submitted-by: lishka@uwslh.slh.wisc.edu (Chris Lishka (hang loose...) ) Archive-name: lj2ps-1.2/part09 ---- Cut Here and unpack ---- #!/bin/sh # this is lj2ps.09 (part 9 of a multipart archive) # do not concatenate these parts, unpack them in order with /bin/sh # file doc/pscan.idr continued # if touch 2>&1 | fgrep '[-amc]' > /dev/null then TOUCH=touch else TOUCH=true fi if test ! -r @shar_seq_.tmp; then echo "Please unpack part 1 first!" exit 1 fi (read Scheck if test "$Scheck" != 9; then echo "Please unpack part $Scheck next!" exit 1 else exit 0 fi ) < @shar_seq_.tmp || exit 1 echo "x - Continuing file doc/pscan.idr" sed 's/^X//' << 'SHAR_EOF' >> doc/pscan.idr && X(PRM) X] Text XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.804699 0 0 0.804699 61.6917 209.023 ] concat X%I X133 419 450 295 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.804699 0 0 0.804699 61.6917 209.023 ] concat X%I X132 410 455 150 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.804699 0 0 0.804699 61.6917 209.023 ] concat X%I X218 129 218 210 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.804699 0 0 0.804699 61.6917 209.023 ] concat X%I X102 384 197 119 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.804699 0 0 0.804699 61.6917 209.023 ] concat X%I X251 244 450 276 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.804699 0 0 0.804699 61.6917 209.023 ] concat X%I X245 113 459 258 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.804699 0 0 0.804699 61.6917 209.023 ] concat X%I X250 97 448 129 Line XEnd X XBegin %I BSpl X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.804699 0 0 0.804699 61.6917 209.023 ] concat X%I 6 X212 275 X199 308 X175 316 X162 305 X168 278 X194 263 X6 BSpl XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.804699 0 0 0.804699 61.6917 209.023 ] concat X%I X234 273 451 475 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.804699 0 0 0.804699 61.6917 209.023 ] concat X%I X235 124 460 466 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.804699 0 0 0.804699 61.6917 209.023 ] concat X%I X249 231 450 140 Line XEnd X XBegin %I BSpl X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.534872 0.601209 -0.601209 0.534872 266.082 24.2328 ] concat X%I 6 X212 275 X199 308 X175 316 X162 305 X168 278 X194 263 X6 BSpl XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.804699 0 0 0.804699 109.169 472.964 ] concat X%I X[ X(+ | - | 0-9) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.804699 0 0 0.804699 177.568 295.126 ] concat X%I X[ X(0-9) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.804699 0 0 0.804699 189.639 298.344 ] concat X%I X[ X() X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.804699 0 0 0.804699 202.514 452.042 ] concat X%I X[ X(0-9) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.804699 0 0 0.804699 240.335 368.353 ] concat X%I X[ X(P) X(e) X(r) X(i) X(o) X(d) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.804699 0 0 0.804699 243.554 446.409 ] concat X%I X[ X(Other) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.804699 0 0 0.804699 292.64 289.493 ] concat X%I X[ X(Lowercase) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.804699 0 0 0.804699 158.888 584.888 ] concat X%I X[ X(Other) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.804699 0 0 0.804699 269.304 420.659 ] concat X%I X[ X(Uppercase) X( or) X( Symbol) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.804699 0 0 0.804699 261.257 393.299 ] concat X%I X[ X(Lowercase) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.804699 0 0 0.804699 252.405 333.751 ] concat X%I X[ X(Other) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.804699 0 0 0.804699 289.421 338.579 ] concat X%I X[ X(Uppercase) X( or) X( Symbol) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.804699 0 0 0.804699 171.935 505.957 ] concat X%I X[ X(Lowercase) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.804699 0 0 0.804699 195.272 556.653 ] concat X%I X[ X(Uppercase) X( or) X( Symbol) X] Text XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 1 0 0 1 -6 51 ] concat X%I X169 513 429 643 Line XEnd X XBegin %I Elli X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Gray80 X0.2 0.2 0.2 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.804699 0 0 0.804699 188.88 70.0228 ] concat X%I X61 418 31 33 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Gray80 X0.2 0.2 0.2 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.804699 0 0 0.804699 188.88 -47.9772 ] concat X%I X61 418 31 33 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Gray80 X0.2 0.2 0.2 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.576954 0 0 0.576954 168.772 -31.7798 ] concat X%I X61 418 31 33 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.576954 0 0 0.576954 369.948 -33.5331 ] concat X%I X61 418 31 33 Elli XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 1 0 0 1 226 213 ] concat X%I X[ X(= Intermediate State) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 1 0 0 1 426 212 ] concat X%I X[ X(= End State) X] Text XEnd X XEnd %I eop X Xshowpage X X%%Trailer X Xend SHAR_EOF echo "File doc/pscan.idr is complete" && $TOUCH -am 0707112690 doc/pscan.idr && chmod 0644 doc/pscan.idr || echo "restore of doc/pscan.idr failed" set `wc -c doc/pscan.idr`;Wc_c=$1 if test "$Wc_c" != "17644"; then echo original size 17644, current size $Wc_c fi # ============= doc/scanner.doc ============== echo "x - extracting doc/scanner.doc (Text)" sed 's/^X//' << 'SHAR_EOF' > doc/scanner.doc && XProgram: lj2ps, 1.2 (release) XFile: scanner.doc X XAuthor: Christopher Lishka XOrganization: Wisconsin State Laboratory of Hygiene X Data Deprocessing Dept. X XDate: March, 1990 X X XTopic: Scanner Implementation Notes X X1. Introduction X XIn creating a LaserJet-to-Postscript converter, it is necessary to Xdevelop a scanner for properly distinguishing between text and XLaserJet commands. This document details the scanner I created, which Xwas a major section of the lj2ps program. X XAt first I used lex to generate a scanner module, which I tied into my Xprogram with the interface in scan.h. Although lex was likely not the Xmost efficient choice (due to the overwhelming features it offers), it Xdid allow me to modify my scanner as needed as more and more bugs were Xdiscovered in my original design. X XHowever, the use of lex proved to be a rocky road ending in a wide Xravine. Besides struggling with the state feature of lex, I Xencountered many small problems that are common when lex is used. The Xfinal straw was when I discovered that lex could not handle null Xcharacters in the input stream. If the scanner was to be useful and Xextendable, null characters *had* to be handled, for their use in Xbitmaps graphics was very common. This implied that the lex scanner I Xhad built had to be tossed out. The development effort of the lex Xscanner was not wasted though. It did provide a suitable platform for Xrevising my initial scanner design. X X X2. The Table-Driven Finite State Automata X XIn place of the inadequate lex scanner, I decided to create a Xhand-coded, state-driven FSA. This would provide a fast and efficient Xscanner that could overcome the defficiencies of the lex system. XHowever, it would also take more time to develop the FSA and translate Xit into tables. X XCertain characteristics of the LaserJet PCL scanner lent themselves Xwell to improved efficiency and compact design. One important Xcharacteristic was that no *actions* were required on the transitions Xfrom state to state. Instead, a single default action of copying the Xcurrent character to a token buffer was all that was needed. This Xallowed for the complete elimination of the action table. Another Xmajor aspect was the relatively small number of character classes. XThis allowed for a simple character class table translation mechanism. X X X3. Implementation Details X XWhat follows is the important details of my implementation. X X* There are actually *two* scanners. Although this may seem somewhat X "kludgy", it actually saves development time (which was a factor) X because a true parser does not need to be written. Instead, which X scanner is being used is recorded in a global variable, and it is X this one that is activated when scan() is run. X X The reason that two separate scanners can be used lies in the X LaserJet PCL language, which consists of text with embedded X commands. One scanner is responsible for scanning normal text, and X is able to differentiate command prefixes (which always start with X an escape character) from the surrounding text. The other scanner X is responsible for breaking up command parameters into useful X tokens. X X Each scanner has separate state and character class tables, as well X as the necessary state constants that go with them. The text X scanner's tables and constants all start with "st_" or "ST_", X whereas the parameter scanner uses "sp_" and "SP_". X X One problem that may crop up in the future is commands that require X trailing data. Currently these commands are not implemented. I X have not put provisions in for reading variable length data after a X PCL command. However, it would be fairly trivial to add another X function to the scanner module (say, scan_data(length)) that would X read in a fixed number of characters (which would be interpreted as X 8-bit bytes). X X* I have defined mnemonic constants for the various states. These X have to be in numeric order (starting with zero) and must correspond X directly to the states indexes in the state tables. If this were a X perfect world, C would have better enumeration facilities (believe X me-I looked into this) and would allow enumerations as indexes into X arrays. Since we must live with the flaws, this is what I have come X up with. X X Also note that there are two "special" state types: those marked X START and END. START should always be state 1, whereas END should X always be state 0. These two constants are used to label the start X and end states in both scanners, so they must remain the same for X both. I know that fixing the start and end states to predefined X numbers was a kludge, but it was a fairly easy (and, hopefully, X minor) solution. X X* My scanner differs slightly from the "traditional" model. In mine, X the *only* way to end the scanning of a token is to jump to the X *single* END state. "Blasphemy!" some may cry out, but actually X this works quite well. Once the END state is reached, the scanner X is finished. You can find out what token was scanned by maintaining X a notion of what the previous state was and referring back to it X when END is reached. Hence the use of the variable prev_state in X the function scan(). X X Related to the single END state is the demise of "actions." X Although no actions on transitions are required, without a single X END state one would need to keep a record of (a) which states are X end states and (b) whether a put-back or accept of the last read X character should be performed on reaching an end state. (I actually X considered using multiple end states first, but then settled on this X because it was actually easier.) With only one END state, the only X thing that can be done when reaching here is to put-back the X character that caused the transition to this state. Therefore, the X actions in my scanner are *always* an implicit accept of each X character on a transition with a put-back of a character upon X arrival at the single END state. This makes everything much easier X conceptually. X X One consequence of this design is that the scanner must contain X explicit error states. In addition, *all* characters must belong to X some character class and all character classes must have a X transition to another state (in many states, most characters will X have a transition to an error state). This actually turns out to be X a useful mechanism for scanning LaserJet PCL, because all characters X can be text or data, and illegal characters in a command just cause X the command to be ignored. X X* The token numbers to be returned are determined at the end of scan() X in a large switch() statement (actually two switch()'s because of X the multiple scanners). This was the easiest way to do it, and was X relatively efficient. Note that prev_state must be examined, X because curr_state will *always* equal END when the switch() is X reached. X X SHAR_EOF $TOUCH -am 0707112690 doc/scanner.doc && chmod 0664 doc/scanner.doc || echo "restore of doc/scanner.doc failed" set `wc -c doc/scanner.doc`;Wc_c=$1 if test "$Wc_c" != "6867"; then echo original size 6867, current size $Wc_c fi # ============= doc/suggest.doc ============== echo "x - extracting doc/suggest.doc (Text)" sed 's/^X//' << 'SHAR_EOF' > doc/suggest.doc && XProgram: lj2ps, 1.2 (release) XFile: suggest.doc X XAuthor: Christopher Lishka XOrganization: Wisconsin State Laboratory of Hygiene X Data Processing Department X XDate: April 25th, 1990 XLast modified: June 30th, 1990, by Chris Lishka X X XTopic: Suggestions for Improving lj2ps X XBesides adding missing PCL commands, there are many areas where lj2ps Xcould be improved. This file contains suggestions for those who want Xto extend the lj2ps program. X X* Add the missing commands LaserJet commands. These include: X X ** The position stack commands (fairly easy) X X ** Secondary font support (fairly easy) X X ** Macros (medium difficulty) X X ** Graphics commands (difficult) X X ** HP soft fonts (very difficult) X X X* Extend either the Test Suite or Metrics Suite (or both!) to include X more tests which would better test LaserJet operations and quirks. X X X* The font mechanism should be completely replaced. Here are some X suggestions for this area: X X ** Currently the fonts information is hard-coded into the file X ljfonts.c. A parser should be written that reads a file X describing which fonts are mounted in the virtual LaserJet. X X ** Currently there are two PostScript functions for setting the X current font: F and FS. In reality, only FS should be needed. X However, the scaling information for each font would need to be X changed, and I don't have the time to do this. X X ** Rescaleable, downloadable LaserJet fonts should be created for X the LaserWriter. The only way that the two machines will have X similar looking fonts is to custom-make LaserJet fonts for the X LaserWriter. This, of course, is a helluva lot of work! On the X other hand, it would improve the output immensely. X X X* Using two separate scanners is rather kludgy. It is very likely X that the text scanner could be replaced by a tightly-coded loop X which would read a character, check to see if it was "special", and X add it to the buffer if it wasn't. Special characters would include: X X (a) The escape character: this would throw execution into a special X command scanner/parser, which would handle recognition and X execution of all PCL commands. This parser would need to be X able to read long sequences of binary information (for commands X with data). After the command was finished, the parser would X return to the above text loop. X X (b) Left and right parentheses, backslash: these must be quoted in X PostScript programs, and cannot simply be written out. X X (c) Newline: perform PostScript code to write a newline. X X (d) Form feed: perform PostScript code to start a new page. X X (e) Tab: perform PostScript code to move to the next tab-stop. X X (f) Shift in: switch to the secondary character set. X X (g) Shift out: switch to the primary character set. X X (h) Null, and other non-special, non-printable characters: these X should produce a warning, even though the LaserJet would let X them slip by. X X X* I never implemented a real parser for the PCL commands. Instead, X each PCL command prefix has its own dedicated function. Each of X these functions has a small parser built into it. As you might X guess (especially after looking at the code!) this causes a lot of X similar code to be duplicated in each function. It would be nice to X implement a single "real" parser for the PCL commands, in X conjunction with the scanner changes mentioned above. This would X make the overall design much cleaner, and may improve the efficiency X some. SHAR_EOF $TOUCH -am 0707112690 doc/suggest.doc && chmod 0664 doc/suggest.doc || echo "restore of doc/suggest.doc failed" set `wc -c doc/suggest.doc`;Wc_c=$1 if test "$Wc_c" != "3517"; then echo original size 3517, current size $Wc_c fi # ============= doc/tscan.idr ============== echo "x - extracting doc/tscan.idr (Text)" sed 's/^X//' << 'SHAR_EOF' > doc/tscan.idr && X%!PS-Adobe-2.0 EPSF-1.2 X%%DocumentFonts: Courier X%%Pages: 1 X%%BoundingBox: 99 37 518 754 X%%EndComments X X50 dict begin X X/arrowHeight 8 def X/arrowWidth 4 def X/none null def X/numGraphicParameters 17 def X/stringLimit 65535 def X X/Begin { Xsave XnumGraphicParameters dict begin X} def X X/End { Xend Xrestore X} def X X/SetB { Xdup type /nulltype eq { Xpop Xfalse /brushRightArrow idef Xfalse /brushLeftArrow idef Xtrue /brushNone idef X} { X/brushDashOffset idef X/brushDashArray idef X0 ne /brushRightArrow idef X0 ne /brushLeftArrow idef X/brushWidth idef Xfalse /brushNone idef X} ifelse X} def X X/SetCFg { X/fgblue idef X/fggreen idef X/fgred idef X} def X X/SetCBg { X/bgblue idef X/bggreen idef X/bgred idef X} def X X/SetF { X/printSize idef X/printFont idef X} def X X/SetP { Xdup type /nulltype eq { Xpop true /patternNone idef X} { X/patternGrayLevel idef XpatternGrayLevel -1 eq { X/patternString idef X} if Xfalse /patternNone idef X} ifelse X} def X X/BSpl { X0 begin Xstorexyn Xnewpath Xn 1 gt { X0 0 0 0 0 0 1 1 true subspline Xn 2 gt { X0 0 0 0 1 1 2 2 false subspline X1 1 n 3 sub { X/i exch def Xi 1 sub dup i dup i 1 add dup i 2 add dup false subspline X} for Xn 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline X} if Xn 2 sub dup n 1 sub dup 2 copy 2 copy false subspline XpatternNone not brushLeftArrow not brushRightArrow not and and { ifill } if XbrushNone not { istroke } if X0 0 1 1 leftarrow Xn 2 sub dup n 1 sub dup rightarrow X} if Xend X} dup 0 4 dict put def X X/Circ { Xnewpath X0 360 arc XpatternNone not { ifill } if XbrushNone not { istroke } if X} def X X/CBSpl { X0 begin Xdup 2 gt { Xstorexyn Xnewpath Xn 1 sub dup 0 0 1 1 2 2 true subspline X1 1 n 3 sub { X/i exch def Xi 1 sub dup i dup i 1 add dup i 2 add dup false subspline X} for Xn 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline Xn 2 sub dup n 1 sub dup 0 0 1 1 false subspline XpatternNone not { ifill } if XbrushNone not { istroke } if X} { XPoly X} ifelse Xend X} dup 0 4 dict put def X X/Elli { X0 begin Xnewpath X4 2 roll Xtranslate Xscale X0 0 1 0 360 arc XpatternNone not { ifill } if XbrushNone not { istroke } if Xend X} dup 0 1 dict put def X X/Line { X0 begin X2 storexyn Xnewpath Xx 0 get y 0 get moveto Xx 1 get y 1 get lineto XbrushNone not { istroke } if X0 0 1 1 leftarrow X0 0 1 1 rightarrow Xend X} dup 0 4 dict put def X X/MLine { X0 begin Xstorexyn Xnewpath Xn 1 gt { Xx 0 get y 0 get moveto X1 1 n 1 sub { X/i exch def Xx i get y i get lineto X} for XpatternNone not brushLeftArrow not brushRightArrow not and and { ifill } if XbrushNone not { istroke } if X0 0 1 1 leftarrow Xn 2 sub dup n 1 sub dup rightarrow X} if Xend X} dup 0 4 dict put def X X/Poly { X3 1 roll Xnewpath Xmoveto X-1 add X{ lineto } repeat Xclosepath XpatternNone not { ifill } if XbrushNone not { istroke } if X} def X X/Rect { X0 begin X/t exch def X/r exch def X/b exch def X/l exch def Xnewpath Xl b moveto Xl t lineto Xr t lineto Xr b lineto Xclosepath XpatternNone not { ifill } if XbrushNone not { istroke } if Xend X} dup 0 4 dict put def X X/Text { Xishow X} def X X/idef { Xdup where { pop pop pop } { exch def } ifelse X} def X X/ifill { X0 begin Xgsave XpatternGrayLevel -1 ne { Xfgred bgred fgred sub patternGrayLevel mul add Xfggreen bggreen fggreen sub patternGrayLevel mul add Xfgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor Xeofill X} { Xeoclip XoriginalCTM setmatrix Xpathbbox /t exch def /r exch def /b exch def /l exch def X/w r l sub ceiling cvi def X/h t b sub ceiling cvi def X/imageByteWidth w 8 div ceiling cvi def X/imageHeight h def Xbgred bggreen bgblue setrgbcolor Xeofill Xfgred fggreen fgblue setrgbcolor Xw 0 gt h 0 gt and { Xl b translate w h scale Xw h true [w 0 0 h neg 0 h] { patternproc } imagemask X} if X} ifelse Xgrestore Xend X} dup 0 8 dict put def X X/istroke { Xgsave XbrushDashOffset -1 eq { X[] 0 setdash X1 setgray X} { XbrushDashArray brushDashOffset setdash Xfgred fggreen fgblue setrgbcolor X} ifelse XbrushWidth setlinewidth XoriginalCTM setmatrix Xstroke Xgrestore X} def X X/ishow { X0 begin Xgsave XprintFont findfont printSize scalefont setfont Xfgred fggreen fgblue setrgbcolor X/vertoffset printSize neg def { X0 vertoffset moveto show X/vertoffset vertoffset printSize sub def X} forall Xgrestore Xend X} dup 0 3 dict put def X X/patternproc { X0 begin X/patternByteLength patternString length def X/patternHeight patternByteLength 8 mul sqrt cvi def X/patternWidth patternHeight def X/patternByteWidth patternWidth 8 idiv def X/imageByteMaxLength imageByteWidth imageHeight mul XstringLimit patternByteWidth sub min def X/imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv XpatternHeight mul patternHeight max def X/imageHeight imageHeight imageMaxHeight sub store X/imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def X0 1 imageMaxHeight 1 sub { X/y exch def X/patternRow y patternByteWidth mul patternByteLength mod def X/patternRowString patternString patternRow patternByteWidth getinterval def X/imageRow y imageByteWidth mul def X0 patternByteWidth imageByteWidth 1 sub { X/x exch def XimageString imageRow x add patternRowString putinterval X} for X} for XimageString Xend X} dup 0 12 dict put def X X/min { Xdup 3 2 roll dup 4 3 roll lt { exch } if pop X} def X X/max { Xdup 3 2 roll dup 4 3 roll gt { exch } if pop X} def X X/arrowhead { X0 begin Xtransform originalCTM itransform X/taily exch def X/tailx exch def Xtransform originalCTM itransform X/tipy exch def X/tipx exch def X/dy tipy taily sub def X/dx tipx tailx sub def X/angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def Xgsave XoriginalCTM setmatrix Xtipx tipy translate Xangle rotate Xnewpath X0 0 moveto XarrowHeight neg arrowWidth 2 div lineto XarrowHeight neg arrowWidth 2 div neg lineto Xclosepath XpatternNone not { XoriginalCTM setmatrix X/padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul XarrowWidth div def X/padtail brushWidth 2 div def Xtipx tipy translate Xangle rotate Xpadtip 0 translate XarrowHeight padtip add padtail add arrowHeight div dup scale Xarrowheadpath Xifill X} if XbrushNone not { XoriginalCTM setmatrix Xtipx tipy translate Xangle rotate Xarrowheadpath Xistroke X} if Xgrestore Xend X} dup 0 9 dict put def X X/arrowheadpath { Xnewpath X0 0 moveto XarrowHeight neg arrowWidth 2 div lineto XarrowHeight neg arrowWidth 2 div neg lineto Xclosepath X} def X X/leftarrow { X0 begin Xy exch get /taily exch def Xx exch get /tailx exch def Xy exch get /tipy exch def Xx exch get /tipx exch def XbrushLeftArrow { tipx tipy tailx taily arrowhead } if Xend X} dup 0 4 dict put def X X/rightarrow { X0 begin Xy exch get /tipy exch def Xx exch get /tipx exch def Xy exch get /taily exch def Xx exch get /tailx exch def XbrushRightArrow { tipx tipy tailx taily arrowhead } if Xend X} dup 0 4 dict put def X X/midpoint { X0 begin X/y1 exch def X/x1 exch def X/y0 exch def X/x0 exch def Xx0 x1 add 2 div Xy0 y1 add 2 div Xend X} dup 0 4 dict put def X X/thirdpoint { X0 begin X/y1 exch def X/x1 exch def X/y0 exch def X/x0 exch def Xx0 2 mul x1 add 3 div Xy0 2 mul y1 add 3 div Xend X} dup 0 4 dict put def X X/subspline { X0 begin X/movetoNeeded exch def Xy exch get /y3 exch def Xx exch get /x3 exch def Xy exch get /y2 exch def Xx exch get /x2 exch def Xy exch get /y1 exch def Xx exch get /x1 exch def Xy exch get /y0 exch def Xx exch get /x0 exch def Xx1 y1 x2 y2 thirdpoint X/p1y exch def X/p1x exch def Xx2 y2 x1 y1 thirdpoint X/p2y exch def X/p2x exch def Xx1 y1 x0 y0 thirdpoint Xp1x p1y midpoint X/p0y exch def X/p0x exch def Xx2 y2 x3 y3 thirdpoint Xp2x p2y midpoint X/p3y exch def X/p3x exch def XmovetoNeeded { p0x p0y moveto } if Xp1x p1y p2x p2y p3x p3y curveto Xend X} dup 0 17 dict put def X X/storexyn { X/n exch def X/y n array def X/x n array def Xn 1 sub -1 0 { X/i exch def Xy i 3 2 roll put Xx i 3 2 roll put X} for X} def X X%%EndProlog X X%I Idraw 5 Grid 8 X X%%Page: 1 1 X XBegin X%I b u X%I cfg u X%I cbg u X%I f u X%I p u X%I t X[ 0.96 0 0 0.96 0 0 ] concat X/originalCTM matrix currentmatrix def X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 1 0 0 1 130 138 ] concat X%I X[ X(* All end states include a description of the token recognized.) X() X(* All states include the three letter code that is used in the C-code \(where) X( it is preceded by the prefix ST_\).) X() X(* All transitions are marked with the characters that cause the transition.) X() X(* The action for all transitions is to store the character in a buffer.) X() X(* The action for all end states is to accept the last character, except for the) X( states CLP, CRP, and TXT, which cause the last character to be put back into) X( the input stream.) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 2.67273 0 0 2.67273 167 782.691 ] concat X%I X[ X(Text Scanner for lj2ps) X] Text XEnd X XBegin %I Pict X%I b u X%I cfg u X%I cbg u X%I f u X%I p u X%I t X[ 0.735593 0 0 0.735593 -382.698 146.167 ] concat X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 1090.48 160.992 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 1087.6 284.829 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 1088.56 220.51 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 1089.52 380.827 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 1088.56 441.305 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 1083.76 569.942 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 1012.72 570.902 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 943.6 572.822 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 872.562 571.862 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 799.604 572.822 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 727.605 572.822 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 656.567 571.862 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 650.807 370.267 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 1086.64 506.584 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 910.961 -43.4835 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 967.6 -44.4434 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 1023.28 -44.4434 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 1081.84 -43.4835 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 1092.4 43.8745 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 1092.4 102.433 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 743.925 -43.4835 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 893.682 330.908 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 988.719 332.828 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 652.727 207.071 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 653.687 156.192 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 654.647 103.393 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 653.687 51.5543 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 653.687 1.6355 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 799.604 -43.4835 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 854.322 -43.4835 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X67 550 72 710 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X71 548 138 710 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X75 546 206 715 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X78 545 281 715 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X82 543 353 718 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X85 540 423 717 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X89 538 496 719 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X90 534 494 667 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X91 530 496 598 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X90 526 497 534 Line XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 685.366 526.743 ] concat X%I X[ X(Start) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 700.726 799.377 ] concat X%I X[ X(Text) X(Left) X(Paren) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 771.764 799.377 ] concat X%I X[ X(Text) X(Right) X(Paren) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 843.763 798.417 ] concat X%I X[ X(Text) X(Back-) X(Slash) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 911.921 792.657 ] concat X%I X[ X(Text) X(Newline) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 988.719 800.337 ] concat X%I X[ X(Text) X(Form-) X(Feed) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 1060.72 783.057 ] concat X%I X[ X(Null) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 1130.8 781.137 ] concat X%I X[ X(Text) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 1181.67 703.379 ] concat X%I X[ X(Tab) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 1182.63 640.021 ] concat X%I X[ X(Shift) X(Out) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 1183.59 580.502 ] concat X%I X[ X(Shift) X(In) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 714.166 704.339 ] concat X%I X[ X(\\\() X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 766.005 706.259 ] concat X%I X[ X(\\\)) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 817.843 707.219 ] concat X%I X[ X(\\\\) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 874.482 705.299 ] concat X%I X[ X(\\n) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 911.921 697.619 ] concat X%I X[ X(\\f) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 961.84 699.539 ] concat X%I X[ X(\\0) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 1012.72 709.139 ] concat X%I X[ X(not\(\\f.\\n,^[,) X( \\\(,\\\),\\\\,) X( \\t,\\016,\\017\)) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 1079.92 668.82 ] concat X%I X[ X(\\t) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 1078.96 624.661 ] concat X%I X[ X(\\016) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 1079.92 569.942 ] concat X%I X[ X(\\017) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 734.325 784.017 ] concat X%I X[ X(TLP) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 807.284 784.017 ] concat X%I X[ X(TRP) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 879.282 784.017 ] concat X%I X[ X(TBS) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 953.2 784.017 ] concat X%I X[ X(TNL) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 1026.16 784.017 ] concat X%I X[ X(TFF) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 1088.56 783.057 ] concat X%I X[ X(NUL) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 1162.48 781.137 ] concat X%I X[ X(TXT) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 1181.67 688.979 ] concat X%I X[ X(TTB) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 1184.55 615.061 ] concat X%I X[ X(TSO) X] Text XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 1184.55 553.623 ] concat X%I X[ X(TSI) X] Text XEnd X XBegin %I BSpl X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 653.687 43.8745 ] concat X%I 6 X549 743 X565 752 X583 743 X583 727 X567 719 X549 728 X6 BSpl XEnd X XBegin %I Text X%I cfg Black X0 0 0 SetCFg X%I f *-courier-medium-r-*-80-* X/Courier 8 SetF X%I t X[ 0.959978 0 0 0.959978 1169.2 734.098 ] concat X%I X[ X(not\(\\f.\\n,^[,) X( \\\(,\\\),\\\\,) X( \\t,\\016,\\017\)) X] Text XEnd X XBegin %I Elli X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 893.682 259.869 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Elli X%I b 65535 X1 0 0 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 987.759 265.629 ] concat X%I X72 188 24 24 Elli XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X84 507 253 356 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X253 321 200 262 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X280 316 324 218 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X284 359 306 388 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X295 350 508 413 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X296 342 495 369 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X295 336 500 311 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X295 330 502 251 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X290 323 503 193 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X334 171 337 117 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X357 185 496 110 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X352 178 438 111 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X345 174 385 112 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X321 176 285 117 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X311 189 175 114 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X316 180 232 115 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X164 260 87 340 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X158 241 94 245 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X170 223 92 147 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X161 232 93 192 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X161 252 93 301 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X318 434 319 459 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat X%I X417 440 417 462 Line XEnd X XBegin %I Line X%I b 65535 X1 0 1 [] 0 SetB X%I cfg Black X0 0 0 SetCFg X%I cbg White X1 1 1 SetCBg X%I p X0 SetP X%I t X[ 0.959978 0 0 0.959978 657.527 46.7544 ] concat SHAR_EOF echo "End of part 9" echo "File doc/tscan.idr is continued in part 10" echo "10" > @shar_seq_.tmp exit 0