ifbrack.fr revision 51786
1\ ** ficl/softwords/ifbrack.fr 2\ ** ANS conditional compile directives [if] [else] [then] 3\ ** Requires ficl 2.0 or greater... 4 5\ $FreeBSD: head/sys/boot/ficl/softwords/ifbrack.fr 51786 1999-09-29 04:43:16Z dcs $ 6 7hidden dup >search ficl-set-current 8 9: ?[if] ( c-addr u -- c-addr u flag ) 10 2dup 2dup 11 s" [if]" compare 0= >r 12 s" [IF]" compare 0= r> 13 or 14; 15 16: ?[else] ( c-addr u -- c-addr u flag ) 17 2dup 2dup 18 s" [else]" compare 0= >r 19 s" [ELSE]" compare 0= r> 20 or 21; 22 23: ?[then] ( c-addr u -- c-addr u flag ) 24 2dup 2dup 25 s" [then]" compare 0= >r 26 s" [THEN]" compare 0= r> 27 or 28; 29 30set-current 31 32: [else] ( -- ) 33 1 \ ( level ) 34 begin 35 begin 36 parse-word dup while \ ( level addr len ) 37 ?[if] if \ ( level addr len ) 38 2drop 1+ \ ( level ) 39 else \ ( level addr len ) 40 ?[else] if \ ( level addr len ) 41 2drop 1- dup if 1+ endif 42 else 43 ?[then] if 2drop 1- else 2drop endif 44 endif 45 endif ?dup 0= if exit endif \ level 46 repeat 2drop \ level 47 refill 0= until \ level 48 drop 49; immediate 50 51: [if] ( flag -- ) 520= if postpone [else] then ; immediate 53 54: [then] ( -- ) ; immediate 55 56previous 57