%! for use by dvi2ps Version 2.00 % a start (Ha!) at a TeX mode for PostScript. % The following defines procedures assumed and used by program "dvi2ps" % and must be downloaded or sent as a header file for all TeX jobs. % By: Neal Holtz, Carleton University, Ottawa, Canada % % % June, 1985 % Last Modified: Aug 25/85 % oystr 12-Feb-1986 % Changed @dc macro to check for a badly formed bits in character % definitions. Can get a <> bit map if a character is not actually % in the font file. This is absolutely guaranteed to drive the % printer nuts - it will appear that you can no longer define a % new font, although the built-ins will still be there. % To convert this file into a downloaded file instead of a header % file, uncomment all of the lines beginning with %-% %-%0000000 % Server loop exit password %-%serverdict begin exitserver %-% systemdict /statusdict known %-% {statusdict begin 9 0 3 setsccinteractive /waittimeout 300 def end} %-% if /TeXDict 200 dict def % define a working dictionary TeXDict begin % start using it. % units are in "dots" (300/inch) /Resolution 300 def /Inch {Resolution mul} def % converts inches to internal units /Mtrx 6 array def %%%%%%%%%%%%%%%%%%%%% Page setup (user) options %%%%%%%%%%%%%%%%%%%%%%%% % dvi2ps will output coordinates in the TeX system ([0,0] 1" down and in % from top left, with y +ive downward). The default PostScript system % is [0,0] at bottom left, y +ive up. The Many Matrix Machinations in % the following code are an attempt to reconcile that. The intent is to % specify the scaling as 1 and have only translations in the matrix to % properly position the text. Caution: the default device matrices are % *not* the same in all PostScript devices; that should not matter in most % of the code below (except for lanscape mode -- in that, rotations of % -90 degrees resulted in the the rotation matrix [ e 1 ] % [ 1 e ] % where the "e"s were almost exactly but not quite unlike zeros. /@letter { letter initmatrix 72 Resolution div dup neg scale % set scaling to 1. 310 -3005 translate % move origin to top (these are not exactly 1" Mtrx currentmatrix pop % and -10" because margins aren't set exactly right) } def % note mode is like letter, except it uses less VM /@note { note initmatrix 72 Resolution div dup neg scale % set scaling to 1. 310 -3005 translate % move origin to top Mtrx currentmatrix pop } def /@landscape { letter initmatrix 72 Resolution div dup neg scale % set scaling to 1. % -90 rotate % it would be nice to be able to do this Mtrx currentmatrix 0 0.0 put % but instead we have to do things like this because what Mtrx 1 -1.0 put % should be zero terms aren't (and text comes out wobbly) Mtrx 2 1.0 put % Fie! This likely will not work on QMS printers Mtrx 3 0.0 put % (nor on others where the device matrix is not like Mtrx setmatrix % like it is on the LaserWriter). 300 310 translate % move origin to top Mtrx currentmatrix pop } def /@legal { legal initmatrix 72 Resolution div dup neg scale % set scaling to 1. 295 -3880 translate % move origin to top Mtrx currentmatrix pop } def /@manualfeed { statusdict /manualfeed true put } def % n @copies - set number of copies /@copies { /#copies exch def } def %%%%%%%%%%%%%%%%%%%% Procedure Defintions %%%%%%%%%%%%%%%%%%%%%%%%%% /@newfont % id @newfont - -- initialize a new font dictionary { /newname exch def pop newname 7 dict def % allocate new font dictionary newname load begin /FontType 3 def /FontMatrix [1 0 0 -1 0 0] def /FontBBox [0 0 1 1] def /BitMaps 128 array def /BuildChar {CharBuilder} def /Encoding 128 array def 0 1 127 {Encoding exch /.undef put} for end newname newname load definefont pop } def % the following is the only character builder we need. it looks up the % char data in the BitMaps array, and paints the character if possible. % char data -- a bitmap descriptor -- is an array of length 6, of % which the various slots are: /ch-image {ch-data 0 get} def % the hex string image /ch-width {ch-data 1 get} def % the number of pixels across /ch-height {ch-data 2 get} def % the number of pixels tall /ch-xoff {ch-data 3 get} def % number of pixels below origin /ch-yoff {ch-data 4 get} def % number of pixels to left of origin /ch-tfmw {ch-data 5 get} def % spacing to next character /CharBuilder % fontdict ch Charbuilder - -- image one character { /ch-code exch def % save the char code /font-dict exch def % and the font dict. /ch-data font-dict /BitMaps get ch-code get def % get the bitmap descriptor for char ch-data null eq not { ch-tfmw 0 ch-xoff neg ch-yoff neg ch-width ch-xoff sub ch-height ch-yoff sub setcachedevice ch-width ch-height true [1 0 0 1 ch-xoff ch-yoff] {ch-image} imagemask } if } def /@sf % fontdict @sf - -- make that the current font { setfont() pop } def % in the following, the font-cacheing mechanism requires that % a name unique in the particular font be generated /@dc % char-data ch @dc - -- define a new character bitmap in current font { /ch-code exch def % ++oystr 12-Feb-86++ dup 0 get length 2 lt { pop [ <00> 1 1 0 0 8.00 ] } % replace <> with null if % --oystr 12-Feb-86-- /ch-data exch def currentfont /BitMaps get ch-code ch-data put currentfont /Encoding get ch-code dup ( ) cvs cvn % generate a unique name simply from the character code put } def /@bop0 % n @bop0 - -- begin the char def section of a new page { } def /@bop1 % n @bop1 - -- begin a brand new page { pop erasepage initgraphics Mtrx setmatrix /SaveImage save def() pop } def /@eop % - @eop - -- end a page { showpage SaveImage restore() pop } def /@start % - @start - -- start everything { @letter % (there is not much to do) } def /@end % - @end - -- done the whole shebang { end } def /p % x y p - -- move to position { moveto } def /r % x r - -- move right { 0 rmoveto } def /s % string s - -- show the string { show } def /c % ch c - -- show the character (code given) { c-string exch 0 exch put c-string show } def /c-string ( ) def /ru % dx dy ru - -- set a rule (rectangle) { /dy exch neg def % because dy is height up from bottom /dx exch def /x currentpoint /y exch def def % remember current point newpath x y moveto dx 0 rlineto 0 dy rlineto dx neg 0 rlineto closepath fill x y moveto } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% the \special command junk %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % The structure of the PostScript produced by dvi2ps for \special is: % @beginspecial % - any number of @hsize, @hoffset, @hscale, etc., commands % @setspecial % - the users file of PostScript commands % @endspecial % The @beginspecial command recognizes whether the Macintosh Laserprep % has been loaded or not, and redfines some Mac commands if so. % The @setspecial handles the users shifting, scaling, clipping commands % The following are user settable options from the \special command. /@SpecialDefaults { /hs 8.5 Inch def /vs 11 Inch def /ho 0 def /vo 0 def /hsc 1 def /vsc 1 def /CLIP false def } def % d @hsize - specify a horizontal clipping dimension % these 2 are executed before the MacDraw initializations /@hsize {/hs exch def /CLIP true def} def /@vsize {/vs exch def /CLIP true def} def % d @hoffset - specify a shift for the drwgs /@hoffset {/ho exch def} def /@voffset {/vo excl def} def % s @hscale - set scale factor /@hscale {/hsc exch def} def /@vscale {/vsc exch def} def /@setclipper { hsc vsc scale CLIP { newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip } if } def % this will be invoked as the result of a \special command (for the % inclusion of PostScript graphics). The basic idea is to change all % scaling and graphics back to defaults, but to shift the origin % to the current position on the page. Due to TeXnical difficulties, % we only set the y-origin. The x-origin is set at the left edge of % the page. /@beginspecial % - @beginspecial - -- enter special mode { gsave /SpecialSave save def % the following magic incantation establishes the current point as % the users origin, and reverts back to default scalings, rotations currentpoint transform initgraphics itransform translate @SpecialDefaults % setup default offsets, scales, sizes @MacSetUp % fix up Mac stuff } def /@setspecial % to setup user specified offsets, scales, sizes (for clipping) { MacDrwgs {md begin /pxt ho def /pyt vo neg def end} {ho vo translate @setclipper} ifelse } def /@endspecial % - @endspecial - -- leave special mode { SpecialSave restore grestore } def /MacDrwgs false def % will get set if we think the Mac LaserPrep file has been loaded % - @MacSetUp - turn-off/fix-up all the MacDraw stuff that might hurt us % we depend on 'psu' being the first procedure executed % by a Mac document. We redefine 'psu' to adjust page % translations, and to do all other the fixups required. % This stuff will not harm other included PS files /@MacSetUp { userdict /md known % if md is defined { userdict /md get type /dicttype eq % and if it is a dictionary { /MacDrwgs true def md begin % then redefine some stuff /psu % redfine psu to set origins, etc. /psu load % this procedure contains almost all the fixup code { /letter {} def % it is bad manners to execute the real /note {} def % versions of these (clears page image, etc.) /legal {} def statusdict /waittimeout 300 put /page {pop} def % no printing of pages /pyt vo neg def % x & y pixel translations /pxt ho def } concatprocs def /od % redefine od to set clipping region /od load { @setclipper } concatprocs def end } if } if } def % p1 p2 concatprocs p - concatenate procedures /concatprocs { /p2 exch cvlit def /p1 exch cvlit def /p p1 length p2 length add array def p 0 p1 putinterval p p1 length p2 putinterval p cvx } def end % revert to previous dictionary TeXDict begin @start %%Title: cm7.dvi %%Creator: dvi2ps %%EndProlog 1 @bop0 [ 1500 ] /cmr7.1500 @newfont cmr7.1500 @sf [<07FF000070000070000070000070000070000070000070000070000070000070000070000070008070088070088070084070 104070106070307FFFF0> 24 20 -1 0 23.695] 84 @dc [ 24 20 -1 0 24.503] 72 @dc [ 16 20 -1 0 11.992] 73 @dc [<8FC0F060C0308018801880180018003800F00FF03FC07F007000E000C010C010C030603030F01F10> 16 20 -2 0 18.334] 83 @dc [<00FC000703000C0080180040300020700020600020E00000E00000E00000E00000E00000E000006000207000203000601800 600C00E007036000FC20> 24 20 -2 0 23.695] 67 @dc [ 32 20 -1 0 29.864] 77 @dc [ 24 20 -1 0 24.099] 82 @dc [ 24 20 -1 0 22.312] 69 @dc [<00300000300000780000780000FC0000E40000E40001C20001C2000381000381000781800700800700800E00400E00401C00 201C00203C0030FF00FC> 24 20 -1 0 24.503] 86 @dc [ 24 20 -1 0 24.503] 78 @dc [ 24 20 -1 0 22.312] 80 @dc [<01F800070E001C03803801C03000C07000E07000E0E00070E00070E00070E00070E00070E000706000607000E03000C03801 C01C0380070E0001F800> 24 20 -2 0 25.483] 79 @dc [<00C00C0000C00C0000C00C0001E01E0001E01E0001F03E0003903900039039000388710007087080070870800704E0800E04 E0400E04E0401E03C0601C03C0201C03C0203803803038038030FF1FF0FC> 32 20 -1 0 33.439] 87 @dc [ 24 20 -1 0 24.503] 65 @dc [ 24 20 -1 0 21.418] 70 @dc [ 1500 ] /cmr10.1500 @newfont cmr10.1500 @sf [<03FFFC00001F8000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F 0000000F0000000F0000000F0000000F0000000F0000000F0000800F0020800F0020800F0020C00F0020400F0040400F0040 600F00C0700F01C07FFFFFC0> 32 28 -1 0 29.979] 84 @dc [ 32 28 -2 0 31.133] 72 @dc [ 16 28 -1 0 14.990] 73 @dc [<83F800CC0E00F00300C00300C001808001C08001C08001C00001C00003C00003C0000F8000FF8007FF001FFE003FF8007FC0 007C0000F00000F00000E00080E00080E000806001807003803007801C198007E080> 24 28 -2 0 23.061] 83 @dc [<001FC00000E0300003800800070004000E0002001C0001003C000100380000807800008070000080F0000000F0000000F000 0000F0000000F0000000F0000000F0000000F00000007000008078000080380000803C0001801C0001800E00038007000780 03800B8000E03180001FC080> 32 28 -2 0 29.979] 67 @dc [ 40 28 -2 0 38.051] 77 @dc [ 32 28 -2 0 30.556] 82 @dc [ 24 28 -2 0 28.250] 69 @dc [ 32 28 -2 0 31.133] 78 @dc [ 24 28 -2 0 28.250] 80 @dc [<003F800001E0F0000380380007001C000E000E001C0007003C00078038000380780003C0780003C0F00001E0F00001E0F000 01E0F00001E0F00001E0F00001E0F00001E0F00001E0700001C0780003C038000380380003801C0007000E000E0007001C00 0380380001E0F000003F8000> 32 28 -2 0 32.286] 79 @dc [<001800180000180018000018001800003C003C00003C003C00003C003C00007E007E00007A007A00007A007A00007900F200 00F100F10000F100F10000F081E10001E081E08001E081E08001E043E08003C043C04003C043C04003C027C0400780278020 078027802007803F80200F001F00100F001F00100F001F00101E001E00181F001F003CFFE0FFE0FF> 40 28 -1 0 42.663] 87 @dc [ 32 28 -1 0 31.133] 65 @dc [ 24 28 -2 0 27.097] 70 @dc [ 1500 ] /cmr12.1500 @newfont cmr12.1500 @sf [<03FFFF00000FC000000780000007800000078000000780000007800000078000000780000007800000078000000780000007 8000000780000007800000078000000780000007800000078000000780000007800000078000000780008007800480078004 8007800480078004C007800C40078008400780084007800860078018780780787FFFFFF8> 32 34 -2 0 35.225] 84 @dc [ 32 34 -2 0 36.563] 72 @dc [ 16 34 -2 0 17.595] 73 @dc [<81FC00C60300F80180E000C0C000E0C000608000708000708000708000700000700000F00000F00001E00007E0003FC003FF 800FFF001FFE003FF0007F0000780000F00000F00000E00020E00020E00020E000606000607000E03000E01803E00C0C6003 F020> 24 34 -3 0 27.097] 83 @dc [<000FF00000380C0000E0020001C00100078000800F0000400E0000201E0000203C0000103C0000107C000010780000107800 0000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F800000078000010780000107C0000103C000030 3C0000301E0000300E0000700F000070078000F001C0017000E0067000381830000FE010> 32 34 -3 0 35.225] 67 @dc [ 40 34 -2 0 44.692] 77 @dc [ 40 34 -2 0 35.894] 82 @dc [<00020000800000030001800000070001C00000070001C00000070001C000000F8003E000000F8003E000000F8003E000001E 40079000001E40079000001E40079000003C200F0800003C200F0800003C200F08000078101E04000078101E04000078101E 040000F0083C020000F0083C020000F0083C020001E00478010001E00478010001E00478010003C002F0008003C002F00080 03C002F00080078001E00040078001E00040078001E000400F8003E000200F0003C000200F0003C000701F8007E000F8FFF0 3FFC03FE> 48 34 -1 0 50.111] 87 @dc [ 32 34 -2 0 33.185] 69 @dc [ 32 34 -2 0 30.475] 76 @dc [<0000C000000000C000000001E000000001E000000001E000000003D000000003D000000003D0000000078800000007880000 000F840000000F040000000F040000001E020000001E020000003E030000003C010000003C01000000780080000078008000 00F800C00000F000400000F000400001E000200001E000200001E000200003C000100003C000100007C00008000780000800 07800008000F80000C001F80001F00FFF0007FC0> 40 34 -1 0 36.563] 86 @dc [ 32 34 -2 0 33.185] 80 @dc [<000FE00000783C0001E00F0003C00780078003C00F0001E01E0000F01E0000F03C0000783C0000787C00007C7C00007C7800 003CF800003EF800003EF800003EF800003EF800003EF800003EF800003EF800003E7800003C7800003C7C00007C3C000078 3C0000781E0000F01E0000F00F0001E0078003C00380038001E00F0000783C00000FE000> 32 34 -3 0 37.935] 79 @dc [ 32 34 -2 0 36.563] 78 @dc [ 32 34 -2 0 36.563] 65 @dc [ 32 34 -2 0 31.830] 70 @dc cmr10.1500 @sf [ 16 27 -4 0 20.755] 49 @dc 1 @bop1 cmr7.1500 @sf 83 42 p (THIS) s 11 r (IS) s 11 r (CMR) s 12 r (SEVEN) s 11 r (POINTS) s 11 r (WRITTEN) s 11 r (IN) s 11 r (MET) s -1 r (AF) s -1 r (ONT) s cmr10.1500 @sf 83 91 p (THIS) s 14 r (IS) s 14 r (CMR) s 14 r (TEN) s 13 r (POINTS) s 14 r (WRITTEN) s 14 r (IN) s 14 r (MET) s -3 r (AF) s -1 r (ONT) s cmr12.1500 @sf 83 141 p (THIS) s 16 r (IS) s 17 r (CMR) s 16 r (TWEL) s -5 r (VE) s 16 r (POINTS) s 16 r (WRITTEN) s 16 r (IN) s 16 r (MET) s -3 r (AF) s -1 r (ONT) s cmr10.1500 @sf 965 2770 p 49 c @eop @end .