Category : EmTeX is a TeX/LaTeX document editor
Archive   : DVIPS54.ZIP
Filename : TEX.LPR

 
Output of file : TEX.LPR contained in archive : DVIPS54.ZIP
% The following defines procedures assumed and used by program "dvips"
% and must be downloaded or sent as a header file for all TeX jobs.
% Originated by Neal Holtz, Carleton University, Ottawa, Canada
%
% June, 1985
%
% Hacked by tgr, July 1987, stripped down to bare essentials,
% plus a few new commands for speed.
%
% Hacked by don, December 1989, to give characters top down and to
% remove other small nuisances; merged with tgr's compression scheme
%
% To convert this file into a downloaded file instead of a header
% file, uncomment all of the lines beginning with %-%
%
% To observe available VM, uncomment the following.
% (The first ten lines define a general 'printnumber' routine.)
%
% /VirginMtrx 6 array currentmatrix def
% /dummystring 20 string def
% /numberpos 36 def
% /printnumber { gsave VirginMtrx setmatrix
% /Helvetica findfont 10 scalefont setfont
% 36 numberpos moveto
% /numberpos numberpos 12 add def
% dummystring cvs show
% grestore
% } bind def
% /showVM { vmstatus exch sub exch pop printnumber } def
% /eop-aux { showVM } def
%
%-%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.
/N /def load def
/B { bind def } N
/S /exch load def
/X { S N } B
/TR /translate load N

% The output of dvips assumes pixel units, Resolution/inch, with
% increasing y coordinates corresponding to moving DOWNWARD.
% The PostScript default is big point units (bp), 72/inch, with
% increasing y coordinates corresponding to moving UP; the
% following routines handle conversion to dvips conventions.

% Let the PostScript origin be (xps,yps) in dvips coordinates.

/isls false N
/vsize 10 N

/@rigin % -xps -yps @rigin - establishes dvips conventions
{ isls { [ 0 1 -1 0 0 0 ] concat } if
72 Resolution div 72 VResolution div neg scale
Resolution VResolution vsize neg mul TR } B

% Here we assume the PostScript origin is at the bottom left corner
% and that the paper is 11 inches high;
% the dvips origin is 1 inch from top left corner;
% hence if Resolution=300, we have (xps,yps)=(-300,3000).
/@letter { /vsize 10 N } B

/@landscape { /isls true N /vsize -1 N } B

/@a4 { /vsize 10.6929133858 N } B

/@a3 { /vsize 15.5531 N } B

/@ledger { /vsize 16 N } B

/@legal { /vsize 13 N } B

/@manualfeed
{ statusdict /manualfeed true put
} B

% n @copies - set number of copies
/@copies
{ /#copies X
} B

% Bitmap fonts are called Fa, Fb, ..., Fz, F0, F1 . . . Ga . . .
% The calling sequence for downloading font foo is
% /foo df chardef1 ... chardefn E
% where each chardef is
% wd ht xoff yoff dx charno D
% or wd ht xoff yoff dx I
% or charno D

% or I

/FMat [1 0 0 -1 0 0] N
/FBB [0 0 0 0] N

% /dmystr (ZZf@@@) N % define a place to put the new name
% /nn {dmystr cvn} B % make it easy to get that name
/df {
/sf 1 N
/fntrx FMat N
df-tail
} B
/dfs { div /sf X
/fntrx [ sf 0 0 sf neg 0 0 ] N
df-tail
} B
/df-tail % id numcc maxcc df-tail -- initialize a new font dictionary
{
% dmystr 2 fontname cvx (@@@@) cvs putinterval % put name in template
/nn 8 dict N % allocate new font dictionary
nn begin
/FontType 3 N
/FontMatrix fntrx N
/FontBBox FBB N
string /base X
array /BitMaps X
/BuildChar {CharBuilder} N
/Encoding IE N
end
dup { /foo setfont } % dummy macro to be filled in
2 array copy cvx N % have to allocate a new one
load % now we change it
% 0 dmystr 6 string copy % get a copy of the font name
0 nn put
% cvn cvx put % and stick it in the dummy macro
/ctr 0 N % go, count, and etc.
[ % start next char definition
} B

/E { pop nn dup definefont setfont } B

% 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 dup type /stringtype ne
{ ctr get /ctr ctr 1 add N } if
} B % the hex string image, or array of same
/ch-width {ch-data dup length 5 sub get} B % the number of pixels across
/ch-height {ch-data dup length 4 sub get} B % the number of pixels tall
/ch-xoff {128 ch-data dup length 3 sub get sub} B % num pixels right of origin
/ch-yoff {ch-data dup length 2 sub get 127 sub} B % number of pixels below origin
/ch-dx {ch-data dup length 1 sub get} B % number of pixels to next character
/ctr 0 N % the current string to read

/CharBuilder % fontdict ch Charbuilder - -- image one character
{save 3 1 roll S dup /base get 2 index get S /BitMaps get S get
/ch-data X pop
/ctr 0 N
ch-dx 0 ch-xoff ch-yoff ch-height sub
ch-xoff ch-width add ch-yoff
setcachedevice
ch-width ch-height true
[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]
% begin code for uncompressed fonts only
{ch-image} imagemask
restore
} B
% end code for uncompressed fonts only
% % here's the alternate code for unpacking compressed fonts
% /id ch-image N % image data
% /rw ch-width 7 add 8 idiv string N % row, initially zero
% /rc 0 N % repeat count
% /gp 0 N % image data pointer
% /cp 0 N % column pointer
% { rc 0 ne { rc 1 sub /rc X rw } { G } ifelse } imagemask
% restore
% } B
% /G { { id gp get /gp gp 1 add N
% dup 18 mod S 18 idiv pl S get exec } loop } B
% /adv { cp add /cp X } B
% /chg { rw cp id gp 4 index getinterval putinterval
% dup gp add /gp X adv } B
% /nd { /cp 0 N rw exit } B
% /lsh { rw cp 2 copy get dup 0 eq { pop 1 } { dup 255 eq { pop 254 }
% { dup dup add 255 and S 1 and or } ifelse } ifelse put 1 adv } B
% /rsh { rw cp 2 copy get dup 0 eq { pop 128 } { dup 255 eq { pop 127 }
% { dup 2 idiv S 128 and or } ifelse } ifelse put 1 adv } B
% /clr { rw cp 2 index string putinterval adv } B
% /set { rw cp fillstr 0 4 index getinterval putinterval adv } B
% /fillstr 18 string 0 1 17 { 2 copy 255 put pop } for N
% /pl [
% { adv 1 chg } bind
% { adv 1 chg nd } bind
% { 1 add chg } bind
% { 1 add chg nd } bind
% { adv lsh } bind
% { adv lsh nd } bind
% { adv rsh } bind
% { adv rsh nd } bind
% { 1 add adv } bind
% { /rc X nd } bind
% { 1 add set } bind
% { 1 add clr } bind
% { adv 2 chg } bind
% { adv 2 chg nd } bind
% { pop nd } bind ] N
% % end of code for unpacking compressed fonts

% in the following, the font-cacheing mechanism requires that
% a name unique in the particular font be generated

/D % char-data ch D - -- define character bitmap in current font
{ /cc X
dup type /stringtype ne {]} if
nn /base get cc ctr put
nn /BitMaps get S ctr S
sf 1 ne {
dup dup length 1 sub dup 2 index S get sf div put
} if
put
/ctr ctr 1 add N
} B

/I % a faster D for when the next char follows immediately
{ cc 1 add D } B

/bop % bop - -- begin a brand new page
{
userdict /bop-hook known { bop-hook } if
/SI save N
@rigin
0 0 moveto
} B

/eop % - eop - -- end a page
{ % eop-aux % -- to observe VM usage
clear SI restore
showpage
userdict /eop-hook known { eop-hook } if
} B

/@start % - @start - -- start everything
{
userdict /start-hook known { start-hook } if
/VResolution X
/Resolution X
1000 div /DVImag X
/IE 256 array N
0 1 255 {IE S 1 string dup 0 3 index put cvn put} for
} B

/p /show load N % the main character setting routine

/RMat [ 1 0 0 -1 0 0 ] N % things we need for rules
/BDot 8 string N
/v { % can't use ...fill; it makes rules too big
/ruley X /rulex X
V
} B
/V {
gsave
TR -.1 -.1 TR rulex ruley scale 1 1
false RMat { BDot } imagemask
grestore
} B
/a { moveto } B % absolute positioning
/delta 0 N % we need a variable to hold space moves
%
% The next ten macros allow us to make horizontal motions that
% are within 4 of the previous horizontal motion with a single
% character. These are typically used for spaces.
%
/tail { dup /delta X 0 rmoveto } B
/M { S p delta add tail } B
/b { S p tail } B % show and tail!
/c { -4 M } B
/d { -3 M } B
/e { -2 M } B
/f { -1 M } B
/g { 0 M } B
/h { 1 M } B
/i { 2 M } B
/j { 3 M } B
/k { 4 M } B
%
% These next allow us to make small motions (-4..4) cheaply.
% Typically used for kerns.
%
/l { p -4 w } B
/m { p -3 w } B
/n { p -2 w } B
/o { p -1 w } B
/q { p 1 w } B
/r { p 2 w } B
/s { p 3 w } B
/t { p 4 w } B
%
% w is good for small horizontal positioning. x is good for small
% vertical positioning. And y is good for a print followed by a move.
%
/w { 0 rmoveto } B
/x { 0 S rmoveto } B
/y { 3 2 roll p a } B
%
% The bos and eos commands bracket sections of downloaded characters.
%
/bos { /SS save N } B
/eos { clear SS restore } B

end % revert to previous dictionary


  3 Responses to “Category : EmTeX is a TeX/LaTeX document editor
Archive   : DVIPS54.ZIP
Filename : TEX.LPR

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/