version 1.18, 2000/09/23 15:47:12
|
version 1.28, 2003/03/09 15:17:06
|
Line 1
|
Line 1
|
\ require.fs |
\ require.fs |
|
|
\ Copyright (C) 1995,1996,1997,1998,2000 Free Software Foundation, Inc. |
\ Copyright (C) 1995,1996,1997,1998,2000,2003 Free Software Foundation, Inc. |
|
|
\ This file is part of Gforth. |
\ This file is part of Gforth. |
|
|
Line 23
|
Line 23
|
create included-files 0 , 0 , ( pointer to and count of included files ) |
create included-files 0 , 0 , ( pointer to and count of included files ) |
\ note: these names must not contain a "/" or "\"; otherwise a part of |
\ note: these names must not contain a "/" or "\"; otherwise a part of |
\ that name might be used when expanding "./" (see expandtopic). |
\ that name might be used when expanding "./" (see expandtopic). |
here ," *a file*" dup c@ swap 1 + swap |
here ," *somewhere*" dup c@ swap 1 + swap |
here ," *a block*" dup c@ swap 1 + swap |
, A, here 2 cells - |
here ," *evaluated string*" dup c@ swap 1 + swap |
create image-included-files 1 , A, ( pointer to and count of included files ) |
here ," *the terminal*" dup c@ swap 1 + swap |
|
, A, , A, , A, , A, here 8 cells - |
|
create image-included-files 4 , A, ( pointer to and count of included files ) |
|
\ included-files points to ALLOCATEd space, while image-included-files |
\ included-files points to ALLOCATEd space, while image-included-files |
\ points to ALLOTed objects, so it survives a save-system |
\ points to ALLOTed objects, so it survives a save-system |
|
|
Line 38 create image-included-files 4 , A, ( poi
|
Line 35 create image-included-files 4 , A, ( poi
|
\G loaded. If the current input source is no (stream) file, the |
\G loaded. If the current input source is no (stream) file, the |
\G result is undefined. In Gforth, the result is valid during the |
\G result is undefined. In Gforth, the result is valid during the |
\G whole seesion (but not across @code{savesystem} etc.). |
\G whole seesion (but not across @code{savesystem} etc.). |
loadfilename# @ loadfilename#>str ; |
loadfilename 2@ ; |
|
|
: sourceline# ( -- u ) \ gforth sourceline-number |
: sourceline# ( -- u ) \ gforth sourceline-number |
\G The line number of the line that is currently being interpreted |
\G The line number of the line that is currently being interpreted |
Line 60 create image-included-files 4 , A, ( poi
|
Line 57 create image-included-files 4 , A, ( poi
|
\G @file{./foo.fs} |
\G @file{./foo.fs} |
included-files 2@ 0 |
included-files 2@ 0 |
?do ( c-addr u addr ) |
?do ( c-addr u addr ) |
dup >r 2@ 2over compare 0= |
dup >r 2@ 2over str= |
if |
if |
2drop rdrop unloop |
2drop rdrop unloop |
true EXIT |
true EXIT |
Line 75 create image-included-files 4 , A, ( poi
|
Line 72 create image-included-files 4 , A, ( poi
|
2/ cell / included-files 2! |
2/ cell / included-files 2! |
2! ; |
2! ; |
|
|
|
has? new-input [IF] |
: included1 ( i*x file-id c-addr u -- j*x ) \ gforth |
: included1 ( i*x file-id c-addr u -- j*x ) \ gforth |
\G Include the file file-id with the name given by @var{c-addr u}. |
\G Include the file file-id with the name given by @var{c-addr u}. |
loadfilename# @ >r |
save-mem 2dup add-included-file ( file-id ) |
save-mem add-included-file ( file-id ) |
['] read-loop execute-parsing-named-file ; |
included-files 2@ nip 1- loadfilename# ! |
[ELSE] |
|
: included1 ( i*x file-id c-addr u -- j*x ) \ gforth |
|
\G Include the file file-id with the name given by @var{c-addr u}. |
|
save-mem 2dup loadfilename>r |
|
add-included-file ( file-id ) |
['] include-file2 catch |
['] include-file2 catch |
r> loadfilename# ! |
r>loadfilename |
throw ; |
throw ; |
|
[THEN] |
|
|
: included ( i*x c-addr u -- j*x ) \ file |
: included ( i*x c-addr u -- j*x ) \ file |
\G @code{include-file} the file whose name is given by the string |
\G @code{include-file} the file whose name is given by the string |
\G @var{c-addr u}. |
\G @var{c-addr u}. |
Line 135 create image-included-files 4 , A, ( poi
|
Line 138 create image-included-files 4 , A, ( poi
|
\ REPEAT |
\ REPEAT |
\ drop ; |
\ drop ; |
|
|
\ : loadfilename#>str ( n -- adr len ) |
|
\ \ this converts the filenumber into the string |
|
\ loadfilenamecount @ swap - |
|
\ needs^ @ |
|
\ swap 0 ?DO dup 0= IF LEAVE THEN @ LOOP |
|
\ dup IF cell+ count ELSE drop s" NOT FOUND" THEN ; |
|
|
|
: loadfilename#>str ( n -- adr len ) |
|
included-files 2@ drop swap 2* cells + 2@ ; |
|
|
|
: .strings ( addr u -- ) \ gforth |
: .strings ( addr u -- ) \ gforth |
\G list the strings from an array of string descriptors at addr |
\G list the strings from an array of string descriptors at addr |
\G with u entries, one per line. |
\G with u entries, one per line. |
Line 153 create image-included-files 4 , A, ( poi
|
Line 146 create image-included-files 4 , A, ( poi
|
|
|
: .included ( -- ) \ gforth |
: .included ( -- ) \ gforth |
\G list the names of the files that have been @code{included} |
\G list the names of the files that have been @code{included} |
included-files 2@ .strings ; |
included-files 2@ 2 cells under+ 1- .strings ; |
|
|
\ contains tools/newrequire.fs |
|
\ \I $Id$ |
|
|
|