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