aboutsummaryrefslogtreecommitdiffstats
path: root/include/graphf
diff options
context:
space:
mode:
authorJeffrey H. Kingston <jeff@it.usyd.edu.au>2010-09-14 19:21:41 +0000
committerJeffrey H. Kingston <jeff@it.usyd.edu.au>2010-09-14 19:21:41 +0000
commit71bdb35d52747e6d7d9f55df4524d57c2966be94 (patch)
tree480ee5eefccc40d5f3331cc52d66f722fd19bfb9 /include/graphf
parentb41263ea7578fa9742486135c762803b52794105 (diff)
downloadlout-71bdb35d52747e6d7d9f55df4524d57c2966be94.tar.gz
Lout 3.17.
git-svn-id: http://svn.savannah.nongnu.org/svn/lout/trunk@2 9365b830-b601-4143-9ba8-b4a8e2c3339c
Diffstat (limited to 'include/graphf')
-rw-r--r--include/graphf1084
1 files changed, 1084 insertions, 0 deletions
diff --git a/include/graphf b/include/graphf
new file mode 100644
index 0000000..dfd69df
--- /dev/null
+++ b/include/graphf
@@ -0,0 +1,1084 @@
+
+###############################################################################
+# #
+# Lout @Graph package for drawing graphs (Version 1.0) #
+# #
+# Version 1.0 by Jeffrey H. Kingston, December 1993. #
+# #
+# This package draws graphs, the statistical kind not the graph-theoretical #
+# kind. See the User's Guide (Advanced Graphics) for user info. #
+# #
+###############################################################################
+
+@SysPrependGraphic { graphf.lpg }
+@SysInclude { graphf.etc }
+
+def @GraphObj
+ left p
+ named margin { 0c }
+ named adj { 0 0 }
+ right x
+{
+ @BackEnd @Case {
+ PostScript @Yield {
+ @Null & # kills previous white space
+ @HContract @VContract {
+ //0io ||0io @HContract @VContract
+ { p "trpoint translate" adj "translate gsave" // "grestore" }
+ @Graphic { //margin ||margin x ||margin //margin }
+ ||0io //0io
+ }
+ }
+# VT: PDF does nothing
+ PDF @Yield {
+ @Null & # kills previous white space
+ @HContract @VContract {
+ //0io ||0io @HContract @VContract
+ { "% @GraphObj UNIMPLEMENTED" }
+ @Graphic { //margin ||margin x ||margin //margin }
+ ||0io //0io
+ }
+ }
+ }
+}
+
+def @GraphCross
+ named symbolsize
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.15 ft }
+{
+ @BackEnd @Case {
+
+ PostScript @Yield {
+ @HContract @VContract
+ { "newpath 0 0 moveto xsize ysize lineto 0 ysize moveto"
+ "xsize 0 lineto [] 0 setdash stroke"
+ }
+ @Graphic
+ {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+ }
+
+ PDF @Yield {
+ @HContract @VContract
+ {"n [] 0 d 0 0 m __xsize __ysize l 0 __ysize m __xsize 0 l S"} # uses S because PostScript version does NOT use closepath
+ @Graphic
+ {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+ }
+
+ }
+}
+
+def @GraphPlus
+ named symbolsize
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.15 ft }
+{
+ @BackEnd @Case {
+
+ PostScript @Yield {
+ @HContract @VContract
+ { "newpath xmark 0 moveto xmark ysize lineto 0 ymark moveto"
+ "xsize ymark lineto [] 0 setdash stroke"
+ }
+ @Graphic
+ {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+ }
+
+ PDF @Yield {
+ @HContract @VContract
+ {"n [] 0 d __xmark 0 m __xmark __ysize l 0 __ymark m __xsize __ymark l S"} # uses S because PostScript version does NOT use closepath
+ @Graphic
+ {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+ }
+
+ }
+}
+
+def @GraphSquare
+ named symbolsize
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.15 ft }
+{
+ @BackEnd @Case {
+
+ PostScript @Yield {
+ @HContract @VContract
+ { "newpath 0 0 moveto xsize 0 lineto xsize ysize lineto"
+ "0 ysize lineto closepath [] 0 setdash stroke"
+ }
+ @Graphic
+ {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+ }
+
+ PDF @Yield {
+ @HContract @VContract
+ {"n [] 0 d 0 0 __xsize __ysize re s"}
+ @Graphic
+ {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+ }
+
+ }
+}
+
+def @GraphFilledSquare
+ named symbolsize
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.15 ft }
+{
+ @BackEnd @Case {
+
+ PostScript @Yield {
+ @HContract @VContract
+ { "newpath 0 0 moveto xsize 0 lineto xsize ysize lineto"
+ "0 ysize lineto closepath gsave [] 0 setdash stroke grestore fill"
+ }
+ @Graphic
+ {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+ }
+
+ PDF @Yield {
+ @HContract @VContract
+ {"n [] 0 d 0 0 __xsize __ysize re b"}
+ @Graphic
+ {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+ }
+
+ }
+}
+
+def @GraphDiamond
+ named symbolsize
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.15 ft }
+{
+ @BackEnd @Case {
+
+ PostScript @Yield {
+ @HContract @VContract
+ { "newpath 0 ymark moveto xmark 0 lineto xsize ymark lineto"
+ "xmark ysize lineto closepath [] 0 setdash stroke"
+ }
+ @Graphic
+ {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+ }
+
+ PDF @Yield {
+ @HContract @VContract
+ {"n [] 0 d 0 __ymark m __xmark 0 l __xsize __ymark l __xmark __ysize l s"}
+ @Graphic
+ {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+ }
+
+ }
+}
+
+def @GraphFilledDiamond
+ named symbolsize
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.15 ft }
+{
+ @BackEnd @Case {
+
+ PostScript @Yield {
+ @HContract @VContract
+ { "newpath 0 ymark moveto xmark 0 lineto xsize ymark lineto"
+ "xmark ysize lineto closepath gsave [] 0 setdash stroke grestore fill"
+ }
+ @Graphic
+ {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+ }
+
+ PDF @Yield {
+ @HContract @VContract
+ {"n [] 0 d 0 __ymark m __xmark 0 l __xsize __ymark l __xmark __ysize l b"
+ }
+ @Graphic
+ {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+ }
+
+ }
+}
+
+def @GraphCircle
+ named symbolsize
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.15 ft }
+{
+ @BackEnd @Case {
+
+ PostScript @Yield {
+ @HContract @VContract
+ { "newpath xmark ymark xmark 0 360 arc"
+ "[] 0 setdash stroke"
+ }
+ @Graphic
+ {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+ }
+
+ PDF @Yield {
+ @HContract @VContract
+#
+# draw a circle whose centre is at (xmark, ymark) and whose radius is xmark units;
+#
+# for curveto to work, we need to calculate the control points of the Bezier curve
+# as well as move the pen to the correct initial point. The circle is drawn as two
+# arcs of 180 degrees
+#
+# pt0 = (xmark + xmark, ymark)
+# pt1 = (xmark + xmark, ymark + 4/3 * xmark)
+# pt2 = (0, ymark + 4/3 * xmark)
+# pt3 = (0, ymark)
+#
+# pt0 = (0, ymark)
+# pt1 = (0, ymark - 4/3 * xmark)
+# pt2 = (xmark + xmark, ymark - 4/3 * xmark)
+# pt3 = (xmark + xmark, ymark)
+#
+ {"n [] 0 d"
+ "__mul(2, __xmark) __ymark m"
+ "__mul(2, __xmark) __add(__ymark, __div(__mul(4, __xmark), 3))" # pt1
+ "0 __add(__ymark, __div(__mul(4, __xmark), 3))" # pt2
+ "0 __ymark c" # pt3
+
+ "0 __sub(__ymark, __div(__mul(4, __xmark), 3))" # pt1
+ "__mul(2, __xmark) __sub(__ymark, __div(__mul(4, __xmark), 3))" # pt2
+ "__mul(2, __xmark) __ymark c S" # pt3
+ }
+ @Graphic
+ {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+ }
+
+ }
+}
+
+def @GraphFilledCircle
+ named symbolsize
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.15 ft }
+{
+ @BackEnd @Case {
+ PostScript @Yield {
+ @HContract @VContract
+ { "newpath xmark ymark xmark 0 360 arc"
+ "gsave [] 0 setdash stroke grestore fill"
+ }
+ @Graphic
+ {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+ }
+
+ PDF @Yield {
+ @HContract @VContract
+#
+# draw a filled circle whose centre is at (xmark, ymark) and whose radius is xmark units;
+#
+# for curveto to work, we need to calculate the control points of the Bezier curve
+# as well as move the pen to the correct initial point. The circle is drawn as two
+# arcs of 180 degrees
+#
+# pt0 = (xmark + xmark, ymark)
+# pt1 = (xmark + xmark, ymark + 4/3 * xmark)
+# pt2 = (0, ymark + 4/3 * xmark)
+# pt3 = (0, ymark)
+#
+# pt0 = (0, ymark)
+# pt1 = (0, ymark - 4/3 * xmark)
+# pt2 = (xmark + xmark, ymark - 4/3 * xmark)
+# pt3 = (xmark + xmark, ymark)
+#
+# Note: this is not a strict translation because there is a setdash bracketed by
+# gsave/grestore in the above PostScript but there is no closepath before it;
+# but in PDF, it is not possible to execute a setdash within a path definition.
+#
+ {"n [] 0 d"
+ "__mul(2, __xmark) __ymark m"
+ "__mul(2, __xmark) __add(__ymark, __div(__mul(4, __xmark), 3))" # pt1
+ "0 __add(__ymark, __div(__mul(4, __xmark), 3))" # pt2
+ "0 __ymark c" # pt3
+
+ "0 __sub(__ymark, __div(__mul(4, __xmark), 3))" # pt1
+ "__mul(2, __xmark) __sub(__ymark, __div(__mul(4, __xmark), 3))" # pt2
+ "__mul(2, __xmark) __ymark c b" # pt3
+ }
+ @Graphic
+ {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+ }
+
+ }
+}
+
+def @GraphTriangle
+ named symbolsize
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.15 ft }
+{
+ @BackEnd @Case {
+
+ PostScript @Yield {
+ @HContract @VContract
+ { "newpath 0 0 moveto xsize 0 lineto xmark ysize 1.25 mul lineto"
+ "closepath [] 0 setdash stroke"
+ }
+ @Graphic
+ {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+ }
+
+ PDF @Yield {
+ @HContract @VContract
+ {"n [] 0 d 0 0 m __xsize 0 l __xmark __mul(__ysize, 1.25) l s"}
+ @Graphic
+ {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+ }
+
+ }
+}
+
+def @GraphFilledTriangle
+ named symbolsize
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.15 ft }
+{
+ @BackEnd @Case {
+
+ PostScript @Yield {
+ @HContract @VContract
+ { "newpath 0 0 moveto xsize 0 lineto xmark ysize 1.25 mul lineto"
+ "closepath gsave [] 0 setdash stroke grestore fill"
+ }
+ @Graphic
+ {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+ }
+
+ PDF @Yield {
+ @HContract @VContract
+ {"n [] 0 d 0 0 m __xsize 0 l __xmark __mul(__ysize, 1.25) l h b"}
+ @Graphic
+ {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High}
+ }
+
+ }
+}
+
+def @GraphNoLine
+ named dashlength { 0.2 ft }
+ named linewidth { "currentlinewidth" }
+ named length
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 1.0 ft }
+{
+ length @Wide {}
+}
+
+def @GraphSolid
+ named dashlength { 0.2 ft }
+ named linewidth { "currentlinewidth" }
+ named length
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 1.0 ft }
+{
+ @BackEnd @Case {
+ PostScript @Yield {
+ @HContract @VContract
+ { "xsize 0 lgraphdict begin newpath 0 0 moveto lineto"
+ "/linewidth" linewidth "def xsize" dashlength "solid end"
+ } @Graphic { length @Wide }
+ }
+# VT: PDF does nothing
+ PDF @Yield {
+ @HContract @VContract
+ { "% @GraphSolid UNIMPLEMENTED" } @Graphic { length @Wide }
+ }
+ }
+}
+
+def @GraphDashed
+ named dashlength { 0.2 ft }
+ named linewidth { "currentlinewidth" }
+ named length
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 1.0 ft }
+{
+ @BackEnd @Case {
+ PostScript @Yield {
+ @HContract @VContract
+ { "xsize 0 lgraphdict begin newpath 0 0 moveto lineto"
+ "/linewidth" linewidth "def xsize" dashlength "dashed end"
+ } @Graphic { length @Wide }
+ }
+# VT: PDF does nothing
+ PDF @Yield {
+ @HContract @VContract
+ { "% @GraphDashed UNIMPLEMENTED" } @Graphic { length @Wide }
+ }
+ }
+}
+
+def @GraphDotted
+ named dashlength { 0.2 ft }
+ named linewidth { "currentlinewidth" }
+ named length
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 1.0 ft }
+{
+ @BackEnd @Case {
+ PostScript @Yield {
+ @HContract @VContract
+ { "xsize 0 lgraphdict begin newpath 0 0 moveto lineto"
+ "/linewidth" linewidth "def xsize" dashlength "dotted end"
+ } @Graphic { length @Wide }
+ }
+# VT: PDF does nothing
+ PDF @Yield {
+ @HContract @VContract
+ { "% @GraphDotted UNIMPLEMENTED" } @Graphic { length @Wide }
+ }
+ }
+}
+
+
+export @Data
+def @Graph
+ named save { no }
+ named style { frame }
+ named width
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 6.0 cm }
+ named height
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 4.0 cm }
+ named xextra { "none" }
+ named yextra { "none" }
+ named xdecreasing { no }
+ named ydecreasing { no }
+ named leftcaption { }
+ named rightcaption { }
+ named abovecaption { }
+ named belowcaption { }
+ named leftgap
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 1.5 cm }
+ named rightgap
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.5 cm }
+ named abovegap
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.5 cm }
+ named belowgap
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.5 cm }
+ named hidecaptions { yes }
+ named objects
+ named @NW
+ import @GraphMath named at { 0 0 }
+ named margin
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.3 ft }
+ right x
+ { at @GraphObj adj { "xsize neg ysize" } margin { margin } x }
+ named @SW
+ import @GraphMath named at { 0 0 }
+ named margin
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.3 ft }
+ right x
+ { at @GraphObj adj { "xsize neg 0" } margin { margin } x }
+ named @SE
+ import @GraphMath named at { 0 0 }
+ named margin
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.3 ft }
+ right x
+ { at @GraphObj adj { "0 0" } margin { margin } x }
+ named @NE
+ import @GraphMath named at { 0 0 }
+ named margin
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.3 ft }
+ right x
+ { at @GraphObj adj { "0 ysize" } margin { margin } x }
+ named @W
+ import @GraphMath named at { 0 0 }
+ named margin
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.3 ft }
+ right x
+ { at @GraphObj adj { "xsize neg ysize 2 div" } margin { margin } x }
+ named @S
+ import @GraphMath named at { 0 0 }
+ named margin
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.3 ft }
+ right x
+ { at @GraphObj adj { "xsize neg 2 div 0" } margin { margin } x }
+ named @E
+ import @GraphMath named at { 0 0 }
+ named margin
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.3 ft }
+ right x
+ { at @GraphObj adj { "0 ysize 2 div" } margin { margin } x }
+ named @N
+ import @GraphMath named at { 0 0 }
+ named margin
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.3 ft }
+ right x
+ { at @GraphObj adj { "xsize neg 2 div ysize" } margin { margin } x }
+ named @CTR
+ import @GraphMath named at { 0 0 }
+ named margin
+ named cm left x { x"c" }
+ named in left x { x"i" }
+ named em left x { x"m" }
+ named pt left x { x"p" }
+ named ft left x { x"f" }
+ named sp left x { x"s" }
+ named vs left x { x"v" }
+ { 0.3 ft }
+ right x
+ { at @GraphObj adj { "xsize neg 2 div ysize 2 div" } margin {margin} x }
+ {}
+ named xorigin named none { "false" } { none }
+ named yorigin named none { "false" } { none }
+ named xlog named none { "0" } { none }
+ named ylog named none { "0" } { none }
+ named points named none { "none" } { none }
+ named pairs named none { "none" } { none }
+ named colour named none { "none" } { none }
+ named color named none { "none" } { none }
+ named paint named none { "none" } { none }
+ named xmin named none { "false" } { none }
+ named xmax named none { "false" } { none }
+ named ymin named none { "false" } { none }
+ named ymax named none { "false" } { none }
+ named xticksep named none { "0" } { none }
+ named yticksep named none { "0" } { none }
+ named rticksep named none { "0" } { none }
+ import @GraphMath named xticks
+ named none { "false" }
+ named auto { "false" }
+ named "@" { " lgen" }
+ named "^" { "^" }
+ { false }
+ import @GraphMath named yticks
+ named none { "false" }
+ named auto { "false" }
+ named "@" { " lgen" }
+ named "^" { "^" }
+ { false }
+ import @GraphMath named rticks
+ named none { "false" }
+ named auto { "false" }
+ named "@" { " lgen" }
+ named "^" { "^" }
+ { }
+ named xticklength { 0.5 ft }
+ named yticklength { 0.5 ft }
+ named rticklength { 0.5 ft }
+ named dataformat { xandy }
+ named dashlength { 0.2 ft }
+ named linewidth { "currentlinewidth" }
+ named symbolsize { 0.15 ft }
+ body @Body
+@Begin
+
+ def @Above
+ {
+ abovecaption @Case {
+ "" @Yield {}
+ else @Yield @OneCol { ||0.5rt clines @Break abovecaption || //abovegap }
+ }
+ }
+
+ def @Below
+ {
+ belowcaption @Case {
+ "" @Yield {}
+ else @Yield @OneCol { //belowgap ||0.5rt clines @Break belowcaption || }
+ }
+ }
+
+ def @Left
+ {
+ leftcaption @Case {
+ "" @Yield {}
+ else @Yield @OneCol @OneRow {
+ { //0.5rt @OneRow clines @Break leftcaption // } ^||leftgap }
+ }
+ }
+
+ def @Right
+ {
+ rightcaption @Case {
+ "" @Yield {}
+ else @Yield @OneCol @OneRow {
+ ||rightgap { //0.5rt @OneRow lines @Break rightcaption // } }
+ }
+ }
+
+ def @ZeroWidth
+ right x
+ {
+ hidecaptions @Case {
+ { No no } @Yield x
+ { Yes yes } @Yield @OneCol { ||0io x ||0io }
+ }
+ }
+
+ def @AddCaptions right x
+ {
+ def belowextra
+ {
+ xticks @Case {
+ "" @Yield { 0i }
+ else @Yield { 1.7f }
+ }
+ }
+
+ @HContract @VContract
+ {
+ | @Above |
+ / @ZeroWidth @Left | &0.5rt x | @ZeroWidth @Right
+ /belowextra | @Below |
+ }
+ }
+
+ export pi e sqrt abs ceiling floor truncate round cos sin atan exp log rand
+ "*" "/" idiv mod "-" "-0" "-1" "-2" "-3" "-4" "-5" "-6" "-7" "-8"
+ "-9" "-." "+" "=" "!=" "<" "<=" ">" ">=" not and xor or
+ if xloop yloop zloop
+
+ def @Data
+ named points named none { "none" } { points }
+ named pairs named none { "none" } { pairs }
+ named colour named none { "none" } { colour }
+ named color named none { "none" } { color }
+ named paint named none { "none" } { paint }
+ named dashlength { dashlength }
+ named linewidth { linewidth }
+ named symbolsize { symbolsize }
+ named dataformat { dataformat }
+ body data
+ {
+ def pi { "3.14159" }
+ def e { "2.71828" }
+ def sqrt precedence 40 right y { y "sqrt" }
+ def abs precedence 40 right y { y "abs" }
+ def ceiling precedence 40 right y { y "ceiling" }
+ def floor precedence 40 right y { y "floor" }
+ def truncate precedence 40 right y { y "truncate" }
+ def round precedence 40 right y { y "round" }
+ def cos precedence 40 right y { y "cos" }
+ def sin precedence 40 right y { y "sin" }
+ def atan precedence 39 left x right y { x y "atan" }
+ def exp precedence 38 left x right y { x y "exp" }
+ def log precedence 37 left x right y { x y "dolog" }
+ def rand precedence 36 left x right y { x y "dorand" }
+ def "*" precedence 35 left x right y { x y "mul" }
+ def "/" precedence 34 left x right y { x y "div" }
+ def idiv precedence 34 left x right y { x y "idiv" }
+ def mod precedence 34 left x right y { x y "mod" }
+ def "-" precedence 33 left x right y
+ { x @Case { "" @Yield {y "neg"} else @Yield { x y "sub" } } }
+ def "-0" { "-0" }
+ def "-1" { "-1" }
+ def "-2" { "-2" }
+ def "-3" { "-3" }
+ def "-4" { "-4" }
+ def "-5" { "-5" }
+ def "-6" { "-6" }
+ def "-7" { "-7" }
+ def "-8" { "-8" }
+ def "-9" { "-9" }
+ def "-." { "-." }
+ def "+" precedence 32 left x right y
+ { x @Case { "" @Yield { y } else @Yield { x y "add" } } }
+ def "=" precedence 30 left x right y { x y "eq" }
+ def "!=" precedence 30 left x right y { x y "ne" }
+ def "<" precedence 30 left x right y { x y "lt" }
+ def "<=" precedence 30 left x right y { x y "le" }
+ def ">" precedence 30 left x right y { x y "gt" }
+ def ">=" precedence 30 left x right y { x y "ge" }
+ def not precedence 25 right y { y "not" }
+ def and precedence 24 left x right y { x y "and" }
+ def xor precedence 23 left x right y { x y "xor" }
+ def or precedence 22 left x right y { x y "or" }
+ def if
+ named cond { true }
+ named then {}
+ named else {}
+ { cond "{" then "} {" else "} ifelse" }
+ def xloop
+ named from { 0 }
+ named to { 0 }
+ named by { 1 }
+ named do named x { "xval" } {}
+ { from by to "{ /xval exch def" do "} for" }
+ def yloop
+ named from { 0 }
+ named to { 0 }
+ named by { 1 }
+ named do named y { "yval" } {}
+ { from by to "{ /yval exch def" do "} for" }
+ def zloop
+ named from { 0 }
+ named to { 0 }
+ named by { 1 }
+ named do named z { "zval" } {}
+ { from by to "{ /zval exch def" do "} for" }
+
+ def @IfPt
+ left no
+ right yes
+ {
+ points @Case {
+ none @Yield no
+ else @Yield yes
+ }
+ }
+
+ def @Points
+ {
+ points @Case {
+ none @Yield ""
+ plus @Yield "plus"
+ cross @Yield "cross"
+ square @Yield "square"
+ filledsquare @Yield "filledsquare"
+ diamond @Yield "diamond"
+ filleddiamond @Yield "filleddiamond"
+ circle @Yield "circle"
+ filledcircle @Yield "filledcircle"
+ triangle @Yield "triangle"
+ filledtriangle @Yield "filledtriangle"
+ }
+ }
+
+ def @Pairs
+ {
+ pairs @Case {
+ none @Yield {}
+ solid @Yield { "linesetup solid" @IfPt "ilinesetup solid" }
+ dashed @Yield { "linesetup cdashed" @IfPt "ilinesetup dashed" }
+ dotted @Yield { "linesetup dotted" @IfPt "ilinesetup dotted" }
+ surfacexhisto @Yield { "surfacexhisto" }
+ surfaceyhisto @Yield { "surfaceyhisto" }
+ xhisto @Yield { "xhisto" }
+ yhisto @Yield { "yhisto" }
+ filledxhisto @Yield { "filledxhisto" }
+ filledyhisto @Yield { "filledyhisto" }
+ }
+ }
+
+ def @DataFormat
+ {
+ dataformat @Case {
+ xandy @Yield xandy
+ yonly @Yield yonly
+ xonly @Yield xonly
+ }
+ }
+
+ def @Col
+ {
+ { colour @Case { "none" @Yield color else @Yield colour } } @Case {
+ none @Yield { }
+ nochange @Yield { }
+ darkblue @Yield { 0.0 0.0 0.5 setrgbcolor }
+ blue @Yield { 0.0 0.0 1.0 setrgbcolor }
+ lightblue @Yield { 0.5 0.5 1.0 setrgbcolor }
+ darkgreen @Yield { 0.0 0.5 0.0 setrgbcolor }
+ green @Yield { 0.0 1.0 0.0 setrgbcolor }
+ lightgreen @Yield { 0.5 1.0 0.5 setrgbcolor }
+ darkred @Yield { 0.5 0.0 0.0 setrgbcolor }
+ red @Yield { 1.0 0.0 0.0 setrgbcolor }
+ lightred @Yield { 1.0 0.5 0.5 setrgbcolor }
+ darkcyan @Yield { 0.0 0.5 0.5 setrgbcolor }
+ cyan @Yield { 0.0 1.0 1.0 setrgbcolor }
+ lightcyan @Yield { 0.5 1.0 1.0 setrgbcolor }
+ darkmagenta @Yield { 0.5 0.0 0.5 setrgbcolor }
+ magenta @Yield { 1.0 0.0 1.0 setrgbcolor }
+ lightmagenta @Yield { 1.0 0.5 1.0 setrgbcolor }
+ darkyellow @Yield { 0.5 0.5 0.0 setrgbcolor }
+ yellow @Yield { 1.0 1.0 0.0 setrgbcolor }
+ lightyellow @Yield { 1.0 1.0 0.5 setrgbcolor }
+ darkgray @Yield { 0.2 0.2 0.2 setrgbcolor }
+ gray @Yield { 0.5 0.5 0.5 setrgbcolor }
+ lightgray @Yield { 0.7 0.7 0.7 setrgbcolor }
+ darkgrey @Yield { 0.2 0.2 0.2 setrgbcolor }
+ grey @Yield { 0.5 0.5 0.5 setrgbcolor }
+ lightgrey @Yield { 0.7 0.7 0.7 setrgbcolor }
+ black @Yield { 0.0 0.0 0.0 setrgbcolor }
+ white @Yield { 1.0 1.0 1.0 setrgbcolor }
+ }
+ }
+
+ def @Paint
+ {
+ paint @Case {
+ { none no No } @Yield "false"
+ { yes Yes } @Yield "true"
+ }
+ }
+
+ "[ [" data "]" dataformat
+ "{" @Points "}"
+ "{" @Pairs "}"
+ "{ /dashlength" dashlength "def"
+ " /linewidth" linewidth "def" @Col
+ " /symbolsize" symbolsize "def }"
+ "{" @Paint "}"
+ "]"
+ }
+
+ def @Style
+ {
+ style @Case {
+ frame @Yield { "framestyle" }
+ none @Yield { "nonestyle" }
+ axes @Yield { "axesstyle" }
+ }
+ }
+
+ def @XExtra
+ {
+ xextra @Case {
+ "none" @Yield {
+ style @Case {
+ frame @Yield { "0.5 cm" }
+ none @Yield { "0" }
+ axes @Yield { "0" }
+ }
+ }
+ else @Yield xextra
+ }
+ }
+
+ def @YExtra
+ {
+ yextra @Case {
+ "none" @Yield {
+ style @Case {
+ frame @Yield { "0.5 cm" }
+ none @Yield { "0" }
+ axes @Yield { "0" }
+ }
+ }
+ else @Yield yextra
+ }
+ }
+
+ def @XDecreasing
+ {
+ xdecreasing @Case {
+ { No no } @Yield "false"
+ { Yes yes } @Yield "true"
+ }
+ }
+
+ def @YDecreasing
+ {
+ ydecreasing @Case {
+ { No no } @Yield "false"
+ { Yes yes } @Yield "true"
+ }
+ }
+
+ @AddCaptions width @Wide height @High
+ @BackEnd @Case {
+ PostScript @Yield {
+ {
+ "grestore"
+ save @Case { { Yes yes } @Yield "save" else @Yield {} }
+ "gsave xsize ysize lgraphdict begin /ysize exch def /xsize exch def"
+ "/alldata [" @Body "] def"
+ xticksep "[" xticks "] 0 alldata" xmin xmax xlog
+ @XExtra @XDecreasing xorigin xticklength "xset"
+ yticksep "[" yticks "] 1 alldata" ymin ymax ylog
+ @YExtra @YDecreasing yorigin yticklength "yset"
+
+ rticks @Case {
+
+ "" @Yield "norset"
+
+ else @Yield {
+ rticksep "[" rticks "] 1 alldata" ymin ymax ylog
+ @YExtra @YDecreasing yorigin rticklength "rset"
+ }
+ }
+
+ "rundata" @Style // "end"
+ save @Case { { Yes yes } @Yield "restore" else @Yield {} }
+ } @Graphic { //1rt objects }
+ }
+ PDF @Yield { {"% @Graph UNIMPLEMENTED"} @Graphic { //1rt objects } }
+ }
+
+@End @Graph