lishka@uwslh.slh.wisc.edu (Chris Lishka (hang loose...) ) (07/10/90)
Posting-number: Volume 13, Issue 116 Submitted-by: lishka@uwslh.slh.wisc.edu (Chris Lishka (hang loose...) ) Archive-name: lj2ps-1.2/part08 ---- Cut Here and unpack ---- #!/bin/sh # this is lj2ps.08 (part 8 of a multipart archive) # do not concatenate these parts, unpack them in order with /bin/sh # file doc/BugFile 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" != 8; then echo "Please unpack part $Scheck next!" exit 1 else exit 0 fi ) < @shar_seq_.tmp || exit 1 echo "x - Continuing file doc/BugFile" sed 's/^X//' << 'SHAR_EOF' >> doc/BugFile && XOrganization: Wisconsin State Laboratory of Hygiene X Data Processing Department X XRCS: $Header: BugFile,v 1.2 90/07/07 11:03:00 lishka Production $ X X X070790 - v1.1 - Chris Lishka X XSome of the filenames for lj2ps are longer than filename limitations Xfor System V (fourteen characters) and MS-DOS (eight characters with Xthree character extension). Although it sickens me to have to conform Xto operating systems with stupid limitations, this code will not Xrun without some minor modifications on these systems. X X X060790 - v1.0 - Chris Lishka X Xlj2ps does not have a manual page! This is confusing for those who Xdon't know what the command-line options are. X X X060790 - v1.0 - Chris Lishka X Xlj2ps doesn't handle tab characters! What an oversight! This may be Xnon-trivial to add, because the scanner will probably have to be Xrecalculated. X X X060790 - v1.0 - Chris Lishka X XThe clippath used to set the right margin is not changed when Xswitching to landscape mode. This has the unfortunate effect of Xchopping lines at 8.5 inches on an 11 inch wide page. X X X060790 - v1.0 - Chris Lishka X XThere is no -w option to turn off the warning messages. SHAR_EOF echo "File doc/BugFile is complete" && $TOUCH -am 0707112690 doc/BugFile && chmod 0644 doc/BugFile || echo "restore of doc/BugFile failed" set `wc -c doc/BugFile`;Wc_c=$1 if test "$Wc_c" != "1235"; then echo original size 1235, current size $Wc_c fi # ============= doc/Copying ============== echo "x - extracting doc/Copying (Text)" sed 's/^X//' << 'SHAR_EOF' > doc/Copying && X GNU GENERAL PUBLIC LICENSE X Version 1, February 1989 X X Copyright (C) 1989 Free Software Foundation, Inc. X 675 Mass Ave, Cambridge, MA 02139, USA X Everyone is permitted to copy and distribute verbatim copies X of this license document, but changing it is not allowed. X X Preamble X X The license agreements of most software companies try to keep users Xat the mercy of those companies. By contrast, our General Public XLicense is intended to guarantee your freedom to share and change free Xsoftware--to make sure the software is free for all its users. The XGeneral Public License applies to the Free Software Foundation's Xsoftware and to any other program whose authors commit to using it. XYou can use it for your programs, too. X X When we speak of free software, we are referring to freedom, not Xprice. Specifically, the General Public License is designed to make Xsure that you have the freedom to give away or sell copies of free Xsoftware, that you receive source code or can get it if you want it, Xthat you can change the software or use pieces of it in new free Xprograms; and that you know you can do these things. X X To protect your rights, we need to make restrictions that forbid Xanyone to deny you these rights or to ask you to surrender the rights. XThese restrictions translate to certain responsibilities for you if you Xdistribute copies of the software, or if you modify it. X X For example, if you distribute copies of a such a program, whether Xgratis or for a fee, you must give the recipients all the rights that Xyou have. You must make sure that they, too, receive or can get the Xsource code. And you must tell them their rights. X X We protect your rights with two steps: (1) copyright the software, and X(2) offer you this license which gives you legal permission to copy, Xdistribute and/or modify the software. X X Also, for each author's protection and ours, we want to make certain Xthat everyone understands that there is no warranty for this free Xsoftware. If the software is modified by someone else and passed on, we Xwant its recipients to know that what they have is not the original, so Xthat any problems introduced by others will not reflect on the original Xauthors' reputations. X X The precise terms and conditions for copying, distribution and Xmodification follow. X X GNU GENERAL PUBLIC LICENSE X TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION X X 0. This License Agreement applies to any program or other work which Xcontains a notice placed by the copyright holder saying it may be Xdistributed under the terms of this General Public License. The X"Program", below, refers to any such program or work, and a "work based Xon the Program" means either the Program or any work containing the XProgram or a portion of it, either verbatim or with modifications. Each Xlicensee is addressed as "you". X X 1. You may copy and distribute verbatim copies of the Program's source Xcode as you receive it, in any medium, provided that you conspicuously and Xappropriately publish on each copy an appropriate copyright notice and Xdisclaimer of warranty; keep intact all the notices that refer to this XGeneral Public License and to the absence of any warranty; and give any Xother recipients of the Program a copy of this General Public License Xalong with the Program. You may charge a fee for the physical act of Xtransferring a copy. X X 2. You may modify your copy or copies of the Program or any portion of Xit, and copy and distribute such modifications under the terms of Paragraph X1 above, provided that you also do the following: X X a) cause the modified files to carry prominent notices stating that X you changed the files and the date of any change; and X X b) cause the whole of any work that you distribute or publish, that X in whole or in part contains the Program or any part thereof, either X with or without modifications, to be licensed at no charge to all X third parties under the terms of this General Public License (except X that you may choose to grant warranty protection to some or all X third parties, at your option). X X c) If the modified program normally reads commands interactively when X run, you must cause it, when started running for such interactive use X in the simplest and most usual way, to print or display an X announcement including an appropriate copyright notice and a notice X that there is no warranty (or else, saying that you provide a X warranty) and that users may redistribute the program under these X conditions, and telling the user how to view a copy of this General X Public License. X X d) You may charge a fee for the physical act of transferring a X copy, and you may at your option offer warranty protection in X exchange for a fee. X XMere aggregation of another independent work with the Program (or its Xderivative) on a volume of a storage or distribution medium does not bring Xthe other work under the scope of these terms. X X 3. You may copy and distribute the Program (or a portion or derivative of Xit, under Paragraph 2) in object code or executable form under the terms of XParagraphs 1 and 2 above provided that you also do one of the following: X X a) accompany it with the complete corresponding machine-readable X source code, which must be distributed under the terms of X Paragraphs 1 and 2 above; or, X X b) accompany it with a written offer, valid for at least three X years, to give any third party free (except for a nominal charge X for the cost of distribution) a complete machine-readable copy of the X corresponding source code, to be distributed under the terms of X Paragraphs 1 and 2 above; or, X X c) accompany it with the information you received as to where the X corresponding source code may be obtained. (This alternative is X allowed only for noncommercial distribution and only if you X received the program in object code or executable form alone.) X XSource code for a work means the preferred form of the work for making Xmodifications to it. For an executable file, complete source code means Xall the source code for all modules it contains; but, as a special Xexception, it need not include source code for modules which are standard Xlibraries that accompany the operating system on which the executable Xfile runs, or for standard header files or definitions files that Xaccompany that operating system. X X 4. You may not copy, modify, sublicense, distribute or transfer the XProgram except as expressly provided under this General Public License. XAny attempt otherwise to copy, modify, sublicense, distribute or transfer Xthe Program is void, and will automatically terminate your rights to use Xthe Program under this License. However, parties who have received Xcopies, or rights to use copies, from you under this General Public XLicense will not have their licenses terminated so long as such parties Xremain in full compliance. X X 5. By copying, distributing or modifying the Program (or any work based Xon the Program) you indicate your acceptance of this license to do so, Xand all its terms and conditions. X X 6. Each time you redistribute the Program (or any work based on the XProgram), the recipient automatically receives a license from the original Xlicensor to copy, distribute or modify the Program subject to these Xterms and conditions. You may not impose any further restrictions on the Xrecipients' exercise of the rights granted herein. X X 7. The Free Software Foundation may publish revised and/or new versions Xof the General Public License from time to time. Such new versions will Xbe similar in spirit to the present version, but may differ in detail to Xaddress new problems or concerns. X XEach version is given a distinguishing version number. If the Program Xspecifies a version number of the license which applies to it and "any Xlater version", you have the option of following the terms and conditions Xeither of that version or of any later version published by the Free XSoftware Foundation. If the Program does not specify a version number of Xthe license, you may choose any version ever published by the Free Software XFoundation. X X 8. If you wish to incorporate parts of the Program into other free Xprograms whose distribution conditions are different, write to the author Xto ask for permission. For software which is copyrighted by the Free XSoftware Foundation, write to the Free Software Foundation; we sometimes Xmake exceptions for this. Our decision will be guided by the two goals Xof preserving the free status of all derivatives of our free software and Xof promoting the sharing and reuse of software generally. X X NO WARRANTY X X 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY XFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN XOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES XPROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED XOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF XMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS XTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE XPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, XREPAIR OR CORRECTION. X X 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING XWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR XREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, XINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING XOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED XTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY XYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER XPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE XPOSSIBILITY OF SUCH DAMAGES. X X END OF TERMS AND CONDITIONS X X Appendix: How to Apply These Terms to Your New Programs X X If you develop a new program, and you want it to be of the greatest Xpossible use to humanity, the best way to achieve this is to make it Xfree software which everyone can redistribute and change under these Xterms. X X To do so, attach the following notices to the program. It is safest to Xattach them to the start of each source file to most effectively convey Xthe exclusion of warranty; and each file should have at least the X"copyright" line and a pointer to where the full notice is found. X X <one line to give the program's name and a brief idea of what it does.> X Copyright (C) 19yy <name of author> X X This program is free software; you can redistribute it and/or modify X it under the terms of the GNU General Public License as published by X the Free Software Foundation; either version 1, or (at your option) X any later version. X X This program is distributed in the hope that it will be useful, X but WITHOUT ANY WARRANTY; without even the implied warranty of X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the X GNU General Public License for more details. X X You should have received a copy of the GNU General Public License X along with this program; if not, write to the Free Software X Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. X XAlso add information on how to contact you by electronic and paper mail. X XIf the program is interactive, make it output a short notice like this Xwhen it starts in an interactive mode: X X Gnomovision version 69, Copyright (C) 19xx name of author X Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. X This is free software, and you are welcome to redistribute it X under certain conditions; type `show c' for details. X XThe hypothetical commands `show w' and `show c' should show the Xappropriate parts of the General Public License. Of course, the Xcommands you use may be called something other than `show w' and `show Xc'; they could even be mouse-clicks or menu items--whatever suits your Xprogram. X XYou should also get your employer (if you work as a programmer) or your Xschool, if any, to sign a "copyright disclaimer" for the program, if Xnecessary. Here a sample; alter the names: X X Yoyodyne, Inc., hereby disclaims all copyright interest in the X program `Gnomovision' (a program to direct compilers to make passes X at assemblers) written by James Hacker. X X <signature of Ty Coon>, 1 April 1989 X Ty Coon, President of Vice X XThat's all there is to it! SHAR_EOF $TOUCH -am 0707112690 doc/Copying && chmod 0664 doc/Copying || echo "restore of doc/Copying failed" set `wc -c doc/Copying`;Wc_c=$1 if test "$Wc_c" != "12487"; then echo original size 12487, current size $Wc_c fi # ============= doc/LogFile ============== echo "x - extracting doc/LogFile (Text)" sed 's/^X//' << 'SHAR_EOF' > doc/LogFile && XProject: lj2ps, LaserJet PCL to PostScript translator XFile: LogFile X XAuthor: Christopher Lishka XOrganization: Wisconsin State Laboratory of Hygiene X Data Processing Department X XRCS: $Header: LogFile,v 1.2 90/07/07 11:03:05 lishka Production $ X X X070790 - v1.2 - Chris Lishka X XThis is the second release revision that will be sent to Xcomp.sources.misc. It fixes problems with filename lengths in Xrevision 1.1, as reported in BugFile. X X X063090 - v1.1 - Chris Lishka X XThis is the version I am releasing to the general public through Xcomp.sources.misc. lj2ps is identical to the 1.0.1.2 local version. XHowever, I have updated and cleaned up the documentation for this Xrelease revision. I also redrew the two scanners with idraw, as much Xso that I could remember how they work as for other people. X X X061690 - v1.0.1.2 - Chris Lishka X XThis is a local revision which fixes a very major bug as well as Xadding some functionality for those who want to extend this program. X XI have added support for tabs. They function identically to LaserJet Xtabs for fixed-spacing fonts. However, the LaserJet does some really Xstupid things with proportional font tabs, and I chose to use Xsomething completely different (and more logical) for proportional Xfonts. As a small step to indicate incompatibility, a warning is Xprinted if tabs are used while using a proportional font. My logic is Xthat people ought not to be using the brain-damaged LaserJet Xproportional tabs anyways. X XHooks are now present in the scanner for detecting shift-in and Xshift-out. Unique tokens are returned for both. However, shift-in Xand shift-out are not recognized by the "parser" (actually, the Xfunction transform()), so only warnings are produced now. On the Xother hand, if anyone wants to *add* shift-in and shift-out Xcapabilities (hint, hint, wink, wink, nudge, nudge ;-), they won't Xhave to bugger-up the scanner to achieve this (which is somewhat of a Xpain). X X X061390 - v1.0.1.1 - Chris Lishka X XThis is a new local revision, which is built off the 1.0 major Xrevision. It fixes a serious bug, and a few minor ones. X XThe 8.5 inch default right margin has been changed to a "very large" Xright margin. This fixes the right margin problem when rotating to Xlandscape mode. X XI have added a command-line option -w, which (when set) suppresses Xwarning messages. X XI have added a compile-time option -DDEBUG which controls whether or Xnot debugging code is included in the executable. If -DDEBUG is Xincluded, an extra -d command-line option is available to turn on Xdifferent levels of diagnostic debugging output. X XI have added a compile-time option -DVERBOSE_WARNINGS which controls Xwhether all types of of warnings are printed. If not set, only Ximportant warnings will be printed out. If set, *all* types of Xwarnings (both important and trivial) will be printed. X X X060790 - v1.0 - Chris Lishka X XThe initial revision of lj2ps. This version is currently running, Xalthough the one I am checking in right now has a minor efficiency fix X(which keeps lj_match_font from running once per attribute!). This is Xnot the revision which will be distributed, as that one must have a Xproper copyright notice attached. SHAR_EOF $TOUCH -am 0707112690 doc/LogFile && chmod 0644 doc/LogFile || echo "restore of doc/LogFile failed" set `wc -c doc/LogFile`;Wc_c=$1 if test "$Wc_c" != "3173"; then echo original size 3173, current size $Wc_c fi # ============= doc/commands.doc ============== echo "x - extracting doc/commands.doc (Text)" sed 's/^X//' << 'SHAR_EOF' > doc/commands.doc && XProgram: lj2ps, 1.2 (release) XFile: commands.doc X XAuthor: Chris Lishka XOrganization: Wisconsin State Laboratory of Hygiene X Data Processing Department X XDate: April 10th, 1990 XLast modified: June 30th, 1990 X X XTopic: PCL IV Commands Supported by lj2ps X XThis table lists the commands in LaserJet PCL 4 that I implemented in Xlj2ps. All commands preceded by an asterisk are supported. The Xordering is the same as Table A-4 in Appendix A in the "LaserJet XSeries II Printer Technical Reference Manual." X X X Job Control Commands X XReset X* ^[E Reset X* ^[&l#X Number of Copies X* ^[&l#H Paper Input Control X XPage Length and Size X* ^[&l#A Page Size X ^[&l#P Page Length X* ^[&l#O Orientation X XMargins and Text Length X* ^[&l#E Top Margin X* ^[&l#F Text Length X* ^[&a#L Left Margin X* ^[&a#M Right Margin X* ^[9 Clear Margins X XPerforation Skip Mode X ^[&l#L Perforation Skip X XHorizontal Column Spacing X* ^[&k#H Horizontal Motion Index X XVertical Line Spacing X* ^[&l#C Vertical Motion Index X* ^[&l#D Lines per Inch X X X Cursor Positioning X XVertical and Horizontal X* ^[&a#R Vertical by Rows X* ^[*p#Y Vertical by Dots X* ^[&a#V Vertical by Decipoints X* ^[&a#C Horizontal by Columns X* ^[*p#X Horizontal by Dots X* ^[&a#H Horizontal by Decipoints X* ^[= Half-Line Feed X XEnd-of-Line Termination X ^[&k#G Line Termination X XPush/Pop Position X ^[&f#S Push/Pop position X X X Font Selection X XOrientation X* ^[&l#O Orientation X XSymbol Set Selection X ^[(#? Primary Symbol Set (where #? is the symbol set) X ^[)#? Secondary Symbol Set (where #? is the symbol set) X XSpacing X* ^[(s#P Primary Font Spacing X ^[)s#P Secondary Font Spacing X XPitch X* ^[(s#H Primary Font Pitch X ^[)s#H Secondary Font Pitch X XPoint Size X* ^[(s#V Primary Font Point Size X ^[)s#V Secondary Font Point Size X XStyle X* ^[(s#S Primary Font Style X ^[)s#S Secondary Font Style X XStroke Weight X* ^[(s#B Primary Font Stroke Weight X ^[)s#B Secondary Font Stroke Weight X XTypeface X* ^[(s#T Primary Font Typeface X ^[)s#T Secondary Font Typeface X XPitch (Alternate Method) X ^[&k#S Primary & Secondary Font Pitch X ^[(3@ Primary Font Default X ^[)3@ Secondary Font Default X XUnderline X* ^[&d0D Enable Fixed Underline X ^[&d3D Enable Floating Underline X* ^[&d@ Disable Underline X X X Font Management X XFont Control X ^[*c#D Assign Font ID X ^[*c#F Font and Character Control X XFont Selection by Number X ^[(#X Select Primary Font With ID X ^[)#X Select Secondary Font With ID X X X Soft Font Creation X X ^[)s#W Create Font (Font Header) X ^[(s#W Download Character X ^[*c#E Character Code X X X Graphics X XRaster Graphics X ^[*t#R Resolution X ^[*r#A Start Graphics X ^[*b#W Transfer X ^[*rB End Graphics X XRectangle Dimensions X ^[*c#A Rectangle Width in Dots X ^[*c#H Rectangle Width in Decipoints X ^[*c#B Rectangle Height in Dots X ^[*c#V Rectangle Height in Decipoints X XRectangular Area Fill X ^[*c#P Fill Rectangle Area X ^[*c#G Shape X ^[*c#G Pattern X X X Macros X XMacro ID and Control X ^[&f#Y Macro ID X ^[&f#X Macro Control X X X Programming Aids X X ^Y Display Functions On X ^Z Display Functions Off X XEnd-of-Line Wrap X ^[&s#C End-of-Line Wrap SHAR_EOF $TOUCH -am 0707112690 doc/commands.doc && chmod 0664 doc/commands.doc || echo "restore of doc/commands.doc failed" set `wc -c doc/commands.doc`;Wc_c=$1 if test "$Wc_c" != "3165"; then echo original size 3165, current size $Wc_c fi # ============= doc/compopts.doc ============== echo "x - extracting doc/compopts.doc (Text)" sed 's/^X//' << 'SHAR_EOF' > doc/compopts.doc && XProject: lj2ps, 1.2 (release) XFile: compopts.doc X XAuthor: Chris Lishka XOrganization: Wisconsin State Laboratory of Hygiene X Data Processing Dept. X XDate: June 13th, 1990 XLast modified: June 30th, 1990 by Chris Lishka X X XTopic: Compile-Time Options X Xlj2ps revisions after 1.0 have several compile-time options available. XThese options allow certain features to be compiled into the Xexecutable. Inclusion of the option will make the lj2ps program more Xfunctional; exclusion will yield a slightly faster and smaller Xprogram. The options should be set with the -DOPTION flag for the C Xcompiler, and will usually be included in a variable definition in the XMakefile. X XWhat follows are descriptions of the options which are currently Xavailable: X XDEBUG X XNormally debugging information will be left out. If DEBUG is defined, Xthen code to implement debugging will be conditionally compiled into Xthe final lj2ps executable. This extra code will allow different Xlevels of debugging information to be printed out when the -d# Xcommand-line option is include, where # is the debugging level. XCurrently, the following levels are offered: X X 0 No debugging info. This is the default. X 1 Tokens are printed out. Rather verbose. X 2 Tokens and input characters are both printed X out. Super-duper verbose. X XVERBOSE_WARNINGS X XThere are several warning messages that will occur frequently during Xnormal lj2ps usage. For example, since there is only one symbol set, Xlj2ps does not recognize any symbol sets in the PCL change-symbol-set Xcommand. This leads to many warnings. If VERBOSE_WARNINGS is set, Xthen all warning messages will be printed. Otherwise, the common (but Xunimportant) warnings will be supressed. X X SHAR_EOF $TOUCH -am 0707112690 doc/compopts.doc && chmod 0664 doc/compopts.doc || echo "restore of doc/compopts.doc failed" set `wc -c doc/compopts.doc`;Wc_c=$1 if test "$Wc_c" != "1706"; then echo original size 1706, current size $Wc_c fi # ============= doc/limits.doc ============== echo "x - extracting doc/limits.doc (Text)" sed 's/^X//' << 'SHAR_EOF' > doc/limits.doc && XProgram: lj2ps, 1.2 (release) XFile: limits.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: Implementation Limitations X XThis file contains known limitations of the lj2ps program. The Xlimitations come in two basic varieties: (a) those that exist because Xof inherent differences between the LaserJet and LaserWriter; and (b) Xthose that exist because I do not have enough time to fix them. All Xlimitations listed should be assumed to belong in the second category Xunless otherwise noted. X X* As has been mentioned many times in the documentation, I did not X have time to implement all LaserJet commands in PCL 4 (let alone PCL X 5). Instead, I leave this as an exercise for the reader ;-) I have X implemented what was needed by my organization, and represents a X subset of PCL 4 which supports (fairly completely) page motion, page X setup, and internal and cartridge fonts. Commands which were left X out include: X X ** Macros X X ** Position stack X X ** Graphics -- patterns and grayshades X X ** Graphics -- bitmaps X X ** Secondary font support X X ** Downloadable fonts X X X* Although I put a fair amount of work into the Test Suite and Metrics X Suite, they are by no means complete. They do test a fair amount of X LaserJet quirks, and proved to be very helpful in fine tuning lj2ps. X Feel free to add more tests to either suite. X X* Tabs do not work exactly like the LaserJet when using proportional X fonts. This is because a given tab position depends on the current X location of the cursor, which might be different from the LaserJet X and LaserWriter. Therefore, when a proportional font is used, tabs X might end up in the wrong places. However, tabs are not a good X thing to use with a proportional font anyway. Note that tabs used X with fixed-width fonts should behave exactly the same way. X X* Another problem related to tabs is the mechanism I have used. On X the LaserJet, tabs are counted out using characters printed. To X move to the next tab stop, the LaserJet will simply insert enough X space characters to reach a position which is a multiple of eight X characters. With proportional fonts, this results in tab stops not X being in fixed columns, but rather dependent on the width of the X characters printed before the tab. (I think this method is X downright foolish, because it renders the purpose of tabs useless X with proportional fonts). I have chosen to calculate tabs as being X in columns, with the distance between columns being eight space X characters in the current font. This allows tabs to be used to line X up text at each tab stop with proportional fonts. Note that X although the two schemes give different results with proportional X fonts, the behaviors match exactly when using fixed-width fonts. X X* The HMI command cannot be fully implemented. This is an inherent X problem with the lj2ps program. The HMI command on the LaserJet X works in one of two ways: X X (a) If the font is non-proportional, then the HMI command X adjusts the individual width of each character; X X (b) If the font is proportional, then the HMI command only X adjusts the width of the *space* character. X X Unfortunately, lj2ps uses a crude font mapping mechanism for X emulating LaserJet fonts in PostScript. One of the inherent X limitations is the inability to adjust the individual width of each X character in the PostScript font. It is for this reason that the X HMI command cannot be fully implemented. Unfortunately, there is no X good way to fix this without overhauling the font mapping mechanism. X X The HMI command *does* change lj2ps' notion of the current character X spacing (in the variable char_width). This is useful for doing X horizontal tabs using columns. This is why the HMI command has been X implemented at all. X X* The postscript file produced by lj2ps is definitely not suitable as X encapsulated postscript. One important example is that the X "initclip" command must be used when resetting the right margin to X insure that the clip-path can "grow" if the right margin gets X bigger. X X* To effectively emulate LaserJet relative horizontal motion commands X with the current font mechanism, I had to move horizontal motion X into the generated PostScript program. Therefore, although X horizontal motion is tracked in lj2ps, it is only updated every time X an absolute horizontal motion is performed (including non-command X motions such as newline). This makes the horizontal cursor position X in the lj2ps program innaccurate much of the time. The only fix I X can think of is to replace the font emulation mechanism with X something better. Note that vertical motion is tracked completely X in lj2ps, and is of little importance in the generated PostScript X code. X X SHAR_EOF $TOUCH -am 0707112690 doc/limits.doc && chmod 0664 doc/limits.doc || echo "restore of doc/limits.doc failed" set `wc -c doc/limits.doc`;Wc_c=$1 if test "$Wc_c" != "4904"; then echo original size 4904, current size $Wc_c fi # ============= doc/lj2ps.l ============== echo "x - extracting doc/lj2ps.l (Text)" sed 's/^X//' << 'SHAR_EOF' > doc/lj2ps.l && X.\" Program: lj2ps 1.2, release X.\" File: lj2ps.l (man page documentation) X.\" X.\" Author: Chris Lishka X.\" Organization: Wisconsin State Laboratory of Hygiene X.\" Data Processing Section X.\" X.TH LJ2PS l "June 30th, 1990 (Revision 1.2)" X.SH NAME X\fBlj2ps\fR \- print \fILaserJet\fR files on a \fIPostScript\fR printer X.SH SYNOPSIS X\fBljlpr [ \fIoptions\fB ] [ \fIfiles\fB ] \fR X.SH DESCRIPTION X.PP X\fBlj2ps\fR is a translator that reads in a file of text and X\fILaserJet PCL\fR commands and converts it to \fIPostScript.\fR X\fBlj2ps\fR can currently translate a subset of \fIPCL 4.\fR It will Xproperly convert page motion, page setup, and primary font commands. XLeft out are macros, position stack commands, secondary font support, Xgraphics (both bitmap and pattern/grayscale), and downloadable fonts. X.PP X\fBlj2ps\fR is set up to mimic a \fILaserJet Series II\fR with the X\fIHewlett Packard F\fR and \fIG\fR font cartridges plugged into the Xleft and right ports, respectively. Command-line options are provided Xthat duplicate the functions in the main menu, accessible from the Xfront panel. X.PP XIf \fIfiles\fR are listed on the command line, then \fBlj2ps\fR will Xread each consecutively as if they were all one file. If no files are Xlisted, then input will be read from the \fIstandard input.\fR All Xoutput is written to the \fIstandard output,\fR and errors to the X\fIstandard error.\fR X.SH OPTIONS X.PP X.IP "\fBLaserJet II Main Menu Options\fR" 2 X.IP "\fB-c##\fR" 5 XSets the numbers of copies to \fB##\fR. The default is one copy. X.IP "\fB-mf\fR" 5 XSpecifies that paper is to be fed in manually. The default is to Xautomatically feed paper in from the tray. X.IP "\fB-fs?\fR" 5 XChange the default font source to \fB?\fR, where \fB?\fR is \fBL\fR X(left cartridge), \fBR\fR (right cartridge), \fBI\fR (internal), or X\fBS\fR (soft font). The default is \fBI\fR (internal). X.IP "\fB-fn##\fR" 5 XUse font number \fB##\fR from the default font source. The default is Xfont number zero. X.IP "\fB-fl##\fR" 5 XSet the form length to \fB##\fR lines. The default is 60 lines. X.IP "\fBPage Orientation\fR" 2 X.IP "\fB-p\fR" 5 XPrint in portrait mode. This is the default. X.IP "\fB-l\fR" 5 XPrint in landscape mode. X.IP "\fBPage Scaling and Offsets\fR" 2 X.IP "\fB-xs##\fR" 5 XScale the width of the page by \fB##\fR. The default is 1.0 (no Xscaling). X.IP "\fB-ys##\fR" 5 XScale the length of the page by \fB##\fR. The default is 1.0 (no Xscaling). X.IP "\fB-xo##\fR" 5 XOffset the left margin by \fB##\fR inches. The default is 0.0 inches. X.IP "\fB-yo##\fR" 5 XOffest the top margin by \fB##\fR inches. The default is 0.0 inches. X.IP "\fBMiscellaneous\fR" 2 X.IP "\fB-X\fR" 5 XPrint a list of all options recognized. X.IP "\fB-w\fR" 5 XDo not print warning messages. X.SH "SEE ALSO" XPlease refer to your local printing software to determine how to send Xthe \fIPostScript\fR output of \fBlj2ps\fR to your printer. X.SH RESTRICTIONS XOnly a subset of \fIPCL 4\fR is currently recognized. X.SH DIAGNOSTICS X.PP X\fBljlpr\fR will return with exit code 0 if no errors are Xencountered or exit code 1 if a fatal error occurs. X.PP XFour types of messages are printed: X.PP X\fBWarnings\fR are printed to inform the user of possible problems Xwith the output. Although warnings are never serious, they do Xindicate possible problems with the LaserJet commands, or features Xbeing used that are not actually implemented in \fBlj2ps\fR. Warnings Xcan be turned off with the \fB-w\fR option. X.PP X\fBErrors\fR indicate recoverable problems in the input or output that Xshould be corrected. The program will continue running if an error is Xencountered, although the output will likely be missing some features. X.PP X\fBFatal Errors\fR are non-recoverable errors, and will cause the Xprogram to immediately terminate with a non-zero exit code. Fatal Xerrors must be corrected before \fBlj2ps\fR will accept the entire Xinput file. X.PP X\fBInternal Errors\fR indicate that an internal consistency check has Xfailed, and will cause immediate termination of execution. Please Xcontact the person maintaining \fBlj2ps\fR and describe the internal Xerror, so that she or he may fix it. X.SH BUGS X.PP XTabs do not work properly with proportional fonts. However, the X\fILaserJet\fR's scheme for handling tabs with proportional fonts is Xbadly botched, so you shouldn't be using proportional fonts anyway. X.PP XThe behavior of the HMI command is different from the \fILaserJet\fR. X.PP XThe \fIPostScript\fR file produced by \fBlj2ps\fR is not suitable as X\fIEncapsulated PostScript,\fR because initclip is used to reset the Xright margin. X X SHAR_EOF $TOUCH -am 0707112690 doc/lj2ps.l && chmod 0664 doc/lj2ps.l || echo "restore of doc/lj2ps.l failed" set `wc -c doc/lj2ps.l`;Wc_c=$1 if test "$Wc_c" != "4593"; then echo original size 4593, current size $Wc_c fi # ============= doc/measures.doc ============== echo "x - extracting doc/measures.doc (Text)" sed 's/^X//' << 'SHAR_EOF' > doc/measures.doc && XProject: lj2ps, 1.2 (release) XFile: measures.doc X XAuthor: Christopher Lishka XOrganization: Wisconsin State Laboratory of Hygiene X Data Processing Dept. X XDate: June 30th, 1990 X X XTopic: LaserJet Measurements X XMeasurement Name Units per Inch Inches per Unit Comments X=============== ======= =============== =============== ======================= X XInch in 1 1 The default unit; fixed X XPage Height ph Default=0.0909 Default=11 Depends on page size X XPage Width pw Default=0.1176 Default=8.5 Depends on page size X XDots dt 300 0.0033 Fixed X XDecipoints dp 720 0.0031 Fixed X XLines/Inch li Default=6 Default=0.1667 Can be reset by user X XColumns/Inch ci Depends on current font SHAR_EOF $TOUCH -am 0707112690 doc/measures.doc && chmod 0664 doc/measures.doc || echo "restore of doc/measures.doc failed" set `wc -c doc/measures.doc`;Wc_c=$1 if test "$Wc_c" != "684"; then echo original size 684, current size $Wc_c fi # ============= doc/pscan.idr ============== echo "x - extracting doc/pscan.idr (Text)" sed 's/^X//' << 'SHAR_EOF' > doc/pscan.idr && X%!PS-Adobe-2.0 EPSF-1.2 X%%DocumentFonts: Courier X%%Pages: 1 X%%BoundingBox: 101 41 511 775 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[ 2.88889 0 0 2.88889 127.5 804.556 ] concat X%I X[ X(Parameter Scanner for lj2ps) 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 133 142 ] 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 SP_\).) 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 end states UNK, PE, and PC is to accept the last character.) X( The action for the end state PE0 is to put the character back into the) X( 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[ 1 0 0 1 241 775 ] concat X%I X[ X(lj2ps, version 1.1 \(release\)) 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.804699 0 0 0.804699 60.6917 140.023 ] concat 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[ 1 0 0 1 416 287 ] 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 513 718 ] concat X%I X[ X(End) X(Parameter) X(\(Zero Numeric\)) 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 502 680 ] concat X%I X[ X(PE0) X] Text XEnd X XEnd %I eop 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.804699 0 0 0.804699 61.6917 209.023 ] concat 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[ 1 0 0 1 414 78 ] 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 510 500 ] concat X%I X[ X(Unknown) 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 500 470 ] concat X%I X[ X(UNK) X] Text XEnd X XEnd %I eop 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.804699 0 0 0.804699 61.6917 209.023 ] concat 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[ 1 0 0 1 419 -135 ] 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 515 290 ] concat X%I X[ X(End) X(Parameter) 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 508 257 ] concat X%I X[ X(PE) X] Text XEnd X XEnd %I eop 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.804699 0 0 0.804699 398.056 -22.7305 ] 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[ 0.804699 0 0 0.804699 475.307 318.462 ] concat X%I X[ X(Continue) X(Parameter) 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 468.869 291.907 ] concat X%I X[ X(PC) 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 258.233 265.547 ] concat X%I X[ X(PINT) 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 207.342 387.666 ] concat X%I X[ X(FLP) X] Text 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 93.8796 208.023 ] 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[ 0.804699 0 0 0.804699 109.388 521.465 ] concat X%I X[ SHAR_EOF echo "End of part 8" echo "File doc/pscan.idr is continued in part 9" echo "9" > @shar_seq_.tmp exit 0