sandbox/doc/fst83/fst83-12.txt

1189 lines
48 KiB
Plaintext

12. REQUIRED WORD SET
12. REQUIRED WORD SET
12.1 The Required Word Set Layers
The words of the Required Word Set are grouped to show like
characteristics. No implementation requirements should be
inferred from this grouping.
Nucleus layer
! * */ */MOD + +! - / /MOD 0< 0= 0> 1+ 1- 2+
2- 2/ < = > >R ?DUP @ ABS AND C! C@ CMOVE
CMOVE> COUNT D+ D< DEPTH DNEGATE DROP DUP EXECUTE
EXIT FILL I J MAX MIN MOD NEGATE NOT OR OVER PICK
R> R@ ROLL ROT SWAP U< UM* UM/MOD XOR
Device layer
BLOCK BUFFER CR EMIT EXPECT FLUSH KEY SAVE-BUFFERS
SPACE SPACES TYPE UPDATE
Interpreter layer
# #> #S #TIB ' ( -TRAILING . .( <# >BODY >IN
ABORT BASE BLK CONVERT DECIMAL DEFINITIONS FIND
FORGET FORTH FORTH-83 HERE HOLD LOAD PAD QUIT SIGN
SPAN TIB U. WORD
Compiler layer
+LOOP , ." : ; ABORT" ALLOT BEGIN COMPILE CONSTANT
CREATE DO DOES> ELSE IF IMMEDIATE LEAVE LITERAL LOOP
REPEAT STATE THEN UNTIL VARIABLE VOCABULARY WHILE [
['] [COMPILE] ]
27
12. REQUIRED WORD SET
12.2 The Required Word Set Glossary
! 16b addr -- 79 "store"
16b is stored at addr.
# +d1 -- +d2 79 "sharp"
The remainder of +d1 divided by the value of BASE is
converted to an ASCII character and appended to the output
string toward lower memory addresses. +d2 is the quotient
and is maintained for further processing. Typically used
between <# and #> .
#> 32b -- addr +n 79 "sharp-greater"
Pictured numeric output conversion is ended dropping 32b.
addr is the address of the resulting output string. +n is
the number of characters in the output string. addr and +n
together are suitable for TYPE .
#S +d -- 0 0 29 "sharp-s"
+d is converted appending each resultant character into the
pictured numeric output string until the quotient (see: # )
is zero. A single zero is added to the output string if the
number was initially zero. Typically used between <# and
#> .
#TIB -- addr U,83 "number-t-i-b"
The address of a variable containing the number of bytes in
the text input buffer. #TIB is accessed by WORD when BLK is
zero. {{0..capacity of TIB}} See: "input stream"
' -- addr M,83 "tick"
Used in the form:
' <name>
addr is the compilation address of <name>. An error
condition exists if <name> is not found in the currently
active search order.
( -- I,M,83 "paren"
-- (compiling)
Used in the form:
( ccc)
The characters ccc, delimited by ) (closing parenthesis),
are considered comments. Comments are not otherwise
processed. The blank following ( is not part of ccc. ( may
be freely used while interpreting or compiling. The number
of characters in ccc may be zero to the number of characters
remaining in the input stream up to the closing parenthesis.
* w1 w2 -- w3 79 "times"
w3 is the least-significant 16 bits of the arithmetic
product of w1 times w2.
28
12. REQUIRED WORD SET
*/ n1 n2 n3 -- n4 83 "times-divide"
n1 is first multiplied by n2 producing an intermediate 32-
bit result. n4 is the floor of the quotient of the
intermediate 32-bit result divided by the divisor n3. The
product of n1 times n2 is maintained as an intermediate 32-
bit result for greater precision than the otherwise
equivalent sequence: n1 n2 * n3 / . An error condition
results if the divisor is zero or if the quotient falls
outside of the range {-32,768..32,767}. See: "division,
floored"
*/MOD n1 n2 n3 -- n4 n5 83 "times-divide-mod"
n1 is first multiplied by n2 producing an intermediate 32-
bit result. n4 is the remainder and n5 is the floor of the
quotient of the intermediate 32-bit result divided by the
divisor n3. A 32-bit intermediate product is used as for
*/ . n4 has the same sign as n3 or is zero. An error
condition results if the divisor is zero or if the quotient
falls outside of the range {-32,768..32,767}. See:
"division, floored"
+ w1 w2 -- w3 79 "plus"
w3 is the arithmetic sum of w1 plus w2.
+! w1 addr -- 79 "plus-store"
w1 is added to the w value at addr using the convention for
+ . This sum replaces the original value at addr.
+LOOP n -- C,I,83 "plus-loop"
sys -- (compiling)
n is added to the loop index. If the new index was
incremented across the boundary between limit-1 and limit
then the loop is terminated and loop control parameters are
discarded. When the loop is not terminated, execution
continues to just after the corresponding DO . sys is
balanced with its corresponding DO . See: DO
, 16b -- 79 "comma"
ALLOT space for 16b then store 16b at HERE 2- .
- w1 w2 -- w3 79 "minus"
w3 is the result of subtracting w2 from w1.
-TRAILING addr +n1 -- addr +n2 79 "dash-trailing"
The character count +n1 of a text string beginning at addr
is adjusted to exclude trailing spaces. If +n1 is zero,
then +n2 is also zero. If the entire string consists of
spaces, then +n2 is zero.
. n -- M,79 "dot"
The absolute value of n is displayed in a free field format
with a leading minus sign if n is negative.
29
12. REQUIRED WORD SET
." -- C,I,83 "dot-quote"
-- (compiling)
Used in the form:
." ccc"
Later execution will display the characters ccc up to but
not including the delimiting " (close-quote). The blank
following ." is not part of ccc.
.( -- I,M,83 "dos-paren"
-- (compiling)
Used in the form:
.( ccc)
The characters ccc up to but not including the delimiting )
(closing parenthesis) are displayed. The blank following .(
is not part of ccc.
/ n1 n2 -- n3 83 "divide"
n3 is the floor of the quotient of n1 divided by the divisor
n2. An error condition results if the divisor is zero or if
the quotient falls outside of the range {-32,768..32,767}.
See: "division, floored"
/MOD n1 n2 -- n3 n4 83 "divide-mod"
n3 is the remainder and n4 the floor of the quotient of n1
divided by the divisor n2. n3 has the same sign as n2 or is
zero. An error condition results if the divisor is zero or
if the quotient falls outside of the range
{-32,768..32,767}. See: "division, floored"
0< n -- flag 83 "zero-less"
flag is true if n is less than zero (negative).
0= w -- flag 83 "zero-equals"
flag is true if w is zero.
0> n -- flag 83 "zero-greater"
flag is true if n is greater than zero.
1+ w1 -- w2 79 "one-plus"
w2 is the result of adding one to w1 according to the
operations of + .
1- w1 -- w2 79 "one-minus"
w2 is the result of subtracting one from w1 according to the
operation of - .
2+ w1 -- w2 79 "two-plus"
w2 is the result of adding two to w1 according to the
operation of + .
2- w1 -- w2 79 "two-minus"
w2 is the result of subtracting two from w1 according to the
operation of - .
30
12. REQUIRED WORD SET
2/ n1 -- n2 83 "two-divide"
n2 is the result of arithmetically shifting n1 right one
bit. The sign is included in the shift and remains
unchanged.
: -- sys M,79 "colon"
A defining word executed in the form:
: <name> ... ;
Create a word definition for <name> in the compilation
vocabulary and set compilation state. The search order is
changed so that the first vocabulary in the search order is
changed so that the first vocabulary in the search order is
replaced by the compilation vocabulary. The compilation
vocabulary is unchanged. The text from the input stream is
subsequently compiled. <name> is called a "colon
definition". The newly created word definition for <name>
cannot be found in the dictionary until the corresponding ;
or ;CODE is successfully processed.
An error condition exists if a word is not found and cannot
be converted to a number or if, during compilation from mass
storage, the input stream is exhausted before encountering ;
or ;CODE . sys is balanced with its corresponding ; . See:
"compilation" "9.4 Compilation"
; -- C,I,79 "semi-colon"
sys -- (compiling)
Stops compilation of a colon definition, allows the <name>
of this colon definition to be found in the dictionary, sets
interpret state and compiles EXIT (or a system dependent
word which performs an equivalent function). sys is
balanced with its corresponding : . See: EXIT : "stack,
return" "9.4 Compilation"
< n1 n2 -- flag 83 "less-than"
flag is true if n1 is less than n2.
-32678 32767 < must return true.
-32768 0 < must return true.
<# -- 79 "less-sharp"
Initialize pictured numeric output conversion. The words:
# #> #S <# HOLD SIGN
can be used to specify the conversion of a double number
into an ASCII text string stored in right-to-left order.
= w1 w2 -- flag 83 "equals"
flag is true if w1 is equal to w2.
> n1 n2 -- flag 83 "greater-than"
flag is true if n1 is greater than n2.
-32768 32767 > must return false.
-32768 0 > must return false.
31
12. REQUIRED WORD SET
>BODY addr1 -- addr2 83 "to-body"
addr2 is the parameter field address corresponding to the
compilation address addr1. See: "9.2 Addressable Memory"
>IN -- addr U,79 "to-in"
The address of a variable which contains the present
character offset within the input stream {{0..the number of
characters in the input stream}}. See: WORD
>R 16b -- C,79 "to-r"
Transfers 16b to the return stack. See "9.3 Return Stack"
?DUP 16b -- 16b 16b 79 "question-dupe"
or 0 -- 0
Duplicate 16b if it is non-zero.
@ addr -- 16b 79 "fetch"
16b is the value at addr.
ABORT 79
Clears the data stack and performs the function of QUIT .
No message is displayed.
ABORT" flag -- C,I,83 "abort-quote"
-- (compiling)
Used in the form:
flag ABORT" ccc"
When later executed, if flag is true the characters ccc,
delimited by " (close-quote), are displayed and then a
system dependent error abort sequence, including the
function of ABORT , is performed. If flag is false, the
flag is dropped and execution continues. The blank
following ABORT" is not part of ccc.
ABS n -- u 79 "absolute"
u is the absolute value of n. If n is -32,768 then u is the
same value. See: "arithmetic, two's complement"
ALLOT w -- 79
Allocates w bytes in the dictionary. The address of the
next available dictionary entry is updated accordingly.
AND 16b1 16b2 -- 16b3 79
16b3 is the bit-by-bit logical 'and' of 16b1 with 16b2.
BASE -- addr U,83
The address of a variable containing the current numeric
conversion radix. {{2..72}}
32
12. REQUIRED WORD SET
BEGIN -- C,I,79
-- sys (compiling)
Used in the form:
BEGIN ... flag UNTIL
or
BEGIN ... flag WHILE ... REPEAT
BEGIN marks the start of a word sequence for repetitive
execution. A BEGIN-UNTIL loop will be repeated until flag
is true. A BEGIN-WHILE-REPEAT will be repeated until flag
is false. The words after UNTIL or REPEAT will be executed
when either loop is finished. sys is balanced with its
corresponding UNTIL or WHILE . See: "9.9 Control
Structures"
BLK -- addr U,79 "b-l-k"
The address of a variable containing the number of the mass
storage block being interpreted as the input stream. If the
value of BLK is zero the input stream is taken from the text
input buffer. {{0..the number of blocks available -1}}
See: TIB "input stream"
BLOCK u -- addr M,83
addr is the address of the assigned buffer of the first byte
of block u. If the block occupying that buffer is not block
u and has been UPDATEed it is transferred to mass storage
before assigning the buffer. If block u is not already in
memory, it is transferred from mass storage into an assigned
block buffer. A block may not be assigned to more than one
buffer. If u is not an available block number, an error
condition exists. Only data within the last buffer
referenced by BLOCK or BUFFER is valid. The contents of a
block buffer must not be changed unless the change may be
transferred to mass storage.
BUFFER u -- addr M,83
Assigns a block buffer to block u. addr is the address of
the first byte of the block within its buffer. This
function is fully specified by the definition for BLOCK
except that if the block is not already in memory it might
not be transferred from mass storage. The contents of the
block buffer assigned to block u by BUFFER are unspecified.
C! 16b addr -- 79 "c-store"
The least-significant 8 bits of 16b are stored into the byte
at addr.
C@ addr -- 8b 79 "c-fetch"
8b is the contents of the byte at addr.
CMOVE addr1 addr2 u -- 83 "c-move"
Move u bytes beginning at address addr1 to addr2. The byte
at addr1 is moved first, proceeding toward high memory. If
u is zero nothing is moved.
33
12. REQUIRED WORD SET
CMOVE> addr1 addr2 u -- 83 "c-move-up"
Move the u bytes at address addr1 to addr2. The move begins
by moving the byte at (addr1 plus u minus 1) to (addr2 plus
u minus 1) and proceeds to successively lower addresses for
u bytes. If u is zero nothing is moved. (Useful for
sliding a string towards higher addresses).
COMPILE -- C,83
Typically used in the form:
: <name> ... COMPILE <namex> ... ;
When <name> is executed, the compilation address compiled
for <namex> is compiled and not executed. <name> is
typically immediate and <namex> is typically not immediate.
See: "compilation"
CONSTANT 16b -- M,83
A defining word executed in the form:
16b CONSTANT <name>
Creates a dictionary entry for <name> so that when <name> is
later executed, 16b will be left on the stack.
CONVERT +d1 addr1 -- +d2 addr2 79
+d2 is the result of converting the characters within the
text beginning at addr1+2 into digits, using the value of
BASE , and accumulating each into +d1 after multiplying +d1
by the value of BASE . Conversion continues until an
unconvertible character is encounter. addr2 is the location
of the first unconvertible character.
COUNT addr1 -- addr2 +n 79
addr2 is addr1+1 and +n is the length of the counted string
at addr1. The byte at addr1 contains the byte count +n.
Range of +n is {0.255} See: "string, counted"
CR -- M,79 "c-r"
Displays a carriage-return and line-feed or equivalent
operation.
CREATE -- M,79
A defining word executed in the form:
CREATE <name>
Creates a dictionary entry for <name>. After <name> is
created, the next available dictionary location is the first
byte of <name>'s parameter field. When <name> is
subsequently executed, the address of the first byte of
<name>'s parameter field is left on the stack. CREATE does
not allocate space in <name>'s parameter field.
D+ wd1 wd2 -- wd3 79 "d-plus"
wd3 is the arithmetic sum of wd1 plus wd2.
D< d1 d2 -- flag 83 "d-less-than"
flag is true if d1 is less than d2 according to the
operation of < except extended to 32 bits.
34
12. REQUIRED WORD SET
DECIMAL -- 79
Set the input-output numeric conversion base to ten.
DEFINITIONS -- 79
The compilation vocabulary is changed to be the same as the
first vocabulary in the search order. See: "vocabulary,
compilation"
DEPTH -- +n 79
+n is the number of 16-bit values contained in the data
stack before +n was placed on the stack.
DNEGATE d1 -- d2 79 "d-negate"
d2 is the two's complement of d1.
DO w1 w2 -- C,I,83
-- sys (compiling)
Used in the form:
DO ... LOOP
or
DO ... +LOOP
Begins a loop which terminates based on control parameters.
The loop index begins at w2, and terminates based on the
limit w1. See LOOP and +LOOP for details on how the loop is
terminated. The loop is always executed at least once. For
example: w DUP DO ... LOOP executes 65,536 times. sys is
balanced with its corresponding LOOP or +LOOP . See: "9.9
Control Structures"
An error condition exists if insufficient space is available
for at least three nesting levels.
DOES> -- addr C,I,83 "does"
-- (compiling)
Defines the execution-time action of a word created by a
high-level defining word. Used in the form:
: <namex> ... <create> ... DOES> ... ;
and then
<namex> <name>
where <create> is CREATE or any user defined word which
executes CREATE .
Marks the termination of the defining part of the defining
word <namex> and then begins the definition of the
execution-time action for words that will later be defined
by <namex>. When <name> is later executed, the address of
<name>'s parameter field is placed on the stack and then the
sequence of words between DOES> and ; are executed.
DROP 16b -- 79
16b is removed from the stack.
DUP 16b -- 16b 16b 79 "dupe"
Duplicate 16b.
35
12. REQUIRED WORD SET
ELSE -- C,I,79
sys1 -- sys2 (compiling)
Used in the form:
flag IF ... ELSE ... THEN
ELSE executes after the true part following IF . ELSE
forces execution to continue at just after THEN . sys1 is
balanced with its corresponding IF . sys2 is balanced with
its corresponding THEN . See: IF THEN
EMIT 16b -- M,83
The least-significant 7-bit ASCII character is displayed.
SEE: "9.5.3 EMIT"
EXECUTE addr -- 79
The word definition indicated by addr is executed. An error
condition exists if addr is not a compilation address
EXIT -- C,79
Compiled within a colon definition such that when executed,
that colon definition returns control to the definition that
passed control to it by returning control to the return
point on the top of the return stack. An error condition
exists if the top of the return stack does not contain a
valid return point. May not be used within a do-loop. See:
; "stack, return" "9.3 Return Stack"
EXPECT addr +n -- M,83
Receive characters and store each into memory. The transfer
begins at addr proceeding towards higher addresses one byte
per character until either a "return" is received or until
+n characters have been transferred. No more than +n
characters will be stored. The "return" is not stored into
memory. No characters are received or transferred if +n is
zero. All characters actually received and stored into
memory will be displayed, with the "return" displaying as a
space. See: SPAN "9.5.2 EXPECT"
FILL addr u 8b -- 83
u bytes of memory beginning at addr are set to 8b. No
action is taken if u is zero.
FIND addr1 -- addr2 n 83
addr1 is the address of a counted string. The string
contains a word name to be located in the currently active
search order. If the word is not found, addr2 is the string
address addr1, and n is zero. If the word is found, addr2
is the compilation address and n is set to one of two non-
zero values. If the word found has the immediate attribute,
n is set to one. If the word is non-immediate, n is set to
minus one (true).
36
12. REQUIRED WORD SET
FLUSH -- M,83
Performs the function of SAVE-BUFFERS then unassigns all
block buffers. (This may be useful for mounting or changing
mass storage media).
FORGET -- M,83
Used in the form:
FORGET <name>
If <name> is found in the compilation vocabulary, delete
<name> from the dictionary and all words added to the
dictionary after <name> regardless of their vocabulary.
Failure to find <name> is an error condition. An error
condition also exists if the compilation vocabulary is
deleted. See: "10.2 General Error Conditions"
FORTH -- 83
The name of the primary vocabulary. Execution replaces the
first vocabulary in the search order with FORTH . FORTH is
initially the compilation vocabulary and the first
vocabulary in the search order. New definitions become part
of the FORTH vocabulary until a different compilation
vocabulary is established. See: VOCABULARY
FORTH-83 -- 83
Assures that a FORTH-83 Standard System is available,
otherwise an error condition exists.
HERE -- addr 79
The address of the next available dictionary location.
HOLD char -- 79
char is inserted into a pictured numeric output string.
Typically used between <# and #>.
I -- w C,79
w is a copy of the loop index. May only be used in the
form:
DO ... I ... LOOP
or
DO ... I ... +LOOP
37
12. REQUIRED WORD SET
IF flag -- C,I,79
-- sys (compiling)
Used in the form:
flag IF ... ELSE ... THEN
or
flag IF ... THEN
If flag is true, the words following IF are executed and the
words following ELSE until just after THEN are skipped. The
ELSE part is optional.
If flag is false, the words from IF through ELSE , or from
IF through THEN (when no ELSE is used), are skipped. sys is
balanced with its corresponding ELSE or THEN . See: "9.9
Control Structures"
IMMEDIATE -- 79
Marks the most recently created dictionary entry as a word
which will be executed when encountered during compilation
rather than compiled.
J -- w C,79
w is a copy of the index of the next outer loop. May only
be used within a nested DO-LOOP or DO-+LOOP in the form, for
example:
DO ... DO ... J ... LOOP ... +LOOP
KEY -- 16b M,83
The least-significant 7 bits of 16b is the next ASCII
character received. All valid ASCII characters can be
received. Control characters are not processed by the
system for any editing purpose. Characters received by KEY
will not be displayed. See: "9.5.1 KEY"
LEAVE -- C,I,83
-- (compiling)
Transfers execution to just beyond the next LOOP or +LOOP .
The loop is terminated and loop control parameters are
discarded. May only be used in the form:
DO ... LEAVE ... LOOP
or
DO ... LEAVE ... +LOOP
LEAVE may appear within other control structures which are
nested within the do-loop structure. More than one LEAVE
may appear within a do-loop. See: "9.3 Return Stack"
LITERAL -- 16b C,I,79
16b -- (compiling)
Typically used in the form:
[ 16b ] LITERAL
Compiles a system dependent operation so that when later
executed, 16b will be left on the stack.
38
12. REQUIRED WORD SET
LOAD u -- M,79
The contents of >IN and BLK , which locate the current input
stream, are saved. The input stream is then redirected to
the beginning of screen u by setting >IN to zero and BLK to
u. The screen is then interpreted. If interpretation from
screen u is not terminated explicitly it will be terminated
when the input stream is exhausted and then the contents of
>IN and BLK will be restored. An error condition exists if
u is zero. See: >IN BLK BLOCK
LOOP -- C,I,83
sys -- (compiling)
Increments the DO-LOOP index by one. If the new index was
incremented across the boundary between limit-1 and limit
the loop is terminated and loop control parameters are
discarded. When the loop is not terminated, execution
continues to just after the corresponding DO . sys is
balanced with its corresponding DO . See: DO
MAX n1 n2 -- n3 79 "max"
n3 is the greater of n1 and n2 according to the operation of
> .
MIN n1 n2 -- n3 79 "min"
n3 is the lesser of n1 and n2 according to the operation of
< .
MOD n1 n2 -- n3 83
n3 is the remainder after dividing n1 by the divisor n2. n3
has the same sign as n2 or is zero. An error condition
results if the divisor is zero or if the quotient falls
outside of the range {-32,768..32,767}. See: "division,
floored"
NEGATE n1 -- n2 79
n2 is the two's complement of n1, i.e, the difference of
zero less n1.
NOT 16b1 -- 16b2 83
16b2 is the one's complement of 16b1.
OR 16b1 16b2 -- 16b3 79
16b3 is the bit-by-bit inclusive-or of 16b1 with 16b2.
OVER 16b1 16b2 -- 16b1 16b2 16b3 79
16b3 is a copy of 16b1.
PAD -- addr 83
The lower address of a scratch area used to hold data for
intermediate processing. The address or contents of PAD may
change and the data lost if the address of the next
available dictionary location is changed. The minimum
capacity of PAD is 84 characters.
39
12. REQUIRED WORD SET
PICK +n -- 16b 83
16b is a copy of the +nth stack value, not counting +n
itself. {0..the number of elements on stack-1}
0 PICK is equivalent to DUP
1 PICK is equivalent to OVER
QUIT -- 79
Clears the return stack, sets interpret state, accepts new
input from the current input device, and begins text
interpretation. No message is displayed.
R> -- 16b C,79 "r-from"
16b is removed from the return stack and transferred to the
data stack. See: "9.3 Return Stack"
R@ -- 16b C,79 "r-fetch"
16b is a copy of the top of the return stack.
REPEAT -- C,I,79
sys -- (compiling)
Used in the form:
BEGIN ... flag WHILE ... REPEAT
At execution time, REPEAT continues execution to just after
the corresponding BEGIN . sys is balanced with its
corresponding WHILE . See: BEGIN
ROLL +n -- 83
The +nth stack value, not counting +n itself is first
removed and then transferred to the top of the stack, moving
the remaining values into the vacated position. {0..the
number of elements on the stack-1}
2 ROLL is equivalent to ROT
0 ROLL is a null operation
ROT 16b1 16b2 16b3 -- 16b2 16b3 16b1 79 "rote"
The top three stack entries are rotated, bringing the
deepest to the top.
SAVE-BUFFERS -- M,79 "save-buffers"
The contents of all block buffers marked as UPDATEed are
written to their corresponding mass storage blocks. All
buffers are marked as no longer being modified, but may
remain assigned.
SIGN n -- 83
If n is negative, an ASCII "-" (minus sign) is appended to
the pictured numeric output string. Typically used between
<# and #> .
SPACE -- M,79
Displays an ASCII space.
40
12. REQUIRED WORD SET
SPACES +n -- M,79
Displays +n ASCII spaces. Nothing is displayed if +n is
zero.
SPAN -- addr U,83
The address of a variable containing the count of characters
actually received and stored by the last execution of
EXPECT . See: EXPECT
STATE -- addr U,79
The address of a variable containing the compilation state.
A non-zero content indicates compilation is occurring, but
the value itself is system dependent. A Standard Program
may not modify this variable.
SWAP 16b1 16b2 -- 16b2 16b1 79
The top two stack entries are exchanged.
THEN -- C,I,79
sys -- (compiling)
Used in the form:
flag IF ... ELSE ... THEN
or
flag IF ... THEN
THEN is the point where execution continues after ELSE , or
IF when no ELSE is present. sys is balanced with its
corresponding IF or ELSE . See: IF ELSE
TIB -- addr 83 "t-i-b"
The address of the text input buffer. This buffer is used
to hold characters when the input stream is coming from the
current input device. The minimum capacity of TIB is 80
characters.
TYPE addr +n -- M,79
+n characters are displayed from memory beginning with the
character at addr and continuing through consecutive
addresses. Nothing is displayed if +n is zero. See:
"9.5.4 TYPE"
U. u -- M,79 "u-dot"
u is displayed as an unsigned number in a free-field format.
U< u1 u2 -- flag 83 "u-less-than"
flag is true if u1 is less than u2.
UM* u1 u2 -- ud 83 "u-m-times"
ud is the unsigned product of u1 times u2. All values and
arithmetic are unsigned.
41
12. REQUIRED WORD SET
UM/MOD ud u1 -- u2 u3 83 "u-m-divide-mod"
u2 is the remainder and u3 is the floor of the quotient
after dividing ud by the divisor u1. All values and
arithmetic are unsigned. An error condition results if the
divisor is zero or if the quotient lies outside the range
{0..65,535}. See: "floor, arithmetic"
UNTIL flag -- C,I,79
sys -- (compiling)
Used in the form:
BEGIN ... flag UNTIL
Marks the end of a BEGIN-UNTIL loop which will terminate
based on flag. If flag is true, the loop is terminated. If
flag is false, execution continues to just after the
corresponding BEGIN . sys is balanced with its
corresponding BEGIN . See: BEGIN
UPDATE -- 79
The currently valid block buffer is marked as modified.
Blocks marked as modified will subsequently be automatically
transferred to mass storage should its memory buffer be
needed for storage of a different block or upon execution of
FLUSH or SAVE-BUFFERS .
VARIABLE -- M,79
A defining word executed in the form:
VARIABLE <name>
A dictionary entry for <name> is created and two bytes are
ALLOTted in its parameter field. This parameter field is to
be used for contents of the variable. The application is
responsible for initializing the contents of the variable
which it creates. When <name> is later executed, the
address of its parameter field is placed on the stack.
VOCABULARY -- M,83
A defining word executed in the form:
VOCABULARY <name>
A dictionary entry for <name> is created which specifies a
new ordered list of word definitions. Subsequent execution
of <name> replaces the first vocabulary in the search order
with <name>. When <name> becomes the compilation vocabulary
new definitions will be appended to <name>'s list. See:
DEFINITIONS "search order"
42
12. REQUIRED WORD SET
WHILE flag -- C,I,79
sys1 -- sys2 (compiling)
Used in the form:
BEGIN ... flag WHILE ... REPEAT
Selects conditional execution based on flag. When flag is
true, execution continues to just after the WHILE through to
the REPEAT which then continues execution back to just after
the BEGIN . When flag is false, execution continues to just
after the REPEAT , exiting the control structure. sys1 is
balanced with its corresponding BEGIN . sys2 is balanced
with its corresponding REPEAT . See: BEGIN
WORD char -- addr M,83
Generates a counted string by non-destructively accepting
characters from the input stream until the delimiting
character char is encountered or the input stream is
exhausted. Leading delimiters are ignored. The entire
character string is stored in memory beginning at addr as a
sequence of bytes. The string is followed by a blank which
is not included in the count. The first byte of the string
is the number of characters {0..255}. If the string is
longer than 255 characters, the count is unspecified. If
the input stream is already exhausted as WORD is called,
then a zero length character string will result.
If the delimiter is not found the value of >IN is the size
of the input stream. If the delimiter is found >IN is
adjusted to indicate the offset to the character following
the delimiter. #TIB is unmodified.
The counted string returned by WORD may reside in the "free"
dictionary area at HERE or above. Note that the text
interpreter may also use this area. See: "input stream"
XOR 16b1 16b2 -- 16b3 79 "x-or"
16b3 is the bit-by-bit exclusive-or of 16b1 with 16b2.
[ -- I,79 "left-bracket"
-- (compiling)
Sets interpret state. The text from the input stream is
subsequently interpreted. For typical usage see LITERAL .
See: ]
['] -- addr C,I,M,83 "bracket-
-- (compiling) tick"
Used in the form:
['] <name>
Compiles the compilation address addr of <name> as a
literal. When the colon definition is later executed addr
is left on the stack. An error condition exists if <name>
is not found in the currently active search order. See:
LITERAL
43
12. REQUIRED WORD SET
[COMPILE] -- C,I,M,79 "bracket-
-- (compiling) compile"
Used in the form:
[COMPILE] <name>
Forces compilation of the following word <name>. This
allows compilation of an immediate word when it would
otherwise have been executed.
] -- 79 "right-bracket"
Sets compilation state. The text from the input stream is
subsequently compiled. For typical usage see LITERAL .
See: [
44