"TOOLS Programming-Tools (without ASSEMBLER)"

tools
The ANS Forth defines some "Programming Tools", words to
inspect the stack (.S), memory (DUMP),
compiled code (SEE) and what words
are defined (WORDS).

There are also word that provide some precompiler support
and explicit acces to the CS-STACK.
Tektronix CTE %version: bln_mpt1!5.14 % GNU LGPL
[ANS]
* .S ( -- )

print the stack content in vertical nice format.
tries to show cell-stack and float-stack side-by-side,

Depending on configuration,
there are two parameter stacks: for integers and for
floating point operations. If both stacks are empty, .S
will display the message lt;stacks emptygt;.

If only the floating point stack is empty, .S displays
the integer stack items in one column, one item per line,
both in hex and in decimal like this (the first item is topmost):
 12345 HEX 67890 .S
    	424080 [00067890]
         12345 [00003039] ok

If both stacks ar not empty, .S displays both stacks, in two
columns, one item per line
 HEX 123456.78E90 ok
 DECIMAL 123456.78E90 .S
    	   291 [00000123]          1.234568E+95
    1164414608 [45678E90] ok
Confusing example? Remember that floating point input only works
when the BASE number is DECIMAL. The first number looks like
a floating point but it is a goodhex double integer too - the number
base is HEX. Thus it is accepted as a hex number. Second try
with a decimal base will input the floating point number.

If only the integer stack is empty, .S shows two columns, but
he first columns is called lt;stack emptygt;, and the
second column is the floating point stack, topmost item first.

tools ordinary primitive

* DUMP ( addr len -- )

show a hex-dump of the given area, if it's more than a screenful
it will ask using ?CR

You can easily cause a segmentation fault of something like that
by accessing memory that does not belong to the pfe-process.

tools ordinary primitive

* SEE ( "word" -- )

decompile word - tries to show it in re-compilable form.

(SEE) tries to display the word as a reasonable indented
source text. If you defined your own control structures or
use extended control-flow patterns, the indentation may be
suboptimal.
 simulate:
   : SEE  [COMPILE] ' (SEE) ; 

tools ordinary primitive

* WORDS ( -- )

uses CONTEXT and lists the words defined in that vocabulary.
usually the vocabulary to list is named directly in before.
 example:
    FORTH WORDS  or  LOADED WORDS

tools ordinary primitive

* AHEAD ( -- DP-mark ORIG-magic ) compile-only
 simulate:
   : AHEAD  MARK> (ORIG#) ;

tools immediate primitive

* BYE ( -- ) no-return

should quit the forth environment completly

tools ordinary primitive

* CS-PICK ( 2a 2b 2c ... n -- 2a 2b 2c ... 2a )

pick a value in the compilation-stack - note that the compilation
stack _can_ be seperate in some forth-implemenations. In PFE
the parameter-stack is used in a double-cell fashion, so CS-PICK
would 2PICK a DP-mark and a COMP-magic, see PICK

tools ordinary primitive

* CS-ROLL ( 2a 2b 2c ... n -- 2b 2c ... 2a )

roll a value in the compilation-stack - note that the compilation
stack _can_ be seperate in some forth-implemenations. In PFE
the parameter-stack is used in a double-cell fashion, so CS-ROLL
would 2ROLL a DP-mark and a COMP-magic, see ROLL

tools ordinary primitive

* FORGET ( "word" -- )
 simulate:
   : FORGET  [COMPILE] '  >NAME (FORGET) ; IMMEDIATE

tools ordinary primitive

* [ELSE] ( -- )

eat up everything upto and including the next [THEN]. count
nested [IF] ... [THEN] constructs. see [IF]
 this word provides a simple pre-compiler mechanism

tools immediate primitive

* [IF] ( flag -- )

check the condition in the CS-STACK. If true let the following
text flow into INTERPRET , otherwise eat up everything upto
and including the next [ELSE] or [THEN] . In case of
skipping, count nested [IF] ... [THEN] constructs.
 this word provides a simple pre-compiler mechanism

tools immediate primitive

[ANS] [THEN]

no special info, see general notes

tools immediate primitive

* ? ( addr -- )

Display the (integer) content of at address addr.
This word is sensitive to BASE
 simulate:
   : ?  @ . ;

tools ordinary primitive

ENVIRONMENT ENVIRONMENT TOOLS-EXT

no special info, see general notes

tools ordinary constant