afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome\ ** ficl/softwords/ifbrack.fr
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome\ ** ANS conditional compile directives [if] [else] [then]
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome\ ** Requires ficl 2.0 or greater...
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soomehide
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome: ?[if] ( c-addr u -- c-addr u flag )
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome 2dup s" [if]" compare-insensitive 0=
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome;
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome: ?[else] ( c-addr u -- c-addr u flag )
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome 2dup s" [else]" compare-insensitive 0=
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome;
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome: ?[then] ( c-addr u -- c-addr u flag )
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome 2dup s" [then]" compare-insensitive 0= >r
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome 2dup s" [endif]" compare-insensitive 0= r>
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome or
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome;
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soomeset-current
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome: [else] ( -- )
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome 1 \ ( level )
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome begin
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome begin
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome parse-word dup while \ ( level addr len )
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome ?[if] if \ ( level addr len )
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome 2drop 1+ \ ( level )
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome else \ ( level addr len )
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome ?[else] if \ ( level addr len )
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome 2drop 1- dup if 1+ endif
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome else
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome ?[then] if 2drop 1- else 2drop endif
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome endif
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome endif ?dup 0= if exit endif \ level
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome repeat 2drop \ level
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome refill 0= until \ level
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome drop
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome; immediate
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome: [if] ( flag -- )
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome0= if postpone [else] then ; immediate
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome: [then] ( -- ) ; immediate
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome: [endif] ( -- ) ; immediate
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soome
afc2ba1deb75b323afde536f2dd18bcafdaa308dToomas Soomeprevious