home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 647.lha / TacTix / ellipse next >
Text File  |  1991-07-01  |  4KB  |  108 lines

  1. \ ju:ellipse   RRY
  2.  
  3. \ 901026 memf_fast reqmt in GR.AREA.INIT may now work on A500 computers
  4. \ or any with all chip RAM.
  5.  
  6. \ Based on PB's ju:polygon
  7. \ On Oct 24, 1989, in a phone call with Russ Yost, 
  8. \ Phil Burk granted permission for this file to 
  9. \ be placed in the public domain.
  10.  
  11. \ This utility supports use of the AreaEllipse AmigaDOS graphics
  12. \ library function.
  13.  
  14. \ This system will set up a temp rastport twice the size of
  15. \ the current rastport.  See jd:demo_ellipse for an example.
  16. \
  17. \ ju:polygon is Copyright 1987 - Phil Burk
  18.  
  19. \ RY890818 modified for external control of area-coords, which controls
  20. \ size of areabuffer,  and to clear and dealloc areabuffer.
  21.  
  22. \ RY890923 provided temp.ras twice size of bit.plane, big and or many
  23. \ ellipses before gr.areaend.
  24.  
  25. include? gr-currport ju:amiga_graph
  26. include? allocraster() ju:graph_support
  27.  
  28. ANEW TASK-ELLIPSE
  29.  
  30. \ Declare structures.
  31.  
  32. tmpras EL-TMPRAS
  33. areainfo EL-AREAINFO
  34.  
  35. variable el-areabuffer        variable area-coords \ RY 890918
  36. 100 area-coords !   \ default: supports 45 ellipses   RY 890918
  37.  
  38. \ Store required value in area-coords before using GR.AREA.INIT .
  39.  
  40. : INITAREA() ( areainfo areabuffer count -- )
  41.     callvoid>abs graphics_lib initarea
  42. ;
  43.  
  44. \ Areabuffer creation in dictionary replaced by 
  45. \ allocblock in gr.area.init RY 890918
  46.  
  47. \ Following word must be paired with a following GR.AREAEND, after some
  48. \ GR.AREA.MOVE's and GR.AREA.DRAWS. or AREA.ELLIPSE's (see jd:demo_ellipse)
  49.  
  50. : GR.AREA.INIT  { | rpcur rpx rpy -- , setup current rastport for AREAFILL }
  51.     gr-currport @ dup 0= abort" GR.AREA.INIT - no current rastport !"
  52.     >rel -> rpcur
  53.     el-areainfo
  54.       memf_clear ( memf_fast  or )          \ RY Must clear trash from previous
  55.                                              \ use.
  56.                  \ 901026 Deleted memfast reqmt for computers with no
  57.          \ fast ram - i.e., all chip ram.
  58.  
  59.       area-coords @ 5 *   allocblock? \ RY890918 get buffer block addr   
  60.       dup el-areabuffer !              \ RY890818 save for freeblock
  61.     area-coords @ initarea()         \ RY890818 chngd to var.
  62.     el-areainfo >abs rpcur  ..! rp_areainfo
  63.     el-tmpras  rpcur ..@ rp_bitmap >rel bitmap>wh -> rpy -> rpx
  64.     rpx  rpy  2* allocraster()          \ RY890923 double tmpras for big or 
  65.                                        \ many ellipses.
  66.     dup 0= abort" GR.AREA.INIT - no mem for temp ras! "
  67.     rpx  rpy  2* rassize()              \ Doubling temp.ras RRY  
  68.     inittmpras()
  69.     el-tmpras if>abs rpcur ..! rp_tmpras
  70. ;
  71.  
  72. : GR.AREA.TERM  ( -- ) \ simply frees tempras.                       RRY
  73.     gr-currport @ dup 0= abort" GR.AREA.TERM - no current rastport !"
  74.     >rel  ..@ rp_tmpras >rel
  75.     ..@ tr_rasptr >rel
  76.     gr-currport @ >rel ..@ rp_bitmap >rel bitmap>wh 2* \ Doubled tmpras.
  77.     freeraster()
  78.      NULL gr-currport @ >rel ..! rp_tmpras
  79. ;
  80.  
  81. : GR.AREAMOVE ( x y -- )
  82.     gr-currport @ -rot
  83.     callvoid graphics_lib areamove
  84. ;
  85.  
  86. : GR.AREADRAW ( x y -- )
  87.     gr-currport @ -rot
  88.     callvoid graphics_lib areadraw
  89. ;
  90.  
  91. \ Precede next function by Gr.Area.init.  After 1 or more executions of
  92. \ next function, follow by Gr.Areaend (see below) to execute the area
  93. \ fills.
  94.  
  95. : gr.areaellipse() ( left fp x, left fp y, hor-radius, ver-radius )
  96.   >r >r gr-currport @ -rot r> r>
  97.   call graphics_lib areaellipse
  98.   abort" GR.AREAELLIPSE Vector Table Full."
  99. ;
  100.  
  101. : GR.AREAEND ( -- ) \ Must follow each GR.AREA.INIT; Pairs cannot be nested.
  102.     gr-currport @
  103.     callvoid graphics_lib areaend
  104.     el-areabuffer @ freeblock    \ Frees areabuffer   RY 890918
  105.     gr.area.term  \ frees tempras
  106. ;
  107.  
  108.