--- gforth/cross.fs 1995/11/30 18:01:47 1.32 +++ gforth/cross.fs 1996/09/24 19:15:02 1.40 @@ -173,7 +173,7 @@ bigendian \ MakeKernal 12dec92py >MINIMAL -: makekernal ( targetsize -- targetsize ) +: makekernel ( targetsize -- targetsize ) bit$ over 1- cell>bit rshift 1+ initmem image over initmem tdp off ; @@ -194,7 +194,7 @@ CREATE Bittable 80 c, 40 c, 20 c, 10 c, : align+ ( taddr -- rest ) cell tuck 1- and - [ cell 1- ] Literal and ; : cfalign+ ( taddr -- rest ) - \ see kernal.fs:cfaligned + \ see kernel.fs:cfaligned float tuck 1- and - [ float 1- ] Literal and ; >TARGET @@ -202,7 +202,7 @@ CREATE Bittable 80 c, 40 c, 20 c, 10 c, \ assumes cell alignment granularity (as GNU C) : cfaligned ( taddr1 -- taddr2 ) - \ see kernal.fs + \ see kernel.fs dup cfalign+ + ; >CROSS @@ -278,9 +278,8 @@ Variable last-ghost : gfind ( string -- ghost true/1 / string false ) \ searches for string in word-list ghosts -\ !! wouldn't it be simpler to just use search-wordlist ? ae dup count [ ' ghosts >body ] ALiteral search-wordlist - dup IF >r >body nip r> THEN ; + dup IF >r >body nip r> THEN ; VARIABLE Already @@ -357,11 +356,11 @@ variable ResolveFlag VARIABLE ^imm >TARGET -: immediate 20 flag! +: immediate 40 flag! ^imm @ @ dup = IF drop EXIT THEN <> ABORT" CROSS: Cannot immediate a unresolved word" ^imm @ ! ; -: restrict 40 flag! ; +: restrict 20 flag! ; >CROSS \ ALIAS2 ansforth conform alias 9may93jaw @@ -382,11 +381,11 @@ VARIABLE ^imm s" crossdoc.fd" r/w create-file throw value doc-file-id \ contains the file-id of the documentation file -: \G ( -- ) +: T-\G ( -- ) source >in @ /string doc-file-id write-line throw - source >in ! drop ; immediate + postpone \ ; -Variable to-doc +Variable to-doc to-doc on : cross-doc-entry ( -- ) to-doc @ tlast @ 0<> and \ not an anonymous (i.e. noname) header @@ -399,13 +398,13 @@ Variable to-doc [char] ) parse doc-file-id write-file throw s" )" doc-file-id write-file throw [char] \ parse 2drop - POSTPONE \g + T-\G >in ! - THEN to-doc on ; + THEN ; \ Target TAGS creation -s" TAGS" r/w create-file throw value tag-file-id +s" kernel.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, @@ -464,7 +463,6 @@ VARIABLE ;Resolve 1 cells allot >TARGET : Alias ( cfa -- ) \ name - dup 0< IF to-doc off THEN (THeader over resolve T A, H 80 flag! ; >CROSS @@ -528,6 +526,8 @@ Cond: chars ;Cond : alit, ( n -- ) compile lit T A, H ; >TARGET +Cond: \G T-\G ;Cond + Cond: Literal ( n -- ) restrict? lit, ;Cond Cond: ALiteral ( n -- ) restrict? alit, ;Cond @@ -569,6 +569,9 @@ Cond: [Char] ( "" -- ) restrict (THeader ;Resolve ! there ;Resolve cell+ ! docol, depth T ] H ; +: :noname ( -- colon-sys ) + T align H there docol, depth T ] H ; + Cond: EXIT ( -- ) restrict? compile ;S ;Cond Cond: ?EXIT ( -- ) 1 abort" CROSS: using ?exit" ;Cond @@ -703,6 +706,10 @@ DO: ( ghost -- ) ABORT" CROSS: Don't exe Builder Defer by Defer :dodefer resolve +Build: ( inter comp -- ) swap T immediate A, A, H ; +DO: ( ghost -- ) ABORT" CROSS: Don't execute" ;DO +Builder interpret/compile: + \ Sturctures 23feb95py >CROSS @@ -877,13 +884,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+ @@ -905,9 +921,8 @@ cell constant cell \ include bug5.fs \ only forth also minimal definitions -: \ postpone \ ; -: \G postpone \G ; -: ( postpone ( ; +: \ postpone \ ; immediate +: ( postpone ( ; immediate : include bl word count included ; : .( [char] ) parse type ; : cr cr ; @@ -921,7 +936,12 @@ only forth also minimal definitions : hex hex ; : tudp T tudp H ; -: tup T tup H ; minimal +: tup T tup H ; + +: doc-off false T to-doc H ! ; +: doc-on true T to-doc H ! ; + +minimal \ for debugging... : order order ;