--- gforth/cross.fs 1995/09/06 21:00:11 1.28 +++ gforth/cross.fs 1996/05/09 18:12:58 1.35 @@ -1,7 +1,23 @@ \ CROSS.FS The Cross-Compiler 06oct92py -\ $Id: cross.fs,v 1.28 1995/09/06 21:00:11 pazsan Exp $ \ Idea and implementation: Bernd Paysan (py) -\ Copyright 1992-94 by the GNU Forth Development Group + +\ Copyright (C) 1995 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 +\ of the License, or (at your option) any later version. + +\ This program is distributed in the hope that it will be useful, +\ but WITHOUT ANY WARRANTY; without even the implied warranty of +\ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +\ 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., 675 Mass Ave, Cambridge, MA 02139, USA. \ Log: \ changed in ; [ to state off 12may93jaw @@ -120,7 +136,7 @@ H -4 Constant :dovar -5 Constant :douser -6 Constant :dodefer --7 Constant :dostruc +-7 Constant :dofield -8 Constant :dodoes -9 Constant :doesjump @@ -389,7 +405,7 @@ Variable to-doc \ Target TAGS creation -s" TAGS" r/w create-file throw value tag-file-id +s" kernal.TAGS" r/w create-file throw value tag-file-id \ contains the file-id of the tags file Create tag-beg 2 c, 7F c, bl c, @@ -402,7 +418,7 @@ Create tag-bof 1 c, 0C c, loadfilename 2@ last-loadfilename 2@ d<> IF tag-bof count tag-file-id write-line throw - loadfilename 2@ 2dup + sourcefilename 2dup tag-file-id write-file throw last-loadfilename 2! s" ,0" tag-file-id write-line throw @@ -416,7 +432,7 @@ Create tag-bof 1 c, 0C c, tag-beg count tag-file-id write-file throw tlast @ >image count $1F and tag-file-id write-file throw tag-end count tag-file-id write-file throw - base @ decimal loadline @ 0 <# #s #> tag-file-id write-file throw + base @ decimal sourceline# 0 <# #s #> tag-file-id write-file throw \ >in @ 0 <# #s [char] , hold #> tag-file-id write-line throw s" ,0" tag-file-id write-line throw base ! @@ -483,7 +499,7 @@ ghost (loop) ghost (+loop) ghost (next) drop ghost unloop ghost ;S 2drop ghost lit ghost (compile) ghost ! 2drop drop -ghost (;code) ghost noop 2drop +ghost (does>) ghost noop 2drop ghost (.") ghost (S") ghost (ABORT") 2drop drop ghost ' @@ -571,7 +587,7 @@ Cond: [ restrict? state off ;Cond >TARGET Cond: DOES> restrict? - compile (;code) dodoes, tdoes @ ?dup IF @ T here H resolve THEN + compile (does>) dodoes, tdoes @ ?dup IF @ T here H resolve THEN ;Cond : DOES> dodoes, T here H !does depth T ] H ; @@ -678,6 +694,10 @@ Build: T 0 , H ; by Constant Builder Value +Build: T 0 A, H ; +by Constant +Builder AValue + Build: ( -- ) compile noop ; DO: ( ghost -- ) ABORT" CROSS: Don't execute" ;DO Builder Defer @@ -695,7 +715,7 @@ Build: >r rot r@ nalign dup T , H ( a + swap r> nalign ; DO: T @ H + ;DO Builder Field -by Field :dostruc resolve +by Field :dofield resolve : struct T 0 1 chars H ; : end-struct T 2Constant H ; @@ -857,13 +877,22 @@ Cond: [ELSE] [ELSE] ;Cond bigendian Constant bigendian -Create magic s" gforth00" here over allot swap move +Create magic s" Gforth10" here over allot swap move -[char] 1 bigendian + cell + magic 7 + c! +char 1 bigendian + cell + magic 7 + c! -: save-cross ( "name" -- ) - bl parse ." Saving to " 2dup type +: save-cross ( "image-name" "binary-name" -- ) + bl parse ." Saving to " 2dup type cr w/o bin create-file throw >r + s" #! " r@ write-file throw + bl parse r@ write-file throw + s" -i" r@ write-file throw + #lf r@ emit-file throw + r@ dup file-position throw drop 8 mod 8 swap ( file-id limit index ) + ?do + bl over emit-file throw + loop + drop magic 8 r@ write-file throw \ write magic image @ there r@ write-file throw \ write image bit$ @ there 1- cell>bit rshift 1+