dsforth: added "(TR-CAT)"
[urasm.git] / dsforth / forth.txt
blob79755f51599d3949bc72673dd04f427c0b6d43fc
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 BACK ( addr -- )
512 Calculate the backward branch offset from HERE to addr and compile into
513 the next available dictionary memory address.
515 BASE ( -- addr ) U,L0
516 A user variable containing the current number base used for input and
517 output conversion.
519 BEGIN ( -- addr n  compiling) P,L0
520 Occurs in a colon-definition in forms:
521   BEGIN ... UNTIL
522   BEGIN ... AGAIN
523   BEGIN ... WHILE ... REPEAT
524 At run-time, BEGIN marks the start of a sequence that may be
525 repetitively executed. It serves as a return point from the
526 corresponding UNTIL, AGAIN or REPEAT. When executing UNTIL, a return to
527 BEGIN will occur if the top of the stack is false; for AGAIN and REPEAT
528 a return to BEGIN always occurs.
529 At compile time BEGIN LEAVES its return address and n for compiler error
530 checking.
532 BL ( -- c )
533 A constant that leaves the ASCII values for "blank".
535 BLANKS ( addr count -- )
536 Fill an area of memory beginning at addr with count blanks.
538 BLEEP ( n1 n2 -- )
539 Produce a tone in the Spectrum noise maker of duration n1, pitch n2.
541 BLOCK ( n -- addr ) L0
542 Leave the memory address of the block buffer containing block n. If the
543 block is not already in memory, it is transferred from microdrive to
544 which ever buffer was least recently written. If the block occupying
545 that buffer has been marked as updated, it is rewritten to microdrive
546 before block n is read into the buffer. See also BUFFER, R/W UPDATE
547 FLUSH
549 BRANCH C2,L0
550 The run-time procedure to unconditionally branch. An in-line offset is
551 added to the interpretive pointer IP to branch ahead or back. BRANCH is
552 compiled by ELSE, AGAIN, REPEAT.
554 BRANCHT C2,L0
555 The run-time procedure to conditionally branch. If f is true (non-zero),
556 the following in-line parameter is added to the interpretive pointer to
557 branch ahead or back. Compiled by IFNOT.
559 BORDER  ( n -- )
560 Set the border to colour n.
562 BUFFER  ( n -- addr )
563 Obtain the next memory buffer, assigning it to block n. If the contents
564 of the buffer is marked as updated, it is written to the microdrive. The
565 block is not read from the microdrive. The address left is the first
566 cell within the buffer to data storage.
569 Exit to Basic/TR-DOS.
571 C! ( b addr -- )
572 Store 8 bits at address.
574 C/L ( -- n )
575 Constant leaving the number of characters per line; used by the editor.
577 C, ( b -- )
578 Store 8 bits of b into the next available dictionary byte, advancing the
579 dictionary pointer.
581 C@ ( addr -- b )
582 Leave the 8 bit contents of memory address.
584 CASE ( -- n  compiling)
585 Occurs in a colon definition in the form:
586   CASE
587     n OF .....   ENDOF
588   ENDCASE
589 At run-time, CASE marks the start of a sequence of OF ... ENDOF statements.
590 At compile-time CASE leaves n for compiler error checking.
592 CFA ( pfa -- cfa )
593 Convert the parameter field address of a definition to its code field address.
595 CLS ( -- )
596 Performs the clear-screen home-cursor function.
598 CMOVE ( from to count -- )
599 Move the specified quantity of bytes beginning at address from , to
600 address to. The contents of address from is moved first, proceeding
601 toward high memory.
603 COLD
604 The cold start procedure to adjust the dictionary pointer to the minimum
605 standard and restart via ABORT. May be called from the terminal to
606 remove application programs and restart.
608 COMPILE C2
609 When the word containing COMPILE executes, the execution address of the
610 word following COMPILE is copied (compiled) into the dictionary. This
611 allows specific compilation situations to be handled in addition to
612 simply compiling an execution address (which the interpreter already
613 does).
615 CONSTANT ( n -- ) L0
616 A defining word used in the form: n CONSTANT cccc
617 to create word cccc, with its parameter field containing n. When cccc is
618 later executed, it will push the value of n to the stack.
620 CONTEXT ( -- addr ) U,L0
621 A user variable containing a pointer to the vocabulary within which
622 dictionary searches will first begin.
624 COUNT ( addr1 -- addr2 n ) L0
625 Leave the byte address addr2 and byte count n of a message text
626 beginning at address addr1. It is presumed that the first byte at addr1
627 contains the text byte count and the actual text starts with the second
628 byte. Typically COUNT is followed by TYPE.
630 CR L0
631 Transmit a carriage return and line feed to the selected output device.
633 CREATE
634 A defining word used in the form: CREATE cccc
635 by such words as CODE and CONSTANT to create a dictionary header for a
636 Forth definition. The code field contains the address of the word's
637 parameter field. The new word is created in the current vocabulary.
639 CSP ( -- addr ) U
640 A user variable temporarily storing the stack pointer position, for
641 compilation error checking.
643 D+ ( d1 d2 -- dsum )
644 Leave the double number sum of two double numbers.
646 D+- ( d1 n -- d2 )
647 Apply the sign of n to the double number d1, leaving it as d2.
649 D. ( d -- ) L1
650 Print a signed double number from a 32 bit two's complement value. The
651 high-order 16 bits are most accessible on the stack. Conversion is
652 performed according to the current BASE. A blank follows. Pronounced
653 D-dot.
655 D.R ( d n -- )
656 Print a signed double number d, right aligned in a field n characters wide.
658 DABS ( d -- ud )
659 Leave absolute value ud of a double number.
661 DECIMAL ( L0 )
662 Set the numeric conversion base for decimal input-output.
664 DEFINITIONS ( LI )
665 Used in the form:  cccc DEFINITIONS
666 Set the CURRENT vocabulary to the CONTEXT vocabulary. In the example,
667 executing vocabulary name cccc made it the CONTEXT vocabulary and
668 executing DEFINITIONS made if both the CONTEXT and CURRENT vocabularies.
670 DIGIT ( c n1 -- n2 tf  ok)
671       ( c n1 -- ff     bad)
672 Converts the ascii character c (using base n1) to its binary equivalent
673 n2, accompanied by a true flag. If the conversion is invalid, leaves
674 only a false flag.
676 DLITERAL ( d -- d  executing)
677          (d --     compiling) P
678 If compiling, compile a double number from the stack into a literal.
679 Later execution of the definition containing the literal will push it to
680 the stack. If executing, the number will remain on the stack.
682 DNEGATE ( d1 -- d2 )
683 Convert d1 to its double number two's complement.
685 DO ( n1 n2 --   execute)
686    ( addr n --  compile) P,C2,L0
687 Occurs in a colon-definition in forms:
688   DO ... LOOP
689   DO... +LOOP
690 At run time, DO begins a sequence with repetitive execution controlled
691 by a loop limit n1 and an index with initial value n2. DO removes these
692 from the stack. Upon reaching LOOP the index is incremented by one, and
693 B, unless A. In this case the loop parameters are discarded and
694 execution continues ahead. Both n1 and n2 are determined at run-time and
695 may be the result of other operations. Within a loop 'I' will copy the
696 current value of the index to the stack. See I, LOOP, +LOOP, LEAVE.
697 When compiling with the colon-definition, DO compiles (DO). It then
698 leaves the following address addr, and n for later error checking.
700 DOES> L0
701 A word which defines the run-time action within a high-level defining
702 word.  DOES> alters the code field and first parameter of the new word
703 to execute the sequence of compiled word addresses following DOES>. Used
704 in combination with <BUILDS. When the DOES> part executes it begins with
705 the address of the first parameter of the new word on the stack. This
706 allows interpretation using this area or its contents. Typical uses
707 include the Forth assembler, multidimensional arrays, and compiler
708 generation.
710 DP ( -- addr ) U,L
711 A user variable, the dictionary pointer, which contains the address of
712 the next free memory above the dictionary. The value may be read by HERE
713 and altered by ALLOT.
715 DPL ( -- addr ) U,L0
716 A user variable containing the number of digits to the right of the
717 decimal on double integer input. It may also be used to hold output
718 column location of a decimal point, in user generated formatting. The
719 default value on single number input is -1.
721 DROP ( n -- ) L0
722 Drop the number from the stack.
724 DUP ( n -- n n ) L0
725 Duplicate the value on the stack.
727 ELSE ( addr1 n1 -- )
728      ( addr2 n2  compiling) P,C2,L0
729 Occurs within a colon-definition in the form:   IF ... ELSE ... ENDIF
730 At run-time, ELSE executes after the true part following IF. ELSE forces
731 execution to skip over the following part and resumes execution after
732 the ENDIF. It has no stack effect.
733 At compile-time ELSE compiles BRANCH, reserving space for a branch
734 offset. It leaves the address addr2, and n2 for error testing. ELSE also
735 resolves the pending forward branch from IF by calculating the offset
736 from addr1 to HERE, and storing at addrl.
738 EMIT ( c -- ) L0
739 Transmit ascii character c to the screen.
741 EMPTY-BUFFERS ( L0 )
742 Mark all block-buffers as empty, not necessarily affecting the contents.
743 Updated blocks are not written to the microdrive. This is also an
744 initialisation procedure before first use of the microdrive.
746 ENCLOSE ( addr1 c -- addr1 n1 n2 n3 )
747 The text scanning primitive used by WORD. From the text address addr1
748 and an ascii delimiting character c, is determined the byte offset to
749 the first non-delimiter character n1, the offset to the first delimiter
750 after the text n2, and the offset to the first character not included.
751 This procedure will not process past an ascii 'null", treating it as an
752 unconditional delimiter.
754 END P,C2,L0
755 This is an 'alias' or duplicate definition for UNTIL.
757 ENDCASE ( addr n --  compile)
758 Occurs in a colon definition in the form:
759   CASE
760     n OF ..... ENDOF
761   ENDCASE
762 At run-time ENDCASE marks the conclusion of a CASE statement.
763 At compile-time, ENDCASE computes forward branch offsets.
765 ENDIF ( addr n --  compile)    P,C0,L0
766 Occurs in a colon-definition in forms:
767   IF ... ENDIF
768   IF ... ELSE ... ENDIF
769 At run-time, ENDIF serves only as the destination of a forward branch
770 from IF or ELSE. It marks the conclusion of the conditional structure.
771 THEN is another name for ENDIF. Both names are supported in fig-FORTH.
772 See also IF and ELSE.
773 At compile-time, ENDIF computes the forward branch offset from addr to
774 HERE and stores it at addr. n is used for error tests.
776 ENDOF ( Addr n --  compile)
777 Used as ENDIF but in CASE statements.
779 FILL ( addr quan b -- )
780 Fill memory at the address with the specified quantity of bytes b.
782 ERASE ( addr n -- )
783 Clear to zero a region of memory, n bytes long, starting at addr.
785 ERROR ( n -- in blk )
786 Execute error notification and restart of systems. WARNING is first
787 examined. If 1, the text of line n, relative to screen 4 is printed.
788 This line number may be positive or negative, and beyond just screen 4.
789 If WARNING=0, n is just printed as a message number (RAM disc
790 installation). If WARNING is -1 the definition (ABORT) is executed,
791 which executes the system ABORT. The user may cautiously modify this
792 execution by altering (ABORT). fig-FORTH saves the contents of IN and
793 BLK on the stack to assist in determining the location of the error.
794 Final action is execution of QUIT.
796 EXECUTE ( addr -- )
797 Execute the definition whose code field address is on the stack. The
798 code field address is also called the compilation address.
800 EXIT
801 Force the conclusion of a definition at a different place than the end.
802 Must not be used when the return stack has been modified!
804 EXPECT ( addr count -- ) L0
805 Transfer characters from the terminal to address, until a "return" or
806 the count of characters have been received. One or more nulls are added
807 at the end of the text.
809 FENCE   ( -- addr ) U
810 A user variable containing an address below which FORGETting is not
811 allowed. To forget below this point the user must alter the contents of
812 FENCE.
814 FIRST ( -- n )
815 A constant that leaves the address of the first (lowest) block buffer.
817 FLD ( -- addr ) U
818 A user variable for control of number output field width. Presently
819 unused.
821 FLUSH
822 Write all updated disc buffers to the microdrive.
824 FORGET E,L0
825 Executed in the form:  FORGET cccc
826 Deletes definition named cccc from the dictionary with all entries
827 physically following it. In fig-FORTH, an error message will occur if
828 the CURRENT and CONTEXT vocabularies are not currently the same.
830 FORTH P,L1
831 The name of the primary vocabulary. Execution makes FORTH the CONTEXT
832 VOCABULARY. Until additional user vocabularies are defined, new user
833 definitions become a part of FORTH. FORTH is immediate, so it will
834 execute during the creation of a colon-definition to select this
835 vocabulary at compile time.
837 FREE ( -- n )
838 Returns a value on the stack of the amount of store remaining in bytes.
840 HERE ( -- addr ) L0
841 Leave the address of the next available dictionary location.
843 HEX L0
844 Set the numeric conversion base to sixteen (hexadecimal).
846 HLD ( -- addr )L0
847 A user variable that holds the address of the latest character of text
848 during numeric output conversion.
850 HOLD ( c -- ) L0
851 Used between <# and #> to insert an ascii character into a pictured
852 numeric output string e.g. 2E HOLD will place a decimal point  .
854 I ( -- n ) C, L0
855 Used within a DO-LOOP to copy the loop index to the stack.  See R.
857 I' ( -- n )
858 Copies the last but one value from the return stack (which within a
859 DO-LOOP is the loop limit).
861 ID. ( addr -- )
862 Print a definition's name from its name field address.
864 IF ( f --  run-time)
865    ( -- addr n (compile) P,C2,L0
866 Occurs in a colon-definition in the forms:
867   IF (tp) ... ENDIF
868   IF (tp) ... ELSE (fp)  ... ENDIF
869 At run-time, IF selects execution based on a boolean flag. If f is true
870 (non-zero), execution continues  ahead throughout the true part. If f is
871 false, execution jumps to just after ELSE to execute the false part.
872 After either part, execution resumes after ENDIF. ELSE and its false
873 part are optional. If missing, false execution skips to just after
874 ENDIF.
875 At compile-time IF compiles 0BRANCH and reserves space for an offset at
876 addr. addr and n are used later for resolution of the offset and error
877 testing.
879 IMMEDIATE
880 Mark the most recently made definition so that when encountered at
881 compile time, it will be executed rather than being compiled, i.e. the
882 precedence bit in its header is set. This method allows definitions to
883 handle unusual compiling situations, rather than build them into the
884 fundamental compiler. The user may force compilation of an immediate
885 definition by preceding it with [COMPILE].
887 IN ( -- addr ) L0
888 A user variable containing the byte offset within the current input text
889 buffer (terminal or RAM-disc) from which the next text will be accepted.
890 WORD uses and moves the value of IN.
892 INK ( n -- )
893 Sets the ink colour to n(0-9)
895 INKEY ( -- c )
896 Leaves the value of the key being pressed. If no key being pressed
897 leaves hex FF
899 INP ( n1 -- b )
900 Returns the value read from port n1.
902 INTERPRET
903 The outer text interpreter which sequentially executes or compiles text
904 from the input stream (terminal or RAM-disc) depending on STATE. If the
905 word name cannot be found after a search of CONTEXT and then CURRENT it
906 is converted to a number according to the current base. That also
907 failing, an error message echoing the name with a "?" will; be given.
908 Text input will be taken according to the convention for WORD. If a
909 decimal point is found as part of a number, a double number value will
910 be left. The decimal point has no other purpose than to force this
911 action. See NUMBER.
913 J ( -- n )
914 Used within nested DO loops. Returns the index value of the outer loop.
916 KEY ( -- v ) L0
917 Leave the ascii value of the next terminal key struck.
919 LATEST ( -- addr )
920 Leave the name field address of the topmost word in the CURRENT
921 vocabulary.
923 LEAVE C, L0
924 Force termination of a DO-LOOP at the next opportunity by setting the
925 loop limit equal to the current value of the index. The index itself
926 remains unchanged, and execution proceeds normally until LOOP or +LOOP
927 is encountered.
929 LFA pfa -- lfa
930 Convert the parameter field address of a dictionary definition to its
931 link field address.
933 LIMIT (  -- n )
934 A constant leaving the address just above the highest memory address
935 used by the system.
937 LINE ( n -- addr )
938 Leave address of line n of current screen. This address will be in the
939 RAM-disc buffer area.
941 LIST ( n -- ) L0
942 Display the ASCII text of screen n on the display. SCR contains the
943 screen number during and after this process.
945 LIT ( -- n ) C2,L0
946 Within a colon-definition, LIT is automatically compiled before each 16
947 bit literal number encountered in input text. Later execution of LIT
948 causes the contents of the next dictionary address to be pushed to the
949 stack.
951 LITERAL ( n --  compiling)               P,C2,L0
952 If compiling, then compile the stack value n as a 16 bit literal. This
953 definition is immediate so that it will execute during a colon
954 definition, the intended use is:   : xxx [calculate] LITERAL;
955 Compilation is suspended for the compile time calculation of a value.
956 Compilation is resumed and LITERAL compiles this value.
958 TLOAD ( addr len -- ) L0
959 Begin interpretation of screen n. Loading will terminate at the end of the screen or at;S. See ;S and -->.
961 LOOP ( addr n --  compiling)  P,C2,L0
962 Occurs in a colon-definition in form: DO ... LOOP
963 At run-time, LOOP selectively controls branching back to the
964 corresponding DO based on the loop index and limit. The loop index is
965 incremented by one and compared to the limit. The branch back to DO
966 occurs until the index equals or exceeds the limit; at that time, the
967 parameters are discarded and execution continues ahead.
968 At compile-time, LOOP compiles (LOOP) and uses addr to calculate an
969 offset to DO. n is used for error testing.
971 M* ( nl n2 -- d )
972 A mixed magnitude math operation which leaves the double number signed
973 product of two signed numbers.
975 M/ ( d n1 -- n2 n3 )
976 A mixed magnitude math operator which leaves the signed remainder n2 and
977 signed quotient n3, from a double number d dividend and divisor n1. The
978 remainder takes its sign from the dividend.
980 M/MOD ( ud1 u2 -- u3 ud4 )
981 An unsigned mixed magnitude math operation which leaves a double
982 quotient ud4 and remainder u3, from a double dividend ud1 and single
983 divisor u2.
985 MAX ( n1 n2 -- max ) L0
986 Leave the greater of two numbers.
988 MESSAGE ( n -- )
989 Print on the selected output device the text of line n relative to
990 screen 4 of drive 0. n may be positive or negative. MESSAGE may be used
991 to print incidental text such as report headers. If WARNING is zero, the
992 message will simply be printed as a number (RAM disc system).
994 MIN ( n1 n2 -- min ) L0
995 Leave the smaller of two numbers.
997 MOD             n1 n2 -- mod                   L0
998 Leave the remainder of n1/n2, with the same sign as n1.
1000 NEGATE ( n1 -- n2 ) L0
1001 Leave the two's complement of a number.
1003 NFA ( pfa -- nfa )
1004 Convert the parameter field address of a definition to its name field.
1006 NOOP
1007 A FORTH no-operation.
1009 NOT ( f1 -- f2 )
1010 Leaves a false flag if a true flag is on the stack, else leaves a true
1011 flag. (Actually executes 0=)
1013 NUMBER ( addr -- d )
1014 Convert a character string left at addr with a preceding count, to a
1015 signed double number, using the current numeric base. If a decimal point
1016 is encountered in the text, its position will be given in DPL, but no
1017 other effect occurs. If numeric conversion is not possible, an error
1018 message will be given.
1020 OFFSET ( -- addr ) U
1021 A user variable which may contain a block offset for the RAM-disc. The
1022 contents of OFFSET is added to the stack number by BLOCK. Messages
1023 printed by MESSAGE are independent of OFFSET. See BLOCK, MESSAGE.
1025 OR ( n1 n2 -- or ) L0
1026 Leave the bit-value logical or of two 16 bit values.
1028 OUTP ( n1 n2 -- )
1029 Presents n1 to output port n2.
1031 OVER ( n1 n2 -- n1 n2 n1 ) L0
1032 Copy the second stack value, placing it as the new top.
1034 PAD ( -- addr ) L0
1035 Leaves the address of the text output buffer, which is a fixed offset above HERE.
1037 PFA ( nfa -- pfa )
1038 Convert the name field address of a compiled definition to its parameter
1039 field address.
1041 PLOT ( n1 n2 -- )
1042 Sets point n1(x),n2(y). If this value is off the screen, no action is taken.
1044 POINT ( n1 n2 -- f )
1045 Returns a true flag if n1(x),n2(y) is set, else returns a false flag.
1047 PREV ( -- addr )
1048 A variable containing the address of the buffer most recently
1049 referenced. The UPDATE command marks this buffer to be later written to
1050 microdrive.
1052 QUIT
1053 Clear the return stack, stop compilation, and return control to the
1054 operator's terminal. No message is given.
1056 R# ( -- addr ) U
1057 A user variable which may contain the location of an editing cursor or
1058 other file related function.
1060 R/W ( addr blk f -- )
1061 The fig-FORTH standard disc read-write linkage. addr specifies the
1062 source or destination block buffer. blk is the sequential number of the
1063 referenced block; and f is a flag for f= write and f=1 read. R/W
1064 determines the location on the microdrive, performs the read-write and
1065 performs any error checking.
1067 R>              -- n                                   L0
1068 Remove the top value from the return stack and leave it on the
1069 computation stack. See >R and R.
1071 R@ ( -- n )
1072 Copy the top of the return stack to the computation stack.
1074 R0              -- addr                                U
1075 A user variable containing the initial location of the return stack.
1076 Pronounced R-zero. See RP!
1078 RDROP ( -- n )
1079 Drop the top of the return stack.
1081 QUERY
1082 Input 80 characters of text (or until a "return") from the operators
1083 terminal. Text is positioned at the address contained in TIB with IN set
1084 to zero.
1086 REPEAT ( addr n --  compiling) P,C2
1087 Used within a colon-definition in the form:     BEGIN ... WHILE ... REPEAT
1088 At run-time, REPEAT forces an unconditional branch back to just after
1089 the corresponding BEGIN.
1090 At compile-time, REPEAT compiles BRANCH and the offset from HERE to
1091 addr. n is used for error testing.
1093 ROT ( n1 n2 n3 -- n2 n3 n1 ) L0
1094 Rotate the top three values on the stack, bringing the third to the top.
1096 RP@ ( -- addr )
1097 Leaves the current value in the return stack pointer register.
1100 A computer dependent procedure to initialize the return stack pointer
1101 from user variable R0.
1103 S->D ( n -- d )
1104 Sign extend a single number to form a double number.
1106 S0 ( -- addr ) U
1107 A user variable that contains the initial value for the stack pointer.
1108 Pronounced S-zero. See SP!
1110 SCR ( -- addr )
1111 A user variable containing the screen number most recently referenced by LIST.
1113 SCREEN ( n1 n2 -- a )
1114 Returns the ascii value of the character at line n1, column n2 as long
1115 as that character is not a user-defined character.
1117 SIGN ( n d -- d ) L0
1118 Stores an ascii "-" sign just before a converted numeric output string
1119 in the next output buffer when n is negative. n is discarded, but double
1120 number d is maintained. Must be used between < # and #>.
1122 SIZE ( -- n )
1123 SIZE returns a value on the stack of the current size of the dictionary.
1125 SMUDGE
1126 Used during word definition to toggle the "smudge bit" in a definitions'
1127 name field. This prevents an uncompleted definition from being found
1128 during dictionary searches, until compiling is completed without error.
1131 A computer dependent procedure to initialize the stack pointer from S0.
1133 SP@ ( -- addr )
1134 A computer dependent procedure to return the address of the stack
1135 position to the top of the stack, as it was before SP@ was executed.
1136 (e.g. 1 2 SP@ @ . . . would type 2 2 1)
1138 SPACE L0
1139 Transmit an ascii blank to the output device.
1141 SPACES ( n -- ) L0
1142 Transmit n ascii blanks to the output devic.
1144 STATE ( -- addr ) L0,U
1145 A user variable containing the compilation state. A non-zero value
1146 indicates compilation.
1148 SWAP ( n1 n2 -- n2 n1 ) L0
1149 Exchange the top two values on the stack.
1151 TEXT ( c -- )
1152 Accept following text to PAD. c is the text delimiter.
1154 THEN P,C0,L0
1155 An alias for ENDIF.
1157 TIB ( -- addr ) U
1158 A user variable containing the address of the terminal input buffer.
1160 TOGGLE ( addr b -- )
1161 Complement the contents of addr ' by the bit pattern b.
1163 TRAVERSE ( addr1 n -- addr2 )
1164 Move across the name field of a fig-FORTH, variable length, name field.
1165 addr1 is the address of either the length byte or the last letter. If
1166 n=1, the motion is toward hi memory; if n=-1, the motion is toward low
1167 memory. The addr resulting is address of the other end of the name.
1169 TYPE ( addr count -- )L0
1170 Transmit count characters from addr to the display.
1172 U< ( u1 u2 -- f )
1173 Leave the boolean value of an unsigned less-than comparison. Leaves f=1
1174 for u1 < u2, otherwise leaves 0. This function should be used when
1175 comparing memory addresses.
1177 U* ( u1 u2 -- ud )
1178 Leave the unsigned double number product of two unsigned numbers.
1180 U. ( u -- )
1181 Prints an unsigned 16-bit number converted according to BASE. A trailing
1182 blank follows.
1184 U.R ( u n -- )
1185 Print the unsigned number u right aligned in a field whose width is n.
1186 No following blank is printed.
1188 U/MOD ( ud u1 -- u2 u3 )
1189 Leave the unsigned remainder u2 and unsigned quotient u3 from the
1190 unsigned double dividend ud and unsigned divisor u1.
1192 UNTIL ( f --       run-time)
1193       ( addr n --  compile) P,C2,L0
1194 Occurs within a colon-definition in the form:    BEGIN ... UNTIL
1195 At run-time, UNTIL controls the conditional branch back to the
1196 corresponding BEGIN. If f is false, execution returns to just after
1197 BEGIN; if true, execution continues ahead.
1198 At compile-time, UNTIL compiles (0BRANCH) and an offset from HERE to
1199 addr. n is used for error tests.
1201 UPDATE L0
1202 marks the most recently referenced block (pointed to by PREV) as
1203 altered. The block will subsequently be transferred automatically to
1204 disk should its buffer be required for storage of a different block.
1206 USE ( -- addr )
1207 A variable containing the address of the block buffer to use next, as
1208 the least recently written.
1210 USER ( n -- ) L0
1211 A defining word used in the form:    n USER cccc
1212 The parameter field of cccc contains n as a fixed offset relative to the
1213 user pointer register UP for this user variable. When cccc is later
1214 executed, it places the sum of its offset and user area base address on
1215 the stack as the storage address of that particular variable.
1217 VARIABLE E,LU
1218 A defining word used in the form:        n VARIABLE cccc
1219 When VARIABLE is executed, it creates the definition cccc with its
1220 parameter field initialized to n. When cccc is later executed, the
1221 address of its parameter field (containing n) is left on the stack, so
1222 that a fetch or store may access this location.
1224 WORDS
1225 List the names of the definitions in the context vocabulary. "Break"
1226 will terminate the listing.
1228 VOC-LINK ( -- addr ) U
1229 A user variable containing the address of a field in the definition of
1230 the most recently created vocabulary. All vocabulary names are linked by
1231 these fields to allow control by FORGETting through multiple
1232 vocabularies.
1234 VOCABULARY E,L
1235 A defining word used in the form: VOCABULARY cccc
1236 to create a vocabulary definition cccc. Subsequent use of cccc will make
1237 it the CONTEXT vocabulary which is searched first by INTERPRET. The
1238 sequence "cccc DEFINITIONS" will also make cccc the CURRENT vocabulary
1239 into which new definitions are placed.  In fig-FORTH, cccc will be so
1240 chained as to include all definitions of the vocabulary in which cccc is
1241 itself defined. All vocabularies ultimately chain to Forth. By
1242 convention, vocabulary names are to be declared IMMEDIATE. See VOC-LINK.
1244 WARNING ( -- addr ) U
1245 A user variable containing a value controlling messages. If it =1 disk
1246 is present, and screen 4 of drive 0 is the base location for messages.
1247 If it =0, no disk is present and messages will be presented by number.
1248 If it = -1, execute (ABORT) for user defined procedure. See MESSAGE,
1249 ERROR.
1251 WHERE ( n1 n2 -- )
1252 If an error occurs during LOAD from disk, ERROR leaves these values on
1253 the stack. WHERE uses these values to show the user where the error
1254 occurred by printing the screen and line no.
1256 WHILE ( f --                    (run-time)
1257       ( ad1 n1 -- ad1 n1 ad2 n2 ) P,C2
1258 Occurs in a colon-definition in the form: BEGIN ... WHILE (tp) ... REPEAT
1259 At run-time, WHILE selects conditional execution based on boolean flag f.
1260 If f is true (non-zero), WHILE continues execution of the true part thru
1261 to REPEAT, which then branches back to BEGIN. If f is false (zero),
1262 execution skips to just after REPEAT, exiting the structure.
1263 At compile time, WHILE compiles (BRANCH) and leaves ad2 of the reserved
1264 offset. The stack values will be resolved by REPEAT.
1266 WIDTH ( -- addr ) U
1267 In fig-FORTH, a user variable containing the maximum number of letters
1268 saved in the compilation of a definitions' name. It must be 1 thru 31,
1269 with a default value of 31. The name character count and its natural
1270 characters are saved, up to the value in WIDTH. The value may be changed
1271 at any time within the above limits.
1273 WORD ( c -- ) L0
1274 Read the next text characters from the input stream being interpreted,
1275 until a delimiter c is found, storing the packed character string
1276 beginning at the dictionary buffer HERE. WORD leaves the character count
1277 in the first byte, then the characters, and ends with two or more
1278 blanks. Leading occurrences of c are ignored If BLK is zero, text is
1279 taken from the terminal input buffer, otherwise from the disc block
1280 stored in BILK See BLK, IN.
1283 This is pseudonym for the "null" or dictionary entry for a name of one
1284 character of ascii null. It is the execution procedure to terminate
1285 interpretation of a line of text from the terminal or within a disc
1286 buffer, as both buffers always have a null at the end.
1288 XOR ( n1 n2 -- xor ) -L1
1289 Leave the bitwise logical exclusive-or of two values.
1291 [ P,L1
1292 Used in a colon-definition in form:     : xxx [ words ] more;
1293 Suspend compilations. The words after [ are executed, not compiled.
1294 This allows calculations of compilation exceptions before resuming
1295 compilation with ]. See LITERAL, ].
1297 [COMPILE] P,C
1298 Used in a colon-definition in form:    : xxx [COMPILE] FORTH;
1299 [COMPILE] will force the compilation of an immediate definition, that
1300 would otherwise execute during compilation. The above example will
1301 select the FORTH vocabulary when xxx executed, rather than at compile
1302 time.
1304 ] L1
1305 Resume compilation, to the completion of a colon-definition. See [.