aboutsummaryrefslogtreecommitdiffstats
path: root/include/save_graphf.lpg
diff options
context:
space:
mode:
Diffstat (limited to 'include/save_graphf.lpg')
-rw-r--r--include/save_graphf.lpg899
1 files changed, 0 insertions, 899 deletions
diff --git a/include/save_graphf.lpg b/include/save_graphf.lpg
deleted file mode 100644
index 5546586..0000000
--- a/include/save_graphf.lpg
+++ /dev/null
@@ -1,899 +0,0 @@
-%%BeginResource: procset LoutGraphPrependGraphic
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% PostScript @SysPrependGraphic file for @Graph (Version 1.0) %
-% %
-% Version 1.0 by Jeffrey H. Kingston, December 1993. %
-% swapxandy added September 2001 by JHK. %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-errordict begin
- /handleerror
- {
- { /Times-Roman findfont 8 pt scalefont setfont
- 0 setgray 4 pt 4 pt moveto
- $error /errorname get
- dup lgraphdict exch known
- { lgraphdict exch get }
- { 30 string cvs } ifelse
- show
- ( Command: ) show
- $error /command get 30 string cvs show
- } stopped {} if
- showpage stop
- } def
-end
-
-/lgraphdict 200 dict def
-lgraphdict begin
-
-% error messages
-/dictfull (dictfull error) def
-/dictstackoverflow (dictstackoverflow error) def
-/execstackoverflow (execstackoverflow error: expression too complex?) def
-/limitcheck (limitcheck error: graph too complex or too large?) def
-/syntaxerror (syntaxerror error: syntax error in text of graph?) def
-/typecheck (typecheck error: syntax error in text of graph?) def
-/undefined (undefined error: unknown or misspelt symbol?) def
-/rangecheck (rangecheck error: undefined expression (e.g. divide by zero)?) def
-/VMError (VMError error: run out of memory?) def
-
-% random number between x and y inclusive: x y dorand num
-/dorand { 1 index sub 1 add rand exch mod add } def
-
-% log to given base: base num dolog num
-/dolog { ln exch ln div } def
-
-% maximum of two numbers: <num> <num> max <num>
-/max { 2 copy gt { pop } { exch pop } ifelse } def
-
-% add two points: <point> <point> padd <point>
-/padd { exch 3 1 roll add 3 1 roll add exch } def
-
-% subtract first point from second: <point> <point> psub <point>
-/psub { 3 2 roll sub 3 1 roll exch sub exch } def
-
-% distance between two points: <point> <point> distance <length>
-/distance { psub dup mul exch dup mul add sqrt } def
-
-% point at angle and distance: <point> <length> <angle> atangle <point>
-/atangle { 2 copy cos mul 3 1 roll sin mul padd } def
-
-% angle from one point to another: <point> <point> angle <angle>
-/angle { psub 2 copy 0 eq exch 0 eq and {pop} {exch atan} ifelse } def
-
-
-% set up for line
-% - linesetup <length> <dashlength>
-/linesetup
-{ newpath
- xcurr ycurr trpoint xprev yprev trpoint
- 4 copy moveto lineto distance dashlength
-} def
-
-% set up for icon-avoiding line
-% - ilinesetup <length> <dashlength>
-/ilinesetup
-{ newpath
- xprev yprev trpoint xcurr ycurr trpoint 4 copy
- 4 copy angle symbolsize 1.5 mul exch 4 2 roll pop pop atangle
- 6 2 roll 4 2 roll
- 4 copy angle symbolsize 1.5 mul exch 4 2 roll pop pop atangle
- 4 copy moveto lineto distance dashlength
-} def
-
-
-% stroke a solid line: <length> <dashlength> solid -
-/solid
-{ pop pop [] 0 setdash linewidth setlinewidth stroke
-} def
-
-% stroke a dashed line: <length> <dashlength> dashed -
-/dashed
-{ 2 copy 2 mul le 1 index 0 le or
- { exch pop 1 pt max [ exch dup ] 0 setdash }
- { dup [ exch 4 2 roll 2 copy div
- 1 sub 2 div ceiling dup 4 1 roll
- 1 add mul sub exch div ] 0 setdash
- } ifelse linewidth setlinewidth stroke
-} def
-
-% stroke a cdashed line: <length> <dashlength> cdashed -
-/cdashed
-{ 2 copy le 1 index 0 le or
- { exch pop 1 pt max [ exch dup ] dup 0 get 2 div setdash }
- { dup [ 4 2 roll exch 2 copy exch div
- 2 div ceiling div 1 index sub
- ] exch 2 div setdash
- } ifelse linewidth setlinewidth stroke
-} def
-
-% stroke a dotted line: <length> <dashlength> dotted -
-/dotted
-{ 2 copy le 1 index 0 le or
- { exch pop 1 pt max [ exch 0 exch ] 0 setdash }
- { 1 index exch div ceiling div 0.99999 mul
- [ 0 3 2 roll ] 0 setdash
- } ifelse gsave 1 setlinecap linewidth setlinewidth stroke grestore newpath
-} def
-
-% stroke a noline line: <length> <dashlength> noline -
-/noline
-{ pop pop
-} def
-
-% scale array elements by factor: <array> <factor> scalearray <array>
-/scalearray
-{
- [ exch 3 2 roll
- { exch dup 3 1 roll mul exch } forall
- pop ]
-} def
-
-% sum array elements: <array> sumarray <number>
-/sumarray
-{
- 0 exch { add } forall
-} def
-
-% begin a more complex line: <length> <dashlength> linebegin -
-/linebegin
-{
- % (Entering linebegin) 2 debugprint
- 20 dict begin
- /dashlen exch 1 pt max def
- /len exch def
- /gap dashlen def
- /halfgap dashlen 2 div def
- /dash dashlen def
- /halfdash dashlen 2 div def
- /dot 0 def
- % (Leaving linebegin) 0 debugprint
-} def
-% end a more complex line: <linecap> <cycle> <startpos> <stoppos> lineend -
-/lineend
-{
- % (Entering lineend) 3 debugprint
- /stoppos exch def
- /startpos exch def
- /cycle exch def
- /linecap exch def
- /stopposlen stoppos sumarray def
- /startposlen startpos sumarray def
- /cyclelen cycle sumarray def
- /effectivelen len startposlen add stopposlen sub def
- effectivelen 0 gt cyclelen 0 gt and
- {
- /repeats effectivelen cyclelen div ceiling def
- /factor len repeats cyclelen mul startposlen sub stopposlen add div def
- cycle factor scalearray startposlen factor mul setdash
- linecap setlinecap stroke
- } if
- end
- % (Leaving lineend) 0 debugprint
-} def
-
-% stroke a dotdashed line: <length> <dashlength> dotdashed -
-/dotdashed
-{
- linebegin
- 1 [dash gap dot gap] [] [dash]
- lineend
-} def
-
-% stroke a dotcdashed line: <length> <dashlength> dotcdashed -
-/dotcdashed
-{
- linebegin
- 1 [dash gap dot gap] [halfdash] [halfdash]
- lineend
-} def
-
-% stroke a dotdotdashed line: <length> <dashlength> dotdotdashed -
-/dotdotdashed
-{
- linebegin
- 1 [dash gap dot gap dot gap] [] [dash]
- lineend
-} def
-
-% stroke a dotdotcdashed line: <length> <dashlength> dotdotcdashed -
-/dotdotcdashed
-{
- linebegin
- 1 [dash gap dot gap dot gap] [halfdash] [halfdash]
- lineend
-} def
-
-% stroke a dotdotdotdashed line: <length> <dashlength> dotdotdotdashed -
-/dotdotdotdashed
-{
- linebegin
- 1 [dash gap dot gap dot gap dot gap] [] [dash]
- lineend
-} def
-
-% stroke a dotdotdotcdashed line: <length> <dashlength> dotdotdotcdashed -
-/dotdotdotcdashed
-{
- linebegin
- 1 [dash gap dot gap dot gap dot gap] [halfdash] [halfdash]
- lineend
-} def
-
-
-% stroke a y histogram: - yhisto -
-/yhisto
-{ xprev yleft trpoint yextra sub moveto
- xprev yprev trpoint lineto
- xcurr yprev trpoint lineto
- xcurr yleft trpoint yextra sub lineto
- linewidth setlinewidth stroke
-} def
-
-% stroke an x histogram: - xhisto -
-/xhisto
-{ xleft yprev trpoint exch xextra sub exch moveto
- xcurr yprev trpoint lineto
- xcurr ycurr trpoint lineto
- xleft ycurr trpoint exch xextra sub exch lineto
- linewidth setlinewidth stroke
-} def
-
-% stroke a surface y histogram: - surfaceyhisto -
-/surfaceyhisto
-{ firstpair
- { xprev yleft trpoint yextra sub moveto
- xprev yprev trpoint lineto
- }
- { xprev yprev trpoint moveto
- } ifelse
- xcurr yprev trpoint lineto
- lastpair
- { xcurr yleft trpoint yextra sub lineto
- }
- { xcurr ycurr trpoint lineto
- } ifelse
- linewidth setlinewidth stroke
-} def
-
-% stroke a surface x histogram: - surfacexhisto -
-/surfacexhisto
-{ firstpair
- { xleft yprev trpoint exch xextra sub exch moveto
- }
- { xprev yprev trpoint moveto
- } ifelse
- xcurr yprev trpoint lineto
- xcurr ycurr trpoint lineto
- lastpair
- { xleft ycurr trpoint exch xextra sub exch lineto
- } if
- linewidth setlinewidth stroke
-} def
-
-% % pre-texture versions
-% % stroke a filled y histogram: - filledyhisto -
-% /filledyhisto
-% {
-% linewidth setlinewidth
-% xprev yleft trpoint exch currentlinewidth 2 div add exch yextra sub moveto
-% xprev yprev trpoint exch currentlinewidth 2 div add exch lineto
-% xcurr yprev trpoint exch currentlinewidth 2 div sub exch lineto
-% xcurr yleft trpoint exch currentlinewidth 2 div sub exch yextra sub lineto
-% closepath fill
-% } def
-
-% % stroke a filled x histogram: - filledxhisto -
-% /filledxhisto
-% {
-% linewidth setlinewidth
-% xleft yprev trpoint currentlinewidth 2 div add exch xextra sub exch moveto
-% xcurr yprev trpoint currentlinewidth 2 div add lineto
-% xcurr ycurr trpoint currentlinewidth 2 div sub lineto
-% xleft ycurr trpoint currentlinewidth 2 div sub exch xextra sub exch lineto
-% closepath fill
-% } def
-
-% stroke a filled y histogram: - filledyhisto -
-/filledyhisto
-{
- linewidth setlinewidth
- xprev yleft trpoint exch currentlinewidth 1.3 mul add exch yextra sub moveto
- xprev yprev trpoint exch currentlinewidth 1.3 mul add exch lineto
- xcurr yprev trpoint exch currentlinewidth 1.3 mul sub exch lineto
- xcurr yleft trpoint exch currentlinewidth 1.3 mul sub exch yextra sub lineto
- gsave texture fill grestore stroke
-} def
-
-% stroke a filled x histogram: - filledxhisto -
-/filledxhisto
-{
- linewidth setlinewidth
- xleft yprev trpoint currentlinewidth 1.3 mul add exch xextra sub exch moveto
- xcurr yprev trpoint currentlinewidth 1.3 mul add lineto
- xcurr ycurr trpoint currentlinewidth 1.3 mul sub lineto
- xleft ycurr trpoint currentlinewidth 1.3 mul sub exch xextra sub exch lineto
- gsave texture fill grestore stroke
-} def
-
-
-% cross: show a small cross
-/cross
-{ newpath
- xcurr ycurr trpoint moveto
- symbolsize neg symbolsize neg rmoveto
- symbolsize 2 mul symbolsize 2 mul rlineto
- 0 symbolsize -2 mul rmoveto
- symbolsize -2 mul symbolsize 2 mul rlineto
- [] 0 setdash stroke
-} def
-
-% plus: show a small plus
-/plus
-{ newpath
- xcurr ycurr trpoint moveto
- symbolsize neg 0 rmoveto
- symbolsize 2 mul 0 rlineto
- symbolsize neg symbolsize neg rmoveto
- 0 symbolsize 2 mul rlineto
- [] 0 setdash stroke
-} def
-
-% square: show a small square
-/square
-{ newpath
- xcurr ycurr trpoint moveto
- symbolsize neg symbolsize neg rmoveto
- symbolsize 2 mul 0 rlineto
- 0 symbolsize 2 mul rlineto
- symbolsize -2 mul 0 rlineto
- closepath [] 0 setdash stroke
-} def
-
-% filledsquare: show a small filled square
-/filledsquare
-{ newpath
- xcurr ycurr trpoint moveto
- symbolsize neg symbolsize neg rmoveto
- symbolsize 2 mul 0 rlineto
- 0 symbolsize 2 mul rlineto
- symbolsize -2 mul 0 rlineto
- closepath gsave [] 0 setdash stroke grestore fill
-} def
-
-% diamond: show a small diamond
-/diamond
-{ newpath
- xcurr ycurr trpoint moveto
- symbolsize neg 0 rmoveto
- symbolsize symbolsize neg rlineto
- symbolsize symbolsize rlineto
- symbolsize neg symbolsize rlineto
- closepath [] 0 setdash stroke
-} def
-
-% filleddiamond: show a small filled diamond
-/filleddiamond
-{ newpath
- xcurr ycurr trpoint moveto
- symbolsize neg 0 rmoveto
- symbolsize symbolsize neg rlineto
- symbolsize symbolsize rlineto
- symbolsize neg symbolsize rlineto
- closepath gsave [] 0 setdash stroke grestore fill
-} def
-
-% circle: show a small circle
-/circle
-{ newpath
- xcurr ycurr trpoint symbolsize 0 360 arc [] 0 setdash stroke
-} def
-
-% filledcircle: show a small filled circle
-/filledcircle
-{ newpath
- xcurr ycurr trpoint symbolsize 0 360 arc gsave [] 0 setdash stroke grestore fill
-} def
-
-% triangle: show a small triangle
-/triangle
-{ newpath
- xcurr ycurr trpoint moveto
- 0 symbolsize 1.5 mul rmoveto
- symbolsize neg symbolsize -2.5 mul rlineto
- symbolsize 2 mul 0 rlineto
- closepath [] 0 setdash stroke
-} def
-
-% filledtriangle: show a small filled triangle
-/filledtriangle
-{ newpath
- xcurr ycurr trpoint moveto
- 0 symbolsize 1.5 mul rmoveto
- symbolsize neg symbolsize -2.5 mul rlineto
- symbolsize 2 mul 0 rlineto
- closepath gsave [] 0 setdash stroke grestore fill
-} def
-
-
-%plog: like log only with a base, and protected from failing if <= 0
-% base x plog res
-/plog { dup 0 le { pop pop 0 } { ln exch ln div } ifelse } def
-
-% xtr: transform one x value logarithmically if xlog > 1
-% <num> xtr <num>
-/xtr
-{ xlog 1 gt
- { xlog exch plog
- } if
-} def
-
-% ytr: transform one y value logarithmically if ylog > 1
-% <num> ytr <num>
-/ytr
-{ ylog 1 gt
- { ylog exch plog
- } if
-} def
-
-
-% trpoint: transform (x, y) in graph space into (x', y') in print space
-% x y trpoint x' y'
-/trpoint
-{ exch xtr xdecr { trxmax exch sub } { trxmin sub } ifelse
- trxmax trxmin sub div xwidth mul xextra add
-
- exch ytr ydecr { trymax exch sub } { trymin sub } ifelse
- trymax trymin sub div ywidth mul yextra add
-} def
-
-
-% yonly: interpolate x values 1, 2, ... into data
-% [ data ] yonly [ newdata ]
-/yonly
-{ dup /tmp exch def
- length [ exch 1 exch 1 exch
- { dup tmp exch 1 sub get
- } for
- ]
-} def
-
-% xonly: interpolate y values 1, 2, ... into data
-% [ data ] yonly [ newdata ]
-/xonly
-{ dup /tmp exch def
- length [ exch 1 exch 1 exch
- { dup tmp exch 1 sub get exch
- } for
- ]
-} def
-
-% xandy: no interpolation of x or y values
-% [ data ] xandy [ data ]
-/xandy {} def
-
-% swapxandy: swap x and y values
-% [ data ] swapxandy [ data ]
-/swapxandy
-{ dup /tmp exch def
- length [ exch 2 exch 2 exch
- { dup tmp exch 1 sub get exch 2 sub tmp exch get
- } for
- ]
-} def
-
-
-% expstringwidth: calculate width of string containing optional exponent
-% <string> expstringwidth <width>
-/expstringwidth
-{ (^) search
- { exch pop stringwidth pop exch stringwidth pop 0.7 mul add }
- { stringwidth pop }
- ifelse
-} def
-
-% expstringshow: show string containing optional exponent
-% <string> expstringshow -
-/expstringshow
-{ (^) search
- { exch pop show 0 0.5 ft rmoveto
- gsave currentfont 0.7 scalefont setfont show grestore
- }
- { show
- }
- ifelse
-} def
-
-% concatenate two strings: <string> <string> strconcat <string>
-/strconcat
-{ 2 copy length exch length add string
- dup 0 4 index putinterval
- dup 3 index length 3 index putinterval
- 3 1 roll pop pop
-} def
-
-% lgen: generate one label automatically
-% num lgen num string
-/lgen { dup 20 string cvs } def
-
-% loglgen: generate one logarithmic label (with exponent)
-% <base> <exponent> loglgen <string>
-/loglgen
-{ 20 string cvs exch 20 string cvs
- (^) strconcat exch strconcat
-} def
-
-
-% printxtick: print one x tick
-% xpos printxtick -
-/printxtick
-{ newpath
- yleft trpoint moveto 0 yextra neg rmoveto
- 0 xticklength neg rlineto [] 0 setdash stroke
-} def
-
-% printxlabel: print one x label
-% (xlabel) xpos printxlabel -
-/printxlabel
-{ yleft trpoint moveto 0 yextra neg rmoveto
- 0 xticklength neg rmoveto 0 0.9 ft neg rmoveto
- xlog 1 gt { 0 0.3 ft neg rmoveto } if
- dup expstringwidth -2 div 0 rmoveto expstringshow
-} def
-
-% printytick: print one y tick
-% ypos printytick -
-/printytick
-{ newpath
- xleft exch trpoint moveto xextra neg 0 rmoveto
- yticklength neg 0 rlineto [] 0 setdash stroke
-} def
-
-% printylabel: print one y label
-% (ylabel) ypos printylabel -
-/printylabel
-{ xleft exch trpoint moveto xextra neg 0 rmoveto
- yticklength neg 0 rmoveto -0.3 ft -0.3 ft rmoveto
- dup expstringwidth neg 0 rmoveto expstringshow
-} def
-
-% printrtick: print one r tick
-% ypos printrtick -
-/printrtick
-{ newpath
- xright exch trpoint moveto xextra 0 rmoveto
- rticklength 0 rlineto [] 0 setdash stroke
-} def
-
-% printrlabel: print one r label
-% (rlabel) ypos printrlabel -
-/printrlabel
-{ xright exch trpoint moveto xextra 0 rmoveto
- rticklength 0 rmoveto 0.3 ft -0.3 ft rmoveto
- expstringshow
-} def
-
-% printticks: print ticks and labels
-% /tickproc /labelproc [ tickandlabeldata ] min printticks -
-/printticks
-{ /prev exch def
- { dup type dup dup /integertype eq exch /realtype eq or
- { pop dup /prev exch def 2 index cvx exec
- }
- { /stringtype eq
- { prev 2 index cvx exec
- }
- { pop
- } ifelse
- } ifelse
- } forall
- pop pop
-} def
-
-
-% printxaxistick: print one x axis tick
-% xpos printxaxistick -
-/printxaxistick
-{ newpath
- yaxis trpoint moveto 0 xticklength -2 div rmoveto
- 0 xticklength rlineto [] 0 setdash stroke
-} def
-
-% printxaxislabel: print one x axis label
-% (xlabel) xpos printxaxislabel -
-/printxaxislabel
-{ yaxis trpoint moveto
- 0 xticklength -2 div rmoveto 0 0.9 ft neg rmoveto
- xlog 1 gt { 0 0.3 ft neg rmoveto } if
- dup expstringwidth -2 div 0 rmoveto expstringshow
-} def
-
-% printyaxistick: print one y axis tick
-% ypos printyaxistick -
-/printyaxistick
-{ newpath
- xaxis exch trpoint moveto
- yticklength -2 div 0 rmoveto
- yticklength 0 rlineto [] 0 setdash stroke
-} def
-
-% printyaxislabel: print one y axis label
-% (ylabel) ypos printyaxislabel -
-/printyaxislabel
-{ xaxis exch trpoint moveto
- yticklength -2 div 0 rmoveto -0.3 ft -0.3 ft rmoveto
- dup expstringwidth neg 0 rmoveto expstringshow
-} def
-
-
-% <val> minmax -
-% perform minv := min(minv, val); maxv := max(maxv, val)
-% allowing for the possibility of minv, maxv, val being false (undefined)
-/minmax
-{ dup false eq
- { pop }
- { minv false eq
- { dup /minv exch def /maxv exch def }
- { dup minv lt
- { /minv exch def }
- { dup maxv gt
- { /maxv exch def }
- { pop }
- ifelse
- } ifelse
- } ifelse
- } ifelse
-} def
-
-% <ticks> ticksundef <ticks> <bool>
-% returns true iff the ticks array is undefined (one false entry)
-/ticksundef
-{ dup length 1 eq
- { dup 0 get false eq
- }
- { false }
- ifelse
-} def
-
-% <number> integral <boolean>
-% true if the number has an integral value
-/integral { dup round eq } def
-
-% ticksep ticks xory alldata minval maxval axis base ticksandlimits ticks min max base
-% ticksandlimits: sort out value of x or y ticks and limits and log base
-/ticksandlimits
-{ /base exch def
- /minv false def
- /maxv false def
-
- % min and max of user-supplied minval, maxval, and axis
- minmax minmax minmax
-
- % min and max of data points
- { 0 get dup dup length 1 sub 3 index exch 2 exch
- { get minmax dup
- } for pop pop
- } forall
- pop dup
-
- % min and max of tick values
- { dup type /stringtype eq
- { pop } { minmax } ifelse
- } forall
-
- % fix minv and maxv if undefined (false) or equal
- minv false eq
- { /minv -1 def /maxv 1 def }
- { minv maxv eq
- { minv 0 lt
- { /minv 2 minv mul def /maxv 0 def
- }
- { minv 0 eq
- { /minv -1 def /maxv 1 def
- }
- { /minv 0 def /maxv 2 maxv mul def
- } ifelse
- } ifelse
- } if
- } ifelse
-
- % invent ticks if undefined
- ticksundef
- { pop /ticksep exch def
-
- % if base is reasonable and minv is positive, logarithmic ticks
- base 1 gt minv 0 gt and
- {
- % get integral log of minv and maxv
- /logminv base minv plog floor cvi def
- /logmaxv base maxv plog ceiling cvi def
-
- % if minv close to base, make it 1; reset minv and maxv
- logminv 1 eq logmaxv 4 ge and { /logminv 0 def } if
- /minv base logminv exp def
- /maxv base logmaxv exp def
-
- % ticks := [ base**logminv, ... , base**logmaxv ]
- [ logminv 1 logmaxv
- { dup base exch exp
- exch base exch loglgen
- } for
- ]
- }
- { % non-logarithmic ticks
- {
- % fix tick separation if undefined (0) or too small
- /base 0 def
- /delta maxv minv sub def
- ticksep delta 30 div le
- { /ticksep 10 delta log 1 sub ceiling exp def
- ticksep delta 2 div ge
- { /ticksep ticksep 2 div def }
- { ticksep delta 5 div lt
- { /ticksep 2 ticksep mul def
- } if
- } ifelse
- } if
-
- % adjust minv and maxv to be multiples of ticksep
- /minv minv ticksep div floor ticksep mul def
- /maxv maxv ticksep div ceiling ticksep mul def
- /delta maxv minv sub def
-
- % if minv or maxv near zero, move to zero and redo
- minv ticksep eq
- { /minv 0 def }
- { maxv ticksep neg eq { /maxv 0 def } { exit } ifelse
- } ifelse
- } loop
-
- % if minv, maxv, and ticksep are all integral, set "makeint" to true
- /makeint minv integral maxv integral ticksep integral and and def
-
- % ticks := [ minv, minv+ticksep, ... , maxv ]
- [ 0 1 delta ticksep div round
- { ticksep mul minv add makeint { cvi } if lgen }
- for
- ]
- } ifelse
- }
- { exch pop
- } ifelse
- minv maxv base
-} def
-
-% xset: set up all data for x axis, including limits and ticks
-% xticksep xticks 0 alldata xmin xmax xlog xextra xdecr xaxis xticklength xset -
-/xset
-{ /xticklength exch def
- /xaxis exch def
- /xdecr exch def
- /xextra exch def
- xaxis exch ticksandlimits
- /xlog exch def /xmax exch def /xmin exch def /xticks exch def
- /xleft xdecr { xmax } { xmin } ifelse def
- /xright xdecr { xmin } { xmax } ifelse def
- /xwidth xsize xextra 2 mul sub def
- /trxmin xmin xtr def /trxmax xmax xtr def
-} def
-
-% yset: set up all data for y axis, including limits and yticks
-% yticksep yticks 0 alldata ymin ymax ylog yextra ydecr yaxis yticklength yset -
-/yset
-{ /yticklength exch def
- /yaxis exch def
- /ydecr exch def
- /yextra exch def
- yaxis exch ticksandlimits
- /ylog exch def /ymax exch def /ymin exch def /yticks exch def
- /yleft ydecr { ymax } { ymin } ifelse def
- /yright ydecr { ymin } { ymax } ifelse def
- /ywidth ysize yextra 2 mul sub def
- /trymin ymin ytr def /trymax ymax ytr def
-} def
-
-% rset: set up all data for y axis (again), but including limits and rticks
-% rticksep rticks 0 alldata ymin ymax ylog yextra ydecr yaxis rticklength rset -
-/rset
-{ /rticklength exch def
- /yaxis exch def
- /ydecr exch def
- /yextra exch def
- yaxis exch ticksandlimits
- /ylog exch def /ymax exch def /ymin exch def /rticks exch def
- /yleft ydecr { ymax } { ymin } ifelse def
- /yright ydecr { ymin } { ymax } ifelse def
- /ywidth ysize yextra 2 mul sub def
- /trymin ymin ytr def /trymax ymax ytr def
-} def
-
-% norset: set up data for no rticks
-% - norset -
-/norset
-{ /rticklength 0 def
- /rticks [] def
-} def
-
-% framestyle: print a frame around the graph
-/framestyle
-{ 0 0 moveto xsize 0 lineto xsize ysize lineto
- 0 ysize lineto closepath stroke
- /printxtick /printxlabel xticks xleft printticks
- /printytick /printylabel yticks ymin printticks
- /printrtick /printrlabel rticks ymin printticks
-} def
-
-% nonestyle: print nothing around the graph
-/nonestyle
-{
-} def
-
-% axesstyle: print axes for the graph (unless axis values missing)
-/axesstyle
-{
- xaxis false eq yaxis false eq or
- { framestyle }
- { xaxis yaxis trpoint dup 0 exch moveto xsize exch lineto
- dup 0 moveto ysize lineto stroke
- /printxaxistick /printxaxislabel xticks xleft printticks
- /printyaxistick /printyaxislabel yticks ymin printticks
- } ifelse
-} def
-
-% rundata: run all data sets
-/rundata
-{ alldata
- { gsave
- dup dup dup dup dup
- 5 get /texture exch def
- 4 get /dopaint exch def
- 3 get /initrun exch def
- 2 get /pairs exch def
- 1 get /points exch def
- 0 get /data exch def
- dopaint
- { data length 4 ge
- {
- gsave
- initrun
- newpath
- data 0 get ymin trpoint yextra sub moveto
- 0 2 data length 2 sub
- { dup 1 add
- data exch get /ycurr exch def
- data exch get /xcurr exch def
- xcurr ycurr trpoint lineto
- } for
- data dup length 2 sub get ymin trpoint yextra sub lineto
- closepath texture fill
- grestore
- } if
- } if
- initrun
- data length 2 ge
- {
- /xcurr data 0 get def
- /ycurr data 1 get def
- points
- data length 4 ge
- { 2 2 data length 2 sub
- { /xprev xcurr def
- /yprev ycurr def
- dup dup 2 eq /firstpair exch def
- data length 2 sub eq /lastpair exch def
- dup 1 add
- data exch get /ycurr exch def
- data exch get /xcurr exch def
- pairs
- points
- } for
- } if
- } if
- grestore
- } forall
-} def
-
-end
-%%EndResource