Deleted Added
sdiff udiff text old ( 76116 ) new ( 94290 )
full compact
1\ ** ficl/softwords/softcore.fr
2\ ** FICL soft extensions
3\ ** John Sadler (john_sadler@alum.mit.edu)
4\ ** September, 1998
5
6\ $FreeBSD: head/sys/boot/ficl/softwords/softcore.fr 76116 2001-04-29 02:36:36Z dcs $
7
8\ ** Ficl USER variables
9\ ** See words.c for primitive def'n of USER
10
11\ #if FICL_WANT_USER
12variable nUser 0 nUser !
13: user \ name ( -- )
14 nUser dup @ user 1 swap +! ;
15
16\ #endif
17
18\ ** ficl extras
19\ EMPTY cleans the parameter stack
20: empty ( xn..x1 -- ) depth 0 ?do drop loop ;
21\ CELL- undoes CELL+
22: cell- ( addr -- addr ) [ 1 cells ] literal - ;
23: -rot ( a b c -- c a b ) 2 -roll ;
24
25\ ** CORE
26: abs ( x -- x )
27 dup 0< if negate endif ;
28decimal 32 constant bl
29
30: space ( -- ) bl emit ;
31
32: spaces ( n -- ) 0 ?do space loop ;
33
34: abort"
35 state @ if
36 postpone if
37 postpone ."
38\ postpone type
39 postpone cr
40 -2
41 postpone literal
42 postpone throw
43 postpone endif
44 else
45 [char] " parse
46 rot if
47 type
48 cr
49 -2 throw
50 else
51 2drop
52 endif
53 endif
54; immediate
55
56
57\ ** CORE EXT
580 constant false
59false invert constant true
60: <> = 0= ;
61: 0<> 0= 0= ;
62: compile, , ;
63: erase ( addr u -- ) 0 fill ;
64: nip ( y x -- x ) swap drop ;
65: tuck ( y x -- x y x) swap over ;
66: within ( test low high -- flag ) over - >r - r> u< ;
67
68
69\ ** LOCAL EXT word set
70\ #if FICL_WANT_LOCALS
71: locals| ( name...name | -- )
72 begin
73 bl word count
74 dup 0= abort" where's the delimiter??"
75 over c@
76 [char] | - over 1- or
77 while
78 (local)
79 repeat 2drop 0 0 (local)
80; immediate
81
82: local ( name -- ) bl word count (local) ; immediate
83
84: 2local ( name -- ) bl word count (2local) ; immediate
85
86: end-locals ( -- ) 0 0 (local) ; immediate
87
88\ #endif
89
90\ ** TOOLS word set...
91: ? ( addr -- ) @ . ;
92: dump ( addr u -- )
93 0 ?do
94 dup c@ . 1+
95 i 7 and 7 = if cr endif
96 loop drop
97;
98
99\ ** SEARCH+EXT words and ficl helpers
100\ BRAND-WORDLIST is a helper for ficl-named-wordlist. Usage idiom:
101\ wordlist dup create , brand-wordlist
102\ gets the name of the word made by create and applies it to the wordlist...
103: brand-wordlist ( wid -- ) last-word >name drop wid-set-name ;
104
105: ficl-named-wordlist \ ( hash-size name -- ) run: ( -- wid )
106 ficl-wordlist dup create , brand-wordlist does> @ ;
107
108: wordlist ( -- )
109 1 ficl-wordlist ;
110
111\ FICL-SET-CURRENT sets the compile wordlist and pushes the previous value
112: ficl-set-current ( wid -- old-wid )
113 get-current swap set-current ;
114
115\ DO_VOCABULARY handles the DOES> part of a VOCABULARY
116\ When executed, new voc replaces top of search stack
117: do-vocabulary ( -- )
118 does> @ search> drop >search ;
119
120: ficl-vocabulary ( nBuckets name -- )
121 ficl-named-wordlist do-vocabulary ;
122
123: vocabulary ( name -- )
124 1 ficl-vocabulary ;
125
126\ PREVIOUS drops the search order stack
127: previous ( -- ) search> drop ;
128
129\ HIDDEN vocabulary is a place to keep helper words from cluttering the namespace
130\ USAGE:
131\ hide
132\ <definitions to hide>
133\ set-current
134\ <words that use hidden defs>
135\ previous ( pop HIDDEN off the search order )
136
1371 ficl-named-wordlist hidden
138: hide hidden dup >search ficl-set-current ;
139
140\ ALSO dups the search stack...
141: also ( -- )
142 search> dup >search >search ;
143
144\ FORTH drops the top of the search stack and pushes FORTH-WORDLIST
145: forth ( -- )
146 search> drop
147 forth-wordlist >search ;
148
149\ ONLY sets the search order to a default state
150: only ( -- )
151 -1 set-order ;
152
153\ ORDER displays the compile wid and the search order list
154hide
155: list-wid ( wid -- )
156 dup wid-get-name ( wid c-addr u )
157 ?dup if
158 type drop
159 else
160 drop ." (unnamed wid) " x.
161 endif cr
162;
163set-current \ stop hiding words
164
165: order ( -- )
166 ." Search:" cr
167 get-order 0 ?do 3 spaces list-wid loop cr
168 ." Compile: " get-current list-wid cr
169;
170
171: debug ' debug-xt ;
172
173previous \ lose hidden words from search order
174
175\ ** E N D S O F T C O R E . F R
176