plt - Software for 2D Plots 2.5
(3,084 bytes)
%!
% pslw.pro Prolog file for plt with the LaserWriter
%
save 100 dict begin /pslw exch def
/ED {exch def} def
/IN {exch 72 mul def} def
/CLOSE {clear pslw end restore} def
/BF {gsave INIT} def
/EF {grestore} def
/INIT {0 setlinecap /DMTX matrix defaultmatrix def
/XOFF [0 0 0 -.5 -1 -1 -1 -.5 -.5 -.5 -.6 -.6] def
/YOFF [0 -.37 -1 -1 -1 -.37 0 0 -.37 .25 -1.25 .25] def
/XM 0 def /YM 0 def /XYM 0 def} def
/WSUBST {} def
/WDEF {/ury ED /urx ED /lly ED /llx ED
WSUBST /y1 IN /x1 IN /y0 IN /x0 IN /FSCL ED
gsave matrix setmatrix
x0 2 add y0 2 add translate
x1 x0 sub 4 sub urx llx sub div
y1 y0 sub 4 sub ury lly sub div scale
llx neg lly neg translate
/PMTX matrix currentmatrix def grestore} def
/M {newpath PMTX transform moveto} def
/N {PMTX dtransform rlineto} def
/L {N currentpoint stroke moveto} def
/F {closepath 0 eq {fill} {FS} ifelse} def
/FS {currentgray dup FILL 0 setgray stroke setgray} def
/T {/ang ED /pos ED M ang rotate
/str ED str stringwidth pop
XOFF pos get mul
YOFF pos get PS mul XYM FSCL mul add
rmoveto str show
/XYM 0 def SDM} def
/GT {7 0 T} def
/XT {/XYM XM neg def 3 0 T /XM 0 def} def
/XTR {/XYM XM def 7 0 T /XM 0 def} def
/YT {/XYM YM def 7 90 T /YM 0 def} def
/YTR {/XYM YM neg def 3 90 T /YM 0 def} def
/XN {/XM PS def 3 0 T} def
/XNR {/XM PS def 9 0 T} def
/XE {10 1.25 XEX} def
/XER {11 1.5 XEX} def
/XEX {6 -1 roll /exp ED PS mul /XM ED 0 T EX} def
/YN {-1 1 0 YNUM} def
/YNR {1 0 0 YNUM} def
/YE {-1 1 YEX} def
/YER {1 0 YEX} def
/YEX {6 -1 roll /exp ED exp stringwidth pop .65 mul YNUM EX} def
/YNUM {6 3 roll M /str ED str stringwidth pop add /len ED
len mul .2 PS mul add mul PS -.37 mul rmoveto
str show /YM len .2 PS mul add YM MAX def} def
/EX {0 PS .6 mul rmoveto .65 .65 scale exp show SDM} def
/SP {/y ED /x ED /yp ED /yn ED /str ED
x y M currentpoint
str false charpath PBOX newpath
exch dup add x0 x1 add 2 div sub
exch dup add y0 y1 add 2 div sub moveto
str false charpath gsave fill EB} def
/SY {/y ED /x ED /yp ED /yn ED /st ED
newpath x y M PS 4 div dup scale
[{CIR} {UTRI} {DI} {SQ} {TRI}] st 5 mod get exec
closepath SDM gsave
[{1 FILL stroke} {fill} {stroke}] st 5 idiv 3 mod get exec
EB} def
/EB { grestore PMTX concat PBOX SDM
y1 y sub yp le {yp y1 EB2} if
y0 y sub yn ge {yn y0 EB2} if} def
/EB2 {newpath x exch M 0 exch N x0 x sub 0 N x1 x0 sub 0 N stroke} def
/CIR {currentpoint newpath 1.1 0 360 arc} def
/TRI {0 1.2 rmoveto -1.2 -2.4 rlineto 2.4 0 rlineto} def
/DI { 0 -1.5 rmoveto 1.3 1.5 rlineto
-1.3 1.5 rlineto -1.3 -1.5 rlineto} def
/UTRI {180 rotate TRI 180 rotate} def
/SQ {1 1 rmoveto -2 0 rlineto 0 -2 rlineto 2 0
rlineto} def
/LW {.2 mul FSCL mul setlinewidth} def
/SF {FSCL mul /PS ED findfont PS scalefont setfont} def
/DL {PS mul .05 mul} def
/solid {{}0} def
/dotted {[1 DL 3 DL] 0} def
/longdashed {[7 DL] 0} def
/shortdashed {[4 DL 5 DL] 0} def
/dotdashed {[1 DL 5 DL 6 DL 5 DL] 0} def
/MAX {2 copy lt {exch pop} {pop} ifelse} def
/SDM {DMTX setmatrix} def
/FILL {gsave setgray fill grestore} def
/PBOX {pathbbox /y1 ED /x1 ED /y0 ED /x0 ED} def