aboutsummaryrefslogtreecommitdiffstats
path: root/include/figf
diff options
context:
space:
mode:
Diffstat (limited to 'include/figf')
-rw-r--r--include/figf909
1 files changed, 909 insertions, 0 deletions
diff --git a/include/figf b/include/figf
new file mode 100644
index 0000000..c3cd15b
--- /dev/null
+++ b/include/figf
@@ -0,0 +1,909 @@
+
+###############################################################################
+# #
+# Lout @Fig package for drawing figures (Version 2.0) #
+# #
+# Version 1.0 by Jeffrey H. Kingston, October 1991. #
+# Version 2.0 by Jeffrey H. Kingston, 22 December 1992. #
+# Symbol names changed by JHK 5 March 1993 to avoid clashes with EPS files. #
+# @CurveBox and @ShadowBox added by JHK April 1995. #
+# #
+# See "Fig - a Lout package for drawing figures" for user information. #
+# #
+# This package is now obsolete, having been replaced by @Diag. #
+# #
+###############################################################################
+
+@SysPrependGraphic { "figf.lpg" }
+
+export in cm pt em sp vs ft dg
+ "<<" "**" "++" "--" @Max @Min
+ @Distance @XDistance @YDistance @Angle
+ @Prev "::" @Label @BaseOf @MarkOf @ShowLabels @Figure
+ @Frame @Box @CurveBox @ShadowBox @Square @Diamond @Polygon @Ellipse
+ @Circle @HLine @VLine @Line @HArrow @VArrow @Arrow @Arc
+
+def @Fig
+ named maxlabels { 200 }
+ named linestyle { solid }
+ named linewidth { 0.5 pt }
+ named linecap { round }
+ named dashlength { 0.15 cm }
+ named paint { nopaint }
+ named margin { 0.4c }
+ named arrow { noarrow }
+ named headstyle { open }
+ named headwidth { 0.05 cm }
+ named headlength { 0.15 cm }
+ body @Body
+@Begin
+
+ # Like @Graphic, but affects the graphics state of right parameter
+ def @InnerGraphic
+ left ps
+ right x
+ {
+ @BackEnd @Case {
+ PostScript @Yield { { ps gsave // grestore } @Graphic x }
+ PDF @Yield { }
+ }
+ }
+
+ def in precedence 39 left x {
+ @BackEnd @Case {
+ PostScript @Yield { x "in" }
+ PDF @Yield { "__mul(__in, "x")" }
+ }
+ }
+
+ def cm precedence 39 left x {
+ @BackEnd @Case {
+ PostScript @Yield { x "cm" }
+ PDF @Yield { "__mul(__cm, "x")" }
+ }
+ }
+
+ def pt precedence 39 left x {
+ @BackEnd @Case {
+ PostScript @Yield { x "pt" }
+ PDF @Yield { "__mul(__pt, "x")" }
+ }
+ }
+
+ def em precedence 39 left x {
+ @BackEnd @Case {
+ PostScript @Yield { x "em" }
+ PDF @Yield { "__mul(__em, "x")" }
+ }
+ }
+
+ def sp precedence 39 left x {
+ @BackEnd @Case {
+ PostScript @Yield { x "sp" }
+ PDF @Yield { "__mul(__louts, "x")" }
+ }
+ }
+
+ def vs precedence 39 left x {
+ @BackEnd @Case {
+ PostScript @Yield { x "vs" }
+ PDF @Yield { "__mul(__loutv, "x")" }
+ }
+ }
+
+ def ft precedence 39 left x {
+ @BackEnd @Case {
+ PostScript @Yield { x "ft" }
+ PDF @Yield { "__mul(__loutf, "x")" }
+ }
+ }
+
+ def dg precedence 39 left x {
+ @BackEnd @Case {
+ PostScript @Yield { x "dg" }
+ PDF @Yield { }
+ }
+ }
+
+ def "<<"
+ precedence 38
+ left length
+ right angle
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ 0 0 length angle "lfigatangle"
+ }
+ PDF @Yield {
+ }
+ }
+ }
+
+ def "**"
+ precedence 37
+ left point
+ right length
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ point length "lfigpmul"
+ }
+ PDF @Yield {
+ }
+ }
+ }
+
+ def "++"
+ precedence 36
+ associativity left
+ left x
+ right y
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ x y "lfigpadd"
+ }
+ PDF @Yield {
+ }
+ }
+ }
+
+ def "--"
+ precedence 36
+ associativity left
+ left x
+ right y
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ y x "lfigpsub"
+ }
+ PDF @Yield {
+ }
+ }
+ }
+
+ def @Max
+ precedence 36
+ left x
+ right y
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ x y "lfigpmax"
+ }
+ PDF @Yield {
+ }
+ }
+ }
+
+ def @Min
+ precedence 36
+ left x
+ right y
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ x y "lfigpmin"
+ }
+ PDF @Yield {
+ }
+ }
+ }
+
+ def @Distance
+ precedence 35
+ left x
+ right y
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ x y "lfigdistance"
+ }
+ PDF @Yield {
+ }
+ }
+ }
+
+ def @XDistance
+ precedence 35
+ left x
+ right y
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ x y "lfigxdistance"
+ }
+ PDF @Yield {
+ }
+ }
+ }
+
+ def @YDistance
+ precedence 35
+ left x
+ right y
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ x y "lfigydistance"
+ }
+ PDF @Yield {
+ }
+ }
+ }
+
+ def @Angle
+ precedence 35
+ left x
+ right y
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ x y "lfigangle"
+ }
+ PDF @Yield {
+ }
+ }
+ }
+
+ def @Prev
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ "lfigprevious"
+ }
+ PDF @Yield {
+ }
+ }
+ }
+
+ def "::"
+ precedence 33
+ left name
+ right x
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ { "currentdict end" maxlabels "dict begin begin"
+ // "("name") lfigpromotelabels" } @Graphic x
+ }
+ PDF @Yield {
+ }
+ }
+ }
+
+ def @Label
+ right name
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ "/"name "lfigpointdef"
+ }
+ PDF @Yield {
+ }
+ }
+ }
+
+ def @MarkOf
+ precedence 32
+ left point
+ right x
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ { point "translate" } @InnerGraphic
+ {
+ /0io |0io @OneCol @OneRow x |0io /0io
+ }
+ }
+ PDF @Yield {
+ }
+ }
+ }
+
+ def @BaseOf
+ precedence 32
+ left point
+ right x
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ { point "translate" } @InnerGraphic
+ {
+ /0io |0io @OneRow @OneCol {
+ | @OneCol @OneRow x ^/
+ } |0io /0io
+ }
+ }
+ PDF @Yield {
+ }
+ }
+ }
+
+ def @ShowLabels
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ "lfigshowlabels" @Graphic
+ }
+ PDF @Yield {
+ }
+ }
+ }
+
+ def @Figure
+ named shape { }
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named arrow { arrow }
+ named headstyle { headstyle }
+ named headwidth { headwidth }
+ named headlength { headlength }
+ named paint { paint }
+ named margin { 0c }
+ right x
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ @HContract @VContract
+ {
+ #fill the shape
+ paint @Case
+ {
+ nopaint @Yield {}
+
+ { nochange darkblue blue lightblue darkgreen green lightgreen
+ darkred red lightred darkcyan cyan lightcyan darkmagenta
+ magenta lightmagenta darkyellow yellow lightyellow darkgray
+ gray lightgray darkgrey grey lightgrey black white }
+ @Yield
+ { "/lfig"paint "[" shape "] gsave lfigpaintpath grestore" }
+ }
+
+ # stroke the path and add any arrowheads
+ linestyle @Case
+ {
+ { solid dashed cdashed dotted noline } @Yield
+ {
+ linewidth "setlinewidth" "lfig"linecap "setlinecap"
+ dashlength "/lfig"linestyle "[" shape "] lfigdopath"
+ arrow @Case
+ {
+ noarrow @Yield { pop pop }
+ { forward back both } @Yield
+ { dashlength "/lfig"linestyle "/"lfigblack
+ headstyle @Case
+ { { open halfopen closed } @Yield "lfig"headstyle }
+ headlength headwidth "lfig"arrow
+ }
+ }
+ }
+ }
+ }
+ @Graphic
+ {
+ ^/margin ^|margin @OneCol @OneRow x |margin
+ /margin
+ }
+ }
+
+ PDF @Yield {
+ }
+ }
+ }
+
+ def @Frame
+ right x
+ {
+ @Figure
+ shape {xsize 0 @Label X 0 ysize @Label Y}
+ { x }
+ }
+
+ def @Box
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named paint { paint }
+ named margin { margin }
+ right x
+ {
+ @Figure
+ shape {
+ # 0 0 @Label SW
+ # xsize 0 @Label SE
+ # xsize ysize @Label NE
+ # 0 ysize @Label NW
+ # SE ** 0.5 @Label S
+ # NW ** 0.5 @Label W
+ # W ++ SE @Label E
+ # S ++ NW @Label N
+ # NE ** 0.5 @Label CTR
+ # SW SE NE NW SW
+ lfigbox
+ }
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ paint { paint }
+ margin { margin }
+ x
+ }
+
+
+ def @CurveBox
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named paint { paint }
+ named margin { margin }
+ right x
+ {
+ @Figure
+ shape {
+ lfigcurvebox
+ }
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ paint { paint }
+ margin { margin }
+ { 0c @HShift x }
+ }
+
+ def @ShadowBox
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named paint { paint }
+ named margin { margin }
+ named shadow { 0.2f }
+ right x
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ @VContract @HContract 0c @HShift "lfigshadow" @Graphic
+ {
+ ^/shadow ^|shadow 0c @HShift
+ @Figure
+ shape {
+ lfigbox
+ }
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ paint { paint }
+ margin { margin }
+ 0c @HShift x
+ |shadow /shadow
+ }
+ }
+ PDF @Yield {
+ @VContract @HContract 0c @HShift
+
+# "lfigshadow" @Graphic is this:
+ { "__mul(__xmark, 2) 0 m __xsize 0 l" # xmark 2 mul 0 moveto xsize 0 lineto
+ "__xsize __sub(__ysize, __mul(__xmark, 2)) l" # xsize ysize xmark 2 mul sub lineto
+ "__sub(__xsize, __xmark) __sub(ysize, __mul(__xmark, 2)) l" # xsize xmark sub ysize xmark 2 mul sub lineto
+ "__sub(__xsize, __xmark) __xmark l" # xsize xmark sub xmark lineto
+ "__mul(__xmark, 2) __xmark l h f" # xmark 2 mul xmark lineto closepath fill
+ } @Graphic
+
+ {
+ ^/shadow ^|shadow 0c @HShift
+ @Figure
+ shape {
+ lfigbox
+ }
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ paint { paint }
+ margin { margin }
+ 0c @HShift x
+ |shadow /shadow
+ }
+ }
+ }
+ }
+
+ def @Square
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named paint { paint }
+ named margin { margin }
+ right x
+ {
+ @Figure
+ shape {
+ # {xsize ysize} ** 0.5 @Label CTR
+ # CTR ++ {{xsize xsize} @Max {ysize ysize}}**0.5 @Label NE
+ # CTR ++ { {CTR @Distance NE} << 135 } @Label NW
+ # CTR ++ { {CTR @Distance NE} << 225 } @Label SW
+ # CTR ++ { {CTR @Distance NE} << 315 } @Label SE
+ # SW ** 0.5 ++ SE ** 0.5 @Label S
+ # NW ** 0.5 ++ NE ** 0.5 @Label N
+ # SW ** 0.5 ++ NW ** 0.5 @Label W
+ # SE ** 0.5 ++ NE ** 0.5 @Label E
+ # SW SE NE NW SW
+ lfigsquare
+ }
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ paint { paint }
+ margin { margin }
+ x
+ }
+
+ def @Diamond
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named paint { paint }
+ named margin { margin }
+ right x
+ {
+ @Figure
+ shape {
+ # {xsize 0} ** 0.5 @Label S
+ # {0 ysize} ** 0.5 @Label W
+ # S ++ W @Label CTR
+ # CTR ++ W @Label N
+ # CTR ++ S @Label E
+ # S E N W S
+ lfigdiamond
+ }
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ paint { paint }
+ margin { margin }
+ x
+ }
+
+ def @Polygon
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named paint { paint }
+ named margin { margin }
+ named sides { 3 }
+ named angle { "dup 180 exch div" }
+ right x
+ {
+ @Figure
+ shape { sides angle lfigpolygon }
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ paint { paint }
+ margin { margin }
+ x
+ }
+
+ def @Ellipse
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named paint { paint }
+ named margin { margin }
+ right x
+ {
+ @Figure
+ shape {
+ # {xsize 0} ** 0.5 @Label S
+ # {0 ysize} ** 0.5 @Label W
+ # S ++ W @Label CTR
+ # CTR ++ W @Label N
+ # CTR ++ S @Label E
+ # CTR ++ {xsize 0} ** 0.3536 ++ {0 ysize} ** 0.3536 @Label NE
+ # CTR ++ {xsize 0} ** 0.3536 -- {0 ysize} ** 0.3536 @Label SE
+ # CTR -- {xsize 0} ** 0.3536 ++ {0 ysize} ** 0.3536 @Label NW
+ # CTR -- {xsize 0} ** 0.3536 -- {0 ysize} ** 0.3536 @Label SW
+ # S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
+ lfigellipse
+ }
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ paint { paint }
+ margin { margin }
+ x
+ }
+
+ def @Circle
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named paint { paint }
+ named margin { margin }
+ right x
+ {
+ @Figure
+ shape {
+ # {xsize ysize} **0.5 @Label CTR
+ # CTR ++ {{xsize 0} @Max {ysize 0}}**0.5 @Label E
+ # CTR ++ { {CTR @Distance E} << 45 } @Label NE
+ # CTR ++ { {CTR @Distance E} << 90 } @Label N
+ # CTR ++ { {CTR @Distance E} << 135 } @Label NW
+ # CTR ++ { {CTR @Distance E} << 180 } @Label W
+ # CTR ++ { {CTR @Distance E} << 225 } @Label SW
+ # CTR ++ { {CTR @Distance E} << 270 } @Label S
+ # CTR ++ { {CTR @Distance E} << 315 } @Label SE
+ # S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
+ lfigcircle
+ }
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ paint { paint }
+ margin { margin }
+ x
+ }
+
+ def @HLine
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named paint { paint }
+ named margin { 0c }
+ named arrow { arrow }
+ named headstyle { headstyle }
+ named headwidth { headwidth }
+ named headlength { headlength }
+ right x
+ {
+ @Figure
+ shape {
+ # 0 ymark @Prev @Label FROM
+ # xsize ymark @Prev @Label TO
+ lfighline
+ }
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ paint { paint }
+ margin { margin }
+ arrow { arrow }
+ headstyle { headstyle }
+ headwidth { headwidth }
+ headlength { headlength }
+ x
+ }
+
+ def @VLine
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named paint { paint }
+ named margin { 0c }
+ named arrow { arrow }
+ named headstyle { headstyle }
+ named headwidth { headwidth }
+ named headlength { headlength }
+ right x
+ {
+ @Figure
+ shape {
+ # xmark ysize @Prev @Label FROM
+ # xmark 0 @Prev @Label TO
+ lfigvline
+ }
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ paint { paint }
+ margin { margin }
+ arrow { arrow }
+ headstyle { headstyle }
+ headwidth { headwidth }
+ headlength { headlength }
+ x
+ }
+
+ def @HArrow
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named paint { paint }
+ named margin { 0c }
+ named arrow { forward }
+ named headstyle { headstyle }
+ named headwidth { headwidth }
+ named headlength { headlength }
+ right x
+ {
+ @Figure
+ shape {
+ # 0 ymark @Prev @Label FROM
+ # xsize ymark @Prev @Label TO
+ lfighline
+ }
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ paint { paint }
+ margin { margin }
+ arrow { arrow }
+ headstyle { headstyle }
+ headwidth { headwidth }
+ headlength { headlength }
+ x
+ }
+
+ def @VArrow
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named paint { paint }
+ named margin { 0c }
+ named arrow { forward }
+ named headstyle { headstyle }
+ named headwidth { headwidth }
+ named headlength { headlength }
+ right x
+ {
+ @Figure
+ shape {
+ # xmark ysize @Prev @Label FROM
+ # xmark 0 @Prev @Label TO
+ lfigvline
+ }
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ paint { paint }
+ margin { margin }
+ arrow { arrow }
+ headstyle { headstyle }
+ headwidth { headwidth }
+ headlength { headlength }
+ x
+ }
+
+ def @Line
+ named from { 0 ysize }
+ named to { xsize 0 }
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named paint { paint }
+ named margin { 0c }
+ named arrow { arrow }
+ named headstyle { headstyle }
+ named headwidth { headwidth }
+ named headlength { headlength }
+ right x
+ {
+ @Figure
+ shape {
+ from @Prev @Label FROM
+ to @Prev @Label TO
+ }
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ paint { paint }
+ margin { margin }
+ arrow { arrow }
+ headstyle { headstyle }
+ headwidth { headwidth }
+ headlength { headlength }
+ x
+ }
+
+ def @Arrow
+ named from { 0 ysize }
+ named to { xsize 0 }
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named paint { paint }
+ named margin { 0c }
+ named arrow { forward }
+ named headstyle { headstyle }
+ named headwidth { headwidth }
+ named headlength { headlength }
+ right x
+ {
+ @Figure
+ shape {
+ from @Prev @Label FROM
+ to @Prev @Label TO
+ }
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ paint { paint }
+ margin { margin }
+ arrow { arrow }
+ headstyle { headstyle }
+ headwidth { headwidth }
+ headlength { headlength }
+ x
+ }
+
+ def @Arc
+ named from { 0 ysize }
+ named to { xsize 0 }
+ named ctr { 0 0 }
+ named direction { clockwise }
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named paint { paint }
+ named margin { 0c }
+ named arrow { noarrow }
+ named headstyle { headstyle }
+ named headwidth { headwidth }
+ named headlength { headlength }
+ right x
+ {
+ @Figure
+ shape {
+ from @Label FROM
+ to @Label TO
+ ctr @Label CTR
+ FROM [ CTR
+ direction @Case { {clockwise anticlockwise} @Yield direction }
+ ] TO
+ }
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ paint { paint }
+ margin { margin }
+ arrow { arrow }
+ headstyle { headstyle }
+ headwidth { headwidth }
+ headlength { headlength }
+ x
+ }
+
+ @BackEnd @Case {
+ PostScript @Yield {
+ { "grestore save gsave" maxlabels "dict begin lfigdict begin"
+ // "end end restore"
+ } @Graphic @Body
+ }
+ PDF @Yield {
+ }
+ }
+
+@End @Fig