############################################################################### # # # Lout @GraphMath package for @Graph (Version 1.1) # # # # Version 1.0 by Jeffrey H. Kingston, December 1993. # # Version 1.1 by Jeffrey H. Kingston, October 1996. # # # # This package provides mathematics for the @Graph graph drawing package. # # # ############################################################################### export "-0" "-1" "-2" "-3" "-4" "-5" "-6" "-7" "-8" "-9" "-." pi e sqrt abs ceiling floor truncate round cos sin atan exp log rand "*" "/" idiv mod "+" "-" "=" "!=" "<" "<=" ">" ">=" not and xor or if xloop yloop zloop def @GraphMath { 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 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 35 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 "+" 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" } }