Add Makefile to cross-compile from Linux to Amiga
[pforth] / fth / t_corex.fth
CommitLineData
8e9db35f
PB
1\ @(#) t_corex.fth 98/03/16 1.2
2\ Test ANS Forth Core Extensions
3\
4\ Copyright 1994 3DO, Phil Burk
5
6INCLUDE? }T{ t_tools.fth
7
8ANEW TASK-T_COREX.FTH
9
10DECIMAL
11
12\ STUB because missing definition in pForth - FIXME
13: SAVE-INPUT ;
14: RESTORE-INPUT -1 ;
15
16TEST{
17
18\ ==========================================================
19T{ 1 2 3 }T{ 1 2 3 }T
20
21\ ----------------------------------------------------- .(
22T{ 27 .( IF YOU SEE THIS THEN .( WORKED!) }T{ 27 }T
23
24CR .( 1234 - SHOULD LINE UP WITH NEXT LINE.) CR 1234 8 .R CR
25
26T{ .( ) 987 .( TEST NULL STRING IN .( ) CR }T{ 987 }T
27
28\ ----------------------------------------------------- 0<>
29T{ 5 0<> }T{ TRUE }T
30T{ 0 0<> }T{ 0 }T
31T{ -1000 0<> }T{ TRUE }T
32
33\ ----------------------------------------------------- 2>R 2R> 2R@
34: T2>R ( -- .... )
35 17
36 20 5 2>R
37 19
38 2R@
39 37
40 2R>
41\ 2>R should be the equivalent of SWAP >R >R so this next construct
42\ should reduce to a SWAP.
43 88 77 2>R R> R>
44;
45T{ T2>R }T{ 17 19 20 5 37 20 5 77 88 }T
46
47\ ----------------------------------------------------- :NONAME
48T{ :NONAME 100 50 + ; EXECUTE }T{ 150 }T
49
50\ ----------------------------------------------------- <>
51T{ 12345 12305 <> }T{ TRUE }T
52T{ HEX 98765432 98765432 DECIMAL <> }T{ 0 }T
53
54\ ----------------------------------------------------- ?DO
55: T?DO ( n -- sum_n ) 0 SWAP 1+ 0 ?DO i + LOOP ;
56T{ 0 T?DO }T{ 0 }T
57T{ 4 T?DO }T{ 10 }T
58
59\ ----------------------------------------------------- AGAIN
60: T.AGAIN ( n -- )
61 BEGIN
62 DUP .
63 DUP 6 < IF EXIT THEN
64 1-
65 AGAIN
66;
67T{ 10 T.AGAIN CR }T{ 5 }T
68
69\ ----------------------------------------------------- C"
70: T.C" ( -- $STRING )
71 C" x5&"
72;
73T{ T.C" C@ }T{ 3 }T
74T{ T.C" COUNT DROP C@ }T{ CHAR x }T
75T{ T.C" COUNT DROP CHAR+ C@ }T{ CHAR 5 }T
76T{ T.C" COUNT DROP 2 CHARS + C@ }T{ CHAR & }T
77
78\ ----------------------------------------------------- CASE
79: T.CASE ( N -- )
80 CASE
81 1 OF 101 ENDOF
82 27 OF 892 ENDOF
83 941 SWAP \ default
84 ENDCASE
85;
86T{ 1 T.CASE }T{ 101 }T
87T{ 27 T.CASE }T{ 892 }T
88T{ 49 T.CASE }T{ 941 }T
89
90\ ----------------------------------------------------- COMPILE,
91: COMPILE.SWAP ['] SWAP COMPILE, ; IMMEDIATE
92: T.COMPILE,
93 19 20 27 COMPILE.SWAP 39
94;
95T{ T.COMPILE, }T{ 19 27 20 39 }T
96
97\ ----------------------------------------------------- CONVERT
98: T.CONVERT
99 0 S>D S" 1234xyz" DROP CONVERT
100 >R
101 D>S
102 R> C@
103;
104T{ T.CONVERT }T{ 1234 CHAR x }T
105
106\ ----------------------------------------------------- ERASE
107: T.COMMA.SEQ ( n -- , lay down N sequential bytes )
108 0 ?DO I C, LOOP
109;
110CREATE T-ERASE-DATA 64 T.COMMA.SEQ
111T{ T-ERASE-DATA 8 + C@ }T{ 8 }T
112T{ T-ERASE-DATA 7 + 3 ERASE
113T{ T-ERASE-DATA 6 + C@ }T{ 6 }T
114T{ T-ERASE-DATA 7 + C@ }T{ 0 }T
115T{ T-ERASE-DATA 8 + C@ }T{ 0 }T
116T{ T-ERASE-DATA 9 + C@ }T{ 0 }T
117T{ T-ERASE-DATA 10 + C@ }T{ 10 }T
118
119\ ----------------------------------------------------- FALSE
120T{ FALSE }T{ 0 }T
121
122\ ----------------------------------------------------- HEX
123T{ HEX 10 DECIMAL }T{ 16 }T
124
125\ ----------------------------------------------------- MARKER
126: INDIC? ( <name> -- ifInDic , is the following word defined? )
127 bl word find
128 swap drop 0= 0=
129;
130create FOOBAR
131MARKER MYMARK \ create word that forgets itself
132create GOOFBALL
133MYMARK
134T{ indic? foobar indic? mymark indic? goofball }T{ true false false }T
135
136\ ----------------------------------------------------- NIP
137T{ 33 44 55 NIP }T{ 33 55 }T
138
139\ ----------------------------------------------------- PARSE
140: T.PARSE ( char <string>char -- addr num )
141 PARSE
142 >R \ save length
143 PAD R@ CMOVE \ move string to pad
144 PAD R>
145;
146T{ CHAR % T.PARSE wxyz% SWAP C@ }T{ 4 CHAR w }T
147
148\ ----------------------------------------------------- PICK
149T{ 13 12 11 10 2 PICK }T{ 13 12 11 10 12 }T
150
151\ ----------------------------------------------------- QUERY
152T{ ' QUERY 0<> }T{ TRUE }T
153
154\ ----------------------------------------------------- REFILL
155T{ ' REFILL 0<> }T{ TRUE }T
156
157\ ----------------------------------------------------- RESTORE-INPUT
158T{ : T.SAVE-INPUT SAVE-INPUT RESTORE-INPUT ; T.SAVE-INPUT }T{ 0 }T \ EXPECTED FAILURE
159
160\ ----------------------------------------------------- ROLL
161T{ 15 14 13 12 11 10 0 ROLL }T{ 15 14 13 12 11 10 }T
162T{ 15 14 13 12 11 10 1 ROLL }T{ 15 14 13 12 10 11 }T
163T{ 15 14 13 12 11 10 2 ROLL }T{ 15 14 13 11 10 12 }T
164T{ 15 14 13 12 11 10 3 ROLL }T{ 15 14 12 11 10 13 }T
165T{ 15 14 13 12 11 10 4 ROLL }T{ 15 13 12 11 10 14 }T
166
167\ ----------------------------------------------------- SOURCE-ID
168T{ SOURCE-ID 0<> }T{ TRUE }T
169T{ : T.SOURCE-ID S" SOURCE-ID" EVALUATE ; T.SOURCE-ID }T{ -1 }T
170
171\ ----------------------------------------------------- SPAN
172T{ ' SPAN 0<> }T{ TRUE }T
173
174\ ----------------------------------------------------- TO VALUE
175333 VALUE MY-VALUE
176T{ MY-VALUE }T{ 333 }T
177T{ 1000 TO MY-VALUE MY-VALUE }T{ 1000 }T
178: TEST.VALUE ( -- 19 100 )
179 100 TO MY-VALUE
180 19
181 MY-VALUE
182;
183T{ TEST.VALUE }T{ 19 100 }T
184
185\ ----------------------------------------------------- TRUE
186T{ TRUE }T{ 0 0= }T
187
188\ ----------------------------------------------------- TUCK
189T{ 44 55 66 TUCK }T{ 44 66 55 66 }T
190
191\ ----------------------------------------------------- U.R
192HEX CR .( ABCD4321 - SHOULD LINE UP WITH NEXT LINE.) CR
193ABCD4321 C U.R CR DECIMAL
194
195\ ----------------------------------------------------- U>
196T{ -5 3 U> }T{ TRUE }T
197T{ 10 8 U> }T{ TRUE }T
198
199\ ----------------------------------------------------- UNUSED
200T{ UNUSED 0> }T{ TRUE }T
201
202\ ----------------------------------------------------- WITHIN
203T{ 4 5 10 WITHIN }T{ 0 }T
204T{ 5 5 10 WITHIN }T{ TRUE }T
205T{ 9 5 10 WITHIN }T{ TRUE }T
206T{ 10 5 10 WITHIN }T{ 0 }T
207
208T{ 4 10 5 WITHIN }T{ TRUE }T
209T{ 5 10 5 WITHIN }T{ 0 }T
210T{ 9 10 5 WITHIN }T{ 0 }T
211T{ 10 10 5 WITHIN }T{ TRUE }T
212
213T{ -6 -5 10 WITHIN }T{ 0 }T
214T{ -5 -5 10 WITHIN }T{ TRUE }T
215T{ 9 -5 10 WITHIN }T{ TRUE }T
216T{ 10 -5 10 WITHIN }T{ 0 }T
217
218
219\ ----------------------------------------------------- [COMPILE]
220: T.[COMPILE].IF [COMPILE] IF ; IMMEDIATE
221: T.[COMPILE] 40 0> T.[COMPILE].IF 97 ELSE 53 THEN 97 = ;
222T{ T.[COMPILE] }T{ TRUE }T
223
224\ ----------------------------------------------------- \
225}TEST
226