%!PS-Adobe-2.0 %%Creator: RZ Uni Zurich, Switzerland %%Title: ISOLatin1.ps %%CreationDate: 10.12.92 %%DocumentFonts: Courier Courier-Bold Helvetica Helvetica-Bold %%EndComments % % This PostScript code simulates the behavior of an IBM standard % line printer. It supports the ASA carriage control characters, % some of the machine CC characters and the ISO Latin character set. % Additionally different format and positioning are user selectable % as well as line spacing and font size. % % By setting the parameters of the user section below you can customize % your own line printer emulator, simply copy this code in front of your % listing and send the whole to your PostScript printer with PRINTDOC % (the 2 chars %! in front of the file define your file as a native % PostScript file to PRINTDOC, don't remove them). % !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! % !! Don't touch the lines of code from here to the user section,!! % !! unless you are a native PostScript expert. !! % !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! /bdef { bind def } def /even {/printall false def /printodd false def} bdef % options def. /odd {/printall false def /printodd true def} bdef /CC {/withcc true def} bdef /lm {currentfile token {/x0 exch def}if } bdef /tm {currentfile token {/y0 exch def}if } bdef /bm {currentfile token {/y1 exch def}if } bdef /ps {currentfile token {/ips exch def}if } bdef /il {currentfile token {/iil exch def /inl 0 def}if } bdef /nl {currentfile token {/inl exch def /iil 0 def}if } bdef /A4H {/A4Qopt false def /x0 100 def /y0 750 def /y1 38 def /ips 9 def} bdef /A4Q {/A4Qopt true def /x0 55 def /y0 540 def /y1 17 def /ips 7 def } bdef /Helvetica {/fontname (Helvetica) def} bdef /bold {/ibold (-Bold) def} bdef % options almost case insensitive /EVEN {even} bdef /ODD {odd} bdef /a4h {A4H} bdef /a4q {A4Q} bdef /cc {CC} bdef /reencdict 24 dict def /ReEncode { % define character set (ISO Latin 1) reencdict begin /newcodesandnames exch def /newfontname exch def /basefontname exch def /basefontdict basefontname findfont def /newfont basefontdict maxlength dict def basefontdict { exch dup /FID ne { dup /Encoding eq { exch dup length array copy newfont 3 1 roll put } { exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall newfont /FontName newfontname put newcodesandnames aload pop newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat newfontname newfont definefont pop end } def /RZUvec [ 226 /acircumflex 228 /adieresis 224 /agrave 233 /eacute 234 /ecircumflex 235 /edieresis 232 /egrave 238 /icircumflex 239 /idieresis 236 /igrave 244 /ocircumflex 246 /odieresis 242 /ograve 251 /ucircumflex 252 /udieresis 249 /ugrave 231 /ccedilla 196 /Adieresis 214 /Odieresis 220 /Udieresis 223 /germandbls ] def /strcat { exch 2 copy length exch length exch dup 5 1 roll add string dup 3 1 roll copy pop dup 4 2 roll putinterval } bdef % define printer emulation procedure /startprint { /toprint printodd printall or def % initialize /fontname fontname ibold strcat def % prepare text font fontname /RZUfont RZUvec ReEncode /textfont /RZUfont findfont ips scalefont def /psplus ips .03 mul def % calculate overprint incr. iil 0 eq { % calculate interline spacing /iil inl 0 eq {ips ips .1 mul add } % defaults to 110% fontsize {y0 y1 sub inl div } ifelse def } if % define outpage ... pagenr 0 gt { % numbering on /titlefont /Courier findfont 5 scalefont def % set numbering font titlefont setfont /xt printodd not {50} {A4Qopt {700} {530} ifelse filename stringwidth pop sub} ifelse def /yt y0 ips ips add add def /outpage { % output page with numbering toprint { titlefont setfont xt yt moveto filename show 3 0 rmoveto pagenr 4 string cvs show textfont setfont gsave showpage grestore } if /pagenr pagenr 1 add def printall not {/toprint toprint not def} if } bdef } { /outpage { % output page without numbering toprint {gsave showpage grestore} if printall not {/toprint toprint not def} if } bdef } ifelse A4Qopt {600.0 0 translate 90 rotate} if x0 y0 iil add moveto textfont setfont /str256 256 string def currentfile str256 readline % clean start line garbage pop pop % main loop: { currentfile str256 readline % Start of printer emulator loop { dup length 0 le {pop ( ) } if withcc {dup 0 get} {32} ifelse /cc exch def currentpoint exch pop { cc 49 eq cc 12 eq or { y0 le {outpage} if % 1 skip to line 1 y0 exit } if % on new page dup y0 gt withcc and {pop y0} if cc 32 eq { iil sub exit } if % blank space 1 line cc 48 eq { iil 2 mul sub exit } if % 0 space 2 lines cc 45 eq { iil 3 mul sub exit } if % - space 3 lines cc 43 eq { psplus sub exit } if % + suppress space cc 01 eq { exit } if % space 1 line after printing cc 50 eq { exit } if % space 1 line after printing (PRTLW PS: invalid ASA or machine char) = pstack iil sub exit } loop dup y1 lt {pop outpage y0} if % too far at bottom x0 exch moveto cc 43 eq { psplus 0 rmoveto} if withcc {dup length 1 sub 1 exch getinterval} if toprint { show } { pop } ifelse cc 43 eq {0 psplus rmoveto} if cc 01 eq { 0 iil neg rmoveto } if % space 1 line after printing cc 50 eq { 0 iil neg rmoveto } if % space 1 line after printing } {pop outpage printodd not toprint and {showpage} if exit} ifelse } loop } bdef %%EndProlog %%BeginSetup /fontname (Courier) def /ibold () def /pagenr 0 def /filename (Page) def %Fname: text to be printed on the right top corner in pointsize 5 % followed by a page number, 2*fontsize points above the top margin %Nr : 0 no numbering of the pages, Fname will not printed too % > 0 numbering on, start number of 1. page sent to printer /printall true def /printodd true def A4H /iil 0 def /inl 0 def /withcc false def % %%%%%%%%%%%%% % % User section: % % %%%%%%%%%%%%% % %Note: the char % starts a comment on a line !!!!!!!!!!!!!!! % Here follows a description of the parameters you can modify, % insert them before the last line. % Per default the imbed of this PostScript prolog in front of % a file allows you to print it as a text on an A4 unrotated page % with font size 10, interline spacing 11, top margin 750, % bottom margin 38 and left margin 100 and font Courier. %You can override these defaults by entering the corresponding command %before the last line of this prolog: (see example at the bottom) %"A4H" : select A4H format (unrotated) and set % font height (ps), interline (il), top margin (tm), % bottom margin (bm) and left margin to % ps 10 il 11 tm 750 bm 38 lm 100 nl 72 %"A4Q" : select A4Q format (rotated) and set % ps 7 il 7.7 tm 540 bm 17 lm 55 nl 68 %"ps" value: font size in points (1/72 inch) %"il" value: interline 0: defaults to 110% of fontsize %"nl" value: number of lines per page, compute "il" as "tm-bm/nl" %"bm" value: bottom margin %"tm" value: top margin %"lm" value: left margin %Additionally you can select the folowing print options (keyword) %"Helvetica": Helvetica font selected, (proportional!) % default font is Courier %"bold": bold font %"even": only even pages are to be printed %"odd" : only odd pages are to be printed %"CC" : ASA or machine carriage control chars in first column % Usage Note:- the last entered options superseeds any previous one % e.g. lm 200 bm 200 CC A4Q A4H even odd gives CC A4H odd % and default margins for A4H % - the print options *must* appear before the start of the emulator % unless they would be considered as a text line, the last line % with the keyword "startprint" below starts the emulator % - options and keywords are case sensitive % Examples (commented): % ps 10 bm 38 tm 750 lm 100 nl 65 % A4H, fontsize 10 points % ps 9 bm 38 tm 750 lm 100 nl 72 % PRINTDOC A4H param. % ps 7 bm 17 tm 540 lm 55 nl 68 % PRINTDOC A4Q param. % Print etiquette high quality, (generally the last etiquette is too far % at bottom and not printed), uncomment next line for manualfeed! % (manualfeed don't work correctly on some LaserWriter) % statusdict begin /manualfeed true def end % ps 8 bm 44 tm 800 lm 340 % 7 etiqu a 12 lines % ps 8 bm 10 tm 720 lm 320 % 10 etiqu a 8 lines % ps 10 il 10.75 bm 56 tm 810 lm 200 % 7 etiqu a 10 lines % for subsequent photocopy on NASHUA 4100 (RZ office) /#copies 1 def %Here again an example, this time uncommented. % your text/listing have to be appended after the *last* line % A4Q CC A4Q %%OPTIONS%% %%EndSetup startprint % never touch this line !!!!!!!!!!!!