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

 
Output of file : SPECIAL.LPR contained in archive : DVIPS54.ZIP

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% header for the \special command
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% The structure of the PostScript produced by dvips for \special is:
% @beginspecial
% - any number of @hsize, @hoffset, @hscale, etc., commands
% @setspecial
% - the user's file of PostScript commands
% @endspecial

TeXDict begin
/SDict 200 dict N
SDict begin

/@SpecialDefaults
{ /hs 612 N
/vs 792 N
/ho 0 N
/vo 0 N
/hsc 1 N
/vsc 1 N
/ang 0 N
/CLIP false N
/BBcalc false N
/p 3 def % necessary to get around a bug in Adobe Illustrator
} B

%
% The following definition sets up the units that hscale/vscale are in.
% For certain sites this might require change, but it is
% recommended instead that any macro packages that require
% hscale/vscale set the units appropriately via
%
% \special{! /@scaleunit 1 def }
%
% if global, or
%
% \special{" /@scaleunit 1 def }
%
% before each instance if multiple macro packages with
% different requirements are being used.
%
/@scaleunit 100 N
% s @hscale - set scale factor
/@hscale {@scaleunit div /hsc X} B
/@vscale {@scaleunit div /vsc X} B

% d @hsize - specify a horizontal clipping dimension
/@hsize {/hs X /CLIP true N} B
/@vsize {/vs X /CLIP true N} B

% d @hoffset - specify a shift for the figure
/@hoffset {/ho X} B
/@voffset {/vo X} B

% a @angle - set rotation angle
/@angle {/ang X} B

%
% Here we handle bounding box calculations, if necessary.
%
/@rwi { 10 div /rwi X } B % rwi will be real width after scaling
/@llx { /llx X } B
/@lly { /lly X } B
/@urx { /urx X } B
/@ury { /ury X /BBcalc true N } B

/magscale true def

end % of SDict

/@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
/letter {} N
/note {} N
/legal {} N
/od{txpose
1 0 mtx defaultmatrix dtransform S atan/pa X
newpath clippath mark
{transform{itransform moveto}}
{transform{itransform lineto}}
{ 6 -2 roll transform
6 -2 roll transform
6 -2 roll transform
{ itransform 6 2 roll
itransform 6 2 roll
itransform 6 2 roll
curveto
}
}
{{closepath}}
pathforall newpath counttomark array astore /gc xdf
pop ct 39 0 put
10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if
}N
/txpose{
pxs pys scale ppr aload pop
por {
noflips {
pop S neg S TR pop 1 -1 scale
}if
xflip yflip and {
pop S neg S TR 180 rotate 1 -1 scale
ppr 3 get ppr 1 get neg sub neg ppr 2 get
ppr 0 get neg sub neg TR
}if
xflip yflip not and {
pop S neg S TR pop 180 rotate
ppr 3 get ppr 1 get neg sub neg 0 TR
}if
yflip xflip not and {

ppr 1 get neg ppr 0 get neg TR
}if
}
{
noflips {
TR pop pop 270 rotate 1 -1 scale
}if
xflip yflip and {
TR pop pop 90 rotate 1 -1 scale
ppr 3 get ppr 1 get neg sub neg ppr 2 get
ppr 0 get neg sub neg TR
}if
xflip yflip not and {
TR pop pop 90 rotate ppr 3 get
ppr 1 get neg sub neg 0 TR
}if
yflip xflip not and {
TR pop pop 270 rotate ppr 2 get
ppr 0 get neg sub neg 0 S TR
}if
}ifelse
scaleby96 {
ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy
TR .96 dup scale neg S neg S TR
}if
}N
/cp {pop pop showpage pm restore}N
end
}if
} if
} N

%
% The following procedure brings us back to PostScript size. It takes
% into account the current global dvi magnification, so graphics
% scale with the document.
%
/normalscale {
Resolution 72 div VResolution 72 div neg scale
magscale { DVImag dup scale } if
} N
%
% We need the psfig macros.
%
% All software, documentation, and related files in this distribution of
% psfig/tex are Copyright (c) 1987 Trevor J. Darrell
%
% Permission is granted for use and non-profit distribution of psfig/tex
% providing that this notice be clearly maintained, but the right to
% distribute any portion of psfig/tex for profit or as part of any commercial
% product is specifically reserved for the author.
%
%
% psfigTeX PostScript Prolog
% $Header: /usr/local/src/TeX/Dvips-5.0.2/RCS/special.lpro,v 1.1 90/03/10 20:32:57 grunwald Exp $
%
/psfts { S 65536 div N } N

% x y bb-llx bb-lly bb-urx bb-ury startFig -
/startTexFig {
/psf$SavedState save N
userdict maxlength dict begin

/magscale false def
normalscale
currentpoint TR %set the current point as the user's origin

/psf$ury psfts
/psf$urx psfts
/psf$lly psfts
/psf$llx psfts
/psf$y psfts
/psf$x psfts

currentpoint /psf$cy X /psf$cx X

/psf$sx psf$x psf$urx psf$llx sub div N % scaling for x
/psf$sy psf$y psf$ury psf$lly sub div N % scaling for y

psf$sx psf$sy scale % scale by (sx,sy)

psf$cx psf$sx div psf$llx sub
psf$cy psf$sy div psf$ury sub TR

/showpage {
} N
/erasepage {
} N
/copypage {
} N
@MacSetUp
} N

% llx lly urx ury doclip - (args in figure coordinates)
/doclip {
psf$llx psf$lly psf$urx psf$ury
currentpoint 6 2 roll
newpath 4 copy
4 2 roll moveto
6 -1 roll S lineto
S lineto
S lineto
closepath clip
newpath
moveto
} N
% - endTexFig -
/endTexFig { end psf$SavedState restore } N

% 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.

/@beginspecial % - @beginspecial - -- enter special mode
{ SDict begin
/SpecialSave save N
gsave
normalscale
currentpoint TR %set the current point as the user's origin
@SpecialDefaults % setup default offsets, scales, sizes, and angle
} B

/@setspecial % to setup user specified offsets, scales, sizes (for clipping)
{
CLIP
{ newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
closepath clip }
{ initclip }
ifelse
ho vo TR
hsc vsc scale
ang rotate
BBcalc
{ rwi urx llx sub div dup scale
llx neg lly neg TR }
if
/showpage {} N
/erasepage {} N
/copypage {} N
newpath
} B

/@endspecial % - @endspecial - -- leave special mode
{ grestore clear SpecialSave restore
end
} B
/@defspecial
{
SDict begin
} B
/@fedspecial
{
end
} B

%%% macros for tpic
/li % x y li - -- draw line to
{ lineto
} B

/rl % dx dy rl - -- draw relative line
{ rlineto
} B

/rc % x0 y0 x1 y1 y2 y2 rc -- draw bezier curve
{ rcurveto
} B

/np % np - -- start a new path and save currentpoint
{ /SaveX currentpoint /SaveY X N % remember current point
1 setlinecap
newpath
} B

/st % st - -- draw the last path and restore currentpoint
{ stroke
SaveX SaveY moveto % restore the current point
} B

/fil % fil -- fill the last path and restore currentpoint
{ fill
SaveX SaveY moveto % restore the current point
} B

/ellipse % xc yc xrad yrad startAngle endAngle ellipse
{
/endangle X
/startangle X
/yrad X
/xrad X

/savematrix matrix currentmatrix N

TR xrad yrad scale
0 0 1 startangle endangle arc
savematrix setmatrix
} B
%%% end of macros for tpic
end % revert to previous dictionary