dsforth: it is now possible to compile it with relative or absolute branches (absolut...
[urasm.git] / dsforth / forth.txt
blob2ef25a5ca097ef08c51a8baeee0f8a15e29db91b
1 PARTS OF THE ORIGINAL MANUAL, CHANGED A LITTLE
3 2.2 Types of Numbers
5 FORTH is a typeless language. There is no distinction between a number
6 and a character for example. Things on the stack are taken by a word and
7 interpreted as that word sees fit. Some of the more common
8 interpretations, other than the normal 16 bit signed numbers (range
9 -32768 to 32767) which have been used, are:
11 Unsigned:
12 range 0 to 65535. The word 'U.' acts like `.' but it assumes that the
13 number is unsigned rather than signed.
15 Double precision:
16 The top two numbers on the stack are interpreted as a 32 bit number,
17 either signed or unsigned. The top number is taken as the high 16 bits.
18 The second number is taken as the low 16 bits. To put a 32 bit number
19 onto the stack type the number with a decimal point somewhere in the
20 number. The system variable DPL contains the number of digits following
21 the decimal point, in case it is important.
23   70.000 . . DPL @ .
25 will print 1 4464 3 ok. The 32 bit number 70000 (not 70) is put onto the
26 stack as two numbers. The first '.' prints the top half as a signed
27 number. The bottom half is then printed (note 70000 = 1 x 2^16 + 4464).
28 The contents of DPL are 3 since there are 3 digits after the decimal
29 point.
31 The words U* U/MOD M* M/ and M/MOD are mixed mode versions of * / and
32 /MOD where the operands and results are of different types.
34 Byte:
35 Sometimes only 8 bit numbers are required, for instance to represent a
36 character. They are represented on the stack by 16 bit numbers with the
37 8 highest bits zero. 'C@' and 'C!' fetch and store only a single byte at
38 a time.
40 Flags:
41 To make decisions, the values true and false are needed. For instance
42   2 3 = .       prints 0 (false), whereas
43   3 3 = .       prints 1 (true).
45 In fact any non-zero number is treated as true. (So,'-' can be used for
46 <>, since x - y = 0 (false) only if x = y.)
47 Other comparisons are:
48   <  U<  0< (equivalent to 0 <) and 0= (equivalent to 0 =).
50 'NOT' changes a true flag to false and vice versa. (This is actually
51 equivalent to 0=.)
54 2.4 Control Structures
56 Added 'IFNOT'.
58 Added 'OTHERWISE':
59   CASE
60     8 OF ." This is 8" CR ENDOF
61     12 OF ." This is 12" CR ENDOF
62     99 OF ." This is 99" CR ENDOF
63     OTHERWISE ." The number is: " . CR ENDOF
64   ENDCASE
68 2.7 The RAM disc
70 Destroyed.
73 2.8 The Graphics Routines
75 Destroyed.
78 2.11 Miscellaneous Additions
80 The final changes to the standard are:
82 f LINK
83 Destroyed.
85 UDG
86 Destroyed.
89 CHAPTER 3. ADVANCED FEATURES OF FORTH
91 3.0 Saving an extended Dictionary
93 Broken.
96 CHAPTER 4. THE DISC EDITOR
98 Not here.
101 CHAPTER 6. FORTH GLOSSARY
103 The glossary contains all of the word definitions in this release of
104 fig-FORTH (with extensions for the Spectrum). The definitions are
105 presented in the order of their ASCII sort.
107 The first line of each entry shows a symbolic description of the action
108 of the procedure on the parameter stack. The symbols indicate the order
109 in which input parameters have been placed on the stack. Three dashes
110 '---' indicate the execution point; any parameters left on the stack are
111 listed. In this notation, the top of the stack is to the right.
113 The symbols include:
115   addr    memory address
116   b       8 bit byte (i.e. high 8 bits zero)
117   c       7 bit ASCII character
118   d       32 bit signed double integer.
119   f       boolean flag. 0 = false, non-zero = true.
120   ff      boolean false flag = 0
121   n       16 bit signed integer number.
122   u       16 bit unsigned integer number
123   tf      boolean true flag = non-zero
125   The capital letters on the right show definition characters:
126   C       May only be used within a colon definition. A digit indicates number of memory addresses used.
127   E       Intended for execution only.
128   P       Has precedence bit set. Will execute even when compiling.
129   U       A user variable.
131 Unless otherwise noted, all references to numbers are for 16 bit signed
132 integers. The high byte is on top of the stack, with the sign in the
133 leftmost bit. For 32 bit numbers the most significant part is on top.
135 All arithmetic is implicitly 16 bit signed integer math, with error and under-flow indication unspecified.
137 Acknowledgements are duly made to the FORTH INTEREST GROUP. PO Box 1105,
138 San Carlos, CA 94070 for parts of this compiler and manual.
141 dsForth FORTH GLOSSARY
143 ! ( n addr -- ) L0
144 Store 16 bits of n at address. Pronounced "store"
146 !CSP
147 Save the stack position in CSP. Used as part of the compiler security.
149 # ( d1 -- d2 ) L0
150 Generate from a double number d1, the next ASCII character which is
151 placed in an output string. Result d2 is the quotient after division by
152 BASE, and is maintained for further processing. Used between <# and #>.
153 See #S.
155 #> ( d -- addr count ) L0
156 Terminates numeric output conversions by dropping d, leaving the text
157 address and character count suitable for TYPE.
159 #S ( d1 -- d2 ) L0
160 Generates ASCII text in the text output buffer, by the use of #, until a
161 zero double number results. Used between <# and #>.
163 ' ( -- addr ) P,L0
164 Used in the form:    ' nnnn
165 Leaves the parameter field address of dictionary word nnnn. As a
166 compiler directive, executes a colon-definition to compile the address
167 as a literal. If the word is not found after a search of CONTEXT and
168 CURRENT, an appropriate error message is given. Pronounced "tick".
170 ( P, L0
171 Used in the form:  ( cccc)
172 Ignore a comment that will be delimited by a right parenthesis on the
173 same line. May occur during execution or in a colon-definition. A blank
174 after the leading parenthesis is required.
176 (.") C+
177 The run-time procedure, compiled by ." which transmits the following
178 in-line text to the selected output device. See ."
180 (;CODE) C
181 The run-time procedure, compiled by ;CODE, that rewrites the code field
182 of the most recently defined word to point to the following machine code
183 sequence. See ;CODE.
185 (+LOOP) ( n -- ) C2
186 The run-time procedure compiled by +LOOP, which increments the loop
187 index by n and tests for loop completion. See + LOOP.
189 (ABORT)
190 Executes after an error when WARNING is -1. The word normally executes
191 ABORT, but may be altered (with care) to a user's alternative procedure.
193 (DO) C
194 The run-time procedure compiled by DO which moves the loop control
195 parameters to the return stack. See DO
197 (FIND) ( addr l addr2 -- pfa b tf  ok)
198        ( addr l addr2 -- ff        bad)
199 Searches the dictionary starting at the name field address addr2,
200 matching to the text at addrl. Returns parameter field address, length
201 byte of name field and true for a good match. If no match is found, only
202 a boolean false is left.
204 (LINE) ( n1 n2 -- addr count )
205 Convert the line number n1 and the screen n2 to the disc buffer address
206 containing the data. A count of 64 indicates the full line text length.
208 (LOOP) C2
209 The run-time procedure compiled by LOOP which increments the loop index
210 and tests for loop completion. See LOOP
212 (NUMBER) ( d1 addrl -- d2 addr2 )
213 Convert the ASCII text beginning at addr1 + 1 with regard to BASE. The
214 new value is accumulated into double number d1, being left as d2. Addr2
215 is the address of the first unconvertible digit. Used by NUMBER.
217 * ( n1 n2 -- prod )L0
218 Leaves the signed product of two signed numbers.
220 */ ( n1 n2 n3 -- n4 ) L0
221 Leaves the ratio n4=n1*n2/n3 where all are signed numbers. Retention of
222 an intermediate 31 bit product permits greater accuracy than would be
223 available with the sequence:  n1 n2 * n3 /
225 */MOD ( n1 n2 n3 -- n4 n5 ) L0
226 Leaves the quotient n5 and remainder n4 of their operation n1*n2/n3. A
227 31 bit intermediate product is used as for */
229 + ( n1 n2 -- sum )L0
230 Leave the sum of n1 + n2.
232 +! ( n addr -- ) L0
233 Add n to the value at the address. Pronounced "plus-store".
235 +- ( n1 n2 -- n3 )
236 Apply the sign of n2 to n1, which is left as n3.
238 +BUF ( addr1 -- addr2 f )
239 Advance the disc buffer address addr1 to the address of the next buffer
240 addr2. Boolean f is false when addr2 is the buffer presently pointed to
241 by variable PREV.
243 +LOOP ( n1 --  run)
244       ( addr n2 --  compile)   P,C2,L0
245 Used in a colon-definition in the form:  DO... n1 +LOOP
247 At run-time, +LOOP selectively controls branching back to the
248 corresponding DO, based on n1, the loop index and the loop limit. The
249 signed increment n1 is added to the index and the total compared to the
250 limit. The branch back to DO occurs until the new index is equal to or
251 greater than the limit (n1>0), or until the new index is equal to or less
252 than the limit (n1<0). Upon exiting the loop, the parameters are
253 discarded and execution continues ahead.
255 At compile time, +LOOP compiles the run-time word (+LOOP) and the branch
256 offset computed from HERE to the address left on the stack by DO. n2 is
257 used for compile time error checking.
259 +ORIGIN ( n -- addr )
260 Leave the memory address offset n bytes from the origin. This definition
261 is used to access or modify the boot-up parameters at the origin area.
264 , ( n -- ) L0
265 Store n into the next available dictionary memory cell, advancing the
266 dictionary pointer. (comma)
268 - ( n1 n2 -- diff ) L0
269 Leave the difference of n1-n2.
271 --> ( P,L0 )
272 Continue interpretation with the next disc screen. (pronounced next-screen).
274 -DUP ( n1 -- n1  if zero)
275      ( n1 -- n1 n1  if non-zero)      L0
276 Reproduce n1 only if it is non-zero.  This is usually used to copy a
277 value just before IF, to eliminate the need for an ELSE part to drop it.
279 -FIND ( -- pfa b tf  found)
280       ( -- ff        not found)
281 Accepts the next text word (delimited by blanks) in the input stream to
282 HERE, and searches the CONTEXT and then CURRENT vocabularies for a
283 matching entry. If found, the * dictionary entry's parameter field
284 address, its length byte, and a boolean true is left. Otherwise, only a
285 boolean false is left.
287 -TRAILING ( addr n1 -- addr n2 )
288 Adjusts the character count n1 of a text string beginning address to
289 suppress the output of trailing blanks.
291 . ( n -- ) L0
292 Print a number from a signed 16 bit two's complement value, converted
293 according to the numeric BASE. A trailing blank follows. Pronounced
294 "dot".
296 ." P,L
297 Used in the form: ." cccc" Compiles an in-line string cccc (delimited by
298 the trailing ") with an execution procedure to transmit the text to the
299 selected output device. If executed outside a definition, ." will
300 immediately print the text until the final ". See (.").
302 .LINE ( line scr -- )
303 Print on the screen, a line of text from the RAM disc by its line and
304 screen number. Trailing blanks are suppressed.
306 (.NEXT)
307 This is the inner interpreter that uses the interpretive pointer IP to
308 execute compiled Forth definitions. It is not directly executed but is
309 the return point for all code procedures. It acts by fetching the
310 address pointed to by IP, storing this value in register W. W points to
311 the code field of a definition which contains the address of the code
312 which is to be executed for that definition. This address is then jumped
313 to. This usage of indirect threaded code is a major contributor to the
314 power, portability, and extensibility of Forth. Locations of IP and W
315 are computer specific. (See earlier note on Spectrum FORTH convention).
317 (.PUSHDE)
318 (.PUSHHL)
319 This code sequence pushes machine registers to the computation stack and
320 returns to NEXT. it is not directly executable, but is a Forth re-entry
321 after machine code. PUSHHL returns just the HL register PUSHDE returns
322 the DE register under the HL register on the stack.
325 .R ( n1 n2 -- )
326 Print the number n1 right aligned in a field whose width is n2. No
327 following blank is printed.
329 / ( n1 n2 -- rem )
330 Leave the signed quotient of n1 /n2.
332 /MOD ( n1 n2 -- rem quot ) L0
333 Leave the remainder and signed quotient of n1/n2. The remainder has the
334 sign of the dividend.
336 0 1 2 3 -- n
337 These small numbers are used so often that it is attractive to define
338 them by name in the dictionary as constants.
340 0< ( n -- f ) L0
341 Leave a true flag if the number is less than zero (negative), otherwise
342 leave a false flag.
344 0= ( n -- f ) L0
345 Leave a true flay if the number is equal to zero, otherwise leave a
346 false flag.
348 0BRANCH f --
349 The run-time procedure to conditionally branch. If f is false (zero),
350 the following in-line parameter is added to the interpretive pointer to
351 branch ahead or back. Compiled by IF, UNTIL and WHILE.
353 1+ ( n1 -- n2 ) L1
354 Increment n1 by 1.
356 2+ ( n1 -- n2 )
357 Increment n1 by 2.
359 2! ( nlow nhigh addr -- )
360 32 bit store, nhigh is stored at addr; nlow is stored at addr+2.
362 2CONSTANT ( d -- )
363 A defining word used in the form: d 2CONSTANT cccc
364 to create word cccc, with its parameter field containing d. When cccc is
365 later executed, it will push the double value of d to the stack.
367 2DROP ( d -- )
368 Drop the double number from the stack.
370 2DUP ( n2 n1 -- n2 n1 n2 n1 )
371 Duplicates the top two values on the stack. Equivalent to OVER OVER.
373 2OVER ( d1 d2 -- d1 d2 d1 )
374 Copy the first double value d1 to the top of the stack.
376 2SWAP ( d1 d2 -- d2 d1 )
377 Exchange the top two double numbers on the stack.
379 2VARIABLE
380 A defining word used in the form: d VARIABLE cccc
381 When VARIABLE is executed, it creates the definition cccc with its
382 parameter field initialized to d. When cccc is later executed, the
383 address of its parameter field (containing d) is left on the stack, so
384 that a double fetch store may access this location.
386 : P,E,L0
387 Used in the form called a colon-definition: : cccc ... ;
388 Creates a dictionary entry defining cccc as equivalent to the following
389 sequence of FORTH word definitions '...' until the next `;' or ';CODE'.
390 The compiling process is done by the text interpreter as long as STATE
391 is non-zero. Other details are that the CONTEXT vocabulary is set to the
392 CURRENT vocabulary and that words with the precedence bit set (P) are
393 executed rather than being compiled.
395 ; P,C,L0
396 Terminate a colon-definition and stop further compilation. Compiles the
397 run-time ;S.
399 ;CODE P,C,L0
400 Used in the form: : cccc .... ;CODE
401 Stop compilation and terminate a new defining word cccc by compiling
402 (;CODE). Set the CONTEXT vocabulary to ASSEMBLER, assembling to machine
403 code the following mnemonics. If the ASSEMBLER is not loaded, code
404 values may be compiled using , and C,.  When cccc later executes in the
405 form: cccc nnnn the word nnnn will be created with its execution
406 procedure given by the machine code following cccc. That is when nnnn is
407 executed, it does so by jumping to the code after nnnn. An existing
408 defining word must exist in cccc prior to ;CODE.
410 ;S P,L0
411 Stop interpretation of a screen. ;S is also the run-time word compiled
412 at the end of a colon-definition which returns execution to the calling
413 procedure.
415 < ( n1 n2 -- f ) L0
416 Leave a true flag if n1 is less than n2; otherwise leave a false flag.
418 <# L0
419 Setup for pictured numeric output formatting using the words: <# # #S SIGN #>
420 The conversion is done on a double number producing text at PAD.
422 <BUILDS C,L0
423 Used within a colon-definition:  : cccc <BUILDS... DOES> ... ;
424 Each time cccc is executed, <BUILDS defines a new word with a high-level
425 execution procedure. Executing cccc in the form:  cccc nnnn uses <BUILDS
426 to create a dictionary entry for nnnn with a call to the DOES> part for
427 nnnn. When nnnn is later executed, it has the address of its parameter
428 area on the stack and executes the words after DOES> in cccc. <BUILDS
429 and DOES> allow run-time procedures to be written in high-level rather
430 than in assembler code (as required by ;CODE).
432 = ( nl n2 -- b ) L0
433 Leave a true flag if n1=n2; otherwise leave a false flag.
435 > ( n1 n2 -- b ) L0
436 Leave a true flag if n1 is greater than n2; otherwise a false flag.
438 >R ( n -- ) C,L0
439 Remove a number from the computation stack and place as the most
440 accessible on the return stack. Use should be balanced with R> in the
441 same definition.
443 ? ( addr -- ) L0
444 Print the value contained at the address in free format according to the
445 current base.
447 ?COMP
448 Issue error message if not compiling.
450 ?CSP
451 Issue error message if stack position differs from value saved in CSP.
453 ?ERROR ( f n -- )
454 Issue an error message number n, if the boolean flag is true.
456 ?EXEC
457 Issue an error message if not executing.
459 ?LOADING
460 Issue an error message if not loading.
462 ?PAIRS ( n1 n2 -- )
463 Issue an error message if n1 does not equal n2. The message indicates
464 that compiled conditionals do not match.
466 ?STACK
467 Issue an error message if the stack is out of bounds.
469 ?BREAK ( -- f )
470 Perform a test of the terminal keyboard for actuation of the break key.
471 A true flag indicates actuation.
473 @ ( addr -- n ) L0
474 Leave the 16 bit contents of address.
476 ABORT L0
477 Clear the stacks and enter the execution state. Return control to the
478 keyboard, printing a message.
480 ABS ( n -- u ) L0
481 Leave the absolute value of n as u.
483 AGAIN ( addr n --  compiling)  P,C2,L0
484 Used in a colon-definition in the form:  BEGIN ... AGAIN
485 At run-time, AGAIN forces execution to return to corresponding BEGIN.
486 There is no effect on the stack. Execution cannot leave this loop
487 (unless R> DROP is executed one level below). At compile time, AGAIN
488 compiles BRANCH with an offset from HERE to addr. n is used for
489 compile-time error checking.
491 ALLOT ( n -- ) L0
492 Add the signed number to the dictionary pointer DP. May be used to
493 reserve dictionary space or reorigin memory. n is with regard to
494 computer address type (byte or word).
496 AND ( n1 n2 -- n3 ) L0
497 Leave the bitwise logical and of n1 and n2 as n3.
499 GOTOXY ( x y -- )
500 Moves the cursor position to line y, column x (0-based).
502 B/BUF ( -- n )
503 This constant leaves the number of bytes per disc buffer, the byte count
504 read from disc by BLOCK
506 B/SCR ( -- n )
507 This constant leaves the number of blocks per editing screen. By
508 convention, an editing screen is 1024 bytes organised as 16 lines of 64
509 characters each.
511 COMP-BACK ( addr -- )
512 Calculate the backward branch offset from HERE to addr and compile into
513 the next available dictionary memory address.
515 COMP-FWD ( addr -- )
516 Calculate the backward branch offset from addr to HERE and put it into
517 the addr.
519 BASE ( -- addr ) U,L0
520 A user variable containing the current number base used for input and
521 output conversion.
523 BEGIN ( -- addr n  compiling) P,L0
524 Occurs in a colon-definition in forms:
525   BEGIN ... UNTIL
526   BEGIN ... AGAIN
527   BEGIN ... WHILE ... REPEAT
528 At run-time, BEGIN marks the start of a sequence that may be
529 repetitively executed. It serves as a return point from the
530 corresponding UNTIL, AGAIN or REPEAT. When executing UNTIL, a return to
531 BEGIN will occur if the top of the stack is false; for AGAIN and REPEAT
532 a return to BEGIN always occurs.
533 At compile time BEGIN LEAVES its return address and n for compiler error
534 checking.
536 BL ( -- c )
537 A constant that leaves the ASCII values for "blank".
539 BLANKS ( addr count -- )
540 Fill an area of memory beginning at addr with count blanks.
542 BLEEP ( n1 n2 -- )
543 Produce a tone in the Spectrum noise maker of duration n1, pitch n2.
545 BLOCK ( n -- addr ) L0
546 Leave the memory address of the block buffer containing block n. If the
547 block is not already in memory, it is transferred from microdrive to
548 which ever buffer was least recently written. If the block occupying
549 that buffer has been marked as updated, it is rewritten to microdrive
550 before block n is read into the buffer. See also BUFFER, R/W UPDATE
551 FLUSH
553 BRANCH C2,L0
554 The run-time procedure to unconditionally branch. An in-line offset is
555 added to the interpretive pointer IP to branch ahead or back. BRANCH is
556 compiled by ELSE, AGAIN, REPEAT.
558 BRANCHT C2,L0
559 The run-time procedure to conditionally branch. If f is true (non-zero),
560 the following in-line parameter is added to the interpretive pointer to
561 branch ahead or back. Compiled by IFNOT.
563 BORDER  ( n -- )
564 Set the border to colour n.
566 BUFFER  ( n -- addr )
567 Obtain the next memory buffer, assigning it to block n. If the contents
568 of the buffer is marked as updated, it is written to the microdrive. The
569 block is not read from the microdrive. The address left is the first
570 cell within the buffer to data storage.
573 Exit to Basic/TR-DOS.
575 C! ( b addr -- )
576 Store 8 bits at address.
578 C/L ( -- n )
579 Constant leaving the number of characters per line; used by the editor.
581 C, ( b -- )
582 Store 8 bits of b into the next available dictionary byte, advancing the
583 dictionary pointer.
585 C@ ( addr -- b )
586 Leave the 8 bit contents of memory address.
588 CASE ( -- n  compiling)
589 Occurs in a colon definition in the form:
590   CASE
591     n OF .....   ENDOF
592   ENDCASE
593 At run-time, CASE marks the start of a sequence of OF ... ENDOF statements.
594 At compile-time CASE leaves n for compiler error checking.
596 CFA ( pfa -- cfa )
597 Convert the parameter field address of a definition to its code field address.
599 CLS ( -- )
600 Performs the clear-screen home-cursor function.
602 CMOVE ( from to count -- )
603 Move the specified quantity of bytes beginning at address from , to
604 address to. The contents of address from is moved first, proceeding
605 toward high memory.
607 COLD
608 The cold start procedure to adjust the dictionary pointer to the minimum
609 standard and restart via ABORT. May be called from the terminal to
610 remove application programs and restart.
612 COMPILE C2
613 When the word containing COMPILE executes, the execution address of the
614 word following COMPILE is copied (compiled) into the dictionary. This
615 allows specific compilation situations to be handled in addition to
616 simply compiling an execution address (which the interpreter already
617 does).
619 CONSTANT ( n -- ) L0
620 A defining word used in the form: n CONSTANT cccc
621 to create word cccc, with its parameter field containing n. When cccc is
622 later executed, it will push the value of n to the stack.
624 CONTEXT ( -- addr ) U,L0
625 A user variable containing a pointer to the vocabulary within which
626 dictionary searches will first begin.
628 COUNT ( addr1 -- addr2 n ) L0
629 Leave the byte address addr2 and byte count n of a message text
630 beginning at address addr1. It is presumed that the first byte at addr1
631 contains the text byte count and the actual text starts with the second
632 byte. Typically COUNT is followed by TYPE.
634 CR L0
635 Transmit a carriage return and line feed to the selected output device.
637 CREATE
638 A defining word used in the form: CREATE cccc
639 by such words as CODE and CONSTANT to create a dictionary header for a
640 Forth definition. The code field contains the address of the word's
641 parameter field. The new word is created in the current vocabulary.
643 CSP ( -- addr ) U
644 A user variable temporarily storing the stack pointer position, for
645 compilation error checking.
647 D+ ( d1 d2 -- dsum )
648 Leave the double number sum of two double numbers.
650 D+- ( d1 n -- d2 )
651 Apply the sign of n to the double number d1, leaving it as d2.
653 D. ( d -- ) L1
654 Print a signed double number from a 32 bit two's complement value. The
655 high-order 16 bits are most accessible on the stack. Conversion is
656 performed according to the current BASE. A blank follows. Pronounced
657 D-dot.
659 D.R ( d n -- )
660 Print a signed double number d, right aligned in a field n characters wide.
662 DABS ( d -- ud )
663 Leave absolute value ud of a double number.
665 DECIMAL ( L0 )
666 Set the numeric conversion base for decimal input-output.
668 DEFINITIONS ( LI )
669 Used in the form:  cccc DEFINITIONS
670 Set the CURRENT vocabulary to the CONTEXT vocabulary. In the example,
671 executing vocabulary name cccc made it the CONTEXT vocabulary and
672 executing DEFINITIONS made if both the CONTEXT and CURRENT vocabularies.
674 DIGIT ( c n1 -- n2 tf  ok)
675       ( c n1 -- ff     bad)
676 Converts the ascii character c (using base n1) to its binary equivalent
677 n2, accompanied by a true flag. If the conversion is invalid, leaves
678 only a false flag.
680 DLITERAL ( d -- d  executing)
681          (d --     compiling) P
682 If compiling, compile a double number from the stack into a literal.
683 Later execution of the definition containing the literal will push it to
684 the stack. If executing, the number will remain on the stack.
686 DNEGATE ( d1 -- d2 )
687 Convert d1 to its double number two's complement.
689 DO ( n1 n2 --   execute)
690    ( addr n --  compile) P,C2,L0
691 Occurs in a colon-definition in forms:
692   DO ... LOOP
693   DO... +LOOP
694 At run time, DO begins a sequence with repetitive execution controlled
695 by a loop limit n1 and an index with initial value n2. DO removes these
696 from the stack. Upon reaching LOOP the index is incremented by one, and
697 B, unless A. In this case the loop parameters are discarded and
698 execution continues ahead. Both n1 and n2 are determined at run-time and
699 may be the result of other operations. Within a loop 'I' will copy the
700 current value of the index to the stack. See I, LOOP, +LOOP, LEAVE.
701 When compiling with the colon-definition, DO compiles (DO). It then
702 leaves the following address addr, and n for later error checking.
704 DOES> L0
705 A word which defines the run-time action within a high-level defining
706 word.  DOES> alters the code field and first parameter of the new word
707 to execute the sequence of compiled word addresses following DOES>. Used
708 in combination with <BUILDS. When the DOES> part executes it begins with
709 the address of the first parameter of the new word on the stack. This
710 allows interpretation using this area or its contents. Typical uses
711 include the Forth assembler, multidimensional arrays, and compiler
712 generation.
714 DP ( -- addr ) U,L
715 A user variable, the dictionary pointer, which contains the address of
716 the next free memory above the dictionary. The value may be read by HERE
717 and altered by ALLOT.
719 DPL ( -- addr ) U,L0
720 A user variable containing the number of digits to the right of the
721 decimal on double integer input. It may also be used to hold output
722 column location of a decimal point, in user generated formatting. The
723 default value on single number input is -1.
725 DROP ( n -- ) L0
726 Drop the number from the stack.
728 DUP ( n -- n n ) L0
729 Duplicate the value on the stack.
731 ELSE ( addr1 n1 -- )
732      ( addr2 n2  compiling) P,C2,L0
733 Occurs within a colon-definition in the form:   IF ... ELSE ... ENDIF
734 At run-time, ELSE executes after the true part following IF. ELSE forces
735 execution to skip over the following part and resumes execution after
736 the ENDIF. It has no stack effect.
737 At compile-time ELSE compiles BRANCH, reserving space for a branch
738 offset. It leaves the address addr2, and n2 for error testing. ELSE also
739 resolves the pending forward branch from IF by calculating the offset
740 from addr1 to HERE, and storing at addrl.
742 EMIT ( c -- ) L0
743 Transmit ascii character c to the screen.
745 EMPTY-BUFFERS ( L0 )
746 Mark all block-buffers as empty, not necessarily affecting the contents.
747 Updated blocks are not written to the microdrive. This is also an
748 initialisation procedure before first use of the microdrive.
750 ENCLOSE ( addr1 c -- addr1 n1 n2 n3 )
751 The text scanning primitive used by WORD. From the text address addr1
752 and an ascii delimiting character c, is determined the byte offset to
753 the first non-delimiter character n1, the offset to the first delimiter
754 after the text n2, and the offset to the first character not included.
755 This procedure will not process past an ascii 'null", treating it as an
756 unconditional delimiter.
758 END P,C2,L0
759 This is an 'alias' or duplicate definition for UNTIL.
761 ENDCASE ( addr n --  compile)
762 Occurs in a colon definition in the form:
763   CASE
764     n OF ..... ENDOF
765   ENDCASE
766 At run-time ENDCASE marks the conclusion of a CASE statement.
767 At compile-time, ENDCASE computes forward branch offsets.
769 ENDIF ( addr n --  compile)    P,C0,L0
770 Occurs in a colon-definition in forms:
771   IF ... ENDIF
772   IF ... ELSE ... ENDIF
773 At run-time, ENDIF serves only as the destination of a forward branch
774 from IF or ELSE. It marks the conclusion of the conditional structure.
775 THEN is another name for ENDIF. Both names are supported in fig-FORTH.
776 See also IF and ELSE.
777 At compile-time, ENDIF computes the forward branch offset from addr to
778 HERE and stores it at addr. n is used for error tests.
780 ENDOF ( Addr n --  compile)
781 Used as ENDIF but in CASE statements.
783 FILL ( addr quan b -- )
784 Fill memory at the address with the specified quantity of bytes b.
786 ERASE ( addr n -- )
787 Clear to zero a region of memory, n bytes long, starting at addr.
789 ERROR ( n -- in blk )
790 Execute error notification and restart of systems. WARNING is first
791 examined. If 1, the text of line n, relative to screen 4 is printed.
792 This line number may be positive or negative, and beyond just screen 4.
793 If WARNING=0, n is just printed as a message number (RAM disc
794 installation). If WARNING is -1 the definition (ABORT) is executed,
795 which executes the system ABORT. The user may cautiously modify this
796 execution by altering (ABORT). fig-FORTH saves the contents of IN and
797 BLK on the stack to assist in determining the location of the error.
798 Final action is execution of QUIT.
800 EXECUTE ( addr -- )
801 Execute the definition whose code field address is on the stack. The
802 code field address is also called the compilation address.
804 EXIT
805 Force the conclusion of a definition at a different place than the end.
806 Must not be used when the return stack has been modified!
808 EXPECT ( addr count -- ) L0
809 Transfer characters from the terminal to address, until a "return" or
810 the count of characters have been received. One or more nulls are added
811 at the end of the text.
813 FENCE   ( -- addr ) U
814 A user variable containing an address below which FORGETting is not
815 allowed. To forget below this point the user must alter the contents of
816 FENCE.
818 FIRST ( -- n )
819 A constant that leaves the address of the first (lowest) block buffer.
821 FLD ( -- addr ) U
822 A user variable for control of number output field width. Presently
823 unused.
825 FLUSH
826 Write all updated disc buffers to the microdrive.
828 FORGET E,L0
829 Executed in the form:  FORGET cccc
830 Deletes definition named cccc from the dictionary with all entries
831 physically following it. In fig-FORTH, an error message will occur if
832 the CURRENT and CONTEXT vocabularies are not currently the same.
834 FORTH P,L1
835 The name of the primary vocabulary. Execution makes FORTH the CONTEXT
836 VOCABULARY. Until additional user vocabularies are defined, new user
837 definitions become a part of FORTH. FORTH is immediate, so it will
838 execute during the creation of a colon-definition to select this
839 vocabulary at compile time.
841 FREE ( -- n )
842 Returns a value on the stack of the amount of store remaining in bytes.
844 HERE ( -- addr ) L0
845 Leave the address of the next available dictionary location.
847 HEX L0
848 Set the numeric conversion base to sixteen (hexadecimal).
850 HLD ( -- addr )L0
851 A user variable that holds the address of the latest character of text
852 during numeric output conversion.
854 HOLD ( c -- ) L0
855 Used between <# and #> to insert an ascii character into a pictured
856 numeric output string e.g. 2E HOLD will place a decimal point  .
858 I ( -- n ) C, L0
859 Used within a DO-LOOP to copy the loop index to the stack.  See R.
861 I' ( -- n )
862 Copies the last but one value from the return stack (which within a
863 DO-LOOP is the loop limit).
865 ID. ( addr -- )
866 Print a definition's name from its name field address.
868 IF ( f --  run-time)
869    ( -- addr n (compile) P,C2,L0
870 Occurs in a colon-definition in the forms:
871   IF (tp) ... ENDIF
872   IF (tp) ... ELSE (fp)  ... ENDIF
873 At run-time, IF selects execution based on a boolean flag. If f is true
874 (non-zero), execution continues  ahead throughout the true part. If f is
875 false, execution jumps to just after ELSE to execute the false part.
876 After either part, execution resumes after ENDIF. ELSE and its false
877 part are optional. If missing, false execution skips to just after
878 ENDIF.
879 At compile-time IF compiles 0BRANCH and reserves space for an offset at
880 addr. addr and n are used later for resolution of the offset and error
881 testing.
883 IMMEDIATE
884 Mark the most recently made definition so that when encountered at
885 compile time, it will be executed rather than being compiled, i.e. the
886 precedence bit in its header is set. This method allows definitions to
887 handle unusual compiling situations, rather than build them into the
888 fundamental compiler. The user may force compilation of an immediate
889 definition by preceding it with [COMPILE].
891 IN ( -- addr ) L0
892 A user variable containing the byte offset within the current input text
893 buffer (terminal or RAM-disc) from which the next text will be accepted.
894 WORD uses and moves the value of IN.
896 INK ( n -- )
897 Sets the ink colour to n(0-9)
899 INKEY ( -- c )
900 Leaves the value of the key being pressed. If no key being pressed
901 leaves hex FF
903 INP ( n1 -- b )
904 Returns the value read from port n1.
906 INTERPRET
907 The outer text interpreter which sequentially executes or compiles text
908 from the input stream (terminal or RAM-disc) depending on STATE. If the
909 word name cannot be found after a search of CONTEXT and then CURRENT it
910 is converted to a number according to the current base. That also
911 failing, an error message echoing the name with a "?" will; be given.
912 Text input will be taken according to the convention for WORD. If a
913 decimal point is found as part of a number, a double number value will
914 be left. The decimal point has no other purpose than to force this
915 action. See NUMBER.
917 J ( -- n )
918 Used within nested DO loops. Returns the index value of the outer loop.
920 KEY ( -- v ) L0
921 Leave the ascii value of the next terminal key struck.
923 LATEST ( -- addr )
924 Leave the name field address of the topmost word in the CURRENT
925 vocabulary.
927 LEAVE C, L0
928 Force termination of a DO-LOOP at the next opportunity by setting the
929 loop limit equal to the current value of the index. The index itself
930 remains unchanged, and execution proceeds normally until LOOP or +LOOP
931 is encountered.
933 LFA pfa -- lfa
934 Convert the parameter field address of a dictionary definition to its
935 link field address.
937 LIMIT (  -- n )
938 A constant leaving the address just above the highest memory address
939 used by the system.
941 LINE ( n -- addr )
942 Leave address of line n of current screen. This address will be in the
943 RAM-disc buffer area.
945 LIST ( n -- ) L0
946 Display the ASCII text of screen n on the display. SCR contains the
947 screen number during and after this process.
949 LIT ( -- n ) C2,L0
950 Within a colon-definition, LIT is automatically compiled before each 16
951 bit literal number encountered in input text. Later execution of LIT
952 causes the contents of the next dictionary address to be pushed to the
953 stack.
955 LITERAL ( n --  compiling)               P,C2,L0
956 If compiling, then compile the stack value n as a 16 bit literal. This
957 definition is immediate so that it will execute during a colon
958 definition, the intended use is:   : xxx [calculate] LITERAL;
959 Compilation is suspended for the compile time calculation of a value.
960 Compilation is resumed and LITERAL compiles this value.
962 TLOAD ( addr len -- ) L0
963 Begin interpretation of screen n. Loading will terminate at the end of the screen or at;S. See ;S and -->.
965 LOOP ( addr n --  compiling)  P,C2,L0
966 Occurs in a colon-definition in form: DO ... LOOP
967 At run-time, LOOP selectively controls branching back to the
968 corresponding DO based on the loop index and limit. The loop index is
969 incremented by one and compared to the limit. The branch back to DO
970 occurs until the index equals or exceeds the limit; at that time, the
971 parameters are discarded and execution continues ahead.
972 At compile-time, LOOP compiles (LOOP) and uses addr to calculate an
973 offset to DO. n is used for error testing.
975 M* ( nl n2 -- d )
976 A mixed magnitude math operation which leaves the double number signed
977 product of two signed numbers.
979 M/ ( d n1 -- n2 n3 )
980 A mixed magnitude math operator which leaves the signed remainder n2 and
981 signed quotient n3, from a double number d dividend and divisor n1. The
982 remainder takes its sign from the dividend.
984 M/MOD ( ud1 u2 -- u3 ud4 )
985 An unsigned mixed magnitude math operation which leaves a double
986 quotient ud4 and remainder u3, from a double dividend ud1 and single
987 divisor u2.
989 MAX ( n1 n2 -- max ) L0
990 Leave the greater of two numbers.
992 MESSAGE ( n -- )
993 Print on the selected output device the text of line n relative to
994 screen 4 of drive 0. n may be positive or negative. MESSAGE may be used
995 to print incidental text such as report headers. If WARNING is zero, the
996 message will simply be printed as a number (RAM disc system).
998 MIN ( n1 n2 -- min ) L0
999 Leave the smaller of two numbers.
1001 MOD             n1 n2 -- mod                   L0
1002 Leave the remainder of n1/n2, with the same sign as n1.
1004 NEGATE ( n1 -- n2 ) L0
1005 Leave the two's complement of a number.
1007 NFA ( pfa -- nfa )
1008 Convert the parameter field address of a definition to its name field.
1010 NOOP
1011 A FORTH no-operation.
1013 NOT ( f1 -- f2 )
1014 Leaves a false flag if a true flag is on the stack, else leaves a true
1015 flag. (Actually executes 0=)
1017 NUMBER ( addr -- d )
1018 Convert a character string left at addr with a preceding count, to a
1019 signed double number, using the current numeric base. If a decimal point
1020 is encountered in the text, its position will be given in DPL, but no
1021 other effect occurs. If numeric conversion is not possible, an error
1022 message will be given.
1024 OFFSET ( -- addr ) U
1025 A user variable which may contain a block offset for the RAM-disc. The
1026 contents of OFFSET is added to the stack number by BLOCK. Messages
1027 printed by MESSAGE are independent of OFFSET. See BLOCK, MESSAGE.
1029 OR ( n1 n2 -- or ) L0
1030 Leave the bit-value logical or of two 16 bit values.
1032 OUTP ( n1 n2 -- )
1033 Presents n1 to output port n2.
1035 OVER ( n1 n2 -- n1 n2 n1 ) L0
1036 Copy the second stack value, placing it as the new top.
1038 PAD ( -- addr ) L0
1039 Leaves the address of the text output buffer, which is a fixed offset above HERE.
1041 PFA ( nfa -- pfa )
1042 Convert the name field address of a compiled definition to its parameter
1043 field address.
1045 PLOT ( n1 n2 -- )
1046 Sets point n1(x),n2(y). If this value is off the screen, no action is taken.
1048 POINT ( n1 n2 -- f )
1049 Returns a true flag if n1(x),n2(y) is set, else returns a false flag.
1051 PREV ( -- addr )
1052 A variable containing the address of the buffer most recently
1053 referenced. The UPDATE command marks this buffer to be later written to
1054 microdrive.
1056 QUIT
1057 Clear the return stack, stop compilation, and return control to the
1058 operator's terminal. No message is given.
1060 R# ( -- addr ) U
1061 A user variable which may contain the location of an editing cursor or
1062 other file related function.
1064 R/W ( addr blk f -- )
1065 The fig-FORTH standard disc read-write linkage. addr specifies the
1066 source or destination block buffer. blk is the sequential number of the
1067 referenced block; and f is a flag for f= write and f=1 read. R/W
1068 determines the location on the microdrive, performs the read-write and
1069 performs any error checking.
1071 R>              -- n                                   L0
1072 Remove the top value from the return stack and leave it on the
1073 computation stack. See >R and R.
1075 R@ ( -- n )
1076 Copy the top of the return stack to the computation stack.
1078 R0              -- addr                                U
1079 A user variable containing the initial location of the return stack.
1080 Pronounced R-zero. See RP!
1082 RDROP ( -- n )
1083 Drop the top of the return stack.
1085 QUERY
1086 Input 80 characters of text (or until a "return") from the operators
1087 terminal. Text is positioned at the address contained in TIB with IN set
1088 to zero.
1090 REPEAT ( addr n --  compiling) P,C2
1091 Used within a colon-definition in the form:     BEGIN ... WHILE ... REPEAT
1092 At run-time, REPEAT forces an unconditional branch back to just after
1093 the corresponding BEGIN.
1094 At compile-time, REPEAT compiles BRANCH and the offset from HERE to
1095 addr. n is used for error testing.
1097 ROT ( n1 n2 n3 -- n2 n3 n1 ) L0
1098 Rotate the top three values on the stack, bringing the third to the top.
1100 RP@ ( -- addr )
1101 Leaves the current value in the return stack pointer register.
1104 A computer dependent procedure to initialize the return stack pointer
1105 from user variable R0.
1107 S->D ( n -- d )
1108 Sign extend a single number to form a double number.
1110 S0 ( -- addr ) U
1111 A user variable that contains the initial value for the stack pointer.
1112 Pronounced S-zero. See SP!
1114 SCR ( -- addr )
1115 A user variable containing the screen number most recently referenced by LIST.
1117 SCREEN ( n1 n2 -- a )
1118 Returns the ascii value of the character at line n1, column n2 as long
1119 as that character is not a user-defined character.
1121 SIGN ( n d -- d ) L0
1122 Stores an ascii "-" sign just before a converted numeric output string
1123 in the next output buffer when n is negative. n is discarded, but double
1124 number d is maintained. Must be used between < # and #>.
1126 SIZE ( -- n )
1127 SIZE returns a value on the stack of the current size of the dictionary.
1129 SMUDGE
1130 Used during word definition to toggle the "smudge bit" in a definitions'
1131 name field. This prevents an uncompleted definition from being found
1132 during dictionary searches, until compiling is completed without error.
1135 A computer dependent procedure to initialize the stack pointer from S0.
1137 SP@ ( -- addr )
1138 A computer dependent procedure to return the address of the stack
1139 position to the top of the stack, as it was before SP@ was executed.
1140 (e.g. 1 2 SP@ @ . . . would type 2 2 1)
1142 SPACE L0
1143 Transmit an ascii blank to the output device.
1145 SPACES ( n -- ) L0
1146 Transmit n ascii blanks to the output devic.
1148 STATE ( -- addr ) L0,U
1149 A user variable containing the compilation state. A non-zero value
1150 indicates compilation.
1152 SWAP ( n1 n2 -- n2 n1 ) L0
1153 Exchange the top two values on the stack.
1155 TEXT ( c -- )
1156 Accept following text to PAD. c is the text delimiter.
1158 THEN P,C0,L0
1159 An alias for ENDIF.
1161 TIB ( -- addr ) U
1162 A user variable containing the address of the terminal input buffer.
1164 TOGGLE ( addr b -- )
1165 Complement the contents of addr ' by the bit pattern b.
1167 TRAVERSE ( addr1 n -- addr2 )
1168 Move across the name field of a fig-FORTH, variable length, name field.
1169 addr1 is the address of either the length byte or the last letter. If
1170 n=1, the motion is toward hi memory; if n=-1, the motion is toward low
1171 memory. The addr resulting is address of the other end of the name.
1173 TYPE ( addr count -- )L0
1174 Transmit count characters from addr to the display.
1176 U< ( u1 u2 -- f )
1177 Leave the boolean value of an unsigned less-than comparison. Leaves f=1
1178 for u1 < u2, otherwise leaves 0. This function should be used when
1179 comparing memory addresses.
1181 U* ( u1 u2 -- ud )
1182 Leave the unsigned double number product of two unsigned numbers.
1184 U. ( u -- )
1185 Prints an unsigned 16-bit number converted according to BASE. A trailing
1186 blank follows.
1188 U.R ( u n -- )
1189 Print the unsigned number u right aligned in a field whose width is n.
1190 No following blank is printed.
1192 U/MOD ( ud u1 -- u2 u3 )
1193 Leave the unsigned remainder u2 and unsigned quotient u3 from the
1194 unsigned double dividend ud and unsigned divisor u1.
1196 UNTIL ( f --       run-time)
1197       ( addr n --  compile) P,C2,L0
1198 Occurs within a colon-definition in the form:    BEGIN ... UNTIL
1199 At run-time, UNTIL controls the conditional branch back to the
1200 corresponding BEGIN. If f is false, execution returns to just after
1201 BEGIN; if true, execution continues ahead.
1202 At compile-time, UNTIL compiles (0BRANCH) and an offset from HERE to
1203 addr. n is used for error tests.
1205 UPDATE L0
1206 marks the most recently referenced block (pointed to by PREV) as
1207 altered. The block will subsequently be transferred automatically to
1208 disk should its buffer be required for storage of a different block.
1210 USE ( -- addr )
1211 A variable containing the address of the block buffer to use next, as
1212 the least recently written.
1214 USER ( n -- ) L0
1215 A defining word used in the form:    n USER cccc
1216 The parameter field of cccc contains n as a fixed offset relative to the
1217 user pointer register UP for this user variable. When cccc is later
1218 executed, it places the sum of its offset and user area base address on
1219 the stack as the storage address of that particular variable.
1221 VARIABLE E,LU
1222 A defining word used in the form:        n VARIABLE cccc
1223 When VARIABLE is executed, it creates the definition cccc with its
1224 parameter field initialized to n. When cccc is later executed, the
1225 address of its parameter field (containing n) is left on the stack, so
1226 that a fetch or store may access this location.
1228 WORDS
1229 List the names of the definitions in the context vocabulary. "Break"
1230 will terminate the listing.
1232 VOC-LINK ( -- addr ) U
1233 A user variable containing the address of a field in the definition of
1234 the most recently created vocabulary. All vocabulary names are linked by
1235 these fields to allow control by FORGETting through multiple
1236 vocabularies.
1238 VOCABULARY E,L
1239 A defining word used in the form: VOCABULARY cccc
1240 to create a vocabulary definition cccc. Subsequent use of cccc will make
1241 it the CONTEXT vocabulary which is searched first by INTERPRET. The
1242 sequence "cccc DEFINITIONS" will also make cccc the CURRENT vocabulary
1243 into which new definitions are placed.  In fig-FORTH, cccc will be so
1244 chained as to include all definitions of the vocabulary in which cccc is
1245 itself defined. All vocabularies ultimately chain to Forth. By
1246 convention, vocabulary names are to be declared IMMEDIATE. See VOC-LINK.
1248 WARNING ( -- addr ) U
1249 A user variable containing a value controlling messages. If it =1 disk
1250 is present, and screen 4 of drive 0 is the base location for messages.
1251 If it =0, no disk is present and messages will be presented by number.
1252 If it = -1, execute (ABORT) for user defined procedure. See MESSAGE,
1253 ERROR.
1255 WHERE ( n1 n2 -- )
1256 If an error occurs during LOAD from disk, ERROR leaves these values on
1257 the stack. WHERE uses these values to show the user where the error
1258 occurred by printing the screen and line no.
1260 WHILE ( f --                    (run-time)
1261       ( ad1 n1 -- ad1 n1 ad2 n2 ) P,C2
1262 Occurs in a colon-definition in the form: BEGIN ... WHILE (tp) ... REPEAT
1263 At run-time, WHILE selects conditional execution based on boolean flag f.
1264 If f is true (non-zero), WHILE continues execution of the true part thru
1265 to REPEAT, which then branches back to BEGIN. If f is false (zero),
1266 execution skips to just after REPEAT, exiting the structure.
1267 At compile time, WHILE compiles (BRANCH) and leaves ad2 of the reserved
1268 offset. The stack values will be resolved by REPEAT.
1270 WIDTH ( -- addr ) U
1271 In fig-FORTH, a user variable containing the maximum number of letters
1272 saved in the compilation of a definitions' name. It must be 1 thru 31,
1273 with a default value of 31. The name character count and its natural
1274 characters are saved, up to the value in WIDTH. The value may be changed
1275 at any time within the above limits.
1277 WORD ( c -- here ) L0
1278 Read the next text characters from the input stream being interpreted,
1279 until a delimiter c is found, storing the packed character string
1280 beginning at the dictionary buffer HERE. WORD leaves the character count
1281 in the first byte, then the characters, and ends with two or more
1282 blanks. Leading occurrences of c are ignored If BLK is zero, text is
1283 taken from the terminal input buffer, otherwise from the disc block
1284 stored in BILK See BLK, IN.
1287 This is pseudonym for the "null" or dictionary entry for a name of one
1288 character of ascii null. It is the execution procedure to terminate
1289 interpretation of a line of text from the terminal or within a disc
1290 buffer, as both buffers always have a null at the end.
1292 XOR ( n1 n2 -- xor ) -L1
1293 Leave the bitwise logical exclusive-or of two values.
1295 [ P,L1
1296 Used in a colon-definition in form:     : xxx [ words ] more;
1297 Suspend compilations. The words after [ are executed, not compiled.
1298 This allows calculations of compilation exceptions before resuming
1299 compilation with ]. See LITERAL, ].
1301 [COMPILE] P,C
1302 Used in a colon-definition in form:    : xxx [COMPILE] FORTH;
1303 [COMPILE] will force the compilation of an immediate definition, that
1304 would otherwise execute during compilation. The above example will
1305 select the FORTH vocabulary when xxx executed, rather than at compile
1306 time.
1308 ] L1
1309 Resume compilation, to the completion of a colon-definition. See [.