--- gforth/stuff.fs 2006/12/28 14:52:20 1.52 +++ gforth/stuff.fs 2007/02/23 22:33:21 1.55 @@ -1,6 +1,6 @@ \ miscelleneous words -\ Copyright (C) 1996,1997,1998,2000,2003,2004,2005 Free Software Foundation, Inc. +\ Copyright (C) 1996,1997,1998,2000,2003,2004,2005,2006 Free Software Foundation, Inc. \ This file is part of Gforth. @@ -355,22 +355,36 @@ previous \ safe output redirection -: to-outfile-id ( file-id -- ) - to outfile-id ; +: outfile-execute ( ... xt file-id -- ... ) \ gforth + \G execute @i{xt} with the output of @code{type} etc. redirected to + \G @i{file-id}. + outfile-id { oldfid } try + to outfile-id execute 0 + restore + oldfid to outfile-id + endtry + throw ; + +: infile-execute ( ... xt file-id -- ... ) \ gforth + \G execute @i{xt} with the input of @code{key} etc. redirected to + \G @i{file-id}. + infile-id { oldfid } try + to infile-id execute 0 + restore + oldfid to infile-id + endtry + throw ; + +\ safe BASE wrapper + +: base-execute ( i*x xt u -- j*x ) \ gforth + \G execute @i{xt} with the content of @code{BASE} being @i{u}, and + \G restoring the original @code{BASE} afterwards. + base @ { oldbase } \ use local, because TRY blocks the return stack + try + base ! execute 0 + restore + oldbase base ! + endtry + throw ; -: >outfile ( file-id -- r:old-file-id ) - ]] outfile-id >r try to-outfile-id [[ ; immediate compile-only - -: outfile< ( r:old-file-id -- ) - 0 ]] literal recover endtry r> to-outfile-id throw [[ -; immediate compile-only - -: to-infile-id ( file-id -- ) - to infile-id ; - -: >infile ( file-id -- r:old-file-id ) - ]] infile-id >r try to-infile-id [[ ; immediate compile-only - -: infile< ( r:old-file-id -- ) - 0 ]] literal recover endtry r> to-infile-id throw [[ -; immediate compile-only