DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T t

⟦8341c6628⟧ TextFile

    Length: 13080 (0x3318)
    Types: TextFile
    Names: »tex.ps«

Derivation

└─⟦060c9c824⟧ Bits:30007080 DKUUG TeX 2/12/89
    └─⟦this⟧ »./DVIware/laser-setters/dvi-to-ps/pdvi2ps/tex.ps« 
└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12
    └─⟦af5ba6c8e⟧ »unix3.0/DVIWARE.tar.Z« 
        └─⟦ca79c7339⟧ 
            └─⟦this⟧ »DVIware/laser-setters/dvi-to-ps/pdvi2ps/tex.ps« 

TextFile

%!              for use by dvi2ps Version 2.00
% $Header: tex.ps,v 2.0 88/06/07 15:12:32 peterd Rel2 $
% 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.
% mackay 4-Jan-1988
%   Changed size of character array to reflect gf usage (256 characters)

% 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
     statusdict /manualfeedtimeout 300 put  % 5 minutes
   } 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
% mackay 4-Jan-1987 changed size of array from 128 to 256 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

%--  tjh sept. 87: if this page has a mac drawing on it, we have to
%--  use showpage in the md dictionary.
/@eop           % - @eop -              -- end a page
  {
    userdict /md known {
	userdict /md get type /dicttype eq {
	    md /MacDrwgs known {
		md begin showpage end
	    }{
		showpage
	    } ifelse
	}{
	    showpage
	} ifelse
    }{
	showpage
    } ifelse
    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

%-- tjh sept. 87: made changes to allow postscript and macdrawing to
%-- to be inserted with version 65 of the md dictionary.  Many bugs
%-- were fixed:
%--	vo changed to vof, name conflict with md
%--	vs changed to vsz, name conflict with md
%--	substantially changed @setspecial and @MacSetUp
%-- Also, made changes to allow users to specify offsets
%-- and clip rectangles in inches.

% The following are user settable options from the \special command.

/@SpecialDefaults
  { /hs 8.5 72 mul def
    /vsz 11 72 mul def
    /ho 0 def
    /vof 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 {72 mul /hs exch def /CLIP true def} def
/@vsize {72 mul /vsz exch def /CLIP true def} def

%       d @hoffset -    specify a shift for the drwgs
/@hoffset {72 mul /ho exch def} def
/@voffset {72 mul /vof exch 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 vsz 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
  { 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


%--  tjh: assume this is raw postscript, but save some state in case its not.
/@setspecial
  {
    /specmtrx matrix currentmatrix def
    ho vof translate @setclipper
  } def


/@endspecial
  { SpecialSave restore
    grestore
  } def


% - @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
         {
           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
		  /MacDrwgs true def
		  specmtrx setmatrix % restore pre-@setspecial state.
		  initclip	     % ditto
		  % change smalls to prevent page clearing.
		  /smalls [ lnop lnop lnop lnop lnop lnop lnop lnop lnop ] def
		  0 0 0 0 ppr astore pop  % prevents origin translation.
		  % redifine cp, do the showpage later, see @eop
                  /cp {
			pop
			pop
			pm restore
		  } def 		 	% no printing of pages
                }
                concatprocs 
              def
              /od
		% redefine od to translate and scale.
		% redfine load to set clipping region.
                /od load
                {
		  ho vof translate
		  hsc vsc scale
		  CLIP {
		      /nc
			/nc load
			{ newpath 0 0 moveto hs 0 rlineto 0 vsz rlineto
			hs neg 0 rlineto closepath clip }
			concatprocs
		      def
		  } if
		}
                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