151786Sdcs\ ** ficl/softwords/ifbrack.fr
251786Sdcs\ ** ANS conditional compile directives [if] [else] [then]
351786Sdcs\ ** Requires ficl 2.0 or greater...
494290Sdcs\
551786Sdcs\ $FreeBSD: releng/10.3/sys/boot/ficl/softwords/ifbrack.fr 94290 2002-04-09 17:45:28Z dcs $
651786Sdcs
776116Sdcshide
851786Sdcs
951786Sdcs: ?[if]   ( c-addr u -- c-addr u flag )
1094290Sdcs    2dup s" [if]" compare-insensitive 0=
1151786Sdcs;
1251786Sdcs
1351786Sdcs: ?[else]   ( c-addr u -- c-addr u flag )
1494290Sdcs    2dup s" [else]" compare-insensitive 0=
1551786Sdcs;
1651786Sdcs
1751786Sdcs: ?[then]   ( c-addr u -- c-addr u flag )
1894290Sdcs    2dup s" [then]" compare-insensitive 0= >r
1994290Sdcs    2dup s" [endif]" compare-insensitive 0= r> 
2051786Sdcs    or
2151786Sdcs;
2251786Sdcs
2351786Sdcsset-current
2451786Sdcs
2551786Sdcs: [else]  ( -- )
2651786Sdcs    1                                     \ ( level )
2751786Sdcs    begin
2851786Sdcs      begin
2951786Sdcs        parse-word dup  while             \ ( level addr len )
3051786Sdcs        ?[if] if                          \ ( level addr len )
3151786Sdcs            2drop 1+                      \ ( level )
3251786Sdcs        else                              \ ( level addr len )
3351786Sdcs            ?[else] if                    \ ( level addr len )
3451786Sdcs                 2drop 1- dup if 1+ endif
3551786Sdcs            else
3651786Sdcs                ?[then] if 2drop 1- else 2drop endif 
3751786Sdcs            endif
3851786Sdcs        endif ?dup 0=  if exit endif      \ level
3951786Sdcs      repeat  2drop                       \ level
4051786Sdcs    refill 0= until                       \ level
4151786Sdcs    drop
4251786Sdcs;  immediate
4351786Sdcs
4451786Sdcs: [if]  ( flag -- )
4551786Sdcs0= if postpone [else] then ;  immediate
4651786Sdcs
4751786Sdcs: [then]  ( -- )  ;  immediate
4894290Sdcs: [endif]  ( -- )  ;  immediate
4951786Sdcs
5051786Sdcsprevious
51