summaryrefslogtreecommitdiff
path: root/dviware/psprint/vms/tex.ps
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /dviware/psprint/vms/tex.ps
Initial commit
Diffstat (limited to 'dviware/psprint/vms/tex.ps')
-rw-r--r--dviware/psprint/vms/tex.ps236
1 files changed, 236 insertions, 0 deletions
diff --git a/dviware/psprint/vms/tex.ps b/dviware/psprint/vms/tex.ps
new file mode 100644
index 0000000000..36ac9cc08d
--- /dev/null
+++ b/dviware/psprint/vms/tex.ps
@@ -0,0 +1,236 @@
+% Prologue for a DVI job.
+% It assumes *_print.com has defined dev (string), land (bool) and res (int).
+
+dev (LW) eq % LaserWriter?
+{ land
+ { % /landscape given
+ % rotate/scale/translate can cause scaling problems, so use setmatrix:
+ version cvr 38.0 le
+ { [ 0 -1 1 0 235 3100 ] setmatrix } % LaserWriter
+ { version cvr 47.0 lt
+ { [ 0 -1 1 0 235 3130 ] setmatrix } % LaserWriter Plus
+ { [ 0 -1 1 0 235 3160 ] setmatrix } % LaserWriter II NTX
+ % add y to move origin down by y pixels
+ % add x to move origin left by x pixels
+ ifelse } ifelse
+ }
+ { % /landscape not given
+ % scale/translate can cause scaling problems, so use setmatrix:
+ version cvr 38.0 le
+ { [ 1 0 0 1 235 190 ] setmatrix } % LaserWriter
+ { version cvr 47.0 lt
+ { [ 1 0 0 1 235 215 ] setmatrix } % LaserWriter Plus
+ { [ 1 0 0 1 235 265 ] setmatrix } % LaserWriter II NTX
+ % add x to move origin right by x pixels
+ % add y to move origin down by y pixels
+ ifelse } ifelse
+ } ifelse
+} if
+
+dev (PS40) eq % PrintServer?
+{ land
+ { [ 1 0 0 1 300 300 ] setmatrix % /landscape given
+ }
+ { [ 0 1 -1 0 3210 300 ] setmatrix % /landscape not given
+ } ifelse
+} if
+
+dev (LINO) eq % Linotronic?
+{ land
+ { initmatrix % /landscape given
+ 90 rotate % rotate axes 90deg anticlockwise
+ 72 res div dup neg scale % units now dots (y increases to right)
+ res res translate % move to TeX origin
+
+ % setmatrix won't work properly with a3/a4/a5/b5 page setups
+ % [1 0 0 1 1270 margin 72 div 1270 mul add 1270] setmatrix % res=1270
+ % [2 0 0 2 1270 margin 72 div 1270 mul add 1270] setmatrix % res=635
+ }
+ { initmatrix % /landscape not given
+ newpath clippath pathbbox % push LLx LLy URx URy
+ /paperht exch 72 div def % paper height in inches (URy = ht in pts)
+ pop pop pop % URx LLy LLx
+ 72 res div dup neg scale % units now dots (y increases down page)
+ res paperht res mul neg res add
+ translate % move to TeX origin
+
+ % setmatrix won't work properly with a3/a4/a5/b5 page setups
+ % [0 1 -1 0 paperht 1270 mul 1270 sub % res=1270
+ % margin 72 div 1270 mul add 1270] setmatrix
+ % [0 2 -2 0 paperht 1270 mul 1270 sub % res=635
+ % margin 72 div 1270 mul add 1270] setmatrix
+ } ifelse
+} if
+
+/mtrx 6 array def
+mtrx currentmatrix pop % save our new transformation matrix
+
+/@newfont % initialize new font dict
+{ /fontid exch def
+ fontid 7 dict def
+ fontid load begin
+ /FontType 3 def
+ /FontMatrix [1 0 0 -1 0 0] def % -1 because y scale is negative
+ /FontBBox [0 0 1 1] def
+ /BitMaps 128 array def
+ /BuildChar {CharBuilder} def
+ /Encoding 128 array def
+ 0 1 127 {Encoding exch /.notdef put} for
+ end
+ fontid fontid load definefont pop
+} def
+
+% @saveVM and @restoreVM are only used if we are conserving VM
+% by downloading font bitmaps more often:
+
+/@saveVM % save state of VM before using font
+{ /prefontVM save def
+ @newfont
+} def
+
+/@restoreVM {prefontVM restore} def
+
+% The char data, a bitmap descriptor, is an array with 6 elements:
+
+/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 to left of origin
+/ch-yoff {ch-data 4 get} def % number of pixels below origin
+/ch-advw {ch-data 5 get} def % advance width
+
+% The following character builder looks up the char data in the BitMaps array
+% and paints the character:
+
+/CharBuilder % image one char
+{ /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
+ ch-advw 0
+ ch-xoff neg ch-height ch-yoff sub 1 sub neg % -xo , -(ht-yo-1)
+ ch-width ch-xoff sub 1 sub ch-yoff % (wd-xo-1) , yo
+ setcachedevice
+ ch-width ch-height true
+ [1 0 0 -1 ch-xoff ch-yoff] % bitmap sent top to bottom
+ {ch-image}
+ imagemask
+} def
+
+/sf {setfont} def % set current font
+
+/dc % define new character
+{ /ch-code exch def
+ /ch-data exch def
+
+ % The following code should be enabled if you have an old LaserWriter.
+ % It attempts to overcome a bug that causes the printer to crash
+ % and print a test page rather then report a VMerror.
+ %
+ % vmstatus % returns: savelevel vmused vmmax
+ % 10000 sub gt % is vmused > (vmmax-10000)?
+ % { pop VMERROR } % causes error message (avoiding crash)
+ % { pop } % pop savelevel
+ % ifelse
+
+ currentfont /BitMaps get ch-code ch-data put
+ currentfont /Encoding get ch-code
+ dup ( ) cvs cvn put % generate unique name
+} bind def
+
+/@bop0 {pop} def % begin DVI page n
+
+/@bop1 % begin setting DVI page n
+{ pop % throw away page number
+ initgraphics % start with a clean slate
+ mtrx setmatrix % switch to our TeX coordinate system
+ /prepageVM save def % save state of VM at start of page
+} def
+
+/@eop % end DVI page n
+{ pop % throw away page number
+ prepageVM restore % restore VM to state at start of page
+ showpage
+} def
+
+/@end { } def % end of file
+
+% h and s are used to typeset downloaded bitmap fonts:
+
+/h {exch 0 rmoveto show} bind def % move right by dh and show (...)
+
+/s {3 1 roll moveto show} bind def % move to h,v and show (...)
+
+% H and S are used to typeset resident PostScript fonts.
+% We can't use relative horizontal positioning because the advance widths in
+% a PostScript font are not integers and rounding errors would accumulate:
+
+/H {exch v moveto show} bind def % move to h,v and show (...)
+
+/S % ditto, and save v position
+{ 3 1 roll dup /v exch def
+ moveto show
+} bind def
+
+% Some fine-tuning of the code used to draw a rule is necessary:
+
+dev (LW) eq % LaserWriter?
+version cvr 38.0 le and % and version <= 38.0?
+{
+ /r % set a wd by ht rule at h,v
+ { newpath
+ 1 add moveto % move to h,v+1 (don't ask me why)
+ /ht exch 1 sub def % reduce height by 1
+ /wd exch 1 sub def % ditto for width
+ wd 0 rlineto
+ 0 ht neg rlineto
+ wd neg 0 rlineto
+ fill
+ } bind def
+}
+{
+ /r % set a wd by ht rule at h,v
+ { newpath
+ moveto % move to h,v
+ /ht exch 1 sub def % reduce height by 1
+ /wd exch 1 sub def % ditto for width
+ wd 0 rlineto
+ 0 ht neg rlineto
+ wd neg 0 rlineto
+ fill
+ } bind def
+} ifelse
+
+% Following procedures are invoked as the result of a \special command.
+% We change all scaling and graphics back to defaults, but shift the origin
+% to the current position on the page:
+
+/p {moveto} bind def % move to h,v
+
+/@bsp % begin special mode
+{ gsave
+ /prespecialVM save def % save showpage, TeX procedures etc.
+ currentpoint transform
+ initgraphics itransform translate
+ land { 90 rotate } if % rotate axes if /landscape given
+ /showpage { } def % user does not have to remove showpage
+} bind def
+
+/@esp % end special mode
+{ prespecialVM restore % restore saved showpage value etc.
+ grestore
+} bind def
+
+% Here are the definitions needed to handle resident PostScript fonts:
+
+/sp % scaled pts to dots
+{ 16#10000 div % scaled pts to pts
+ res mul 72.27 div % pts to dots
+} bind def
+
+/PSfont % uses dot size and TFM name
+{ dup /Times-Slanted eq
+ {pop /Times-Roman findfont [1 0 .268 -1 0 0] makefont exch scalefont setfont}
+ {findfont [1 0 0 -1 0 0] makefont exch scalefont setfont}
+ ifelse
+} bind def