version 1.24, 2003/01/20 19:17:59
|
version 1.30, 2006/01/31 17:08:07
|
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 77 create image-included-files 4 , A, ( poi
|
Line 74 create image-included-files 4 , A, ( poi
|
|
|
has? new-input [IF] |
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}. |
save-mem 2dup add-included-file ( file-id ) |
save-mem 2dup add-included-file |
['] include-file2 catch |
includefilename 2@ 2>r 2dup includefilename 2! |
throw ; |
['] read-loop execute-parsing-named-file |
|
2r> includefilename 2! ; |
[ELSE] |
[ELSE] |
: 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 2@ 2>r |
save-mem 2dup loadfilename>r |
save-mem 2dup loadfilename 2! |
includefilename 2@ 2>r 2dup includefilename 2! |
add-included-file ( file-id ) |
add-included-file ( file-id ) |
['] include-file2 catch |
['] include-file2 catch |
2r> loadfilename 2! |
2r> includefilename 2! r>loadfilename |
throw ; |
throw ; |
[THEN] |
[THEN] |
|
|
Line 97 has? new-input [IF]
|
Line 95 has? new-input [IF]
|
\G @var{c-addr u}. |
\G @var{c-addr u}. |
open-fpath-file throw included1 ; |
open-fpath-file throw included1 ; |
|
|
: required ( i*x addr u -- j*x ) \ gforth |
: required ( i*x addr u -- i*x ) \ gforth |
\G @code{include-file} the file with the name given by @var{addr |
\G @code{include-file} the file with the name given by @var{addr |
\G u}, if it is not @code{included} (or @code{required}) |
\G u}, if it is not @code{included} (or @code{required}) |
\G already. Currently this works by comparing the name of the file |
\G already. Currently this works by comparing the name of the file |
Line 151 has? new-input [IF]
|
Line 149 has? new-input [IF]
|
|
|
: .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 ; |