relicense to 0BSD
[pforth] / fth / smart_if.fth
index 65077c0..51e4ae9 100644 (file)
@@ -1,57 +1,60 @@
-\ @(#) smart_if.fth 98/01/26 1.2\r
-\ Smart Conditionals\r
-\ Allow use of if, do, begin, etc.outside of colon definitions.\r
-\\r
-\ Thanks to Mitch Bradley for the idea.\r
-\\r
-\ Author: Phil Burk\r
-\ Copyright 1994 3DO, Phil Burk, Larry Polansky, Devid Rosenboom\r
-\\r
-\ The pForth software code is dedicated to the public domain,\r
-\ and any third party may reproduce, distribute and modify\r
-\ the pForth software code or any derivative works thereof\r
-\ without any compensation or license.  The pForth software\r
-\ code is provided on an "as is" basis without any warranty\r
-\ of any kind, including, without limitation, the implied\r
-\ warranties of merchantability and fitness for a particular\r
-\ purpose and their equivalents under the laws of any jurisdiction.\r
-\r
-anew task-smart_if.fth\r
-\r
-variable SMIF-XT    \ execution token for conditional code\r
-variable SMIF-DEPTH \ depth of nested conditionals\r
-\r
-: SMIF{   ( -- , if executing, start compiling, setup depth )\r
-       state @ 0=\r
-       IF\r
-               :noname smif-xt !\r
-               1 smif-depth !\r
-       ELSE\r
-               1 smif-depth +!\r
-       THEN\r
-;\r
-\r
-: }SMIF  ( -- , unnest, stop compiling, execute code and forget )\r
-       smif-xt @\r
-       IF\r
-               -1 smif-depth +!\r
-               smif-depth @ 0 <=\r
-               IF\r
-                       postpone ;             \ stop compiling\r
-                       smif-xt @ execute      \ execute conditional code\r
-                       smif-xt @ >code dp !   \ forget conditional code\r
-                       0 smif-xt !   \ clear so we don't mess up later\r
-               THEN\r
-       THEN\r
-;\r
-               \r
-\ redefine conditionals to use smart mode\r
-: IF      smif{   postpone if     ; immediate\r
-: DO      smif{   postpone do     ; immediate\r
-: ?DO     smif{   postpone ?do    ; immediate\r
-: BEGIN   smif{   postpone begin  ; immediate\r
-: THEN    postpone then    }smif  ; immediate\r
-: REPEAT  postpone repeat  }smif  ; immediate\r
-: UNTIL   postpone until   }smif  ; immediate\r
-: LOOP    postpone loop    }smif  ; immediate\r
-: +LOOP   postpone +loop   }smif  ; immediate\r
+\ @(#) smart_if.fth 98/01/26 1.2
+\ Smart Conditionals
+\ Allow use of if, do, begin, etc.outside of colon definitions.
+\
+\ Thanks to Mitch Bradley for the idea.
+\
+\ Author: Phil Burk
+\ Copyright 1994 3DO, Phil Burk, Larry Polansky, David Rosenboom
+\
+\ Permission to use, copy, modify, and/or distribute this
+\ software for any purpose with or without fee is hereby granted.
+\
+\ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+\ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+\ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
+\ THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
+\ CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
+\ FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
+\ CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+\ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+anew task-smart_if.fth
+
+variable SMIF-XT    \ execution token for conditional code
+variable SMIF-DEPTH \ depth of nested conditionals
+
+: SMIF{   ( -- , if executing, start compiling, setup depth )
+    state @ 0=
+    IF
+        :noname smif-xt !
+        1 smif-depth !
+    ELSE
+        1 smif-depth +!
+    THEN
+;
+
+: }SMIF  ( -- , unnest, stop compiling, execute code and forget )
+    smif-xt @
+    IF
+        -1 smif-depth +!
+        smif-depth @ 0 <=
+        IF
+            postpone ;             \ stop compiling
+            smif-xt @ execute      \ execute conditional code
+            smif-xt @ >code dp !   \ forget conditional code
+            0 smif-xt !   \ clear so we don't mess up later
+        THEN
+    THEN
+;
+
+\ redefine conditionals to use smart mode
+: IF      smif{   postpone if     ; immediate
+: DO      smif{   postpone do     ; immediate
+: ?DO     smif{   postpone ?do    ; immediate
+: BEGIN   smif{   postpone begin  ; immediate
+: THEN    postpone then    }smif  ; immediate
+: REPEAT  postpone repeat  }smif  ; immediate
+: UNTIL   postpone until   }smif  ; immediate
+: LOOP    postpone loop    }smif  ; immediate
+: +LOOP   postpone +loop   }smif  ; immediate