Diff for /gforth/extend.fs between versions 1.60 and 1.70

version 1.60, 2007/07/06 12:54:56 version 1.70, 2011/12/31 15:29:25
Line 1 Line 1
 \ EXTEND.FS    CORE-EXT Word not fully tested!         12may93jaw  \ EXTEND.FS    CORE-EXT Word not fully tested!         12may93jaw
   
 \ Copyright (C) 1995,1998,2000,2003,2005 Free Software Foundation, Inc.  \ Copyright (C) 1995,1998,2000,2003,2005,2007,2009,2010,2011 Free Software Foundation, Inc.
   
 \ This file is part of Gforth.  \ This file is part of Gforth.
   
 \ Gforth is free software; you can redistribute it and/or  \ Gforth is free software; you can redistribute it and/or
 \ modify it under the terms of the GNU General Public License  \ modify it under the terms of the GNU General Public License
 \ as published by the Free Software Foundation; either version 2  \ as published by the Free Software Foundation, either version 3
 \ of the License, or (at your option) any later version.  \ of the License, or (at your option) any later version.
   
 \ This program is distributed in the hope that it will be useful,  \ This program is distributed in the hope that it will be useful,
Line 15 Line 15
 \ GNU General Public License for more details.  \ GNU General Public License for more details.
   
 \ You should have received a copy of the GNU General Public License  \ You should have received a copy of the GNU General Public License
 \ along with this program; if not, write to the Free Software  \ along with this program. If not, see http://www.gnu.org/licenses/.
 \ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.  
   
   
 \ May be cross-compiled  \ May be cross-compiled
Line 51  decimal Line 50  decimal
     >r s>d >r abs -rot      >r s>d >r abs -rot
     s>d r> xor r> swap >r >r dabs rot tuck um* 2swap um*      s>d r> xor r> swap >r >r dabs rot tuck um* 2swap um*
     swap >r 0 d+ r> -rot r@ um/mod -rot r> um/mod      swap >r 0 d+ r> -rot r@ um/mod -rot r> um/mod
     [ s" floored" environment? 0= throw ] [if]      [ 1 -3 mod 0< ] [if]
         -rot r> IF IF 1. d+ THEN dnegate ELSE drop THEN          -rot r> IF IF 1. d+ THEN dnegate ELSE drop THEN
     [else]      [else]
         nip swap r> IF dnegate THEN          nip swap r> IF dnegate THEN
Line 61  decimal Line 60  decimal
   
 \ just as described in dpANS5  \ just as described in dpANS5
   
 0 CONSTANT case ( compilation  -- case-sys ; run-time  -- ) \ core-ext  [ifundef] cs-drop
     immediate  : CS-DROP ( dest -- ) \ gforth
       dest? 2drop ;
   [then]
   
   : case ( compilation  -- case-sys ; run-time  -- ) \ core-ext
       postpone begin 0 ; immediate
   
   : ?of ( compilation  -- of-sys ; run-time  f -- ) \ gforth
       >r POSTPONE if r> ; immediate
   
 : of ( compilation  -- of-sys ; run-time x1 x2 -- |x1 ) \ core-ext  : of ( compilation  -- of-sys ; run-time x1 x2 -- |x1 ) \ core-ext
     \ !! the implementation does not match the stack effect      \ !! the implementation does not match the stack effect
     1+ >r      postpone over postpone = postpone ?of postpone drop ; immediate
     postpone over postpone = postpone if postpone drop  
     r> ; immediate  
   
 : endof ( compilation case-sys1 of-sys -- case-sys2 ; run-time  -- ) \ core-ext end-of  : endof ( compilation case-sys1 of-sys -- case-sys2 ; run-time  -- ) \ core-ext end-of
     >r postpone else r> ; immediate      >r postpone else 1 cs-roll r> 1+ ; immediate
   
   : contof ( compilation case-sys1 of-sys -- case-sys2 ; run-time  -- )
       \ like @code{endof}, but loops back to the @code{case}
       >r 1 cs-pick postpone again postpone then r> ; immediate
   
   : n-thens ( orig1 ... origu u -- )
       0 ?do postpone then loop ;
   
 : endcase ( compilation case-sys -- ; run-time x -- ) \ core-ext end-case  : endcase ( compilation case-sys -- ; run-time x -- ) \ core-ext end-case
     postpone drop      >r cs-drop postpone drop r> n-thens ; immediate
     0 ?do postpone then loop ; immediate  
   : nextcase ( compilation case-sys -- ; run-time x -- ) \ gforth-undocumented
       \ like ENDCASE, but start again from the beginning if this is
       \ reached by fallthrough
       >r postpone drop postpone again r> n-thens ; immediate
   
   
 \ C"                                                    17may93jaw  \ C"                                                    17may93jaw
   
Line 200  variable span ( -- c-addr ) \ core-ext-o Line 217  variable span ( -- c-addr ) \ core-ext-o
     \G editing capabilites are available. The length of the string is      \G editing capabilites are available. The length of the string is
     \G stored in @code{span}; it does not include the <return>      \G stored in @code{span}; it does not include the <return>
     \G character. OBSOLESCENT: superceeded by @code{accept}.      \G character. OBSOLESCENT: superceeded by @code{accept}.
       everyline
     0 rot over      0 rot over
     BEGIN ( maxlen span c-addr pos1 )      BEGIN ( maxlen span c-addr pos1 )
         key decode ( maxlen span c-addr pos2 flag )          xkey decode ( maxlen span c-addr pos2 flag )
         >r 2over = r> or          >r 2over = r> or
     UNTIL      UNTIL
     2 pick swap /string type      2 pick swap /string type
Line 214  variable span ( -- c-addr ) \ core-ext-o Line 232  variable span ( -- c-addr ) \ core-ext-o
 \ defined afterwards) when executing the mark.  \ defined afterwards) when executing the mark.
   
 : included-files-mark ( -- u )  : included-files-mark ( -- u )
     included-files 2@ nip      included-files @ ;
     blk @ 0=  
     if \ not input from blocks  
         source-id 1 -1 within  
         if \ input from file  
             1- \ do not include the last file (hopefully this is the  
                \ currently included file)  
         then  
     then ;    
   
 \ hmm, most of the saving appears to be pretty unnecessary: we could  \ hmm, most of the saving appears to be pretty unnecessary: we could
 \ derive the wordlists and the words that have to be kept from the  \ derive the wordlists and the words that have to be kept from the
Line 248  variable span ( -- c-addr ) \ core-ext-o Line 258  variable span ( -- c-addr ) \ core-ext-o
   
 : marker! ( mark -- )  : marker! ( mark -- )
     \ reset included files count; resize will happen on next add-included-file      \ reset included files count; resize will happen on next add-included-file
     included-files 2@ drop over @ included-files 2! cell+      included-files @ over @ min included-files ! cell+
     \ rest of marker!      \ rest of marker!
     dup @ swap cell+ ( here rest-of-marker )      dup @ swap cell+ ( here rest-of-marker )
     dup @ voclink ! cell+      dup @ voclink ! cell+

Removed from v.1.60  
changed lines
  Added in v.1.70


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>