--- gforth/extend.fs 2000/08/08 12:37:05 1.39 +++ gforth/extend.fs 2002/12/21 17:27:13 1.49 @@ -1,6 +1,6 @@ \ EXTEND.FS CORE-EXT Word not fully tested! 12may93jaw -\ Copyright (C) 1995,1998 Free Software Foundation, Inc. +\ Copyright (C) 1995,1998,2000 Free Software Foundation, Inc. \ This file is part of Gforth. @@ -16,7 +16,7 @@ \ 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., 675 Mass Ave, Cambridge, MA 02139, USA. +\ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. \ May be cross-compiled @@ -25,10 +25,11 @@ decimal \ .( 12may93jaw -: .( ( "ccc" -- ) \ core-ext dot-paren - \G Parse a string @i{ccc} delimited by a @code{)} (right - \G parenthesis). Display the string. This is often used to display - \G progress information during compilation; see examples below. +: .( ( compilation,interpretation "ccc" -- ) \ core-ext dot-paren + \G Compilation and interpretation semantics: Parse a string @i{ccc} + \G delimited by a @code{)} (right parenthesis). Display the + \G string. This is often used to display progress information during + \G compilation; see examples below. [char] ) parse type ; immediate \ VALUE 2>R 2R> 2R@ 17may93jaw @@ -43,6 +44,8 @@ decimal ' drop alias d>s ( d -- n ) \ double d_to_s : m*/ ( d1 n2 u3 -- dquot ) \ double m-star-slash + \G dquot=(d1*n2)/u3, with the intermediate result being triple-precision. + \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 @@ -70,11 +73,6 @@ decimal \ C" 17may93jaw -: (c") "lit ; - -: CLiteral - postpone (c") here over char+ allot place align ; immediate restrict - : C" ( compilation "ccc" -- ; run-time -- c-addr ) \ core-ext c-quote \G Compilation: parse a string @i{ccc} delimited by a @code{"} \G (double quote). At run-time, return @i{c-addr} which @@ -100,15 +98,12 @@ decimal \ ERASE 17may93jaw -: erase ( addr len -- ) \ core-ext - \G If @i{len}>0, clear all bits in each location of a memory region - \G of @i{len} address units starting at address @i{addr}. +: erase ( addr u -- ) \ core-ext + \G Clear all bits in @i{u} aus starting at @i{addr}. \ !! dependence on "1 chars 1 =" ( 0 1 chars um/mod nip ) 0 fill ; : blank ( c-addr u -- ) \ string - \G If @i{u}>0, store the character value for a space in each - \G location of a memory region - \G of @i{u} character units starting at address @i{c-addr}. + \G Store the space character into @i{u} chars starting at @i{c-addr}. bl fill ; \ SEARCH 02sep94py @@ -132,6 +127,7 @@ decimal \ SOURCE-ID SAVE-INPUT RESTORE-INPUT 11jun93jaw +[IFUNDEF] source-id : source-id ( -- 0 | -1 | fileid ) \ core-ext,file source-i-d \G Return 0 (the input source is the user input device), -1 (the \G input source is a string being processed by @code{evaluate}) or @@ -146,7 +142,8 @@ decimal >in @ loadfile @ if - loadfile @ file-position throw #TIB @ 1+ 0 d- \ !! bug for CRLF and EOF + loadfile @ file-position throw + [IFDEF] #fill-bytes #fill-bytes @ [ELSE] #tib @ 1+ [THEN] 0 d- else blk @ linestart @ @@ -180,7 +177,7 @@ decimal r> loadline ! >in ! false ; - +[THEN] \ This things we don't need, but for being complete... jaw \ EXPECT SPAN 17may93jaw @@ -239,7 +236,9 @@ variable span ( -- c-addr ) \ core-ext REPEAT drop \ remember udp - udp @ , ; + udp @ , + \ remember dyncode-ptr + here ['] noop , compile-prim1 finish-code ; : marker! ( mark -- ) \ reset included files count; resize will happen on next add-included-file @@ -266,6 +265,9 @@ variable span ( -- c-addr ) \ core-ext REPEAT drop \ restore udp and dp +[IFDEF] forget-dyncode + dup cell+ @ forget-dyncode 0= abort" gforth bug" +[THEN] @ udp ! dp ! \ clean up vocabulary stack 0 vp @ 0