home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / APPS / lout2.lzh / LOUT2 / LIB / include / fig < prev    next >
Text File  |  1994-02-26  |  16KB  |  715 lines

  1.  
  2. ###############################################################################
  3. #                                                                             #
  4. #  Lout @Fig package for drawing figures (Version 2.0)                        #
  5. #                                                                             #
  6. #  Version 1.0 by Jeffrey H. Kingston, October 1991.                          #
  7. #  Version 2.0 by Jeffrey H. Kingston, 22 December 1992.                      #
  8. #  Symbol names changed by JHK 5 March 1993 to avoid clashes with EPS files.  #
  9. #                                                                             #
  10. #  See "Fig - a Lout package for drawing figures" for user information.       #
  11. #                                                                             #
  12. ###############################################################################
  13.  
  14. @SysPrependGraphic { "fig_prepend" }
  15.  
  16. export in cm pt em sp vs ft dg
  17.        "<<" "**" "++" "--" @Max @Min
  18.        @Distance @XDistance @YDistance @Angle
  19.        @Prev "::" @Label @BaseOf @MarkOf @ShowLabels
  20.        @Colour @Color @RGBColour @RGBColor @HSBColour @HSBColor
  21.        @Figure @Frame @Box @Square @Diamond @Polygon @Ellipse
  22.        @Circle @HLine @VLine @Line @HArrow @VArrow @Arrow @Arc
  23.  
  24. def @Fig                  
  25.     named maxlabels  { 200     }
  26.     named linestyle  { solid   }
  27.     named linewidth  { 0.5 pt  }
  28.     named linecap    { round   }
  29.     named dashlength { 0.15 cm }
  30.     named paint      { nopaint }
  31.     named margin     { 0.4c    }
  32.     named arrow      { noarrow }
  33.     named headstyle  { open    }
  34.     named headwidth  { 0.05 cm }
  35.     named headlength { 0.15 cm }
  36.     body @Body
  37. @Begin
  38.  
  39.     # Like @Graphic, but affects the graphics state of right parameter
  40.     def @InnerGraphic
  41.     left ps
  42.     right x
  43.     {
  44.     { ps gsave // grestore } @Graphic x
  45.     }
  46.  
  47.     def in precedence 39 left x { x "in" }
  48.     def cm precedence 39 left x { x "cm" }
  49.     def pt precedence 39 left x { x "pt" }
  50.     def em precedence 39 left x { x "em" }
  51.     def sp precedence 39 left x { x "sp" }
  52.     def vs precedence 39 left x { x "vs" }
  53.     def ft precedence 39 left x { x "ft" }
  54.     def dg precedence 39 left x { x "dg" }
  55.  
  56.     def "<<"
  57.     precedence 38
  58.     left length
  59.     right angle
  60.     {
  61.     0 0 length angle "lfigatangle"
  62.     }
  63.  
  64.     def "**"
  65.     precedence 37
  66.     left point
  67.     right length
  68.     {
  69.     point length "lfigpmul"
  70.     }
  71.  
  72.     def "++"
  73.     precedence 36
  74.     associativity left
  75.     left x
  76.     right y
  77.     {
  78.     x y "lfigpadd"
  79.     }
  80.  
  81.     def "--"
  82.     precedence 36
  83.     associativity left
  84.     left x
  85.     right y
  86.     {
  87.     y x "lfigpsub"
  88.     }
  89.  
  90.     def @Max
  91.     precedence 36
  92.     left x
  93.     right y
  94.     {
  95.     x y "lfigpmax"
  96.     }
  97.  
  98.     def @Min
  99.     precedence 36
  100.     left x
  101.     right y
  102.     {
  103.     x y "lfigpmin"
  104.     }
  105.  
  106.     def @Distance
  107.     precedence 35
  108.     left x
  109.     right y
  110.     {
  111.     x y "lfigdistance"
  112.     }
  113.  
  114.     def @XDistance
  115.     precedence 35
  116.     left x
  117.     right y
  118.     {
  119.     x y "lfigxdistance"
  120.     }
  121.  
  122.     def @YDistance
  123.     precedence 35
  124.     left x
  125.     right y
  126.     {
  127.     x y "lfigydistance"
  128.     }
  129.  
  130.     def @Angle
  131.     precedence 35
  132.     left x
  133.     right y
  134.     {
  135.     x y "lfigangle"
  136.     }
  137.  
  138.     def @Prev
  139.     {
  140.     "lfigprevious"
  141.     }
  142.  
  143.     def "::"
  144.     precedence 33
  145.     left name
  146.     right x
  147.     {
  148.     { "currentdict end" maxlabels "dict begin begin"
  149.       // "("name") lfigpromotelabels" } @Graphic x
  150.     }
  151.  
  152.     def @Label
  153.     right name
  154.     {
  155.     "/"name "lfigpointdef"
  156.     }
  157.  
  158.     def @MarkOf
  159.     precedence 32
  160.     left point
  161.     right x
  162.     {
  163.     { point "translate" } @InnerGraphic
  164.     {
  165.         /0io |0io @OneCol @OneRow x |0io /0io
  166.     }
  167.     }
  168.  
  169.     def @BaseOf
  170.     precedence 32
  171.     left point
  172.     right x
  173.     {
  174.     { point "translate" } @InnerGraphic
  175.     {
  176.         /0io |0io @OneRow @OneCol {
  177.         | @OneCol @OneRow x ^/
  178.         } |0io /0io
  179.     }
  180.     }
  181.  
  182.     def @ShowLabels
  183.     {
  184.     "lfigshowlabels" @Graphic
  185.     }
  186.  
  187.     def @Colour
  188.     left col
  189.     right x
  190.     {
  191.     {
  192.         col @Case
  193.         {
  194.         black @Yield "0.00 0.0 0.0"
  195.         grey  @Yield "0.00 0.0 0.9"
  196.         white @Yield "0.00 0.0 1.0"
  197.         red   @Yield "0.00 1.0 1.0"
  198.         green @Yield "0.33 1.0 1.0"
  199.         blue  @Yield "0.66 1.0 1.0"
  200.         } sethsbcolor
  201.     } @InnerGraphic x
  202.     }
  203.  
  204.     def @Color
  205.     left col
  206.     right x
  207.     {
  208.     col @Colour x
  209.     }
  210.  
  211.     def @RGBColour
  212.     left col
  213.     right x
  214.     {
  215.     { col setrgbcolor } @InnerGraphic x
  216.     }
  217.  
  218.     def @RGBColor
  219.     left col
  220.     right x
  221.     {
  222.     col @RGBColour x
  223.     }
  224.  
  225.     def @HSBColour
  226.     left col
  227.     right x
  228.     {
  229.     { col sethsbcolor } @InnerGraphic x
  230.     }
  231.  
  232.     def @HSBColor
  233.     left col
  234.     right x
  235.     {
  236.     col @HSBColour x
  237.     }
  238.  
  239.     def @Figure
  240.     named shape      {            }
  241.     named linestyle  { linestyle  }
  242.     named linewidth  { linewidth  }
  243.     named linecap    { linecap    }
  244.     named dashlength { dashlength }
  245.     named arrow      { arrow      }
  246.     named headstyle  { headstyle  }
  247.     named headwidth  { headwidth  }
  248.     named headlength { headlength }
  249.     named paint      { paint      }
  250.     named margin     { 0c         }
  251.     right x
  252.     {
  253.     @HContract @VContract
  254.     {
  255.         #fill the shape
  256.         paint @Case
  257.         {
  258.         nopaint @Yield {}
  259.  
  260.         { white light grey gray dark black } @Yield
  261.         { "/lfig"paint "[" shape "] gsave lfigpaintpath grestore" }
  262.         }
  263.  
  264.         # stroke the path and add any arrowheads
  265.         linestyle @Case
  266.         {
  267.         { solid dashed cdashed dotted noline } @Yield
  268.         {
  269.             linewidth "setlinewidth" "lfig"linecap "setlinecap"
  270.             dashlength "/lfig"linestyle "[" shape "] lfigdopath"
  271.             arrow @Case
  272.             {
  273.             noarrow @Yield { pop pop }
  274.             { forward back both } @Yield
  275.             {  dashlength "/lfig"linestyle "/"lfigblack
  276.                headstyle @Case
  277.                { { open halfopen closed } @Yield "lfig"headstyle }
  278.                headlength headwidth "lfig"arrow
  279.             }
  280.             }
  281.         }
  282.         }
  283.     }
  284.     @Graphic
  285.     {
  286.         ^/margin ^|margin @OneCol @OneRow x |margin
  287.          /margin
  288.     }
  289.     }
  290.  
  291.     def @Frame
  292.     right x
  293.     {
  294.     @Figure
  295.         shape {xsize 0 @Label X 0 ysize @Label Y}
  296.     { x }
  297.     }
  298.  
  299.     def @Box
  300.     named linestyle  { linestyle  }
  301.     named linewidth  { linewidth  }
  302.     named linecap    { linecap    }
  303.     named dashlength { dashlength }
  304.     named paint      { paint      }
  305.     named margin     { margin     }
  306.     right x
  307.     {
  308.     @Figure
  309.         shape {
  310.         # 0     0      @Label SW
  311.         # xsize 0      @Label SE
  312.         # xsize ysize  @Label NE
  313.         # 0     ysize  @Label NW
  314.         # SE ** 0.5    @Label S
  315.         # NW ** 0.5    @Label W
  316.         # W ++ SE      @Label E
  317.         # S ++ NW      @Label N
  318.         # NE ** 0.5    @Label CTR
  319.         # SW SE NE NW SW
  320.         lfigbox
  321.         }
  322.         linestyle  { linestyle }
  323.         linewidth  { linewidth  }
  324.         linecap    { linecap    }
  325.         dashlength { dashlength }
  326.         paint      { paint      }
  327.         margin     { margin     }
  328.     x
  329.     }
  330.  
  331.     def @Square
  332.     named linestyle  { linestyle  }
  333.     named linewidth  { linewidth  }
  334.     named linecap    { linecap    }
  335.     named dashlength { dashlength }
  336.     named paint      { paint      }
  337.     named margin     { margin     }
  338.     right x
  339.     {
  340.     @Figure
  341.         shape {
  342.         # {xsize ysize} ** 0.5                           @Label CTR
  343.         # CTR ++ {{xsize xsize} @Max {ysize ysize}}**0.5 @Label NE
  344.         # CTR ++ { {CTR @Distance NE} << 135 }           @Label NW
  345.         # CTR ++ { {CTR @Distance NE} << 225 }           @Label SW
  346.         # CTR ++ { {CTR @Distance NE} << 315 }           @Label SE
  347.         # SW ** 0.5 ++ SE ** 0.5                         @Label S
  348.         # NW ** 0.5 ++ NE ** 0.5                         @Label N
  349.         # SW ** 0.5 ++ NW ** 0.5                         @Label W
  350.         # SE ** 0.5 ++ NE ** 0.5                         @Label E
  351.         # SW SE NE NW SW
  352.         lfigsquare
  353.         }
  354.         linestyle  { linestyle  }
  355.         linewidth  { linewidth  }
  356.         linecap    { linecap    }
  357.         dashlength { dashlength }
  358.         paint      { paint      }
  359.         margin     { margin     }
  360.     x
  361.     }
  362.  
  363.     def @Diamond
  364.     named linestyle  { linestyle  }
  365.     named linewidth  { linewidth  }
  366.     named linecap    { linecap    }
  367.     named dashlength { dashlength }
  368.     named paint      { paint      }
  369.     named margin     { margin     }
  370.     right x
  371.     {
  372.     @Figure
  373.         shape {
  374.         # {xsize 0} ** 0.5  @Label S
  375.         # {0 ysize} ** 0.5  @Label W
  376.         # S ++ W            @Label CTR
  377.         # CTR ++ W          @Label N
  378.         # CTR ++ S          @Label E
  379.         # S E N W S
  380.         lfigdiamond
  381.         }
  382.         linestyle  { linestyle  }
  383.         linewidth  { linewidth  }
  384.         linecap    { linecap    }
  385.         dashlength { dashlength }
  386.         paint      { paint      }
  387.         margin     { margin     }
  388.     x
  389.     }
  390.  
  391.     def @Polygon
  392.     named linestyle  { linestyle  }
  393.     named linewidth  { linewidth  }
  394.     named linecap    { linecap    }
  395.     named dashlength { dashlength }
  396.     named paint      { paint      }
  397.     named margin     { margin     }
  398.     named sides      { 3          }
  399.     named angle      { "dup 180 exch div" }
  400.     right x
  401.     {
  402.     @Figure
  403.         shape      { sides angle lfigpolygon }
  404.         linestyle  { linestyle  }
  405.         linewidth  { linewidth  }
  406.         linecap    { linecap    }
  407.         dashlength { dashlength }
  408.         paint      { paint      }
  409.         margin     { margin     }
  410.     x
  411.     }
  412.  
  413.     def @Ellipse
  414.     named linestyle  { linestyle  }
  415.     named linewidth  { linewidth  }
  416.     named linecap    { linecap    }
  417.     named dashlength { dashlength }
  418.     named paint      { paint      }
  419.     named margin     { margin     }
  420.     right x
  421.     {
  422.     @Figure
  423.         shape {
  424.         # {xsize 0} ** 0.5  @Label S
  425.         # {0 ysize} ** 0.5  @Label W
  426.         # S ++ W            @Label CTR
  427.         # CTR ++ W          @Label N
  428.         # CTR ++ S          @Label E
  429.         # CTR ++ {xsize 0} ** 0.3536 ++ {0 ysize} ** 0.3536  @Label NE
  430.         # CTR ++ {xsize 0} ** 0.3536 -- {0 ysize} ** 0.3536  @Label SE
  431.         # CTR -- {xsize 0} ** 0.3536 ++ {0 ysize} ** 0.3536  @Label NW
  432.         # CTR -- {xsize 0} ** 0.3536 -- {0 ysize} ** 0.3536  @Label SW
  433.         # S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
  434.         lfigellipse
  435.         }
  436.         linestyle  { linestyle  }
  437.         linewidth  { linewidth  }
  438.         linecap    { linecap    }
  439.         dashlength { dashlength }
  440.         paint      { paint      }
  441.         margin     { margin     }
  442.     x
  443.     }
  444.  
  445.     def @Circle
  446.     named linestyle  { linestyle  }
  447.     named linewidth  { linewidth  }
  448.     named linecap    { linecap    }
  449.     named dashlength { dashlength }
  450.     named paint      { paint      }
  451.     named margin     { margin     }
  452.     right x
  453.     {
  454.     @Figure
  455.         shape {
  456.         # {xsize ysize} **0.5                    @Label CTR
  457.         # CTR ++ {{xsize 0} @Max {ysize 0}}**0.5 @Label E
  458.         # CTR ++ { {CTR @Distance E} << 45  }    @Label NE
  459.         # CTR ++ { {CTR @Distance E} << 90  }    @Label N
  460.         # CTR ++ { {CTR @Distance E} << 135 }    @Label NW
  461.         # CTR ++ { {CTR @Distance E} << 180 }    @Label W
  462.         # CTR ++ { {CTR @Distance E} << 225 }    @Label SW
  463.         # CTR ++ { {CTR @Distance E} << 270 }    @Label S
  464.         # CTR ++ { {CTR @Distance E} << 315 }    @Label SE
  465.         # S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
  466.         lfigcircle
  467.         }
  468.         linestyle  { linestyle  }
  469.         linewidth  { linewidth  }
  470.         linecap    { linecap    }
  471.         dashlength { dashlength }
  472.         paint      { paint      }
  473.         margin     { margin     }
  474.     x
  475.     }
  476.  
  477.     def @HLine
  478.     named linestyle  { linestyle  }
  479.     named linewidth  { linewidth  }
  480.     named linecap    { linecap    }
  481.     named dashlength { dashlength }
  482.     named paint      { paint      }
  483.     named margin     { 0c         }
  484.     named arrow      { arrow      }
  485.     named headstyle  { headstyle  }
  486.     named headwidth  { headwidth  }
  487.     named headlength { headlength }
  488.     right x
  489.     {
  490.     @Figure
  491.         shape {
  492.         # 0     ymark @Prev @Label FROM
  493.         # xsize ymark @Prev @Label TO
  494.         lfighline
  495.         }
  496.         linestyle  { linestyle  }
  497.         linewidth  { linewidth  }
  498.         linecap    { linecap    }
  499.         dashlength { dashlength }
  500.         paint      { paint      }
  501.         margin     { margin     }
  502.         arrow      { arrow      }
  503.         headstyle  { headstyle  }
  504.         headwidth  { headwidth  }
  505.         headlength { headlength }
  506.     x
  507.     }
  508.  
  509.     def @VLine
  510.     named linestyle  { linestyle  }
  511.     named linewidth  { linewidth  }
  512.     named linecap    { linecap    }
  513.     named dashlength { dashlength }
  514.     named paint      { paint      }
  515.     named margin     { 0c         }
  516.     named arrow      { arrow      }
  517.     named headstyle  { headstyle  }
  518.     named headwidth  { headwidth  }
  519.     named headlength { headlength }
  520.     right x
  521.     {
  522.     @Figure
  523.         shape {
  524.         # xmark ysize @Prev @Label FROM
  525.         # xmark 0     @Prev @Label TO
  526.         lfigvline
  527.         }
  528.         linestyle  { linestyle }
  529.         linewidth  { linewidth  }
  530.         linecap    { linecap    }
  531.         dashlength { dashlength }
  532.         paint      { paint      }
  533.         margin     { margin     }
  534.         arrow      { arrow      }
  535.         headstyle  { headstyle  }
  536.         headwidth  { headwidth  }
  537.         headlength { headlength }
  538.     x
  539.     }
  540.  
  541.     def @HArrow
  542.     named linestyle  { linestyle  }
  543.     named linewidth  { linewidth  }
  544.     named linecap    { linecap    }
  545.     named dashlength { dashlength }
  546.     named paint      { paint      }
  547.     named margin     { 0c         }
  548.     named arrow      { forward    }
  549.     named headstyle  { headstyle  }
  550.     named headwidth  { headwidth  }
  551.     named headlength { headlength }
  552.     right x
  553.     {
  554.     @Figure
  555.         shape {
  556.         # 0     ymark @Prev @Label FROM
  557.         # xsize ymark @Prev @Label TO
  558.         lfighline
  559.         }
  560.         linestyle  { linestyle  }
  561.         linewidth  { linewidth  }
  562.         linecap    { linecap    }
  563.         dashlength { dashlength }
  564.         paint      { paint      }
  565.         margin     { margin     }
  566.         arrow      { arrow      }
  567.         headstyle  { headstyle  }
  568.         headwidth  { headwidth  }
  569.         headlength { headlength }
  570.     x
  571.     }
  572.  
  573.     def @VArrow
  574.     named linestyle  { linestyle  }
  575.     named linewidth  { linewidth  }
  576.     named linecap    { linecap    }
  577.     named dashlength { dashlength }
  578.     named paint      { paint      }
  579.     named margin     { 0c         }
  580.     named arrow      { forward    }
  581.     named headstyle  { headstyle  }
  582.     named headwidth  { headwidth  }
  583.     named headlength { headlength }
  584.     right x
  585.     {
  586.     @Figure
  587.         shape {
  588.         # xmark ysize @Prev @Label FROM
  589.         # xmark 0     @Prev @Label TO
  590.         lfigvline
  591.         }
  592.         linestyle  { linestyle  }
  593.         linewidth  { linewidth  }
  594.         linecap    { linecap    }
  595.         dashlength { dashlength }
  596.         paint      { paint      }
  597.         margin     { margin     }
  598.         arrow      { arrow      }
  599.         headstyle  { headstyle  }
  600.         headwidth  { headwidth  }
  601.         headlength { headlength }
  602.     x
  603.     }
  604.  
  605.     def @Line
  606.     named from       { 0 ysize    }
  607.     named to         { xsize 0    }
  608.     named linestyle  { linestyle  }
  609.     named linewidth  { linewidth  }
  610.     named linecap    { linecap    }
  611.     named dashlength { dashlength }
  612.     named paint      { paint      }
  613.     named margin     { 0c         }
  614.     named arrow      { arrow      }
  615.     named headstyle  { headstyle  }
  616.     named headwidth  { headwidth  }
  617.     named headlength { headlength }
  618.     right x
  619.     {
  620.     @Figure
  621.         shape {
  622.         from @Prev @Label FROM
  623.         to   @Prev @Label TO
  624.         }
  625.         linestyle  { linestyle  }
  626.         linewidth  { linewidth  }
  627.         linecap    { linecap    }
  628.         dashlength { dashlength }
  629.         paint      { paint      }
  630.         margin     { margin     }
  631.         arrow      { arrow      }
  632.         headstyle  { headstyle  }
  633.         headwidth  { headwidth  }
  634.         headlength { headlength }
  635.     x
  636.     }
  637.  
  638.     def @Arrow
  639.     named from       { 0 ysize    }
  640.     named to         { xsize 0    }
  641.     named linestyle  { linestyle  }
  642.     named linewidth  { linewidth  }
  643.     named linecap    { linecap    }
  644.     named dashlength { dashlength }
  645.     named paint      { paint      }
  646.     named margin     { 0c         }
  647.     named arrow      { forward    }
  648.     named headstyle  { headstyle  }
  649.     named headwidth  { headwidth  }
  650.     named headlength { headlength }
  651.     right x
  652.     {
  653.     @Figure
  654.         shape {
  655.         from @Prev @Label FROM
  656.         to   @Prev @Label TO
  657.         }
  658.         linestyle  { linestyle  }
  659.         linewidth  { linewidth  }
  660.         linecap    { linecap    }
  661.         dashlength { dashlength }
  662.         paint      { paint      }
  663.         margin     { margin     }
  664.         arrow      { arrow      }
  665.         headstyle  { headstyle  }
  666.         headwidth  { headwidth  }
  667.         headlength { headlength }
  668.     x
  669.     }
  670.  
  671.     def @Arc
  672.     named from       { 0 ysize    }
  673.     named to         { xsize 0    }
  674.     named ctr        { 0 0        }
  675.     named direction  { clockwise  }
  676.     named linestyle  { linestyle  }
  677.     named linewidth  { linewidth  }
  678.     named linecap    { linecap    }
  679.     named dashlength { dashlength }
  680.     named paint      { paint      }
  681.     named margin     { 0c         }
  682.     named arrow      { noarrow    }
  683.     named headstyle  { headstyle  }
  684.     named headwidth  { headwidth  }
  685.     named headlength { headlength }
  686.     right x
  687.     {
  688.     @Figure
  689.         shape {
  690.         from @Label FROM
  691.         to   @Label TO
  692.         ctr  @Label CTR
  693.         FROM [ CTR
  694.         direction @Case { {clockwise anticlockwise} @Yield direction }
  695.         ] TO
  696.         }
  697.         linestyle  { linestyle  }
  698.         linewidth  { linewidth  }
  699.         linecap    { linecap    }
  700.         dashlength { dashlength }
  701.         paint      { paint      }
  702.         margin     { margin     }
  703.         arrow      { arrow      }
  704.         headstyle  { headstyle  }
  705.         headwidth  { headwidth  }
  706.         headlength { headlength }
  707.     x
  708.     }
  709.  
  710.     { "grestore save gsave" maxlabels "dict begin lfigdict begin"
  711.       // "end end restore"
  712.     } @Graphic @Body
  713.  
  714. @End @Fig                  
  715.