|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T t
Length: 12095 (0x2f3f)
Types: TextFile
Names: »tex.ps«
└─⟦060c9c824⟧ Bits:30007080 DKUUG TeX 2/12/89
└─⟦this⟧ »./DVIware/obsolete/mitdrivers/dvi2ps/tex.ps«
└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12
└─⟦af5ba6c8e⟧ »unix3.0/DVIWARE.tar.Z«
└─⟦ca79c7339⟧
└─⟦this⟧ »DVIware/obsolete/mitdrivers/tex.ps«
%! 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
% <holtz@cascade.carleton.cdn>
% <holtz%cascade.carleton.cdn@ubc.csnet>
% 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.
% pam 5-Jan-1988
% Expanded arrays for 256 character gf fonts.
% 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
% pam 5-Jan-1988 array enlarged for gf fonts
/BitMaps 256 array def
/BuildChar {CharBuilder} def
/Encoding 256 array def
0 1 255 {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