home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Garbo
/
Garbo.cdr
/
mac
/
tex
/
oztex.sit
/
PS-files
/
DVItoPS.ps
< prev
next >
Wrap
Text File
|
1990-08-17
|
8KB
|
255 lines
%!
% This is the prologue used by OzTeX 1.3 to convert a DVI file into PostScript.
% Set dev to "LW" if LaserWriter, "LINO" if Linotronic, or "?" if unknown:
/dev (?) def
statusdict /product known
{ statusdict /product get dup
(LaserWriter) anchorsearch { pop pop /dev (LW) def } { pop } ifelse
(Linotype) anchorsearch { pop pop /dev (LINO) def } { pop } ifelse
} if
% OzTeX calls @setup soon after defining land (boolean) and res (integer):
/@setup { % set up OzTeX's coordinate system
dev (?) eq % unknown device?
{ land
{ % landscape
90 rotate % rotate axes 90deg anticlockwise
72 res div dup neg scale % units now device dots
res dup translate % move to TeX origin
}
{ % portrait
72 res div dup neg scale % units now device dots
res -10.7 res mul translate % move to TeX origin; assumes A4 height
} ifelse
} if
dev (LW) eq % LaserWriter?
{ land
{ % landscape
% 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 TeX origin down by y pixels
% add x to move TeX origin left by x pixels
ifelse } ifelse
}
{ % portrait
% 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 TeX origin right by x pixels
% add y to move TeX origin down by y pixels
ifelse } ifelse
} ifelse
} if
dev (LINO) eq % Linotronic?
{ land
{ % landscape
90 rotate % rotate axes 90deg anticlockwise
72 res div dup neg scale % units now device dots
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
}
{ % portrait
newpath clippath pathbbox % push LLx LLy URx URy (URy = ht in pts)
/paperht exch 72 div def % paper height in inches
pop pop pop % remove URx LLy LLx
72 res div dup neg scale % units now device dots
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
} def % end of @setup
% @saveVM and @restoreVM are only used if we are conserving VM
% by downloading font bitmaps more often:
/@saveVM {/prefontVM save def} def
/@restoreVM {prefontVM restore} def
/@newfont % create new font dict
{ /maxchcode exch def
/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 maxchcode 1 add array def
/BuildChar {CharBuilder} def
/Encoding maxchcode 1 add array def
0 1 maxchcode {Encoding exch /.notdef put} for
end
fontid fontid load definefont pop
} 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
/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 device dots
{ 16#10000 div % scaled pts to pts
res mul 72.27 div % pts to device 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