% the postscript header we use for our qpsprinter in uncompressed and commented form.% use the makepsheader perl script to generate a compressed version of this header% you can then paste into qpsprinter.cpp%% some compression of the code is done by the makepsheader script, so we don't need to % write too criptically here. /BD {bind def} bind def/d2 {dup dup} BD/ED {exch def} BD/D0 {0 ED} BD/F {setfont} BD/RL {rlineto} BD/CM {currentmatrix} BD/SM {setmatrix} BD/TR {translate} BD/SD {setdash} BD/SC {aload pop setrgbcolor} BD/CR {currentfile read pop} BD/i {index} BD/scs {setcolorspace} BD/DB {dict dup begin} BD/DE {end def} BD/ie {ifelse} BD/gs {gsave} BD/gr {grestore} BD% these use PDF syntax/w {setlinewidth} BD/d {setdash} BD/J {setlinecap} BD/j {setlinejoin} BD/scn {3 array astore /BCol exch def} BD/SCN {3 array astore /PCol exch def} BD/cm {6 array astore concat} BD/m {moveto} BD/l {lineto} BD/c {curveto} BD/h {closepath} BD/W {clip} BD/W* {eoclip} BD/n {newpath} BD% ENDUNCOMPRESSED: Warning: leave this line in. % Everything before this line will be left untouched by the compression/q {gsave 10 dict begin} BD/Q {end grestore} BD% PDF operators/re { % PDF re operator 4 2 roll % w h x y moveto % w h dup % w h h 0 exch rlineto % w h exch 0 rlineto % h 0 exch neg rlineto closepath} bind def/S { gsave PCol SC stroke grestore newpath} BD% PDF text operators/BT {gsave 10 dict begin /_m matrix currentmatrix def BCol SC} BD/ET {end grestore} BD/Tf { /_fs exch def findfont [ _fs 0 0 _fs 0 0 ] makefont setfont} BD/Tm {6 array astore concat} BD/Td {translate} BD/Tj {0 0 moveto show} BD/BDC {pop pop} BD/EMC {} BD% old operators/BSt 0 def % brush style/WFi false def % winding fill/BCol [ 1 1 1 ] def % brush color/PCol [ 0 0 0 ] def % pen color/BDArr [ % Brush dense patterns 0.94 0.88 0.63 0.50 0.37 0.12 0.06 ] def% -- level3 true/false/level3 { /languagelevel where { pop languagelevel 3 ge } { false } ifelse} bind def%% image drawing routines% defines for QCI/QCIgray D0 /QCIcolor D0 /QCIindex D0% this method prints color images if colorimage is available, otherwise% converts the string to a grayscale image and uses the reular postscript image% operator for printing.% Arguments are the same as for the image operator:% % width height bits/sample matrix datasrc QCI -/QCI { /colorimage where { pop false 3 colorimage }{ % the hard way, based on PD code by John Walker <kelvin@autodesk.com> exec /QCIcolor exch def /QCIgray QCIcolor length 3 idiv string def 0 1 QCIcolor length 3 idiv 1 sub { /QCIindex exch def /_x QCIindex 3 mul def QCIgray QCIindex QCIcolor _x get 0.30 mul QCIcolor _x 1 add get 0.59 mul QCIcolor _x 2 add get 0.11 mul add add cvi put } for QCIgray image } ifelse} bind def% general image drawing routine, used from the postscript driver%% Draws images with and without mask with 1, 8 and 24(rgb) bits depth.%% width height matrix image 1|8|24 mask|false x y di%% width and height specify the width/height of the image,% matrix a transformation matrix, image a procedure holding the image data% (same for mask) and x/y an additional translation.%% ### should move the translation into the matrix!!!/di { gsave translate 1 index 1 eq { % bitmap pop pop % get rid of mask and depth false 3 1 roll % width height false matrix image BCol SC imagemask } { dup false ne { % have a mask, see if we can use it level3 } { false } ifelse { % languagelevel3, we can use image mask and dicts % store the image mask /_ma exch def % select colorspace according to 8|24 bit depth and set the decode array /dc 8 eq { /_dc [0 1] def /DeviceGray } { /_dc [0 1 0 1 0 1] def /DeviceRGB } ifelse setcolorspace % the image data /_im exch def % transformation matrix /_mt exch def % width and height /_h exch def /_w exch def % and the combined image dict << /ImageType 3 % the image dict /DataDict << /ImageType 1 /Width _w /Height _h /ImageMatrix _mt /DataSource _im /BitsPerComponent 8 /Decode _dc >> % the mask dictionary /MaskDict << /ImageType 1 /Width _w /Height _h /ImageMatrix _mt /DataSource _ma /BitsPerComponent 1 /Decode [0 1] >> /InterleaveType 3 >> image } { pop % no mask or can't use it, get rid of it 8 % width height image 8|24 8 matrix 4 1 roll 8 eq { % grayscale image } { %color QCI } ifelse } ifelse } ifelse grestore } bind def/BF { % brush fill gsave BSt 1 eq % solid brush? { BCol SC WFi { fill } { eofill } ifelse } if BSt 2 ge BSt 8 le and % dense pattern? { BDArr BSt 2 sub get /_sc exch def % the following line scales the brush color according to the pattern. the higher the pattern the lighter the color. BCol { 1. exch sub _sc mul 1. exch sub } forall 3 array astore SC WFi { fill } { eofill } ifelse } if BSt 9 ge BSt 14 le and % brush pattern? { WFi { clip } { eoclip } ifelse pathbbox % left upper right lower 3 index 3 index translate 4 2 roll % right lower left upper 3 2 roll % right left upper lower exch % left right lower upper sub /_h exch def sub /_w exch def BCol SC 0.3 setlinewidth newpath BSt 9 eq BSt 11 eq or % horiz or cross pattern { 0 4 _h { dup 0 exch moveto _w exch lineto } for } if BSt 10 eq BSt 11 eq or % vert or cross pattern { 0 4 _w { dup 0 moveto _h lineto } for } if BSt 12 eq BSt 14 eq or % F-diag or diag cross { _w _h gt { 0 6 _w _h add { dup 0 moveto _h sub _h lineto } for } { 0 6 _w _h add { dup 0 exch moveto _w sub _w exch lineto } for } ifelse } if BSt 13 eq BSt 14 eq or % B-diag or diag cross { _w _h gt { 0 6 _w _h add { dup _h moveto _h sub 0 lineto } for } { 0 6 _w _h add { dup _w exch moveto _w sub 0 exch lineto } for } ifelse } if stroke } if BSt 15 eq { } if BSt 24 eq % TexturePattern { } if grestore} bind def% more PDF operators/f { /WFi true def BF newpath } bind def/f* { /WFi false def BF newpath } bind def/B { /WFi true def BF S newpath } bind def/B* { /WFi false def BF S newpath } bind def%% start of page/QI { /C save def pageinit q newpath} bind def%% end of page/QP { Q % show page C restore showpage} bind def% merges one key value pair into the page device dict%% key value SPD -/SPD { /setpagedevice where { << 3 1 roll >> setpagedevice } { pop pop } ifelse} bind def% font handling/T1AddMapping { % basefont [glyphname ...] T1AddMapping - 10 dict begin /glyphs exch def /fnt exch def /current fnt /NumGlyphs get def /CMap fnt /CMap get def 0 1 glyphs length 1 sub % 0 1 (num glyphs - 1) { glyphs exch get /gn exch def current dup % glyph_index glyph_index 256 mod /min exch def % glyph_index 256 idiv /maj exch def % - CMap dup maj get dup % cmap cmap_maj cmap_maj null eq { pop 256 array 0 1 255 {1 index exch /.notdef put} for } if dup % cmap cmap_maj cmap_maj min gn put % cmap cmap_maj maj exch put % - /current current 1 add def } for fnt /CMap CMap put fnt /NumGlyphs current put end } def/T1AddGlyphs { % basefont [glyphname charstring ...] T1AddGlyphs - 10 dict begin /glyphs exch def /fnt exch def /current fnt /NumGlyphs get def /CMap fnt /CMap get def /CharStrings fnt /CharStrings get def 0 1 glyphs length 2 idiv 1 sub % 0 1 (num glyphs - 1) { 2 mul dup glyphs exch get /gn exch def 1 add glyphs exch get /cs exch def current dup % glyph_index glyph_index 256 mod /min exch def % glyph_index 256 idiv /maj exch def % - CMap dup maj get dup % cmap cmap_maj cmap_maj null eq { pop 256 array 0 1 255 {1 index exch /.notdef put} for } if dup % cmap cmap_maj cmap_maj min gn put % cmap cmap_maj maj exch put % - CharStrings gn cs put /current current 1 add def } for fnt /CharStrings CharStrings put fnt /CMap CMap put fnt /NumGlyphs current put end } def/StringAdd { % string1 string2 stringadd result 1 index length 1 index length add string 3 1 roll 2 index 0 3 index putinterval 2 index 2 index length 2 index putinterval pop pop} def/T1Setup { % fontname T1Setup -10 dict begin dup /FontName exch def (-Base) StringAdd cvx cvn /Font exch def /MaxPage Font /NumGlyphs get 1 sub 256 idiv def /FDepVector MaxPage 1 add array def /Encoding MaxPage 1 add array def 0 1 MaxPage { dup Encoding exch dup put dup /Page exch def FontName (-) StringAdd exch 20 string cvs StringAdd % page fontname cvn Font 0 dict copy dup dup /CMap get Page get /Encoding exch put definefont FDepVector exch Page exch put } for FontName cvn << /FontType 0 /FMapType 2 /FontMatrix[1 0 0 1 0 0] /Encoding Encoding /FDepVector FDepVector >> definefont pop end} def