[gforth] / gforth / Attic / toolsext.fs  

gforth: gforth/Attic/toolsext.fs


1 : pazsan 1.4 \ Interpretative Structuren 16feb92py
2 : anton 1.1
3 : pazsan 1.4 Variable countif
4 : anton 1.1
5 : pazsan 1.4 : dummy ; immediate
6 :     : >exec >r ; restrict ( :-)
7 :     : scanIF f83find dup 0= IF drop ['] dummy >name THEN ;
8 :    
9 :     Create [struct]-search ' scanIF A, ' (reveal) A, ' drop A,
10 :     Create [struct]-voc NIL A, G [struct]-search T A,
11 :     NIL A, NIL A,
12 :    
13 :     : ?if countif @ 0<
14 :     IF [ [struct]-voc 3 cells + ] ALiteral @ lookup ! THEN ;
15 :    
16 :     UNLOCK Tlast @ NIL Tlast ! LOCK
17 :    
18 :     : [IF] 1 countif +! ?if ; immediate
19 :     : [THEN] -1 countif +! ?if ; immediate
20 :     : [ELSE] postpone [THEN] r> >exec postpone [IF] ;
21 :     immediate
22 :     ' [IF] Alias [IFDEF] immediate
23 :     ' [IF] Alias [IFUNDEF] immediate
24 : anton 1.5 ' [THEN] Alias [ENDIF] immediate
25 : pazsan 1.4 ' [IF] Alias [BEGIN] immediate
26 :     ' [IF] Alias [WHILE] immediate
27 :     ' [THEN] Alias [UNTIL] immediate
28 :     ' [THEN] Alias [AGAIN] immediate
29 :     ' [IF] Alias [DO] immediate
30 :     ' [IF] Alias [?DO] immediate
31 :     ' [THEN] Alias [LOOP] immediate
32 :     ' [THEN] Alias [+LOOP] immediate
33 :     : [REPEAT] postpone [AGAIN] postpone [THEN] ;
34 :     immediate
35 :     ' ( Alias ( immediate
36 :     ' \ Alias \ immediate
37 :    
38 :     UNLOCK Tlast @ swap Tlast ! LOCK
39 :     1 cells - G [struct]-voc T !
40 :    
41 :     \ Interpretative Structuren 30apr92py
42 :    
43 :     : defined bl word find nip 0<> ; immediate
44 :     : [IF] 0= IF countif off
45 :     lookup @ [ [struct]-voc 3 cells + ] ALiteral !
46 :     [struct]-voc lookup !
47 :     THEN ; immediate
48 :     : [IFDEF] postpone defined postpone [IF] ; immediate
49 :     : [IFUNDEF] postpone defined 0= postpone [IF] ; immediate
50 :     : [ELSE] 0 postpone [IF] ; immediate
51 :     : [THEN] ; immediate
52 : anton 1.5 : [ENDIF] ; immediate
53 : pazsan 1.4
54 :     \ Structs for interpreter 28nov92py
55 :    
56 :     User (i)
57 :    
58 :     : [DO] ( start end -- ) >in @ -rot
59 :     DO I (i) ! dup >r >in ! interpret r> swap +LOOP drop ;
60 :     immediate
61 :     : [?DO] 2dup = IF 2drop postpone [ELSE] ELSE postpone [DO] THEN ;
62 :     immediate
63 :     : [+LOOP] ( n -- ) rdrop rdrop ; immediate
64 :     : [LOOP] ( -- ) 1 rdrop rdrop ; immediate
65 :     : [FOR] ( n -- ) 0 swap postpone [DO] ; immediate
66 :     : [NEXT] ( n -- ) -1 rdrop rdrop ; immediate
67 :     : [I] ( -- index ) (I) @ postpone Literal ; immediate
68 :     : [BEGIN] >in @ >r BEGIN r@ >in ! interpret UNTIL rdrop ;
69 :     immediate
70 :     ' [+LOOP] Alias [UNTIL] immediate
71 :     : [REPEAT] ( -- ) false rdrop rdrop ; immediate
72 :     ' [REPEAT] Alias [AGAIN] immediate
73 :     : [WHILE] ( flag -- )
74 :     0= IF postpone [ELSE] true rdrop rdrop 1 countif +! THEN ;
75 :     immediate
76 : anton 1.1

CVS Admin

Powered by ViewCVS 1.0-dev
(Powered by ViewCVS)

ViewCVS and CVS Help