| |
|
| \ Ideas: Level should be a stack |
\ Ideas: Level should be a stack |
| |
|
| |
require look.fs |
| require termsize.fs |
require termsize.fs |
| |
require wordinfo.fs |
| |
[IFUNDEF] .name : .name name>string type space ; [THEN] |
| |
|
| decimal |
decimal |
| |
|
| |
|
| : nl nlflag on ; |
: nl nlflag on ; |
| : (nl) nlcount |
: (nl) nlcount |
| XPos @ Level @ = ?Exit |
XPos @ Level @ = IF EXIT THEN \ ?Exit |
| C-Formated @ IF |
C-Formated @ IF |
| C-Output @ |
C-Output @ |
| IF C-Clearline @ IF cols XPos @ - spaces |
IF C-Clearline @ IF cols XPos @ - spaces |
| THEN |
THEN |
| cell+ ; |
cell+ ; |
| |
|
| : c-s" |
: .name-without ( addr -- addr ) |
| count 2dup + aligned -rot |
\ prints a name without () e.g. (+LOOP) or (s") |
| Display? |
dup 1 cells - @ look |
| IF [char] S cemit [char] " cemit bl cemit 0 .string |
IF name>string over c@ '( = IF 1 /string THEN |
| [char] " cemit bl cemit |
2dup + 1- c@ ') = IF 1- THEN .struc ELSE drop |
| ELSE 2drop |
|
| THEN ; |
|
| |
|
| : c-." |
|
| count 2dup + aligned -rot |
|
| Display? |
|
| IF [char] . cemit |
|
| [char] " cemit bl cemit 0 .string |
|
| [char] " cemit bl cemit |
|
| ELSE 2drop |
|
| THEN ; |
THEN ; |
| |
|
| : c-c" |
: c-c" |
| |
Display? IF nl .name-without THEN |
| count 2dup + aligned -rot |
count 2dup + aligned -rot |
| Display? |
Display? |
| IF [char] C cemit [char] " cemit bl cemit 0 .string |
IF bl cemit 0 .string |
| [char] " cemit bl cemit |
[char] " cemit bl cemit |
| ELSE 2drop |
ELSE 2drop |
| THEN ; |
THEN ; |
| : c-for |
: c-for |
| Display? IF nl S" FOR" .struc level+ THEN ; |
Display? IF nl S" FOR" .struc level+ THEN ; |
| |
|
| : .name-without |
|
| \ prints a name without () e.g. (+LOOP) |
|
| dup 1 cells - @ look IF name>string 1 /string 1- .struc ELSE drop THEN ; |
|
| |
|
| : c-loop |
: c-loop |
| Display? IF level- nl .name-without bl cemit nl THEN |
Display? IF level- nl .name-without bl cemit nl THEN |
| DebugBranch cell+ |
DebugBranch cell+ |
| |
|
| CREATE C-Table |
CREATE C-Table |
| ' lit A, ' c-lit A, |
' lit A, ' c-lit A, |
| ' (s") A, ' c-s" A, |
' (s") A, ' c-c" A, |
| ' (.") A, ' c-." A, |
' (.") A, ' c-c" A, |
| ' "lit A, ' c-c" A, |
' "lit A, ' c-c" A, |
| |
[IFDEF] (c") ' (c") A, ' c-c" A, [THEN] |
| ' (do) A, ' c-do A, |
' (do) A, ' c-do A, |
| ' (+do) A, ' c-do A, |
[IFDEF] (+do) ' (+do) A, ' c-do A, [THEN] |
| ' (u+do) A, ' c-do A, |
[IFDEF] (u+do) ' (u+do) A, ' c-do A, [THEN] |
| ' (-do) A, ' c-do A, |
[IFDEF] (-do) ' (-do) A, ' c-do A, [THEN] |
| ' (u-do) A, ' c-do A, |
[IFDEF] (u-do) ' (u-do) A, ' c-do A, [THEN] |
| ' (?do) A, ' c-?do A, |
' (?do) A, ' c-?do A, |
| ' (for) A, ' c-for A, |
' (for) A, ' c-for A, |
| ' ?branch A, ' c-?branch A, |
' ?branch A, ' c-?branch A, |
| ' branch A, ' c-branch A, |
' branch A, ' c-branch A, |
| ' (loop) A, ' c-loop A, |
' (loop) A, ' c-loop A, |
| ' (+loop) A, ' c-loop A, |
' (+loop) A, ' c-loop A, |
| ' (s+loop) A, ' c-loop A, |
[IFDEF] (s+loop) ' (s+loop) A, ' c-loop A, [THEN] |
| ' (-loop) A, ' c-loop A, |
[IFDEF] (-loop) ' (-loop) A, ' c-loop A, [THEN] |
| ' (next) A, ' c-loop A, |
' (next) A, ' c-loop A, |
| ' ;s A, ' c-exit A, |
' ;s A, ' c-exit A, |
| ' (does>) A, ' c-does> A, |
' (does>) A, ' c-does> A, |
| if |
if |
| seedoes EXIT |
seedoes EXIT |
| then |
then |
| dup forthstart u< |
dup xtprim? |
| if |
if |
| seecode EXIT |
seecode EXIT |
| then |
then |
| docon: of seecon endof |
docon: of seecon endof |
| docol: of seecol endof |
docol: of seecol endof |
| dovar: of seevar endof |
dovar: of seevar endof |
| |
[ [IFDEF] douser: ] |
| douser: of seeuser endof |
douser: of seeuser endof |
| |
[ [THEN] ] |
| |
[ [IFDEF] dodefer: ] |
| dodefer: of seedefer endof |
dodefer: of seedefer endof |
| |
[ [THEN] ] |
| |
[ [IFDEF] dofield: ] |
| dofield: of seefield endof |
dofield: of seefield endof |
| |
[ [THEN] ] |
| over >body of seecode endof |
over >body of seecode endof |
| 2drop abort" unknown word type" |
2drop abort" unknown word type" |
| ENDCASE ; |
ENDCASE ; |