xref: /freebsd/stand/ficl/softwords/prefix.fr (revision 26a58599a09a6181e0f5abe624021865a0c23186)
1*ca987d46SWarner Losh\ **
2*ca987d46SWarner Losh\ ** Prefix words for ficl
3*ca987d46SWarner Losh\ ** submitted by Larry Hastings, larry@hastings.org
4*ca987d46SWarner Losh\ **
5*ca987d46SWarner Losh\ (jws) To make a prefix, simply create a new definition in the <prefixes>
6*ca987d46SWarner Losh\ wordlist. start-prefixes and end-prefixes handle the bookkeeping
7*ca987d46SWarner Losh\
8*ca987d46SWarner Losh
9*ca987d46SWarner Loshvariable save-current
10*ca987d46SWarner Losh
11*ca987d46SWarner Losh: start-prefixes   get-current save-current ! <prefixes> set-current ;
12*ca987d46SWarner Losh: end-prefixes     save-current @ set-current ;
13*ca987d46SWarner Losh: show-prefixes    <prefixes> >search  words  search> drop ;
14*ca987d46SWarner Losh
15*ca987d46SWarner Losh\ #if (FICL_EXTENDED_PREFIX)
16*ca987d46SWarner Losh
17*ca987d46SWarner Loshstart-prefixes
18*ca987d46SWarner Losh
19*ca987d46SWarner Losh\ define " (double-quote) as an alias for s", and make it a prefix
20*ca987d46SWarner Losh: " postpone s" ; immediate
21*ca987d46SWarner Losh
22*ca987d46SWarner Losh
23*ca987d46SWarner Losh\ make .( a prefix (we just create an alias for it in the prefixes list)
24*ca987d46SWarner Losh: .( postpone .( ; immediate
25*ca987d46SWarner Losh
26*ca987d46SWarner Losh
27*ca987d46SWarner Losh\ make \ a prefix, and add // (same thing) as a prefix too
28*ca987d46SWarner Losh\ (jws) "//" is precompiled to save aggravation with Perl
29*ca987d46SWarner Losh\ : // postpone \ ; immediate
30*ca987d46SWarner Losh
31*ca987d46SWarner Losh
32*ca987d46SWarner Losh\ ** add 0b, 0o, 0d, and 0x as prefixes
33*ca987d46SWarner Losh\ ** these temporarily shift the base to 2, 8, 10, and 16 respectively
34*ca987d46SWarner Losh\ ** and consume the next number in the input stream, pushing/compiling
35*ca987d46SWarner Losh\ ** as normal
36*ca987d46SWarner Losh
37*ca987d46SWarner Losh\ (jws) __tempbase is precompiled, as are 0x and 0d - see prefix.c
38*ca987d46SWarner Losh\
39*ca987d46SWarner Losh\ : __tempbase  { newbase | oldbase -- }
40*ca987d46SWarner Losh\   base @ to oldbase
41*ca987d46SWarner Losh\   newbase base !
42*ca987d46SWarner Losh\   0 0 parse-word >number 2drop drop
43*ca987d46SWarner Losh\   oldbase base !
44*ca987d46SWarner Losh\   ;
45*ca987d46SWarner Losh
46*ca987d46SWarner Losh: 0b  2 __tempbase ; immediate
47*ca987d46SWarner Losh
48*ca987d46SWarner Losh: 0o  8 __tempbase ; immediate
49*ca987d46SWarner Losh
50*ca987d46SWarner Losh\ : 0d 10 __tempbase ; immediate
51*ca987d46SWarner Losh\ "0d" add-prefix
52*ca987d46SWarner Losh
53*ca987d46SWarner Losh\ : 0x 16 __tempbase ; immediate
54*ca987d46SWarner Losh\ "0x" add-prefix
55*ca987d46SWarner Losh
56*ca987d46SWarner Loshend-prefixes
57*ca987d46SWarner Losh
58*ca987d46SWarner Losh\ #endif
59