1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;; "high-level" graphics
4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6 $FORTH_VAR (DRAWLINE-DX) 0
7 $FORTH_VAR (DRAWLINE-DY) 0
8 $FORTH_VAR (DRAWLINE-SX) 0
9 $FORTH_VAR (DRAWLINE-SY) 0
16 2DUP - ;;( x0 x1 y1 y0 dy )
17 DUP ISGN (DRAWLINE-SY) !
18 ABS (DRAWLINE-DY) ! ;;( x0 x1 y1 y0 )
19 >R DROP ;;( x0 x1 | y0 )
20 SWAP DUP >R ;;( x1 x0 | y0 x0 )
22 DUP ISGN (DRAWLINE-SX) !
23 ABS (DRAWLINE-DX) ! ;;( -- | y0 x0 )
24 R> R> 0 ;;( x0 y0 err )
26 (DRAWLINE-DX) @ (DRAWLINE-DY) @ MAX 1+
30 >R 2DUP PLOT ;;( x y | err )
31 R@ DUP (DRAWLINE-DX) @ NEGATE > 0BRANCH drawline_l0
32 (DRAWLINE-DY) @ - ;;( x y err | olderr )
33 ROT (DRAWLINE-SX) @ + NROT
35 ;;( x y err | olderr )
36 R> (DRAWLINE-DY) @ < 0BRANCH drawline_l1
38 SWAP (DRAWLINE-SY) @ + SWAP
43 $FORTH_END_WORD DRAWLINE
46 $FORTH_WORD (CIRCLE-PLOT4D)
53 $FORTH_END_WORD (CIRCLE-PLOT4D)
55 $FORTH_WORD (CIRCLE-PLOT4)
58 2OVER 2OVER (CIRCLE-PLOT4D)
59 OVER 0BRANCH cicle_plot4_skipx
60 2OVER 2OVER SWAP NEGATE SWAP (CIRCLE-PLOT4D)
62 DUP 0BRANCH cicle_plot4_skipy
63 2OVER 2OVER NEGATE (CIRCLE-PLOT4D)
65 NEGATE SWAP NEGATE SWAP (CIRCLE-PLOT4D)
67 $FORTH_END_WORD (CIRCLE-PLOT4)
69 $FORTH_WORD (CIRCLE-PLOT8)
72 2OVER 2OVER (CIRCLE-PLOT4)
75 $FORTH_END_WORD (CIRCLE-PLOT8)
78 $FORTH_WORD DRAWCIRCLE
80 ;; ( cx cy radius -- )
81 DUP 1 < 0BRANCH circle_good_radius
84 DUP NEGATE >R ;;( cx cy radius | error )
85 0 ;;( cx cy x y | error )
87 2DUP > ;;( while x > y )
89 2OVER 2OVER (CIRCLE-PLOT8)
94 ;;( if error >= 0 then --x; error -= x*2; end )
95 R@ 0< TBRANCH circle_loop ;;cicle_error_ok
96 SWAP 1- SWAP OVER 2U* R> SWAP - >R
104 $FORTH_END_WORD DRAWCIRCLE