--- gforth/extend.fs 2003/03/09 15:16:49 1.55 +++ gforth/extend.fs 2009/12/31 15:32:35 1.65 @@ -1,12 +1,12 @@ \ EXTEND.FS CORE-EXT Word not fully tested! 12may93jaw -\ Copyright (C) 1995,1998,2000,2003 Free Software Foundation, Inc. +\ Copyright (C) 1995,1998,2000,2003,2005,2007,2009 Free Software Foundation, Inc. \ This file is part of Gforth. \ Gforth is free software; you can redistribute it and/or \ 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. \ This program is distributed in the hope that it will be useful, @@ -15,8 +15,7 @@ \ GNU General Public License for more details. \ You should have received a copy of the GNU General Public License -\ along with this program; if not, write to the Free Software -\ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. +\ along with this program. If not, see http://www.gnu.org/licenses/. \ May be cross-compiled @@ -36,10 +35,12 @@ decimal \ !! 2value +[ifundef] 2literal : 2Literal ( compilation w1 w2 -- ; run-time -- w1 w2 ) \ double two-literal \G Compile appropriate code such that, at run-time, cell pair @i{w1, w2} are \G placed on the stack. Interpretation semantics are undefined. swap postpone Literal postpone Literal ; immediate restrict +[then] ' drop alias d>s ( d -- n ) \ double d_to_s @@ -48,8 +49,12 @@ decimal \G In ANS Forth u3 can only be a positive signed number. >r s>d >r abs -rot 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 nip swap - r> IF dnegate THEN ; + swap >r 0 d+ r> -rot r@ um/mod -rot r> um/mod + [ 1 -3 mod 0< ] [if] + -rot r> IF IF 1. d+ THEN dnegate ELSE drop THEN + [else] + nip swap r> IF dnegate THEN + [then] ; \ CASE OF ENDOF ENDCASE 17may93jaw @@ -92,8 +97,8 @@ decimal \ CONVERT 17may93jaw -: convert ( ud1 c-addr1 -- ud2 c-addr2 ) \ core-ext - \G OBSOLESCENT: superseded by @code{>number}. +: convert ( ud1 c-addr1 -- ud2 c-addr2 ) \ core-ext-obsolescent + \G Obsolescent: superseded by @code{>number}. char+ true >number drop ; \ ERASE 17may93jaw @@ -182,11 +187,11 @@ decimal \ EXPECT SPAN 17may93jaw -variable span ( -- c-addr ) \ core-ext +variable span ( -- c-addr ) \ core-ext-obsolescent \G @code{Variable} -- @i{c-addr} is the address of a cell that stores the \G length of the last string received by @code{expect}. OBSOLESCENT. -: expect ( c-addr +n -- ) \ core-ext +: expect ( c-addr +n -- ) \ core-ext-obsolescent \G Receive a string of at most @i{+n} characters, and store it \G in memory starting at @i{c-addr}. The string is \G displayed. Input terminates when the key is pressed or @@ -208,15 +213,7 @@ variable span ( -- c-addr ) \ core-ext \ defined afterwards) when executing the mark. : included-files-mark ( -- u ) - included-files 2@ nip - 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 ; + included-files @ ; \ 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 @@ -242,7 +239,7 @@ variable span ( -- c-addr ) \ core-ext : marker! ( mark -- ) \ 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! dup @ swap cell+ ( here rest-of-marker ) dup @ voclink ! cell+