diff --git a/glossary.txt b/glossary.txt new file mode 100644 index 0000000..57e597b --- /dev/null +++ b/glossary.txt @@ -0,0 +1,1455 @@ +This glossary contains all of the word definitions in Release 1 of +fig-FORTH. The definitions are presented in the order of their ascii sort. +Dated: 1979-MAY. +Copyright: See DISTRIBUTION in figdoc.txt +OCER-ed by Albert van der Horst DFW The Netherlands 2000-MAR + +The first line of each entry shows a symbolic description of the action of +the proceedure on the parameter stack. The symbols indicate the order in +which input parameters have been placed on the stack. Three dashes "---" +indicate the execution point; any parameters left on the stack are listed. +In this notation, the top of the stack is to the right. + + +The symbols include: + +addr memory address +b 8 bit byte (i.e. hi 8 bits zero) +c 7 bit ascii character (hi 9 bits zero) +d 32 bit signed double integer} most significant portion with sign + on top of stack. +f boolean flag. 0=false, non-zero=true +ff boolean false flag=0 +n 16 bit signed integer number +u 16 bit unsigned integer +tf boolean true flag=non-zero + +The capital letters on the right show definition characteristics: + +C May only be used within a colon definition. A digit indicates number + of memory addresses used, if other than one. +E Intended for execution only. +L0 Level Zero definition of FORTH-78 +L1 Level One definition of FORTH-78 +P Has precedence bit set. Will execute even when compiling. +U A user variable. + + +Unless otherwise noted, all references to numbers are for 16 bit signed +integers. On 8 bit data bus computers, the high byte of a number is on top +of the stack, with the sign in the leftmost bit. For 32 bit signed double +numbers, the most significant part (with the sign) is on top. + +All arithmetic is implicitly 16 bit signed integer math, with error and +under-flow indication unspecified. + +! n addr --- L0 + Store 16 bits of n at address. Pronounced "store". + + +!CSP + Save the stack position in CSP. Used as part of the compiler + security. + + +# d1 --- d2 L0 + Generate from a double number d1, the next ascii character which is + placed in an output string. Result d2 is the quotient after division + by BASE, and is maintained for further processing. Used between <# + and #>. + See #S. + + +#> d --- addr count L0 + Terminates numeric output conversion by dropping d, leaving the text + address and character count suitable for TYPE. + + +#S d1 --- d2 L0 + Generates ascii text in the text output buffer, by the use of #, + until a zero double number n2 results. + Used between <# and #>. + + +' --- addr P,L0 + Used in the form: . + ' nnnn + Leaves the parameter field address of dictionary word nnnn. + As a compiler directive, executes in a colon-definition to compile + the address as a literal. If the word is not found after a search of + CONTEXT and CURRENT, an appropriate error message is given. + Pronounced "tick". + + +( P,L0 + Used in the form: + ( cccc) + Ignore a comment that will be delimited by a right + parenthesis on the same line. May occur during execution or in a + colon-definition. A blank after the leading parenthesis is required. + + +(.") C+ + The run-time proceedure, compiled by ." which transmits the + following in-line text to the selected output device. See .'" + + +(;CODE) C + The run-time proceedure, compiled by ;CODE, that rewrites the code + field of the most recently defined word to point to the following + machine code sequence. See ;CODE. + + +(+LOOP) n --- C2 + The run-time proceedure compiled by +LOOP, which increments the loop + index by n and tests for loop completion. See +LOOP. + + +(ABORT) + Executes after an error when WARNING is -1. This word normally + executes ABORT, but may be altered (with care) to a user's + alternative proceedure. + + +(DO) C + The run-time proceedure compiled by DO which moves the loop control + parameters to the return stack. See DO. + + +(FIND) addr1 addr2 --- pfa b tf (ok) + addr1 addr2 .--- ff (bad) + Searches the dictionary starting at the name field address addr2, + matching to the text at addr1. Returns parameter field address, + length byte of name field and boolean true for a good match. If no + match is found, only a boolean false is left. + + +(LINE) n1 n2 --- addr count + Convert the line number n1 and the screen n2 to the disc buffer + address containing the data. A count of 64 indicates the full line + text length. + + +(LOOP) C2 + The run-time proceedure compiled by LOOP which increments the loop + index and tests for loop completion. + See LOOP. + + +(NUMBER) d1 addr1 --- d2 addr2 + Convert the ascii text beginning at addr1+l with regard to BASE. The + new value is accumulated into double number d1, being left as d2. + Addr2 is the address of the first unconvertable digit. Used by + NUMBER. + + +* n1 n2 --- prod L0 + Leave the signed product of two signed numbers. + + +*/ n1 n2 n3 --- n4 L0 + Leave the ratio n4 = n1*n2/n3 where all are signed numbers. + Retention of an intermediate 31 bit product permits greater accuracy + than would. be available with the sequence: + n1 n2 * n3 / + + + +*/MOD n1 n2 n3 --- n4 n5 L0 + Leave the quotient n5 and remainder n4 of the operation n1*n2/n3 A + 31 bit intermediate product is used as for */. + + ++ n1 n2 --- sum L0 + Leave the sum of n1+n2. + + ++! n addr --- L0 + Add n to the value at the address. + Pronounced "plus-store". + + ++- n1 n2 --- n3 + Apply the sign of n2 to n1, which is left as n3. + + ++BUF add1 --- addr2 f + Advance the disc buffer address addr1 to the address of the next + buffer addr2. Boolean f is false when addr2 is the buffer presently + pointed to by variable PREV. + + ++LOOP n1 --- (run) addr n2 --- (compile) P,C2,L0 + Used in a colon-definition in the form: + DO ... n1 +LOOP + At run-time, +LOOP selectively controls branching + back to the corresponding DO based on n1, the loop index and the + loop limit. The signed increment n1 is added to the index and the + total compared to the limit. + The branch back to DO occurs until the new index is equal to or + greater than the limit (n1>0), or until the new index is equal to or + less than the limit (n1<0). Upon exiting the loop, the parameters + are discarded and execution continues ahead. + + + At compile time, +LOOP compiles the run-time word (+LOOP) and the + branch offset computed from HERE to the address left on the stack by + DO. n2 is used for compile tine error checking. + + ++ORIGIN n --- addr + Leave the memory address relative by n to the origin parameter area. + n is the minimum address unit, either byte or word. This definition + is used to access or modify the boot-up parameters at the origin + area. + + +, n --- , L0 + Store n into the next available dictionary memory cell, advancing + the dictionary pointer. (comma) + + +- n1 n2 --- diff L0 + Leave the difference of n1-n2. + + +--> P,L0 + Continue interpretation with the next disc screen. (pronounced + next-screen). + + +-DUP n1 -- n1 (if zero) n1 -- n1 n1 (non-zero) L0 + Reproduce n1 only if it is non-zero. + This is usually used to copy a value just before IF, to eliminate + the need for an ELSE part to drop it. + + +-FIND --- pfa b tf (found) --- ff (not found) + Accepts the next text word (delimited by blanks) in the input stream + to HERE, and searches the CONTEXT and then CURRENT vocabularies + for a matching entry. If found, the dictionary entry's parameter + field address, its length byte, and a boolean true is left. + Otherwise, only a boolean false is left. + + +-TRAILING addr n1 --- addr n2 + Adjusts the character count n1 of a text string beginning address to + suppress the output of trailing blanks. i.e. the characters at + addr+n1 to addr+n2 are blanks. + + +. n --- L0 + Print a number from a signed l6 bit two's complement value, + converted according to the numeric BASE. + A trailing blanks follows. + Pronounced "dot". + + +." P,L0 + Used in the form: + .', cccc" + Compiles an in-line string cccc (delimited by the trailing ") with + an execution proceedure to transmit the text to the selected output + device. + If executed outside a definition, ." will immediately print the text + until the final ',. The maximum number of characters may be an + installation dependent value. See (."). + + +-LINE line scr -- + Print on the terminal device, a line of text from the disc by its + line and screen number. Trailing blanks are suppressed. + + +.R n1 n2 --- + Print the number n1 right aligned in a field whose width is n2. No + following blank is printed. + + +/ n1 n2 --- quot L0 + Leave the signed quotient of n1/n2. + + +/MOD n1 n2 --- rem quot L0 + Leave the remainder and signed quotient of n1/n2. The remainder has + the sign of the dividend. + + +0 1 2 3 --- n + These small numbers are used so often that is is attractive to + define them by name in the dictionary as constants. + + +0< n --- f L0 + Leave a true flag if the number is less than zero (negative), + otherwise leave a false flag. + + +0= n --- f L0 + Leave a true flag is the number is equal to zero, otherwise leave a + false flag. + + +0BRANCH f --- C2 + The run-time proceedure to conditionally branch. If f is false + (zero), the following in-line parameter is added to the interpretive + pointer to branch ahead or back. Compiled by IF, UNTIL, and WHILE. + + +1+ n1 --- n2 L1 + Increment n1 by l. + + +2+ n1 --- n2 + Leave n1 incremented by 2. + + +: P,E,L0 + Used in the form called a colon-definition: + : cccc ... ; + Creates a dictionary entry defining cccc as equivalent to the + following sequence of Forth word definitions '...' until the next + ';' or ';CODE'. + The compiling process is done by the text interpreter as long as + STATE is non-zero. Other details are that the CONTEXT vocabulary is + set to the CURRENT vocabulary and that words with the precedence bit + set (P) are executed rather than being compiled. + + +; P,C,L0 + Terminate a colon-definition and stop further compilation. Compiles + the run-time ;S. + + +;CODE P,C,L0 + Used in the form: + : cccc .... ;CODE + assembly mnemonics Stop compilation and terminate a new defining + word cccc by compiling (;CODE). Set the CONTEXT vocabulary to + ASSEMBLER, assembling to machine code the following mnemonics. + + When cccc later executes in the form: + cccc nnnn + the word nnnn will be created with its execution proceedure given by + the machine code following cccc. + That is, when nnnn is executed, it does so by jumping to the code + after nnnn. An existing defining word must exist in cc prior to + ;CODE + + +;S P,L0 + Stop interpretation of a screen. + ;S is also the run-time word compiled at the end of a + colon-definition which returns execution to the calling proceedure. + + +< n1 n2 --- f L0 + Leave a true flag if n1 is less than n2; otherwise leave a false + flag. + + +<# L0 + Setup for pictured numeric output formatting using the words: + <# # #S SIGN #> + The conversion is done on a double number producing + text at PAD. + + + ... ; + Each time cccc is executed, part for nnnn. When nnnn is later executed, it has the + address of its parameter area on the stack and executes the words + after DOES> in cccc. allow runtime proceedures to + written in high-level rather than in assembler code (as required by + ;CODE). + + += n1 n2 --- f L0 + Leave a true flag if n1=n2; otherwise leave a false flag. + + +> n1 n2 --- f L0 + Leave a true flag if n1 is greater than n2; otherwise a false flag. + + +>R n --- C,L0 + Remove a number from the computation stack and place as the most + accessable on the return stack. Use should be balanced with R> in + the same definition. + + +? addr -- L0 + Print the value contained at the address in free format according to + the current base. + + +?COMP + Issue error message if not compiling. + + +?CSP + Issue error message if stack position differs from value saved in + CSP. + + + ERROR f n -- + Issue an error message number n, if the boolean flag is true. + + +?EXEC + Issue an error message if not executing. + + +?LOADING + Issue an error message if not loading + + +?PAIRS n1 n2 -- + Issue an error message if n1 does not equal n2. The message + indicates that compiled conditionals do not match. + + +?STACK + Issue an error message is the stack is out of bounds. This + definition may be installation dependent. + + +?TERMINAL --- f + Perform a test of the terminal keyboard for actuation of the break + key. A true flag indicates actuation. + This definition is installation dependent. + + +@ addr --- n L0 + Leave the 16 bit contents of address. + + +ABORT L0 + Clear the stacks and enter the execution state. Return control to + the operators terminal, printing a message appropriate to the + installation. + + +ABS n --- u L0 + Leave the absolute value of n as u. + + +AGAIN addr n --- (compiling) P,C2,L0 + Used in a colon-definition in the form: + BEGIN ... AGAIN + At run-time, AGAIN forces execution to return to corresponding + BEGIN. + There is no effect on the stack. Execution cannot leave this loop + (unless R> DROP is executed one level below). + + At compile time, AGAIN compiles BRANCH with an offset from HERE to + addr. n is used for compile-time error checking. + + +ALLOT n --- L0 + Add the signed number to the dictionary pointer DP. May be used to + reserve dictionary space or re-origin memory. n is with regard to + computer address type (byte or word). + + +AND n1 n2 --- n2 L0 + Leave the bitwise logical and of n1 and n2 as n3. + + +B/BUF --- n + This constant leaves the number of bytes per disc buffer, the byte + count read from disc by BLOCK. + + +B/SCR --- n + This constant leaves the number of blocks per editing screen. By + convention, an editing screen is 1O24 bytes organized as 16 lines of + 64 characters each. + + +BACK addr -- + Calculate the backward branch offset from HERE to addr and compile + into the next available dictionary memory address. + + +BASE --- addr U,L0 + A user variable containing the current number base used for input + and output conversion. + + +BEGIN --- addr n (compiling) P,L0 + Occurs in a colon-definition in form: + BEGIN ... UNTIL + BEGIN ... AGAIN + BEGIN ... WHILE ... REPEAT + At run-time, BEGIN marks the start of a sequence that may be + repetitively executed. It serves as a return point from the + corresponding UNTIL, AGAIN or REPEAT. When executing UNTIL, a return + to BEGIN will occur if the top of the stack is false; + for AGAIN and REPEAT a return to BEGIN always occurs. + + At compile time BEGIN leaves its return address and n for compiler + error checking. + + +BL --- c + A constant that leaves the ascii value for "blank". + + +BLANKS addr count -- + Fill an area of memory beginning at addr with blanks. + + +BLK --- addr U,L0 + A user variable containing the block number being interpreted. If + zero, input is being taken from the terminal input buffer. + + +BLOCK n --- addr L0 + Leave the memory address of the block buffer containing block n. If + the block is not already in memory, it is transferred from disc to + which ever buffer Was least recently written. If the block occupying + that buffer has been marked as updated, it is rewritten to disc + before block n is read into the buffer. See also BUFFER, R/W UPDATE + FLUSH + + +BLOCK-READ +BLOCK-WRITE + These are the preferred names for the installation dependent code to + read and write one block to the disc. + + +BRANCH C2,L0 + The run-time proceedure to unconditionally branch. An in-line offset + is added to the interpretive pointer IP to branch ahead or back. + BRANCH is compiled by ELSE, AGAIN, REPEAT. + + +BUFFER n --- addr + Obtain the next memory buffer, assigning it to block n. If the + contents of the buffer is marked as updated, it is written to the + disc The block is not read from the disc. + The address left is the first cell within the buffer for data + storage. + + +C! b addr --- + Store 8 bits at address. On word addressing computers, further + specification is necessary regarding byte addressing. + + +C, b --- + Store 8 bits of b into the next available dictionary byte, advancing + the dictionary pointer. This is only available on byte addressing + computers, and should be used with caution on byte addressing mini- + computers. + + +C@ addr --- b + Leave the 8 bit contents of memory address. On word addressing + computers, further specification is needed regarding byte + addressing. + + +CFA pfa --- cfa + Convert the parameter field address of a definition to its code + field address. + + +CMOVE from to count -- + Move the specified quantity of bytes beginning at address from to + address to. The contents of address from is moved first proceeding + toward high memory. Further specification is necessary on word + addressing computers. + + +COLD + The cold start proceedure to adjust the dictionary pointer to + the minimum standard and restart via ABORT. + May be called from the terminal to remove application programs and + restart. + + +COMPILE C2 + When the word containing COMPILE executes, the execution address of + the word following COMPILE is copied (compiled) into the dictionary. + This allows specific compilation situations to be handled in + addition to simply compiling an execution address (which the + interpreter already does). + + +CONSTANT n --- L0 + A defining word used in the form: + n CONSTANT cccc + to create word cccc, with its parameter field containing n. When + cccc is later executed, it will push the value of n to the stack. + + +CONTEXT --- addr U,L0 + A user variable containing a pointer to the vocabulary within which + dictionary searches will first begin. + + +COUNT addr1 --- addr2 n L0 + Leave the byte address addr2 and byte count n of a message text + beginning at address addr1. It is presumed that the first byte at + addr1 contains the text byte count and the actual text starts with + the second byte. + Typically COUNT is followed by TYPE. + + +CR L0 + Transmit a carriage return and line feed to the selected output + device. + + +CREATE + A defining word used in the form: + CREATE cccc + by such words as CODE and CONSTANT to create a dictionary header for + a Forth definition. The code field contains the address of the words + parameter field. The new word is created in the CURRENT vocabulary. + + +CSP ---- addr U + A user variable temporarily storing the stack pointer position, for + compilation error checking. + + +D+ d1 d2 --- dsum + Leave the double number sum of two double numbers. + + +D+- d1 n --- d2 + Apply the sign of n to the double number d1, leaving it as d2. + + +D. d --- L1 + Print a signed double number from a 32 bit two's complement value. + The high-order l6 bits are most accessable on the stack. Conversion + is performed according to the current BASE. A blank follows. + Pronounced D-dot. + + +D.R d n --- + Print a signed double number d right aligned in a field n characters + wide. + + +DABS d --- ud + Leave the absolute value ud of a double number. + + +DECIMAL L0 + Set the numeric conversion BASE for decimal input-output. + + +DEFINITIONS L1 + Used in the form: + cccc DEFINITIONS + Set the CURRENT vocabulary to the CONTEXT vocabulary. In the + example, executing vocabulary name cccc made it the CONTEXT + vocabulary and executing DEFINITIONS made both specify vocabulary + cccc. + + +DIGIT c n1 --- n2 tf (ok) c n1 --- ff (bad) + Converts the ascii character c (using base n1) to its binary + equivalent n2, accompanied by a true flag. If the conversion is + invalid, leaves only a false flag. + + +DLIST + List the names of the dictionary entries in the CONTEXT vocabulary. + + +DLITERAL d --- d (executing) d --- (compiling) P + If compiling, compile a stack double number into a literal. Later + execution of the definition containing the literal will push it to + the stack. If executing, the number will remain on the stack. + + +DMINUS d1 --- d2 + Convert d1 to its double number two's complement. + + +DO n1 n2 --- (execute) + addr n --- (compile) P,C2,L0 + Occurs in a colon-definition in form: + DO ... LOOP + + +DO ... +LOOP + At run time, DO begins a sequence with repetitive execution + controlled by a loop limit n1 and an index with initial value n2. DO + removes these from the stack. Upon reaching LOOP the index is + incremented by one. + Until the new index equals or exceeds the limit, execution loops + back to just after DO; otherwise the loop parameters are discarded + and execution continues ahead. Both n1 and n2 are determined at + run-time and may be the result of other operations. + Within a loop 'I' will copy the current value of the index to the + stack. See I, LOOP, +LOOP, LEAVE. + + When compiling within the colon definition, DO compiles (DO), leaves + the following address addr and n for later error checking. + + +DOES> L0 + A word which defines the run-time action within a high-level + defining word. DOES> alters the code field and first parameter of + the new word to execute the sequence of compiled word addresses + following DOES>. Used in combination with + part executes it begins with the address of the first parameter of + the new word on the stack. This allows interpretation using this + area or its contents. Typical uses include the Forth assembler, + multidimensional arrays, and compiler generation. + + +DP ---- addr U,L + A user variable, the dictionary pointer, which contains the address + of the next free memory above the dictionary. The value may be read + by HERE and altered by ALLOT. + + +DPL ---- addr U,L0 + A user variable containing the number of digits to the right of the + decimal on double integer input. It may also be used hold output + column location of a decimal point, in user generated formating. The + default value on mingle number input is -1. + + +DR0 +DR1 + Installation dependent commands to select disc drives, by presetting + OFFSET. The contents of OFFSET is added to the block number in BLOCK + to allow for this selection. Offset is suppressed for error text so + that is may always originate from drive 0. + + +DROP n --- L0 + Drop the number from the stack. + + +DUMP addr n --- L0 + Print the contents of n memory locations beginning at addr. Both + addresses and contents are shown in the current numeric base. + + +DUP n --- n n L0 + Duplicate the value on the stack. + + . +ELSE addr1 n1 --- addr2 n2 + (compiling) P,C2,L0 + Occurs within a colon-definition in the form: + IF ... ELSE ... ENDIF + At run-time, ELSE executes after the true part following IF. ELSE + forces execution to skip over the following false part and resumes + execution after the ENDIF. It has no stack effect. + + At compile-time ELSE emplaces BRANCH reserving a branch offset, + leaves the address addr2 and n2 for error testing. ELSE also + resolves the pending forward branch from IF by calculating the + offset from addr1 to HERE and storing at addr1. + + +EMIT c --- L0 + Transmit ascii character c to the selected output device. OUT is + incremented for each character output. + + +EMPTY-BUFFERS L0 + Mark all block-buffers as empty, not necessarily affecting the + contents. + Updated blocks are not written to the disc. This is also an + initialization proceedure before first use of the disc. + + +ENCLOSE addr1 c -- addr1 n1 n2 n3 + The text scanning primitive used by WORD. From the text address + addr1 and an ascii delimiting character c, is determined the byte + offset to the first non-delimiter character n1, the offset to the + first delimiter after the text n2, and the offset to the first + character not included. + This proceedure will not process past an ascii 'null', treating it + as an unconditional delimiter. + + +END P,C2,L0 + This is an 'alias' or duplicate definition for UNTIL. + + +ENDIF addr n --- (compile) P,CO,L0 + Occurs in a colon-definition in form: + IF ... ENDIF + IF ... ELSE ... ENDIF + At run-time, ENDIF serves only as the destination of a forward + branch from IF or ELSE. It marks the conclusion of the conditional + structure. THEN is another name for ENDIF. Both names are supported + in fig-FORTH. See also IF and ELSE. + + At compile-time, ENDIF computes the forward branch offset from addr + to HERE and stores it at addr. n is used for error tests. + + +ERASE addr n -- + Clear a region of memory to zero from addr over n addresses. + + +ERROR line --- in blk + Execute error notification and restart of system. WARNING is first + examined. If 1, the text of line n, relative to screen 4 of drive O + is printed. This line number may be positive or negative, and beyond + just screen 4. If WARNING=O, n is just printed as a message number + (non disc installation). If WARNING is -l, the definition (ABORT) is + executed, which executes the system ABORT. The user may cautiously + modify this execution by altering (ABORT). + fig-FORTH saves the contents of IN and BLK to assist in determining + the location of the error. Final action is execution of QUIT. + + +EXECUTE addr - + Execute the definition whose code field address is on the stack. The + code field address is also called the compilation address. + + +EXPECT addr count --- L0 + Transfer characters from the terminal to address, until a "return" + or the count of characters have been received. One or more nulls are + added at the end of the text. + + +FENCE --- addr U + A user variable containing an address below which FORGETting is + trapped. To forget below this point the user must alter the contents + of FENCE. + + +FILL addr quan b -- + Fill memory at the address with the specified quantity of bytes b. + + +FIRST --- n + A constant that leaves the address of the first (lowest) block + buffer. + + +FLD --- addr U + A user variable for control of number output field width. Presently + unused in fig-FORTH. + + +FORGET E,L0 + Executed in the form: + FORGET cccc + Deletes definition named cccc from the dictionary with all entries + physically following it. In fig-FORTH, an error message will occur + if the CURRENT and CONTEXT vocabularies are not currently the same. + + +FORTH P,L1 + The name of the primary vocabulary. + Execution makes FORTH the CONTEXT vocabulary. Until additional user + vocabularies are defined, new user definitions become a part of + FORTH. FORTH is immediate, so it will execute during the creation of + a colon-definition, to select this vocabulary at compile time. + + +HERE --- addr L0 + Leave the address of the next available dictionary location. + + +HEX L0 + Set the numeric conversion base to sixteen (hexadecimal). + + +HLD --- addr L0 + A user variable that holds the address of the latest character of + text during numeric output conversion. + + +HOLD c --- L0 + Used between <# and #> to insert an ascii character into a pictured + numeric output string. + e.g. 2E HOLD will place a decimal point. + + +I --- n C,L0 + Used within a DO-LOOP to copy the loop index to the stack. Other use + is implementation dependent. + See R. + + +ID. addr -- + Print a definition's name from its name field address. + + +IF f --- (run-time) -- addr n + (compile) P,C2,L0 + Occurs is a colon-definition in form: + IF (tp) ... ENDIF . + IF (tp) ... ELSE (fp) ... ENDIF + At run-time, IF selects execution based on a boolean flag. If f is + true (non-zero), execution continues ahead thru the true part. If f + is false (zero), execution skips till just after ELSE to execute + the false part. After either part, execution resumes after ENDIF. + ELSE and its false part are optional.; if missing, false execution + skips to just after ENDIF.. + + At compile-time IF compiles 0BRANCH and reserves space for an offset + at addr. addr and n are used later for resolution of the offset and + error testing. + + +IMMEDIATE + Mark the most recently made definition so that when encountered at + compile time, it will be executed rather than being compiled. i.e. + the precedence bit in its header is set. + This method allows definitions to handle unusual compiling + situations, rather. than build them into the fundamental compiler. + The user may force compilation of an immediate definition by + preceeding it with [COMPILE], + + +IN --- addr L0 + A user variable containing the byte offset within the current input + text buffer (terminal or disc) from which the next text will be + accepted. WORD uses and moves the value of IN. + + +INDEX from to -- + Print the first line of each screen over the range from, to. This is + used to view the comment lines of an area of text on disc screens. + + +INTERPRET + The outer text interpreter which sequentially executes or compiles + text from the input stream (terminal or disc) depending on STATE. If + the word name cannot be found after a search of CONTEXT and then + CURRENT it is converted to a number according to the current base. + That also failing, an error message echoing the name with a " ?" + will be given. + Text input will be taken according to the convention for WORD. If a + decimal point is found as part of a number, a double number value + will be left. The decimal point has no other purpose than to force + this action. + See NUMBER. + + +KEY --- c L0 + Leave the ascii value of the next terminal key struck. + + +LATEST --- addr + Leave the name field address of the topmost word in the CURRENT + vocabulary. + + +LEAVE C,L0 + Force termination of a DO-LOOP at the next opportunity by setting + the loop limit equal to the current value of the index. The index + itself remains unchanged, and execution proceeds normally until LOOP + or +LOOP is encountered. + + +LFA pfa --- lfa + Convert the parameter field address of a dictionary definition to + its link field address. + + +LIMIT ---- n + A constant leaving the address just above the highest memory + available for a disc buffer. Usually this is the highest system + memory. + + +LIST n --- L0 + Display the ascii text of screen n on the selected output device. + SCR contains the screen number during and after this process. + + +LIT --- n C2,L0 + Within a colon-definition, LIT is automatically compiled before each + 16 bit literal number encountered in input text. Later execution of + LIT causes the contents of the next dictionary address to be pushed + to the stack. + + +LITERAL n --- (compiling) P,C2,L0 + If compiling, then compile the stack value n as a 16 bit literal. + This definition is immediate so that it will execute during a colon + definition. The intended use is: + : xxx [ calculate ] LITERAL ; + Compilation is suspended for the compile time calculation of m + value. + Compilation is resumed and LITERAL compiles this value. + + +LOAD n --- L0 + Begin interpretation of screen n. + Loading will terminate at the end of the screen or at ;S. See ;S and + -->. + + +LOOP addr n --- (compiling) P,C2,L0 + Occurs in a colon-definition in form: + DO ... LOOP + At run-time, LOOP selectively controls branching back to the + corresponding DO based on the loop index and limit. The loop index + is incremented by one and compared to the limit. The branch back to + DO occurs until the index equals or exceeds the limit; + at that time, the parameters are discarded and execution continues + ahead. + + At compile-time. LOOP compiles (LOOP) and uses addr to calculate an + offset to DO. n is used for error testing. + + +M* n1 n2 --- d + A mixed magnitude math operation which leaves the double number + signed product of two signed number. + + +M/ d n1 --- n2 n3 + A mixed magnitude math operator which leaves the signed remainder n2 + and signed quotient n3 from a double number dividend and divisor n1. + The remainder takes its sign from the dividend. + + +M/MOD ud1 u2 --- u3 ud4 + An unsigned mixed magnitude math operation which leaves a double + quotient ud4 and remainder u3, from a double dividend ud1 and single + divisor u2. + + +MAX n1 n2 --- max L0 + Leave the greater of two numbers. + + +MESSAGE n -- + Print on the selected output device the text of line n relative to + screen 4 of drive O. n may be positive or negative. MESSAGE may be + used to print incidental text such as report headers. If WARNING is + zero, the message will simply be printed as a number (disc + unavailable). + + +MIN n1 n2 --- min L0 + Leave the smaller of two numbers. + + +MINUS n1 --- n2 L0 + Leave the two's complement of a number. + + +MOD n1 n2 --- mod L0 + Leave the remainder of n1/n2, with the same sign as n1. + + +MON + Exit to the system monitor, leaving a re-entry to Forth, if + possible. + + +MOVE addr1 addr2 n -- + Move the contents of n memory cells (l6 bit contents) beginning at + addr1 into n ills beginning at addr2. + The contents of addr1 is moved first. + This definition is appropriate on on word addressing computers. + + +NEXT + This is the inner interpreter that uses the interpretive pointer IP + to execute compiled Forth definitions. It is not directly executed + but is ff the return point for all code proceedures. It acts by + fetching the address pointed by IP, storing this value in register + W. It then jumps to the address pointed to by the address pointed to + by W. W points to the code field of a definition which contains + the address of the code which executes for that definition. + This usage of indirect threaded code is a major contributor to the + power, portability, and extensibility of Forth. Locations of IP and + W are computer specific. + + +NFA pfa --- nfa + Convert the parameter. field address of a definition to its name + field. + + +NUMBER addr --- d + Convert a character string left at addr with a preceeding count, to + a signed .double number, using the current numeric base. If a + decimal point is encountered in the text, its position will be + given in DPL, but no other effect occurs. If numeric conversion is + not possible, an error message will be given. + + +OFFSET --- addr U + A user variable which may contain a block offset to disc drives. The + contents of OFFSET is added to the stack number by BLOCK. Messages + by MESSAGE are independent of OFFSET. + See BLOCK, DR0, DR1, MESSAGE. + + +OR n1 n2 -- or L0 + Leave the bit-wise logical or of two l6 bit values. + + +OUT --- addr U + A user variable that contains a value incremented by EMIT. The user + may alter and examine OUT to control display formating. + + +OVER nl n2 --- nl n2 n1 L0 + Copy the second stack value, placing it as the new top. + + +PAD --- addr L0 + Leave the address of the text output buffer, which is a fixed offset + above v HERE. + + +PFA nfa --- pfa + Convert the name field address of a compiled definition to its + parameter field address. + + +POP + The code sequence to remove a stack value and return to NEXT. POP is + not directly executable, but is s Forth re-entry point after machine + code. + + +PREV ---- addr + A variable containing the address of the disc buffer most recently + referenced. The UPDATE command marks this buffer to be later written + to disc. + + +PUSH + This code sequence pushes m3chine registers to the computation stack + and returns to NEXT. It is not directly executable, but is a Forth + re-entry point after machine code. + + +PUT + This code sequence stores machine register contents over the topmost + computation stack value and returns to NEXT. It is not directly + executable, but is a Forth re-entry point after machine code. + + +QUERY + Input 80 characters of text (or until a "return") from the operators + terminal. Text is positioned at the address contained in TIB with IN + set to zero. + + +QUIT + Clear the return stack, stop compilation, and return control to the + operators terminal. No message is given. + + +R --- n + Copy the top of the return stack to the computation stack. + + +R# --- addr U + A user variable which may contain the location of an editing cursor, + or other file related function. + + +R/W addr blk f -- + The fig-FORTH standard disc read-write linkage. addr specifies the + source or destination block buffer, blk is the sequential number of + the referenced block; and f is a flag for f=O write and f=l read. + R/W determines the location on mass storage, performs the read-write + and performs any error checking. + + +R> --- n L0 + Remove the top value from the return stack and leave it on the + computation stack. See >R and R. + + +R0 --- addr U + A user variable containing the initial location of the return stack. + Pronounced R-zero. See RP! + + +REPEAT addr n --- (compiling) P,C2 + Used within a colon-definition in the form: + BEGIN ... WHILE ... REPEAT + At run-time, REPEAT forces an unconditional branch back to just + after the corresponding BEGIN. + + At compile-time, REPEAT compiles BRANCH and the offset from HERE to + addr. n is used for error testing. + + +ROT nl n2 n3 --- n2 n3 nl L0 + Rotate the top three values on the stack, bringing the third to the + top. + + +RP! + A computer dependent proceedure to initialize the return stack + pointer from user variable R0. + + +S->D n --- d + Sign extend a single number to form a double number. + + +SO --- addr U + A user variable that contains the initial value for the stack + pointer. + Pronounced S-zero. See SP! + + +SCR --- addr U + A user variable containing the screen number most recently reference + by LIST. + + +SIGN n d --- d L0 + Stores an ascii "-" sign just before a converted numeric output + string in the text output buffer when n is negative. n is discarded + but double number d is maintained. Must be used between <# and #>. + + +SMUDGE + Used during word definition to toggle the "smudge bit" in a + definitions' name field. This prevents an uncompleted definition + from being found during dictionary searches, until compiling. is + completed without error. + + +SP! + A computer dependent proceedure to initialize the stack pointer from + SO. + + +SP@ --- addr + A computer dependent proceedure to return the address of the stack + position to the top of the stack, as it was before SP@ was executed. + (e.g. 1 2 SP@ @ . . . would + type 2 2 1) + + +SPACE L0 + Transmit an ascii blank to the output device. + + +SPACES n --- L0 + Transmit n ascii blanks to the output device. + + +STATE --- addr L0,U + A user variable containing the compilation state. A non-zero value + indicates compilation. The value itself may be implementation + dependent. + + +SWAP nl n2 --- n2 n1 L0 + Exchange the top two values On the stack. + + +TASK + A no-operation word which can mark the boundary between + applications. + By forgetting TASK and re-compiling, an application can be discarded + in its entirety. + + +THEN P,CO,L O + An alias for ENDIF. + + +TIB --- addr U + A user variable containing the address of the terminal input buffer. + + +TOGGLE addr b -- + Complement the contents of addr by the bit pattern b. + + +TRAVERSE addr1 n --- addr2 + Move across the name field of a fig-FORTH variable length name + field. + addr1 is the address of either the length byte or the last letter. + If n=1, the motion is toward hi memory; if n=-l, the motion is + toward low memory. The addr2 resulting is address of the other end + of the name. + + +TRIAD scr -- + Display on the selected output device the three screens which + include that numbered scr, beginning with a screen evenly divisible + by three. Output is suitable for source text records, and includes a + reference line at the bottom taken from line 15 of screen4. + + +TYPE addr count --- L0 + Transmit count characters from addr to the selected output device. + + +U* u1 u2 --- ud + Leave the unsigned double number product of two unsigned numbers. + + +U/ ud u1 --- u2 u3 + Leave the unsigned remainder u2 and unsigned quotient u3 from the + unsigned double dividend ud and unsigned divisor u1. + + +UNTIL f --- (run-time) + addr n --- (compile) P,C2,L0 + Occurs within a colon-definition in the form: + BEGIN ... UNTIL + At run-time, UNTIL controls the conditional branch back to the + corresponding BEGIN. If f is false, execution returns to just after. + BEGIN; + if true, execution continues ahead. + + At compile-time, UNTIL compiles (0BRANCH) and an offset from HERE to + addr. n is used for error tests. + + +UPDATE L0 + Marks the most recently referenced block (pointed to by PREV) as + altered. The block will subsequently be transferred automatically to + disc should its buffer be required for storage of a different block. + + +USE --- addr + A variable containing the address of the block buffer to use next, + as the least recently written. + + +USER n --- L0 + A defining word used in the form: + n USER cccc + which creates a user variable cccc. + The parameter field of cccc contains n as a fixed offset relative to + the user pointer register UP for this user variable. When cccc is + later executed, it places the sum of its offset and the user area + base address on the stack as the storage address of that + particular variable. + + +VARIABLE E,LU + A defining word used in the form: + n VARIABLE cccc + When VARIABLE is executed, it creates the definition cccc with its + parameter field initialized to n. When cccc is later executed, the + address of its parameter field (containing n) is left on the stack, + so that a fetch or store may access this location. + + +VOC-LINK --- addr U + A user variable containing the address of a field in the definition + of the most recently created vocabulary. All vocabulary names are + linked by these fields to allow control for FORGETting thru multiple + vocabularies. + + +VOCABULARY E,L + A defining word used in the form: + VOCABULARY cccc + to create a vocabulary definition cccc. Subsequent use of cccc will + make it the CONTEXT vocabulary which is searched first by INTERPRET. + The sequence "cccc DEFINITIONS" will also make cccc the CURRENT + vocabulary into which new definitions are placed. + + In fig-FORTH, cccc will be so chained as to include all definitions + of the vocabulary in which cccc is itself defined. All vocabularys + ultimately chain to Forth. By convention, vocabulary names are to be + declared IMMEDIATE. See VOC-LINK. + + +VLIST + List the names of the definitions in the context vocabulary. "Break" + will terminate the listing. + + +WARNING --- addr U + A user variable containing a value controlling messages. If = 1 disc + is present, and screen 4 of drive 0 is the base location for + messages. If = 0, no disc is present and messages will be presented + by number. If = -1, execute (ABORT) for a user specified proceedure. + See MESSAGE, ERROR. + + +WHILE f --- (run-time) + ad1 nl --- ad1 n1 ad2 n2 p,C2 + Occurs in a colon-definition in the form: + BEGIN ... WHILE (tp) ... REPEAT + At run-time, WHILE selects conditional execution based on boolean + flag f. If f is true (non-zero), WHILE continues execution of the + true part thru to REPEAT, which then branches back to BEGIN. If f is + false (zero), execution skips to just after REPEAT, exiting the + structure. + + At compile time, WHILE emplaces (0BRANCH) and leaves ad2 of the + reserved offset. The stack values will be resolved by REPEAT. + + +WIDTH --- addr U + In fig-FORTH, a user variable containing the maximum number of + letters saved in the compilation of a definitions' name. It must be + 1 thru 31, with a default value of 31. The name character count and + its natural characters are saved, up to the value in WIDTH. The + value may be changed at any time within the above limits. + + +WORD c --- L0 + Read the next text characters from the input stream being + interpreted, until a delimiter c is found, storing the packed + character string beginning at the dictionary buffer HERE. WORD + leaves the character count in the first byte, the characters, and + ends with two or more blanks. Leading occurrences of c are ignored. + If BLK is zero text is taken from the terminal input buffer, + otherwise from the disc block stored in BLK. + See BLK, IN. + + +X + This is pseudonym for the "null" or dictionary entry for a name of + one character of ascii null. It is the execution proceedure to + terminate interpretation of a line of text from the terminal or + within a disc buffer, as both buffers always have a null at the + end. + + +XOR nl n2 --- xor L1 + Leave the bitwise logical exclusive or of two values. + + +[ P,L1 + Used in a colon-definition in form: + : xxx [ words ] more ; + Suspend compilation. The words after [ are executed, not compiled. + This allows calculation or compilation exceptions before resuming + compilation with ] . See LITERAL, ]. + + +[COMPILE] p,C + Used in a colon-definition in form: + : xxx [COMPILE] FORTH ; + [COMPILE] will force the compilation of an immediate definitions, + that would otherwise execute during compilation. The above example + will select the FORTH vocabulary then xxx executes, rather than at + compile time. + + +] L1 + Resume compilation, to the completion of a colon-definition. + See [.