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