3 \ Turtle graphics package for hForth
\r
5 \ English and Korean sources are provided (See [IF] ... [ELSE] ... [THEN]).
\r
7 \ ETURTLE.EXE and HTURTLE.EXE is built from HF86EXE.EXE by loading Forth
\r
8 \ sources in the following order.
\r
14 \ BL PARSE MULTI.F INCLUDED
\r
15 \ BL PARSE HIOMULT2.F INCLUDED
\r
16 \ BL PARSE TURTLE.F INCLUDED
\r
17 \ SAVE-SYSTEM-AS ETURTLE.EXE
\r
18 \ ( or SAVE-SYSTEM-AS HTURTLE.EXE )
\r
24 GET-ORDER GET-CURRENT
\r
25 WORDLIST WORDLIST-NAME GRAPHIC-WORDLIST
\r
26 Ðe
\8bi·³Â
\89\9db-WORDLIST GRAPHIC-WORDLIST GET-ORDER 2 + SET-ORDER
\r
32 0 , 286 , 572 , 857 , 1143 , 1428 , 1713 , 1997 , 2280 , 2563 ,
\r
33 2845 , 3126 , 3406 , 3686 , 3964 , 4240 , 4516 , 4790 , 5063 , 5334 ,
\r
34 5604 , 5872 , 6138 , 6402 , 6664 , 6924 , 7182 , 7438 , 7692 , 7943 ,
\r
35 8192 , 8438 , 8682 , 8923 , 9162 , 9397 , 9630 , 9860 , 10087 , 10311 ,
\r
36 10531 , 10749 , 10963 , 11174 , 11381 , 11585 , 11786 , 11982 , 12176 , 12365 ,
\r
37 12551 , 12733 , 12911 , 13085 , 13255 , 13421 , 13583 , 13741 , 13894 , 14044 ,
\r
38 14189 , 14330 , 14466 , 14598 , 14726 , 14849 , 14968 , 15082 , 15191 , 15296 ,
\r
39 15396 , 15491 , 15582 , 15668 , 15749 , 15826 , 15897 , 15964 , 16026 , 16083 ,
\r
40 16135 , 16182 , 16225 , 16262 , 16294 , 16322 , 16344 , 16362 , 16374 , 16382 ,
\r
41 16384 , 16382 , 16374 , 16362 , 16344 , 16322 , 16294 , 16262 , 16225 , 16182 ,
\r
42 16135 , 16083 , 16026 , 15964 , 15897 , 15826 , 15749 , 15668 , 15582 , 15491 ,
\r
43 15396 , 15296 , 15191 , 15082 , 14968 , 14849 , 14726 , 14598 , 14466 , 14330 ,
\r
44 14189 , 14044 , 13894 , 13741 , 13583 , 13421 , 13255 , 13085 , 12911 , 12733 ,
\r
45 12551 , 12365 , 12176 , 11982 , 11786 , 11585 , 11381 , 11174 , 10963 , 10749 ,
\r
46 10531 , 10311 , 10087 , 9860 , 9630 , 9397 , 9162 , 8923 , 8682 , 8438 ,
\r
47 8192 , 7943 , 7692 , 7438 , 7182 , 6924 , 6664 , 6402 , 6138 , 5872 ,
\r
48 5604 , 5334 , 5063 , 4790 , 4516 , 4240 , 3964 , 3686 , 3406 , 3126 ,
\r
49 2845 , 2563 , 2280 , 1997 , 1713 , 1428 , 1143 , 857 , 572 , 286 ,
\r
50 0 , -286 , -572 , -857 , -1143 , -1428 , -1713 , -1997 , -2280 , -2563 ,
\r
51 -2845 , -3126 , -3406 , -3686 , -3964 , -4240 , -4516 , -4790 , -5063 , -5334 ,
\r
52 -5604 , -5872 , -6138 , -6402 , -6664 , -6924 , -7182 , -7438 , -7692 , -7943 ,
\r
53 -8192 , -8438 , -8682 , -8923 , -9162 , -9397 , -9630 , -9860 , -10087 , -10311 ,
\r
54 -10531 , -10749 , -10963 , -11174 , -11381 , -11585 , -11786 , -11982 , -12176 , -12365 ,
\r
55 -12551 , -12733 , -12911 , -13085 , -13255 , -13421 , -13583 , -13741 , -13894 , -14044 ,
\r
56 -14189 , -14330 , -14466 , -14598 , -14726 , -14849 , -14968 , -15082 , -15191 , -15296 ,
\r
57 -15396 , -15491 , -15582 , -15668 , -15749 , -15826 , -15897 , -15964 , -16026 , -16083 ,
\r
58 -16135 , -16182 , -16225 , -16262 , -16294 , -16322 , -16344 , -16362 , -16374 , -16382 ,
\r
59 -16384 , -16382 , -16374 , -16362 , -16344 , -16322 , -16294 , -16262 , -16225 , -16182 ,
\r
60 -16135 , -16083 , -16026 , -15964 , -15897 , -15826 , -15749 , -15668 , -15582 , -15491 ,
\r
61 -15396 , -15296 , -15191 , -15082 , -14968 , -14849 , -14726 , -14598 , -14466 , -14330 ,
\r
62 -14189 , -14044 , -13894 , -13741 , -13583 , -13421 , -13255 , -13085 , -12911 , -12733 ,
\r
63 -12551 , -12365 , -12176 , -11982 , -11786 , -11585 , -11381 , -11174 , -10963 , -10749 ,
\r
64 -10531 , -10311 , -10087 , -9860 , -9630 , -9397 , -9162 , -8923 , -8682 , -8438 ,
\r
65 -8192 , -7943 , -7692 , -7438 , -7182 , -6924 , -6664 , -6402 , -6138 , -5872 ,
\r
66 -5604 , -5334 , -5063 , -4790 , -4516 , -4240 , -3964 , -3686 , -3406 , -3126 ,
\r
67 -2845 , -2563 , -2280 , -1997 , -1713 , -1428 , -1143 , -857 , -572 , -286 ,
\r
68 -0 , 286 , 572 , 857 , 1143 , 1428 , 1713 , 1997 , 2280 , 2563 ,
\r
69 2845 , 3126 , 3406 , 3686 , 3964 , 4240 , 4516 , 4790 , 5063 , 5334 ,
\r
70 5604 , 5872 , 6138 , 6402 , 6664 , 6924 , 7182 , 7438 , 7692 , 7943 ,
\r
71 8192 , 8438 , 8682 , 8923 , 9162 , 9397 , 9630 , 9860 , 10087 , 10311 ,
\r
72 10531 , 10749 , 10963 , 11174 , 11381 , 11585 , 11786 , 11982 , 12176 , 12365 ,
\r
73 12551 , 12733 , 12911 , 13085 , 13255 , 13421 , 13583 , 13741 , 13894 , 14044 ,
\r
74 14189 , 14330 , 14466 , 14598 , 14726 , 14849 , 14968 , 15082 , 15191 , 15296 ,
\r
75 15396 , 15491 , 15582 , 15668 , 15749 , 15826 , 15897 , 15964 , 16026 , 16083 ,
\r
76 16135 , 16182 , 16225 , 16262 , 16294 , 16322 , 16344 , 16362 , 16374 , 16382 ,
\r
78 CODE sin* ( length theta -- length*sin[theta] )
\r
79 \ : sin* CELLS sin16384 + @ M* 16384 SM/REM NIP ;
\r
81 sin16384 [BX] BX MOV,
\r
93 CODE cos* ( length theta -- length*cos[theta] )
\r
94 \ : cos* 90 + CELLS sin16384 + @ M* 16384 SM/REM NIP ;
\r
97 sin16384 [BX] BX MOV,
\r
110 \ : PLOT ( x y -- )
\r
111 \ Y>SEG SWAP 8 /MOD SWAP >R \ seg_addr x/8 R: x_mod_8
\r
112 \ 2DUP LC@ R> CHARS XMASK + C@ OR ROT ROT LC! ;
\r
114 CODE PLOT ( x y -- )
\r
116 Y>SegTable ) BX ADD,
\r
135 \ >R >R 2SWAP R> R> 2SWAP ;
\r
137 \ : LINE ( x1 y1 x2 y2--)
\r
138 \ 2OVER 2OVER ROT - ABS >R - ABS R> MAX 2 <
\r
139 \ IF 2DROP PLOT EXIT THEN
\r
140 \ 2OVER 2OVER ROT + 1+ 2/ >R + 1+ 2/ R>
\r
141 \ 2DUP 2ROT RECURSE RECURSE ;
\r
146 \ y changing faster than x
\r
147 CODE steep640 \ on entry, ax = delta x, bx = delta y, cx=x1, dx=y1
\r
148 BX BP MOV, \ for counter
\r
150 BX Delta/2 ) MOV, \ halfy
\r
151 BX BX XOR, \ clear for cmp
\r
157 Y>SegTable ) BX ADD,
\r
172 DX INC, \ y is always increasing
\r
173 MAX-Y 16* # DX CMP,
\r
177 Delta ) BX ADD, \ = bx + delta_y
\r
178 Delta/2 ) BX CMP, \ bx > halfy ?
\r
180 SI BX SUB, \ bx - delta_y
\r
181 DI CX ADD, \ inc or dec x
\r
182 MAX-X 8 * # CX SUB,
\r
184 MAX-X 8 * # CX ADD,
\r
186 MAX-X 8 * # CX ADD,
\r
196 \ on exit, cx=x1, dx=y1, ax=x2, bx=y2
\r
197 CODE line640 ( x1 y1 x2 y2 -- ) \ writes to screen directly
\r
201 SI PUSH, ( used to hold direction)
\r
202 BP PUSH, ( used as counter)
\r
203 \ see if we'll inc or dec x, y (draws in any direction)
\r
204 DX BX SUB, \ bx <- y2-y1 (delta y)
\r
206 BX DX ADD, \ dx <- y2
\r
207 BX NEG, \ abs(delta y)
\r
210 BX SI MOV, \ delta_y(BX) to SI
\r
211 CX AX SUB, \ x2 - x1 = delta_x
\r
212 1 # DI MOV, \ di to increment x
\r
214 -1 # DI MOV, \ di to decrement x
\r
215 AX NEG, \ abs(delta x)
\r
217 \ adjust x1(CX), y1(DX) in proper range
\r
222 MAX-X 8 * # BP MOV,
\r
232 MAX-Y 16* # BP MOV,
\r
239 AX Delta ) MOV, \ abs(delta x)
\r
240 BX AX CMP, \ delta_x - delta_y
\r
242 ' steep640 # JMP, \ y changes faster than x
\r
244 \ x changing faster than y
\r
245 AX BP MOV, \ for counter
\r
247 AX Delta/2 ) MOV, \ halfx
\r
248 BX BX XOR, \ clear for cmp
\r
254 Y>SegTable ) BX ADD,
\r
269 DI CX ADD, \ inc or dec x
\r
270 MAX-X 8 * # CX SUB,
\r
272 MAX-X 8 * # CX ADD,
\r
274 MAX-X 8 * # CX ADD,
\r
276 SI BX ADD, \ = bx + delta_y
\r
277 Delta/2 ) BX CMP, \ bx > halfx ?
\r
279 Delta ) BX SUB, \ bx - delta_x
\r
280 DX INC, \ y is always increasing
\r
281 MAX-Y 16* # DX CMP,
\r
293 \ y changing faster than x
\r
294 CODE xsteep640 \ on entry, ax = delta x, bx = delta y, cx=x1, dx=y1
\r
295 BX BP MOV, \ for counter
\r
297 BX Delta/2 ) MOV, \ halfy
\r
298 BX BX XOR, \ clear for cmp
\r
304 Y>SegTable ) BX ADD,
\r
319 DX INC, \ y is always increasing
\r
320 MAX-Y 16* # DX CMP,
\r
324 Delta ) BX ADD, \ = bx + delta_y
\r
325 Delta/2 ) BX CMP, \ bx > halfy ?
\r
327 SI BX SUB, \ bx - delta_y
\r
328 DI CX ADD, \ inc or dec x
\r
329 MAX-X 8 * # CX SUB,
\r
331 MAX-X 8 * # CX ADD,
\r
333 MAX-X 8 * # CX ADD,
\r
343 \ on exit, cx=x1, dx=y1, ax=x2, bx=y2
\r
344 CODE xline640 ( x1 y1 x2 y2 -- ) \ writes to screen directly
\r
348 SI PUSH, ( used to hold direction)
\r
349 BP PUSH, ( used as counter)
\r
350 \ see if we'll inc or dec x, y (draws in any direction)
\r
351 DX BX SUB, \ bx <- y2-y1 (delta y)
\r
353 BX DX ADD, \ dx <- y2
\r
354 BX NEG, \ abs(delta y)
\r
357 BX SI MOV, \ delta_y(BX) to SI
\r
358 CX AX SUB, \ x2 - x1 = delta_x
\r
359 1 # DI MOV, \ di to increment x
\r
361 -1 # DI MOV, \ di to decrement x
\r
362 AX NEG, \ abs(delta x)
\r
364 \ adjust x1(CX), y1(DX) in proper range
\r
365 MAX-X 8 * # CX SUB,
\r
367 MAX-X 8 * # CX ADD,
\r
369 MAX-X 8 * # CX ADD,
\r
371 MAX-Y 16* # DX SUB,
\r
373 MAX-Y 16* # DX ADD,
\r
375 MAX-Y 16* # DX ADD,
\r
377 AX Delta ) MOV, \ abs(delta x)
\r
378 BX AX CMP, \ delta_x - delta_y
\r
380 ' xsteep640 # JMP, \ y changes faster than x
\r
382 \ x changing faster than y
\r
383 AX BP MOV, \ for counter
\r
385 AX Delta/2 ) MOV, \ halfx
\r
386 BX BX XOR, \ clear for cmp
\r
392 Y>SegTable ) BX ADD,
\r
407 DI CX ADD, \ inc or dec x
\r
408 MAX-X 8 * # CX SUB,
\r
410 MAX-X 8 * # CX ADD,
\r
412 MAX-X 8 * # CX ADD,
\r
414 SI BX ADD, \ = bx + delta_y
\r
415 Delta/2 ) BX CMP, \ bx > halfx ?
\r
417 Delta ) BX SUB, \ bx - delta_x
\r
418 DX INC, \ y is always increasing
\r
419 MAX-Y 16* # DX CMP,
\r
431 \ Get a 'Y' or 'N' key. Return TURE for 'Y', otherwise return FALSE.
\r
433 TRUE \ leave TRUE flag
\r
436 OVER [CHAR] y = OR 0=
\r
439 OVER [CHAR] n = OR 0=
\r
441 REPEAT \ 'N' comes hear
\r
447 CR .( Will you use Turtle Graphics words in Korean? [Y/N] )
\r
452 0 VALUE
\90\81\9f¥¦
\95?
\r
454 MAX-X 8 * 2/ VALUE xOffset
\r
455 MAX-Y 16 * 2/ VALUE yOffset
\r
456 VARIABLE xCoord xOffset xCoord !
\r
457 VARIABLE yCoord yOffset yCoord !
\r
459 : ¦
\95\97i´á ( -- ) FALSE TO
\90\81\9f¥¦
\95? ;
\r
460 : ¦
\95\90\81\9da ( -- ) TRUE TO
\90\81\9f¥¦
\95? ;
\r
461 : º
\89ÑÁ¡e ( y -- ) MAX-Y SWAP - TO YTop ;
\r
462 : µ¥ÑÁ¡e ( -- ) PAGE ;
\r
464 :
\9d¡.
\8ba´á ( x y -- )
\r
465 scale / yOffset SWAP - \ x y1
\r
466 SWAP scale / xOffset + SWAP \ x1 y1
\r
467 \90\81\9f¥¦
\95? IF 2DUP xCoord @ yCoord @ line640 THEN
\r
468 yCoord ! xCoord ! ;
\r
470 :
\88á¦
\82¥¡µa ( -- )
\r
471 xCoord @ 8 ¤wз @ 270 + sin* +
\r
472 yCoord @ 8 ¤wз @ 270 + cos* -
\r
473 2DUP xCoord @ yCoord @ xline640 \ x1 y1
\r
474 xCoord @ 16 ¤wз @ sin* +
\r
475 yCoord @ 16 ¤wз @ cos* - \ x1 y1 x2 y2
\r
476 2SWAP 2OVER xline640 \ x2 y2
\r
477 xCoord @ 8 ¤wз @ 90 + sin* +
\r
478 yCoord @ 8 ¤wз @ 90 + cos* - \ x2 y2 x3 y3
\r
479 2SWAP 2OVER xline640 \ x3 y3
\r
480 xCoord @ yCoord @ xline640 ;
\r
482 : ÑÁ¡e»¡¶¡ ( -- ) YTop PAGE 0 OVER AT-XY TO YTop
\88á¦
\82¥¡µa ;
\r
485 :
\88{·e i ( xt 'name2' -- )
\r
486 DUP xt>name ?DUP 0= IF -12 THROW THEN
\r
487 SWAP head, linkLast
\r
489 040 AND IF IMMEDIATE THEN
\r
490 020 AND IF COMPILE-ONLY THEN ;
\r
493 ' IMMEDIATE
\88{·e i ¤a
\9d¡
\r
494 ' RECURSE
\88{·e i
\96A¦
\89\9cá
\r
496 ' ELSE
\88{·e i ´a
\93¡¡e
\r
497 ' THEN
\88{·e i
\9ca
\r
498 ' BEGIN
\88{·e i ·¡¹A¦
\81Èá
\r
499 ' UNTIL
\88{·e i
\8ca»¡
\r
500 ' WHILE
\88{·e i
\95·´e
\r
501 ' REPEAT
\88{·e i
\88á
\97sÐ
\81\r
503 ' LOOP
\88{·e i
\95©´a
\r
505 ' CONSTANT
\88{·e i
\8a\88·e
\88t
\r
506 ' VARIABLE
\88{·e i ¢
\81\9fe
\88t
\r
507 ' DUP
\88{·e i ¥A
\8da
\r
508 ' OVER
\88{·e i
\88å
\90á
\r
509 ' DROP
\88{·e i ¤á
\9da
\r
510 ' SWAP
\88{·e i ¤a
\8e¡
\r
511 ' ROT
\88{·e i
\95©
\9da
\r
512 ' >R
\88{·e i >
\96A
\r
513 ' R>
\88{·e i
\96A>
\r
514 ' R@
\88{·e i
\96A@
\r
515 ' AND
\88{·e i
\90{Ðq
\8dA
\r
516 ' OR
\88{·e i
\90{´a¶
\89\9cá
\r
517 ' XOR
\88{·e i
\90{
\98a
\9d¡
\r
518 ' MOD
\88{·e i
\90a ỡ
\r
519 ' CR
\88{·e i
\94a·qº
\89\r
520 ' WORDS
\88{·e i iÍa
\r
521 ' .S
\88{·e i .
\94ᣡ
\r
523 ' BYE
\88{·e i
\8f{
\r
525 ¢
\81\9fe
\88t
\88a
\9d¡¶áá
\r
526 ¢
\81\9fe
\88t A
\9d¡¶áá
\r
528 : ¹A¸a
\9f¡
\9d¡ ( -- )
\r
537 ¦
\95\97i´á ¹A¸a
\9f¡
\9d¡ ÑÁ¡e»¡¶¡ ¦
\95\90\81\9da ;
\r
539 : ½¡
\88\85ÑÁ¡e ( -- ) 8 º
\89ÑÁ¡e ÑÁ¡e»¡¶¡ ;
\r
540 : µ¥ÑÁ¡e ( -- ) µ¥ÑÁ¡e ÑÁ¡e»¡¶¡ ;
\r
542 :
\95¡.µ¡
\9fe½¢ (
\88b
\95¡ -- )
\r
545 ¥A
\8da 0 < ¡e (
\88b
\95¡
\88a 0¥¡
\94a ¸b·a¡e)
\r
546 ·¡¹A¦
\81Èá 360 + ( 0 ·¡¬w·¡
\96I
\98\81\8ca»¡ 360·i
\94áÐq)
\r
548 ´a
\93¡¡e 360
\90a ỡ ( 0¥¡
\94a Ça¡e 360·a
\9d¡
\90a
\92\85 \90a ỡ
\9fi
\90q
\8b±)
\r
553 :
\95¡.¶E½¢ -1 *
\95¡.µ¡
\9fe½¢ ;
\r
555 : eÇq.
\88a ( dx dy -- )
\r
557 A
\9d¡¶áá @ + ( dx y+dy )
\r
558 ¥A
\8da A
\9d¡¶áá ! ( dx y+dy )
\r
559 ¤a
\8e¡
\88a
\9d¡¶áá @ + ( y+dy x+dx )
\r
560 ¥A
\8da
\88a
\9d¡¶áá ! ( y+dy x+dx )
\r
561 ¤a
\8e¡ ( x+dx y+dy )
\r
565 : ´|·a
\9d¡ ( l -- )
\r
567 ¤wз @ sin* ( l dx )
\r
569 ¤wз @ cos* ( dx dy )
\r
572 :
\96á
\9d¡ (
\88á
\9f¡ -- )
\r
575 : __µ¡
\9fe½¢.ÑÉ
\8d© (
\88á
\9f¡ ÒU®
\81 -- )
\r
576 0
\91 5
\95¡.µ¡
\9fe½¢ ¥A
\8da ´|·a
\9d¡ 5
\95¡.µ¡
\9fe½¢
\95©´a ¤á
\9da ;
\r
578 : µ¡
\9fe½¢.ÑÉ
\8d© ( ¤e»¡
\9fq
\88b
\95¡ -- )
\r
579 ¤a
\8e¡ 355 2034 */ (
\88b
\95¡
\88á
\9f¡ ) ( ÑÉ
\8d©·i 10
\95¡³¢
\90a
\92\81´á
\8ba
\9f± )
\r
580 ( 2*pi*r*
\88b
\95¡/360*10 = pi*r*
\88b
\95¡/18 )
\r
581 ( pi = 355/113 = 3.141593 )
\r
582 ¥A
\8da >
\96A (
\96A
\95©·¡
\94ᣡµA
\88á
\9f¡
\9fi
\88i¢
\81\9f¡)
\r
583 \88å
\90á 10 / (
\88b
\95¡
\88á
\9f¡ ÒU®
\81 )
\r
584 __µ¡
\9fe½¢.ÑÉ
\8d© (
\88b
\95¡ )
\r
585 10
\90a ỡ (
\88b
\95¡_
\90a ỡ )
\r
586 ¥A
\8da
\96A> (
\88b
\95¡_
\90a ỡ
\88b
\95¡_
\90a ỡ
\88á
\9f¡ )
\r
587 ( 10·a
\9d¡
\90a
\92\85 \90a ỡ
\88b
\95¡µA Ð
\81\94wÐa
\93e
\88á
\9f¡ eÇq ´|·a
\9d¡
\88q)
\r
588 * 10 / ´|·a
\9d¡ (
\88b
\95¡_
\90a ỡ )
\r
591 : µ¡
\9fe½¢.¶¥ ( ¤e»¡
\9fq -- ) 360 µ¡
\9fe½¢.ÑÉ
\8d© ;
\r
593 : __¶E½¢.ÑÉ
\8d© (
\88á
\9f¡ ÒU®
\81 -- )
\r
594 0
\91 5
\95¡.¶E½¢ ¥A
\8da ´|·a
\9d¡ 5
\95¡.¶E½¢
\95©´a ¤á
\9da ;
\r
596 : ¶E½¢.ÑÉ
\8d© ( ¤e»¡
\9fq
\88b
\95¡ -- )
\r
597 ¤a
\8e¡ 355 2034 */ (
\88b
\95¡
\88á
\9f¡ ) ( ÑÉ
\8d©·i 10
\95¡³¢
\90a
\92\81´á
\8ba
\9f± )
\r
598 ( 2*pi*r*
\88b
\95¡/360*10 = pi*r*
\88b
\95¡/18 )
\r
599 ¥A
\8da >
\96A (
\96A
\95©·¡
\94ᣡµA
\88á
\9f¡
\9fi
\88i¢
\81\9f¡)
\r
600 \88å
\90á 10 / (
\88b
\95¡
\88á
\9f¡ ÒU®
\81 )
\r
601 __¶E½¢.ÑÉ
\8d© (
\88b
\95¡ )
\r
602 10
\90a ỡ (
\88b
\95¡_
\90a ỡ )
\r
603 ¥A
\8da
\96A> (
\88b
\95¡_
\90a ỡ
\88b
\95¡_
\90a ỡ
\88á
\9f¡ )
\r
604 ( 10·a
\9d¡
\90a
\92\85 \90a ỡ
\88b
\95¡µA Ð
\81\94wÐa
\93e
\88á
\9f¡ eÇq ´|·a
\9d¡
\88q)
\r
605 * 10 / ´|·a
\9d¡ (
\88b
\95¡_
\90a ỡ )
\r
608 : ¶E½¢.¶¥ ( ¤e»¡
\9fq -- ) 360 ¶E½¢.ÑÉ
\8d© ;
\r
610 :
\91A¡¡ ( Ça
\8b¡ -- )
\r
611 4 0
\91 ¥A
\8da ´|·a
\9d¡ 90
\95¡.µ¡
\9fe½¢
\95©´a ¤á
\9da ;
\r
613 :
\89så
\91A¡¡ ( -- )
\r
614 100
\91A¡¡ 200
\91A¡¡ 300
\91A¡¡ 400
\91A¡¡ ;
\r
616 :
\94a·¡´a¡¥
\97a ( -- )
\r
618 4 0
\91 \89så
\91A¡¡ 90
\95¡.µ¡
\9fe½¢
\95©´a ;
\r
620 :
\8bµ¤i ( Ça
\8b¡ -- )
\r
621 ¥A
\8da ´|·a
\9d¡ ¥A
\8da
\91A¡¡
\96á
\9d¡ ;
\r
623 : µa¬õ
\8bµ¤i ( Ça
\8b¡ -- )
\r
624 6 0
\91 ¥A
\8da
\8bµ¤i 60
\95¡.µ¡
\9fe½¢
\95©´a ;
\r
626 : ¤a
\9cq
\88\81§¡ ( -- )
\r
627 100 µa¬õ
\8bµ¤i 400 µa¬õ
\8bµ¤i ;
\r
629 :
\8d¹·¼ ( Ça
\8b¡ -- )
\r
630 ¥A
\8da 90 µ¡
\9fe½¢.ÑÉ
\8d© 90
\95¡.µ¡
\9fe½¢
\r
631 90 µ¡
\9fe½¢.ÑÉ
\8d© 90
\95¡.µ¡
\9fe½¢ ;
\r
633 :
\8d¹ ( Ça
\8b¡ -- )
\r
634 8 0
\91 ¥A
\8da
\8d¹·¼ 45
\95¡.µ¡
\9fe½¢
\95©´a ¤á
\9da ;
\r
636 :
\94a
\9fe
\8d¹·¼ ( Ça
\8b¡ -- )
\r
637 ¥A
\8da 60 µ¡
\9fe½¢.ÑÉ
\8d© 120
\95¡.µ¡
\9fe½¢
\r
638 60 µ¡
\9fe½¢.ÑÉ
\8d© 120
\95¡.µ¡
\9fe½¢ ;
\r
640 :
\94a
\9fe
\8d¹ ( Ça
\8b¡ -- )
\r
641 6 0
\91 ¥A
\8da
\94a
\9fe
\8d¹·¼ 60
\95¡.µ¡
\9fe½¢
\95©´a ¤á
\9da ;
\r
643 : Ð
\95¬i ( Ça
\8b¡ -- )
\r
644 ¥A
\8da 90 ¶E½¢.ÑÉ
\8d© ¥A
\8da 90 µ¡
\9fe½¢.ÑÉ
\8d©
\r
645 ¥A
\8da 90 ¶E½¢.ÑÉ
\8d© 90 µ¡
\9fe½¢.ÑÉ
\8d© ;
\r
647 : Ð
\81 ( Ça
\8b¡ -- )
\r
648 9 0
\91 ¥A
\8da Ð
\95¬i 160
\95¡.µ¡
\9fe½¢
\95©´a ¤á
\9da ;
\r
650 :
\88bÑw ( Ça
\8b¡ ¡¡¬á
\9f¡®
\81 -- )
\r
651 360
\88å
\90á / ¤a
\8e¡ ( Ça
\8b¡
\95©_
\88b
\95¡ ¡¡¬á
\9f¡®
\81 )
\r
652 0
\91 \88å
\90á ´|·a
\9d¡ ¥A
\8da
\95¡.µ¡
\9fe½¢
\95©´a
\r
655 : ¥i ( ¥e·
\81_®
\81 ¡y¤å -- )
\r
656 \88å
\90á
\88å
\90á *
\r
657 0
\91 600 ´|·a
\9d¡
\88å
\90á
\88å
\90á 360 * ¤a
\8e¡ /
\95¡.µ¡
\9fe½¢
\95©´a
\r
660 :
\94a
\88bÑw ( Ça
\8b¡
\88b
\95¡ -- )
\r
661 ¤wз @ >
\96A (
\96A
\95©·¡
\94ᣡµA Àá·q ¤wз·i
\88i¢
\81\9f¡)
\r
663 \88å
\90á ´|·a
\9d¡ ¥A
\8da
\95¡.µ¡
\9fe½¢
\r
664 ¤wз @
\96A@ =
\8ca»¡ ( ¤wз·¡ Àá·q¤wз
\89Á
\88{´a»©
\98\81\8ca»¡
\96AÎ
\89·¡)
\r
665 ¤á
\9da ¤á
\9da
\96A> ¤á
\9da ; (
\88t
\94ᣡµÁ
\96A
\95©·¡
\94ᣡ
\9fi À÷¡ )
\r
667 :
\94a
\88bÑw¸a
\9cw5 5 0
\91 450 72
\94a
\88bÑw 72
\95¡.µ¡
\9fe½¢
\95©´a ;
\r
668 :
\94a
\88bÑw¸a
\9cw4 4 0
\91 700 135
\94a
\88bÑw 90
\95¡.µ¡
\9fe½¢
\95©´a ;
\r
669 :
\94a
\88bÑw¸a
\9cw12 12 0
\91 15
\95¡.µ¡
\9fe½¢ ¦
\95\97i´á 400 ´|·a
\9d¡ ¦
\95\90\81\9da
\r
670 200 135
\94a
\88bÑw 15
\95¡.µ¡
\9fe½¢
\95©´a ;
\r
672 :
\90a¢
\81 (
\88a»¡
\88b
\95¡
\88a»¡
\8b©·¡
\88a»¡Ã¡
\8b¡®
\81 -- )
\r
673 >
\96A (
\88a»¡Ã¡
\8b¡®
\81\9fi
\96A
\95©·¡
\94ᣡµA
\88i¢
\81\9f¡)
\r
674 \96A@ ¡e ( '
\96A@ 0 <> ¡e'
\89Á
\88{·q)
\r
676 ¥A
\8da 2 * ´|·a
\9d¡
\r
677 \88å
\90á
\88å
\90á
\96A@ 1 -
\96A¦
\89\9cá
\r
678 ¥A
\8da 2 *
\96á
\9d¡
\r
679 \88å
\90á 2 *
\95¡.µ¡
\9fe½¢
\r
681 \88å
\90á
\88å
\90á
\96A@ 1 -
\96A¦
\89\9cá
\r
683 ´a
\93¡¡e ¤á
\9da ¤á
\9da
\9ca
\r
686 ¢
\81\9fe
\88t §¡
\93iÇa
\8b¡ 20 §¡
\93iÇa
\8b¡ !
\r
688 ¥A
\8da 0 = ¡e §¡
\93iÇa
\8b¡ @ ´|·a
\9d¡
\r
689 ´a
\93¡¡e ¥A
\8da 0 > ¡e ¥A
\8da 1 -
\96A¦
\89\9cá (
\90a·¡-1 ¶w )
\r
691 1
\88å
\90á -
\96A¦
\89\9cá ( 1-
\90a·¡ ¶w )
\r
692 ´a
\93¡¡e -1
\88å
\90á -
\96A¦
\89\9cá ( -1-
\90a·¡ ¶w )
\r
694 1
\88å
\90á +
\96A¦
\89\9cá ( 1+
\90a·¡ ¶w )
\r
700 ." '
\93iÎ
\91'·a
\9d¡ ¼e
\88á¦
\82\8ba
\9f± Ïa
\9d¡
\8ba
\9c\91·i ¯¡¸bÐs
\93¡
\94a."
\94a·qº
\89 \94a·qº
\89\r
701 ." ¯¡Ç± i
\97i·i ¥¡
\9da¡e ' iÍa'
\9ca
\89¡ ᯡ
\89¡"
\94a·qº
\89\r
702 ." ¯¡Ç± i·i ´á
\98ý
\89A ³a
\93e»¡ ¥¡
\9da¡e '
\95¡¶
\91 i
\95¡¶
\91 i' Àá
\9cñ ᯡ
\89¡"
\94a·qº
\89\r
703 ." DOS
\9d¡
\95©´a
\88a
\9da¡e '
\8f{' ·¡
\9ca
\89¡ ᯳¯¡µ¡."
\94a·qº
\89\r
704 ."
\8ba
\9f±
\89Á
\8bi¸a
\9fi
\88{·¡ ¥¡
\9da¡e 'µ¥ÑÁ¡e'
\98a
\9d¡ ¥¡
\9da¡e '½¡
\88\85ÑÁ¡e'·¡
\9ca
\89¡ ᯳¯¡µ¡"
\r
707 300
\8d¹ 450
\8d¹ 600
\8d¹
\r
708 ¦
\95\97i´á 90
\95¡.¶E½¢ 2000 ´|·a
\9d¡ ¦
\95\90\81\9da
\r
709 900
\94a
\9fe
\8d¹ 700
\94a
\9fe
\8d¹ 500
\94a
\9fe
\8d¹
\r
710 ¦
\95\97i´á 4000
\96á
\9d¡ 90
\95¡.µ¡
\9fe½¢ ¦
\95\90\81\9da
\r
712 1
\8bi®A·³
\9db¬wÈ
\81 ! ; \ Ðe
\8bi·³
\9db
\r
718 GET-MODE TO OldMode# HGRAPHIC hi
\r
719 ." ·
\81\89e
\89Á ¹A´e
\89Á §¡Íw·i Ða·¡ÉI wykoh
\9d¡ ¥¡
\90\81 º
\81¯³¯¡µ¡." CR
\r
720 S" BLOCKS.BLK" MAPPED-TO-BLOCK
\r
723 ' TURTLE-hi TO 'boot
\r
725 (
\94a·q·i Àa
\9d\81\9d¡ ¯¡Åa¥¡¯³¯¡µ¡. )
\r
727 ( 400
\8bµ¤i 400 µa¬õ
\8bµ¤i ¤a
\9cq
\88\81§¡ )
\r
728 ( 400 3
\88bÑw 400 5
\88bÑw 400 7
\88bÑw )
\r
729 ( 5 2 ¥i 7 2 ¥i 7 3 ¥i 8 3 ¥i 9 2 ¥i 9 4 ¥i 10 3 ¥i 11 3 ¥i 11 5 ¥i )
\r
730 (
\94a
\88bÑw¸a
\9cw5 )
\r
731 (
\94a
\88bÑw¸a
\9cw5 )
\r
732 (
\94a
\88bÑw¸a
\9cw12 )
\r
733 ( 30 400 4
\90a¢
\81 )
\r
734 ( 20 250 5
\90a¢
\81 )
\r
735 ( 20 250 6
\90a¢
\81 )
\r
736 ( 50 §¡
\93iÇa
\8b¡ ! 9 ¶w )
\r
737 ( 20 §¡
\93iÇa
\8b¡ ! 12 ¶w )
\r
745 MAX-X 8 * 2/ VALUE xOffset
\r
746 MAX-Y 16 * 2/ VALUE yOffset
\r
747 VARIABLE xCoord xOffset xCoord !
\r
748 VARIABLE yCoord yOffset yCoord !
\r
750 : PENUP ( -- ) FALSE TO PenDown? ;
\r
751 : PENDOWN ( -- ) TRUE TO PenDown? ;
\r
752 : LINES-SCREEN ( y -- ) MAX-Y SWAP - TO YTop ;
\r
753 : FULL-SCREEN ( -- ) PAGE ;
\r
755 : TODRAW ( x y -- )
\r
756 scale / yOffset SWAP - \ x y1
\r
757 SWAP scale / xOffset + SWAP \ x1 y1
\r
758 PenDown? IF 2DUP xCoord @ yCoord @ line640 THEN
\r
759 yCoord ! xCoord ! ;
\r
761 : SHOW-TURTLE ( -- )
\r
762 xCoord @ 8 Heading @ 270 + sin* +
\r
763 yCoord @ 8 Heading @ 270 + cos* -
\r
764 2DUP xCoord @ yCoord @ xline640 \ x1 y1
\r
765 xCoord @ 16 Heading @ sin* +
\r
766 yCoord @ 16 Heading @ cos* - \ x1 y1 x2 y2
\r
767 2SWAP 2OVER xline640 \ x2 y2
\r
768 xCoord @ 8 Heading @ 90 + sin* +
\r
769 yCoord @ 8 Heading @ 90 + cos* - \ x2 y2 x3 y3
\r
770 2SWAP 2OVER xline640 \ x3 y3
\r
771 xCoord @ yCoord @ xline640 ;
\r
773 : CLEAR-SCREEN ( -- ) YTop PAGE 0 OVER AT-XY TO YTop SHOW-TURTLE ;
\r
777 VARIABLE X-POSITION
\r
778 VARIABLE Y-POSITION
\r
788 : CLEAR-SCREEN ( -- )
\r
789 PENUP HOME CLEAR-SCREEN PENDOWN ;
\r
791 : SPLIT-SCREEN ( -- ) 8 LINES-SCREEN CLEAR-SCREEN ;
\r
792 : FULL-SCREEN ( -- ) FULL-SCREEN CLEAR-SCREEN ;
\r
794 : RIGHT ( angle -- )
\r
805 : LEFT -1 * RIGHT ;
\r
807 : DELTA-MOVE ( dx dy -- )
\r
809 Y-POSITION @ + ( dx y+dy )
\r
810 DUP Y-POSITION ! ( dx y+dy )
\r
811 SWAP X-POSITION @ + ( y+dy x+dx )
\r
812 DUP X-POSITION ! ( y+dy x+dx )
\r
817 : FORWARD ( length -- )
\r
819 Heading @ sin* ( l dx )
\r
821 Heading @ cos* ( dx dy )
\r
824 : BACK ( length -- )
\r
827 : ARCR1 ( step times -- )
\r
828 0 DO 5 RIGHT DUP FORWARD 5 RIGHT LOOP DROP ;
\r
830 : ARCR ( radius degrees -- )
\r
840 : CIRCLER ( radius -- ) 360 ARCR ;
\r
842 : ARCL1 ( step times -- )
\r
843 0 DO 5 LEFT DUP FORWARD 5 LEFT LOOP DROP ;
\r
845 : ARCL ( radius degrees -- )
\r
855 : CIRCLEL ( radius -- ) 360 ARCL ;
\r
857 : SQUARE ( size -- )
\r
858 4 0 DO DUP FORWARD 90 RIGHT LOOP DROP ;
\r
861 100 SQUARE 200 SQUARE 300 SQUARE 400 SQUARE ;
\r
865 4 0 DO BOXES 90 RIGHT LOOP ;
\r
868 DUP FORWARD DUP SQUARE BACK ;
\r
870 : 6FLAG ( size -- )
\r
871 6 0 DO DUP FLAG 60 RIGHT LOOP ;
\r
874 100 6FLAG 400 6FLAG ;
\r
876 : PETAL1 ( size -- )
\r
877 DUP 90 ARCR 90 RIGHT
\r
880 : FLOWER1 ( size -- )
\r
881 8 0 DO DUP PETAL1 45 RIGHT LOOP DROP ;
\r
883 : PETAL2 ( size -- )
\r
884 DUP 60 ARCR 120 RIGHT
\r
885 60 ARCR 120 RIGHT ;
\r
887 : FLOWER2 ( size -- )
\r
888 6 0 DO DUP PETAL2 60 RIGHT LOOP DROP ;
\r
891 DUP 90 ARCL DUP 90 ARCR
\r
892 DUP 90 ARCL 90 ARCR ;
\r
895 9 0 DO DUP RAY 160 RIGHT LOOP DROP ;
\r
897 : REGULAR ( size vertices -- )
\r
899 0 DO OVER FORWARD DUP RIGHT LOOP
\r
902 : STARS ( vertices times -- )
\r
904 0 DO 600 FORWARD OVER OVER 360 * SWAP / RIGHT LOOP
\r
907 : POLY ( size angle -- )
\r
910 OVER FORWARD DUP RIGHT
\r
911 Heading @ R@ = UNTIL
\r
912 DROP DROP R> DROP ;
\r
914 : POLYDEMO5 5 0 DO 450 72 POLY 72 RIGHT LOOP ;
\r
915 : POLYDEMO4 4 0 DO 700 135 POLY 90 RIGHT LOOP ;
\r
916 : POLYDEMO12 12 0 DO 15 RIGHT PENUP 400 FORWARD PENDOWN
\r
917 200 135 POLY 15 RIGHT LOOP ;
\r
919 : TREE ( angle length recursion -- )
\r
924 OVER OVER R@ 1 - RECURSE
\r
928 OVER OVER R@ 1 - RECURSE
\r
930 ELSE DROP DROP THEN
\r
933 VARIABLE DRAGON-SIZE 20 DRAGON-SIZE !
\r
935 DUP 0 = IF DRAGON-SIZE @ FORWARD
\r
936 ELSE DUP 0 > IF DUP 1 - RECURSE
\r
939 ELSE -1 OVER - RECURSE
\r
947 ." Starting Turtle Graphics implemented in hForth." CR CR
\r
948 ." Type 'FULL-SCREEN' for full screen text display." CR
\r
949 ." Type 'SPLIT-SCREEN' for text display in split screen." CR
\r
952 300 FLOWER1 450 FLOWER1 600 FLOWER1
\r
953 PENUP 90 LEFT 2000 FORWARD PENDOWN
\r
954 900 FLOWER2 700 FLOWER2 500 FLOWER2
\r
955 PENUP 4000 BACK 90 RIGHT PENDOWN
\r
962 GET-MODE TO OldMode# HGRAPHIC hi
\r
963 S" BLOCKS.BLK" MAPPED-TO-BLOCK
\r
966 ' TURTLE-hi TO 'boot
\r
968 ( Try the followings: )
\r
970 ( 400 FLAG 400 6FLAG SPINFLAG )
\r
971 ( 400 3 REGULAR 400 5 REGULAR 400 7 REGULAR )
\r
972 ( 5 2 STARS 7 2 STARS 7 3 STARS 8 3 STARS 9 2 STARS 9 4 STARS 10 3 STARS 11 3 STARS 11 5 STARS )
\r
979 ( 50 DRAGON-SIZE ! 9 DRAGON )
\r
980 ( 20 DRAGON-SIZE ! 12 DRAGON )
\r
984 SET-CURRENT SET-ORDER
\r