1*afc2ba1dSToomas Soome\ ** ficl/softwords/ifbrack.fr
2*afc2ba1dSToomas Soome\ ** ANS conditional compile directives [if] [else] [then]
3*afc2ba1dSToomas Soome\ ** Requires ficl 2.0 or greater...
4*afc2ba1dSToomas Soome
5*afc2ba1dSToomas Soomehide
6*afc2ba1dSToomas Soome
7*afc2ba1dSToomas Soome: ?[if]   ( c-addr u -- c-addr u flag )
8*afc2ba1dSToomas Soome    2dup s" [if]" compare-insensitive 0=
9*afc2ba1dSToomas Soome;
10*afc2ba1dSToomas Soome
11*afc2ba1dSToomas Soome: ?[else]   ( c-addr u -- c-addr u flag )
12*afc2ba1dSToomas Soome    2dup s" [else]" compare-insensitive 0=
13*afc2ba1dSToomas Soome;
14*afc2ba1dSToomas Soome
15*afc2ba1dSToomas Soome: ?[then]   ( c-addr u -- c-addr u flag )
16*afc2ba1dSToomas Soome    2dup s" [then]" compare-insensitive 0= >r
17*afc2ba1dSToomas Soome    2dup s" [endif]" compare-insensitive 0= r>
18*afc2ba1dSToomas Soome    or
19*afc2ba1dSToomas Soome;
20*afc2ba1dSToomas Soome
21*afc2ba1dSToomas Soomeset-current
22*afc2ba1dSToomas Soome
23*afc2ba1dSToomas Soome: [else]  ( -- )
24*afc2ba1dSToomas Soome    1                                     \ ( level )
25*afc2ba1dSToomas Soome    begin
26*afc2ba1dSToomas Soome      begin
27*afc2ba1dSToomas Soome        parse-word dup  while             \ ( level addr len )
28*afc2ba1dSToomas Soome        ?[if] if                          \ ( level addr len )
29*afc2ba1dSToomas Soome            2drop 1+                      \ ( level )
30*afc2ba1dSToomas Soome        else                              \ ( level addr len )
31*afc2ba1dSToomas Soome            ?[else] if                    \ ( level addr len )
32*afc2ba1dSToomas Soome                 2drop 1- dup if 1+ endif
33*afc2ba1dSToomas Soome            else
34*afc2ba1dSToomas Soome                ?[then] if 2drop 1- else 2drop endif
35*afc2ba1dSToomas Soome            endif
36*afc2ba1dSToomas Soome        endif ?dup 0=  if exit endif      \ level
37*afc2ba1dSToomas Soome      repeat  2drop                       \ level
38*afc2ba1dSToomas Soome    refill 0= until                       \ level
39*afc2ba1dSToomas Soome    drop
40*afc2ba1dSToomas Soome;  immediate
41*afc2ba1dSToomas Soome
42*afc2ba1dSToomas Soome: [if]  ( flag -- )
43*afc2ba1dSToomas Soome0= if postpone [else] then ;  immediate
44*afc2ba1dSToomas Soome
45*afc2ba1dSToomas Soome: [then]  ( -- )  ;  immediate
46*afc2ba1dSToomas Soome: [endif]  ( -- )  ;  immediate
47*afc2ba1dSToomas Soome
48*afc2ba1dSToomas Soomeprevious
49