plt - Software for 2D Plots 2.5

File: <base>/plt-2.5a/classic/pslw.pro (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