--- gforth/savesys.fs 2002/09/14 08:20:20 1.4 +++ gforth/savesys.fs 2012/12/31 15:25:18 1.18 @@ -1,12 +1,12 @@ \ image dump 15nov94py -\ Copyright (C) 1995,1997 Free Software Foundation, Inc. +\ Copyright (C) 1995,1997,2003,2006,2007,2010,2011,2012 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,14 +15,15 @@ \ 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/. -: save-string-dict { addr1 u -- addr2 u } - here { addr2 } - u allot - addr1 addr2 u move - addr2 u ; +: delete-prefix ( c-addr1 u1 c-addr2 u2 -- c-addr3 u3 ) + \ if c-addr2 u2 is a prefix of c-addr1 u1, delete it + 2over 2over string-prefix? if + nip /string + else + 2drop + endif ; : update-image-included-files ( -- ) included-files 2@ { addr cnt } @@ -33,14 +34,20 @@ old-addr new-addr old-cnt 2* cells move cnt old-cnt U+DO - addr i 2* cells + 2@ save-string-dict + addr i 2* cells + 2@ + s" GFORTHDESTDIR" getenv delete-prefix save-mem-dict new-addr i 2* cells + 2! LOOP maxalign ; +: update-maintask ( -- ) + throw-entry main-task udp @ throw-entry next-task - /string move ; + : dump-fi ( addr u -- ) w/o bin create-file throw >r update-image-included-files + update-image-order + update-maintask here forthstart - forthstart 2 cells + ! forthstart begin \ search for start of file ("#! " at a multiple of 8)