| |
| ############################################################################### |
| # # |
| # 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" |
| } |
| |
| } |