Appendix A UNIFORTH VOCABULARY LIST Listed on the next pages are definitions of all of the words available to the user after invoking UNIFORTH. The words are presented in alphabetical order. The first line of each entry consists of a symbolic description of the action of a word, the interpreter characteristics, the level of word's standardization, and the word's pronounciation. The word action is shown in abbreviated form by: symbols representing input parameters, three dashes for the word place- ment, and any parameters that might be left on the stack. The symbols used are: n,n1,n2 ... 16-bit integer values u,u1,u2 ... 16-bit unsigned integer values d,d1,d2 ... 32-bit integer values ud,ud1,ud2 ... 32-bit unsigned integer values x,x1,x2 ... 32-bit floating point values b,c 8-bit values cccc,ssss character strings The interpreter characteristics are given below. C The word may be used only within a colon definition. E The word should be executed; it may not normally be compiled within a colon-definition. I The word has immediate action, even when a colon word is being defined. Words defined by the FORTH-83 Standards Team or by FIG-FORTH essentially follow their descriptions. The standardization levels are given below. F The word is part of the FORTH-83 Standard. G The word is part of FIG-FORTH. U The word is unique to UNIFORTH. UNIFORTH VOCABULARY LIST Page A-2 ! n addr --- F "store" Store n at address. !CSP Save the stack position in CSP. Used as part of the compi- ler security. !DATE --- U Store the date into time-keeping buffer CLKADR. The system will prompt you for input. !TIME --- U Store the time into time-keeping buffer CLKADR. The system will prompt you for input. # ud1 --- ud2 F "sharp" The remainder of ud1 divided by BASE is converted to an ASCII character and appended to the output string towards lower memory addresses. Result ud2 is the quotient after division by BASE and is maintained for further processing. Used between <# and #>. #> d --- addr n F "sharp-greater" End pictured numeric output conversion. Drop d, leaving the text address and character count (as suitable for TYPE). #BUFF --- adr A variable containing the number of disk buffers allocated to the system. #S ud --- 0 0 F "sharp-s" Convert all digits of an unsigned 32-bit number ud, adding each to the pictured numeric output string, until quotient is zero. A single zero is added to the output string if the number was initially zero. Use only between <# and #>. #TIB --- adr F A variable containing the number of bytes in the text input buffer. $;; U basic case branch terminator word, compiled by ;; . $<: U Basic case branch entry word, compiled by <:. $=: U Basic case branch entry word, compiled by =: . $>: U Basic case branch entry word, compiled by >:. UNIFORTH VOCABULARY LIST Page A-3 $CASE U Basic case beginning word, compiled by CASE. ' --- addr F,I "tick" Used in the form: ' Leave the code field address of the next word accepted from the input stream. An error condition exists if not found after a search of the FORTH vocabulary. Within a colon- definition ' is identical to [ ' ] LITERAL. ( F,I "paren" Used in the form: ( ccc) Accept and ignore comment characters from the input stream, until the next right parenthesis. As a word, the left parenthesis must be followed by one blank. It may be freely used while executing or compiling. An error condition exists if the input stream is exhausted before the right parenthesis. The right parenthesis is pronounced "close- paren" (+LOOP) n --- G The run-time procedure compiled by +LOOP, which increments the loop index by n and tests for loop completion. See +LOOP. (.") G The run-time procedure, compiled by ." which transmits the following in-line text to the selected output device. See ." (;CODE) G The run-time procedure, compiled by ;CODE, that rewrites the code field of the most recently defined word to point to the following machine code sequence. See ;CODE. (DO) C,G The run-time procedure compiled by DO which moves the loop control parameters to the return stack. See DO. (FIND) addr1 addr2 --- pfa b tf (ok) G 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. (LATEST) adr1 --- adr2 adr3 U Searching at vocabulary line adr1, return latest word address in vocabulary (adr2) and a pointer to the correct link thread (adr3). UNIFORTH VOCABULARY LIST Page A-4 (LINE) n1 n2 --- addr count G Convert the line number n1 and the screen n2 to the disk buffer address containing the data. The count left on the stack always is 64, the full line text length. (LOOP) G The run-time procedure compiled by LOOP which increments the loop index and tests for loop completion. See LOOP. (NUMBER) adr --- d G Part of the numeric conversion process. Called by NUMBER. (VALUE) addr1 --- n U Convert the ASCII text beginning at addr1+1 with regard to BASE. The converted 16-bit value n is left on the stack. * n1 n2 --- n3 F "times" Leave the arithmetic product of n1 times n2. */ n1 n2 n3 --- n4 F "times-divide" Multiply n1 by n2, divide the result by n3 and leave the quotient n4. n4 is rounded toward zero. The product of n1 times n2 is maintained as an intermediate 32-bit value for greater precision than the otherwise equivalent sequence: n1 n2 * n3 / */MOD n1 n2 n3 --- n4 n5 F "times-divide-mod" Multiply n1 by n2, divide the result by n3 and leave the remainder n4 and quotient n5. A 32-bit intermediate result is used as for */, and the quotient is rounded toward zero. The remainder has the same sign as the divisor, n1. + n1 n2 --- n3 F "plus" Leave the arithmetic sum of n1 plus n2. +! n addr --- F "plus-store" Add n to the 16-bit value at the address, by the convention given for +. +@ n1 n2 --- n3 SYSTEM block 35 U Add n1 to n2 to create an address. Fetch the contents of that address. +DISK U Turn on text file echo. Uses channel B. +LOOP n --- F,I "plus-loop" Add the signed increment n to the loop index. Return execu- tion to the corresponding DO until the new index is incremented across the boundary of limit-1 and limit. Upon exit from the loop, discard the loop control parameters. UNIFORTH VOCABULARY LIST Page A-5 +ORIGIN n --- addr G 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. +PRINTER U Enable echo to the printer as well as any current output device. , n --- F "comma" Allot two bytes in the dictionary, storing n there. - n1 n2 --- n3 F "minus" Subtract n2 from n1 and leave the difference n3. --> G,I "arrow" Continue interpretation with the next sequential block. May be used within a definition. -ES --- n U Leave the negative of the system element size on the data stack. For 16-bit systems, leaves -2. -FIND --- pfa b tf (found) G --- 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. -ROT n1 n2 n3 --- n3 n1 n2 U Rotate the top stack value to the third stack position. Inverse operation to ROT. -TRAILING addr n1 --- addr n2 F "dash-trailing" The character count n1 of a text string beginning at addr is adjusted to exclude trailing blanks. An error condition exists if n1 is negative. . n --- F "dot" Display n converted according to BASE in a free-field format with one trailing blank. Display only a negative sign. UNIFORTH VOCABULARY LIST Page A-6 ." F,I "dot-quote" Interpreted or used in a colon-definition in the form: ." cccc" Accept the following text from the input stream, terminated by " (double-quote). If executing, transmit this text to the selected output device. If compiling, compile so that later execution will transmit the text to the selected output device. At least 127 characters are allowed in the text. If the input stream is exhausted before the terminating double-quote, an error condition exists. .( F Analogous to dot-quote, except the string is terminated with a right-paren. Execute mode only. .DATE --- U Print the date on the current output devices in the form dd-mmm-yy. .FSIZE --- U Display the current file's size in bytes .LINE line scr --- G Print on the terminal device, a line of text from the disk by its line and screen number. Trailing blanks are suppressed. .R n1 n2 --- G Print the number n1 right aligned in a field whose width is n2. No following blank is printed. .S --- U Non-destructive print of the data stack contents. .TIME --- U Print the time on the current output devices in the form HH:MM:SS. / n1 n2 --- n3 F "divide" Divide n1 by n2 and leave the quotient n3. n3 is rounded toward zero. /MOD n1 n2 --- n3 n4 F "divide-mod" Divide n1 by n2 and leave the remainder n3 and quotient n4. n3 has the same sign as n1. n4 is rounded towards zero. 0 --- 0 G Leave the constant 0 on the stack. 0< n --- flag F "zero-less" True if n is less than zero (negative). 0<= n --- flag U True if n is less than or equal to zero. UNIFORTH VOCABULARY LIST Page A-7 0<> n --- flag U True if n is not equal to zero. 0= n --- flag F "zero-equals" True is n is zero. 0> n --- flag F "zero-greater" True if n is greater than zero. 0>= n --- flag U True if n is greater than or equal to zero. 0BRANCH f --- G The run-time procedure to conditionally branch. If f is false, the following in-line parameter is added to the interpretive pointer to branch ahead of back. Compiled by IF, UNTIL and WHILE. 1 --- 1 G Leave the constant 1 on the stack. 1+ n --- n+1 F "one-plus" Increment n by one, according to the operation for +. 1+! addr --- U Increment the contents of addr by 1. 1- n --- n-1 F "one-minus" Decrement n by one, according to the operation minus. 1-! addr --- U Decrement the contents of addr by 1. 1.E1 --- n1 U The floating point constant 10.0 . 2 --- 2 G Leave the constant 2 on the stack. 2! d addr --- F "two-store" Store d in 4 consecutive bytes beginning at addr, as for a double number. 2* n1 --- n2 G Multiply n1 by 2 (signed). 2+ n --- n+2 F "two-plus" Increment n by two, according to the operation for +. 2+! addr --- U Increment the contents of addr by 2. UNIFORTH VOCABULARY LIST Page A-8 2- n --- n-2 F "two-minus" Decrement n by two, according to the operation for minus. 2-! addr --- U Decrement the contents of addr by 2. 2/ n1 --- n2 U Divide n1 by 2 (signed). 2@ addr --- d F "two-fetch" Leave on the stack the contents of the four consecutive bytes beginning at addr, as for a double number. 2>R d1 --- F Remove the topmost 32-bit value from the data stack and place it on the return stack. 2CONSTANT d --- F "two-constant" A defining word used in the form: d 2CONSTANT to create a dictionary entry for , leaving d in its parameter field. When is later executed, d will be left on the stack. 2DROP d --- F "two-drop" Drop the top double number on the stack. 2DUP d --- d d F "two-dup" Duplicate the top double number on the stack. 2OVER d1 d2 --- d1 d2 d1 F "two-over" Leave a copy of the second double number on the stack. 2R> --- d1 F Remove the topmost 32-bit value from the return stack and place it on the data stack. 2ROT d1 d2 d3 --- d2 d3 d1 F "two-rote" Rotate the third double number to the top of the stack. 2SWAP d1 d2 --- d2 d1 F "two-swap" Exchange the top two double numbers on the stack. 2VARIABLE F "two-variable" Used in the form: 2VARIABLE Create a dictionary entry for and allocate 4 bytes for storage in the parameter field. When is later executed, it will leave the address of the first byte of its parameter field on the stack. 3 --- n G Leave the constant 3 on the stack. UNIFORTH VOCABULARY LIST Page A-9 4+ n1 --- n2 U Add 4 to the top stack value. 4- n1 --- n2 U Subtract 4 from the top stack value. 8* n1 --- n2 U Multiply n1 by 8 (3-bit left shift). : F "colon" A defining word used in the form: : . . . ; Create a dictionary entry for , and set compile mode. Words thus defined are called 'colon-definitions'. The compilation addresses of subsequent words from the input stream which are not immediate words are stored into the dictionary to be executed when is later executed. IMMEDIATE words are executed as encountered. If a word is not found after a search of the vocabulary, conversion and compilation of a literal number is attempted, with regard to the current BASE; that failing, an error condition exists. ; F,I,C "semi-colon" Terminate a colon definition and stop compilation. If compiling from mass storage and the input stream is exhausted before encountering ';' an error condition exists. ;; U,I Terminating word of a satisfied CASE branch. Branches to just after CASEND. ;CODE U,I Used in the form: : cccc . . . ;CODE . . . END-CODE Stop compilation and terminate a new defining word cccc by compiling (;CODE). Assemble the remaining mnemonics until reaching END-CODE. When cccc is later executed in the form: cccc the word will be created with its execution procedure given by the machine instructions following ;CODE. That is, when is executed, it does so by jumping to the code after ;CODE of cccc. An existing defining word (such as CREATE) must exist in cccc prior to ;CODE. ;S G Stop interpretation of a screen. < n1 n2 --- flag F "less-than" True if n1 is less than n2. Two special cases must be considered. ' -32768 32767 <' must return true, and '-32768 0' must be distinguished. UNIFORTH VOCABULARY LIST Page A-10 <# F "less-sharp" Initialize pictured numeric output. The words: <# ## #S HOLD SIGN #> can be used to specify the conversion of a double- precision number into an ASCII character string stored in right-to- left order. <: U Start a less-than conditional in the case statement. << U Mark the current stack position. Used in conjunction with >> to fill an array. <= n1 n2 --- flag U True if n1 is less than or equal to n2. <> n1 n2 --- flag U Compare n1 to n2. If they are not equal, leave a true flag; otherwise, leave zero. = n1 n2 --- flag F "equals" True if n1 is equal to n2. =: n1 --- U,I Begin a case comparison. If satisfied, execute the words following =:. Otherwise, jump to the word following the next ;; . =CELLS n1 --- n1 U Add 1 if necessary to make n1 an even number. > n1 n2 --- flag F "greater-than" True if n1 is greater than n2. >= n1 n2 --- flag U True if n1 is greater than or equal to n2. >> U Used in the form: << n1 n2 ... nn addr >> this word stores all parameters n1, n2, ...nn into the array starting at addr with n1 as the first element. >BODY adr1 --- adr2 F Move from the code field address of a word to the parameter field address (body). >IN --- addr F "to-in" Leave the address of a variable which contains the present character offset within the input stream {0...1023} Note: see WORD ( ." FIND UNIFORTH VOCABULARY LIST Page A-11 >LINK adr1 --- adr2 F Move from the code field address of a word to its link field address. >NAME adr1 --- adr2 F Move from the code field address of a word to its name field address. >R n --- F,C "to-r" Transfer n to the return stack. Every >R must be balanced by a R> in the same control structure nesting level of a colon-definition. ? addr --- F "question-mark" Display the number at address, using the format of 'dot'. ?ALIGN --- U Force the dictionary pointer to an even address. ?BASE U Print the current base in decimal. ?BLK --- U Print the last accessed block in base 10. ?COMP G Issue error message if not compiling. ?CSP G Issue error message if stack position differs from the value saved in CSP. ?DUP n --- n (n) F "query-dup" Duplicate n if it is non-zero. ?ERROR f n --- G Issue an error message number n, if the boolean flag is true. ?EXEC G Issue an error message if not executing. ?KEY --- n U Check to see if a key has been struck on the keyboard. If so, leave the ASCII value; otherwise, leave a zero. ?LOADING G Issue an error message if not loading. ?PAIRS n1 n2 --- G Issue an error message if n1 does not equal n2. The message indicates that compiled conditionals do not match. UNIFORTH VOCABULARY LIST Page A-12 ?SAVE adr --- adr U Flush buffer to disk if it has been updated. Used by SAVE- BUFFERS. ?STACK G Issue an error message if the stack is out of bounds. ?TERMINAL --- f G Perform a test of the terminal keyboard for actuation of any key. A true flag indicates actuation. @ addr --- n F "fetch" Leave on the stack the number contained at addr. @! n addr --- U Fetch the contents of addr and use those contents as the address into which to store n. (indirect addressing) @+ n1 addr --- n2 U Fetch the contents of addr and add to n1. A' --- U Used in the form: A' c Leave the ASCII code for character c on the stack, or compile into the dictionary if in compile mode. ABORT F Clear the data and return stack, setting execution mode. Return control to the terminal. ABORT" flag --- F "abort-quote" Used in the form: flag ABORT" cccc" When later executed, if flag is true the characters cccc, delimited by the close-quote, are displayed and then a abort sequence that includes ABORT is performed. If flag is false, the flag is dropped and execution continues. The blank following ABORT" is not part of cccc. ABS n1 --- n2 F "absolute" Leave the absolute value of a number. AGAIN addr n --- G 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). UNIFORTH VOCABULARY LIST Page A-13 ALLOT n --- F "allot" Allocate n bytes in the dictionary. The address of the next available dictionary location is updated accordingly. AND n1 n2 --- n3 F Leave the bitwise logical 'and' of n1 and n2. ARRAY U A defining word used in the form: n ARRAY create a buffer n cells long (but not preset to zero). When is subsequently executed, it leaves the address of the first element. ASSEMBLER F,I The name of the assembler vocabulary. Execution makes ASSEMBLER the CONTEXT vocabulary. ASSEMBLER is immediate, so it will execute during the creation of a colon- definition, to select this vocabulary at compile time. AUTOLOAD --- adr U A variable containing the block number you wish to be automatically loaded when invoking UNIFORTH. B' --- n U Interpret the next number in base 2 (binary), regardless of the current base. B. n --- U Display the number in base 2 (binary), regardless of the current base. B/BUF --- n G Leave the number of bytes per buffer on the stack (1024). BACK addr --- G Calculate the backward branch offset from HERE to addr and compile into the next available dictionary memory address. BASE --- addr F Leave the address of a variable containing the current input-output numeric conversion base. {2..70} BASE' --- U A defining word used to create temporary base conversion words. BASE. --- U A defining word used to create temporary base printing words. UNIFORTH VOCABULARY LIST Page A-14 BEGIN F,I Used in a colon-definition in the forms: BEGIN . . . flag UNTIL or BEGIN . . . flag WHILE . . . REPEAT BEGIN marks the start of a word sequence for repetitive execution. A BEGIN-UNTIL loop will be repeated until flag is true. A BEGIN-WHILE-REPEAT loop will be repeated until flag is false. The words after UNTIL or REPEAT will be executed when either loop is finished. Flag is always dropped after being tested. BELL U Send an ASCII 07 (bell) to the current output device. BINARY U Change the current base to binary (base 2). BL --- c G A constant that leaves the ASCII value for a blank (32). BLANKS addr count --- G Fill an area of memory beginning at addr with count blanks. BLK --- addr F "b-l-k" Leave the address of a variable containing the number of the mass storage block being interpreted as the input stream. If the content is zero, the input stream is taken from the text input buffer. BLOCK n --- addr F Leave the address of the first byte in block n. If the block is not already in memory, it is transferred from mass storage into whichever memory buffer has been least recently accessed. If the block occupying that buffer has been UPDATEd (i.e. modified), it is rewritten onto mass storage before block n is read into the buffer. n is an unsigned number. If correct mass storage read or write is not possible, an error condition exists. BMOVE blk1 blk2 n --- U Move n blocks starting at blk1 to the region starting at blk2. The lowest numbered block of region blk1 is moved first. BMOVE> blk1 blk2 n --- U Move n blocks starting at blk1 to the region starting at blk2. The highest numbered block of region blk1 is moved first. UNIFORTH VOCABULARY LIST Page A-15 BRANCH G The run-time procedure 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. BS U Send an ASCII 08 (backspace) to the current output device. BSWAP n1 --- n2 U Swap the bytes of the 16-bit value n1. BUFFER n --- addr F Obtain the next block buffer, assigning it to block n. The block is not read from mass storage. If the previous contents of the buffer has been marked as UPDATEd, it is written to mass storage. If correct writing to mass storage is not possible, an error condition exists. The address left is the first byte within the buffer for data storage. n is an unsigned number. BYE --- U Exit UNIFORTH and return to your operating system, closing the current file in the process. C! n addr --- F "c-store" Store the least significant 8-bits of n at addr. C, n --- G Store 8 bits of n into the next available dictionary byte, advancing the dictionary pointer by one. C/L --- n G Leave the number of characters per line (64). C@ addr --- byte F "c-fetch" Leave on the stack the contents of the byte at addr (with the higher bits zero, in a 16-bit field). CARRAY n --- U A defining word used in the form: n CARRAY create a buffer n bytes long (but not preset to zero). When is subsequently executed, it leaves the address of the first element. UNIFORTH VOCABULARY LIST Page A-16 CASE U,I A multiple-IF statement used in the form: CASE n1 =: . . . ;; n2 >: . . . ;; n3 <: . . . ;; NOCASE =: . . . ;; CASEND It requires a testing value on the stack (it will be removed by CASE). n1, n2, ... are comparison value. If the testing value is equal to, less than or greater than any of the set (n1,n2,...), then the words following the corresponding =:, <: or >: are executed, followed by a branch to CASEND. NOCASE is an optional test to satisfy all non-tested values. CASEND U,I The terminating statement for CASE. Drops the tested value from the stack. See CASE. CBLIST n1 n2 --- U List all blocks between n1 and n2 inclusive, one at a time. To list the next block, hit any key. To terminate the listing abnormally, enter the escape key. CDUMP addr n --- U Dump n bytes starting at addr in hex format. Sixteen bytes are listed per line, followed by their ASCII equivalences. Non-printing ASCII characters are indicated by periods. You can terminate abnormally by striking any key. CHANA --- U Make channel A the current default file channel. CHANB --- U Make channel B the current default file channel. CLKADR --- adr U The starting address of the 6-byte date and time buffer. CLOSE --- U Close the current file. CLR-BLK n --- U Fill block n with blanks, and put a ;S at its beginning. CMOVE addr1 addr2 n --- F "c-move" Move n bytes beginning at address addr1 to addr2. The contents of addr1 are moved first proceeding toward high memory. If n is zero or negative nothing is moved. CMOVE> adr1 adr2 n --- F Move n bytes beginning at address adr1 to adr2. The contents of adr1 are moved first preceeding from the end of the buffer toward low memory. UNIFORTH VOCABULARY LIST Page A-17 CMPS adr1 adr2 cnt --- f U Compare the string starting at adr1 to the string at adr2, each with length cnt bytes. If str1 is less than str2, leave -1 ; if str1 is equal to str2, leave zero ; if str1 is greater than str2, leave one. CODE F,I A defining word used in the form: CODE . . . END-CODE Create a dictionary entry for , and set execution mode. Words thus compiled are called 'code-definitions'. Used in creating assembly language routines. COLD G The cold start procedure to adjust the dictionary pointer to the initial settings and restart via ABORT. COMPILE F,C When a word containing COMPILE executes, the 16-bit value following the compilation address of COMPILE is copied (compiled) into the dictionary. That is, COMPILE DUP will copy the compilation address of DUP. CONSTANT n --- F A defining word used in the form: n CONSTANT to create a dictionary entry for , leaving n in its parameter field. When is later executed, n will be left on the stack. CONTEXT --- addr F A user variable containing a pointer to the vocabulary within which dictionary searches will first begin. CONTROLS? adr cnt --- f U Check the buffer starting at adr with length cnt bytes. If there are any control characters (ASCII 31 or less) in the buffer, leave a 1 on the stack; otherwise, leave a 0. CONVERT d1 addr1 --- d2 addr2 F Convert the ASCII text beginning at addr1+1 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. COPY n1 n2 --- U Copy block n1 into block n2. COPYATOB n1 n2 --- U Copy block n1 from channel A to block n2 in channel B. UNIFORTH VOCABULARY LIST Page A-18 COUNT addr --- addr+1 n F Leave the address addr+1 and the character count of text beginning at addr. The first byte at addr must contain the character count n. Range of n is {0..255}. CR F "c-r" Cause a carriage-return and line-feed to occur at the current output device. CREATE F A defining word used in the form: CREATE to create a dictionary entry for , without allocating any parameter field memory. When is subsequently executed, the address of the first byte of 's parameter field is left on the stack. CSP --- addr G A user variable temporarily storing the stack pointer position, for compilation error checking. CURRENT --- addr F A variable containing the current vocabulary pointer. D+ d1 d2 --- d3 F "d-plus" Leave the arithmetic sum of d1 and d2. D- d1 d2 --- d3 F "d-minus" Subtract d2 from d1 and leave the difference d3. D>S d --- n G Truncate the double precision value to its single precision equivalent. Same as DROP. D. d --- F "d-dot" Display d converted according to BASE in a free-field format, with one trailing blank. Display the sign only if negative. D.R d n --- F "d-dot-r" Display d converted according to BASE, right aligned in an n character field. Display the sign only if negative. D0< d --- flag U Leave true if d is less than zero. D0= d --- flag F "d-zero-equals" Leave true if d is zero. D< d1 d2 --- flag F "d-less" True if d1 is less than d2. "d-less" D= d1 d2 --- flag F "d-equal" True is d1 equals d2. UNIFORTH VOCABULARY LIST Page A-19 DABS d1 --- d2 F "d-abs" Leave as a positive double number d2, the absolute value of a double number, d1. {0..2,147,483,647} DECIMAL F Set the input-output numeric conversion base to ten. DEFINITIONS F Used in the form: cccc DEFINITIONS Set the CURRENT vocabulary to the CONTEXT vocabulary. In the example, executing vocabulary name ccc made it the CONTEXT vocabulary and executing DEFINITIONS made both specify vocabulary cccc. DELETE --- U When used in the form: DELETE removes the file from the current directory. DEPTH --- n F Leave the number of the quantity of 16-bit values contained in the data stack, before n was added. DIGIT c n1 --- n2 tf (ok) G 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. DLITERAL d --- d (executing) G d --- (compiling) 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. DMATRIX U A defining word used in the form: n1 n2 DMATRIX to create a dictionary entry for , making a double precision matrix n1*n2*2 cells in length, presetting all elements to zero. When is later executed, it uses the top stack parameter as the column number {0..n2-1} and the second stack parameter as the row number {0..n1-1}, and returns the address of that element. DMAX d1 d2 --- d3 F "d-max" Leave the larger of two double numbers. DMIN d1 d2 --- d3 F "d-min" Leave the smaller of two double numbers. UNIFORTH VOCABULARY LIST Page A-20 DNEGATE d --- -d F "d-negate" Leave the double number two's complement of a double number, i.e., the difference 0 less d. DO n1 n2 --- F,I Use in a colon-definition: DO . . . LOOP or DO . . . +LOOP Begin a loop which will terminate based on control parameters. The loop index begins at n2, and terminates based on the limit n1. At LOOP or +LOOP, the index is modified by a positive or negative value. The range of a DO-LOOP is determined by the terminating word. DO-LOOP may be nested. DOES> F,I,C "does" Define the run-time action of a word created by a high-level defining word. Used in the form: : . . . CREATE . . . DOES> . . . ; and then Marks the termination of the defining part of the defining word and begins the definition of the run time action for words that will later be defined by . On execution of the sequence of words between DOES> and ; will be executed, with the address of 's parameter field on the stack. DP --- addr G A user variable, the dictionary pointer, which contains the address of the next free memory location above the dictionary. The value may be read by HERE and altered by ALLOT. DPL --- addr G A user variable containing the number of digits to the right of the decimal on floating point input. DROP n --- F Drop the top number from the stack. DTOR --- x1 U A constant containing the conversion factor from degrees to radians. DU< ud1 ud2 --- flag F "d-u-less" True if ud1 is less than ud2. Both numbers are unsigned. DUMP addr n --- G Dump n cells starting at addr. Eight cells are listed per output line in the current base. The dump can be terminated abnormally by striking any key. UNIFORTH VOCABULARY LIST Page A-21 DUP n --- n n F Leave a copy of the top stack number. DVECTOR U A defining word used in the form: n DVECTOR to create a dictionary entry for and make a double precision vector, preset to zero. When is later executed, it uses the top stack value as an index and returns the corresponding element address . E. x --- U Print floating point number in free-format exponent form. E- n1 --- n2 U Subtract the current element size from the top stack value. E+ n1 --- n2 U Add the current element size to the top stack value. EDIT n --- U Start editing block (screen) number n. EDITOR U The name of the video editor vocabulary. EI+ n1 --- n2 U Add the loop index*element size to the top stack value. EI+! n1 adr --- U Add the loopindex*elementsize to the address, and store n1 at the resultant address. EI+@ n1 --- n2 U Add the loopindex*elementsize to the top stack value. Using the result as an address, fetch the contents. EI- n1 --- n2 U Subtract the loopindex*elementsize from the top stack value. ELSE F,I Used in a colon-definition in the form: IF . . . ELSE . . . THEN ELSE executes after the true part following IF. ELSE forces execution to skip till just after THEN. It has no effect on the stack. (See IF) EMIT char --- F Transmit character to the current output device. UNIFORTH VOCABULARY LIST Page A-22 EMPTY-BUFFERS F Mark all block buffers as empty, without necessarily affecting their actual contents. UPDATEd blocks are not written to mass storage. ENCLOSE adr1 c --- adr1 n1 n2 n3 KERNEL G The text scanning primitive used by WORD. From the text address adr1 and an ASCII delimiting character c, ENCLOSE determinines 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 procedure will not process past an ASCII 'null', treating it as an unconditional delimiter. END-CODE --- F Terminate a machine-code definition. ER1 --- U An error handling word. ER2 --- U An error handling word. ER3 --- U An error handling word. ERASE addr nbytes --- G Clear a region of memory to zero starting at addr. ERCODE --- n U Return the last disk error code. ERROR line --- G Execute error notification and possible restart of system. ES --- n U Leave the element size of the current system (16-bit = 2). EXCHANGE n1 n2 --- U Exchange the contents of disk blocks n1 and n2. EXECUTE addr --- F Execute the dictionary entry whose code field address is on the stack. EXIT F,C When compiled within a colon-defintion, terminate execution of that definition, at that point. May not be used within a DO-LOOP. UNIFORTH VOCABULARY LIST Page A-23 EXPECT addr n --- F Transfer characters from the terminal beginning at addr, upward, until a "return" or the count of n has been received. Take no action for n less than or equal to zero. The number of characters received is stored in variable SPAN. EXPECTBL addr n --- U Same as EXPECT except leaves a blank (ASCII 32) after the entered string. EXTEND n --- U Extend the current file by n blocks, setting each to blank except for a ";S" in the first bytes. F* x1 x2 --- x3 U Multiply x1 by x2, leaving the floating point result x3. F/ x1 x2 --- x3 U Divide x1 by x2, leaving the floating point result x3. F+ x1 x2 --- x3 U Add x1 to x3, leaving the floating point result x3. F- x1 x2 --- x3 U Subtract x2 from x1, leaving the floating point result x3. F. x1 --- U Print floating point number in free format. #digits printed is limited by constant FPSIG. FACOS x1 --- x2 U Take the arc-cosine of an angle (x2 in radians). FALSE --- n U Return the value of a false flag (0). FASIN x1 --- x2 U Take the arc-sine of an angle (x2 in radians). FATAN x1 --- x2 U Take the arc-tangent of an angle (x2 in radians). FCB --- n1 U Leave the address of the current File Control Block. FCONSTANT x --- U A defining word used in the form: n FCONSTANT To create a dictionary entry for , leaving the floating point constant x in its parameter field. When is later executed, n will be left on the stack. UNIFORTH VOCABULARY LIST Page A-24 FCOS x1 --- x2 U Take the cosine of an angle (radians). FENCE --- G A user variable containing an address below which FORGETting is trapped. To forget below this point, the user must alter the contents of FENCE. FEXP x1 --- x2 U Raise x1 to the e power. FILESTATUS --- U List on the console information about the current file. FILL addr n byte --- F Fill memory beginning at address with a sequence of n copies of byte. If the quantity n is less than or equal to zero, take no action. FIND --- addr U Leave the compilation address of the next word name, which is accepted from then input stream. If that word cannot be found in the dictionary after a search, leave zero. FIRST --- n G A variable that leaves the address of the first (lowest) block buffer. FIX x1 --- d1 U Convert floating point x1 to a double precision integer d1. FLD --- addr G A user variable for control of number output field width. FLN x1 --- x2 U Take the natural (base e) logarithm of x1. FLOAT d1 --- x1 U Convert double precision integer d1 to the equivalent floating point value x1. FLOG2 x1 --- x2 U Take the log base 2 of x1. FLOG10 x1 --- x2 U Take the common logarithm (base 10) of x1. FLUSH --- U,G A synonym for SAVE-BUFFERS. UNIFORTH VOCABULARY LIST Page A-25 FMATRIX n1 n2 --- U A defining word used in the form: n1 n2 FMATRIX to create a dictionary entry for , making a 2- dimensional floating point matrix n1*n2 elements in length. When is later executed, it uses the top stack parameter as the column number {0..n2-1} and the second stack parameter as the row number {0..n1-1}, and returns the address of that element. FNEGATE x1 --- -x1 U Change the sign of the floating point number x1. FORGET F Execute in the form: FORGET Delete from the dictionary and all words added to the dictionary after . Failure to find is an error condition. FORM U Send an ASCII 12 (formfeed) to the current output devices. FORTH F 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. FSIN x1 --- x2 U Take the sine of an angle (radians). FSQRT x1 --- x2 U Take the square root of x1. FTAN x1 --- x2 U Take the tangent of an angle (radians). FVARIABLE --- U A defining word executed in the form: FVARIABLE to create a dictionary entry for and allot space for one floating-point element in its body. The application must initialize the stored value. When is later executed, it will place the storage address on the stack. UNIFORTH VOCABULARY LIST Page A-26 FVECTOR n --- U A defining word used in the form: n FVECTOR to create a dictionary entry for ana allot space for n floating-point elements (a one-dimensional vector). When name is later executed, it uses the top stack value as an index {0..n-1} into the array and returns the address of that element. GETBUF blk# --- bufadr flag U Examine the block buffers, and return the address of one of them. If that buffer has been updated, flag=true. GETNUM --- val U Interactively bring in the next number from the keyboard. H' --- n U Interpret the next number in hex, regardless of the current base. H. n --- U Print the top stack value in hexadecimal, regardless of the current base. HASH stradr vocptr --- stradr vocthd U Used for "hashing" the dictionary into 4 threads. HDUMP addr n --- U Same as DUMP, but in hexadecimal regardless of the current base. HERE --- addr F Return the address of the next available dictionary location. HEX G Change the current numberic input base to hexadecimal (base 16). HLD --- addr G A user variable that holds the address of the latest character of text during numeric output conversion. HOLD char --- F Insert char into a pictured numeric output string. May only be used between <# and #>. I --- n F,C Copy the loop index onto the data stack. Can only be used in the forms DO . . . I . . . LOOP or DO . . . I . . . +LOOP UNIFORTH VOCABULARY LIST Page A-27 I+ n1 --- n2 U Add index I to the top stack value. I- n1 --- n2 U,C Subtract index I from the top stack value. ID. addr --- G Print a definition's name from its name field address. IF flag --- F,I Used in a colon-definition in the forms: flag IF . . . ELSE . . . THEN or flag IF . . . THEN If flag is true, the words following IF are executed and the words following ELSE are skipped. The ELSE part is optional. If flag is false, words between IF and ELSE, or between IF and THEN (when no ELSE is used), are skipped. IF-ELSE-THEN conditionals may be nested. IMMEDIATE F Mark the most recently made dictionary entry as a word which will be executed when encountered during compilation rather than compiled. INCLUDE n1 --- U Used in the form: INCLUDE Close the current file, saving any updated blocks. Switch to file fname, load block 01, and then return to the original file. Only one level of nesting is allowed. INDEX n1 n2 --- G Print the first line of each screen over the range n1 to n2 inclusive. This is used to view the comment lines of an area of text on disk screens. INDGEN addr n --- U Fill n cells starting at addr with the cell number. That is, (addr)=0, (addr+2)=1, (addr+4)=2, ... Used to preset an array to its element numbers. INTERPRET G The outer text interpreter which sequentially executes or compiles text from the input stream (terminal or disk) depending on STATE. If the word name cannot be found after a search of CONTEXT and CURRENT, then 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. IO! val port --- U Store the 16-bit value val into port. UNIFORTH VOCABULARY LIST Page A-28 IO@ port --- val U Fetch a 16-bit value from a port. IOBYTE --- addr U A variable containing the printer/terminal output flag. IOC! val port --- U Store the 8-bit value val into port. IOC@ port --- val U Fetch an 8-bit value from a port. J --- n F,C Return the index of the next outer loop. May be used only within a nested DO-LOOP in the form: DO . . . DO . . . J . . . LOOP . . . LOOP KEY --- char F Leave the ASCII value of the next available character from then current input device. LATEST --- addr G Leave the name field address of the topmost word in the CURRENT vocabulary. LEAVE F Force immediate termination of a DO-LOOP. Execution continues after the next LOOP or +LOOP. LF U Send an ASCII 10 (linefeed) to the current output device. LIMIT --- n G A variable leaving the address just above the highest memory available for a disk buffer. Usually this is the highest system memory. LINE n1 --- n2 U Leave the buffer address n2 of the n1th line in the current screen (pointed to by SCR). LIST n --- F List the ASCII symbolic contents of screen n on the current output device, setting SCR to contain n. n is unsigned. LIT --- n G 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. UNIFORTH VOCABULARY LIST Page A-29 LITERAL n --- F,I If compiling, then compile the stack value n as a 16-bit literal, which when later executed, will leave n on the stack. LOAD n --- F Begin interpretation of screen n by making it the input stream; preserve the locators of the present input stream (from >IN and BLK). If interpretation is not terminated explicitly it will be terminated when the input stream is exhausted. Control then returns to the input stream containing LOAD, determined by the input stream locators >IN and BLK. LOOP F,I Increment the DO-LOOP index by one, terminating the loop when the new index crosses the boundary between limit-1 and limit. LOWUP --- adr U A variable containing the flag that determines if input text is to be converted to upper case before searching the dictionary. M/MOD d n1 --- n2 n3 G 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. MAKE --- U Used in the form: MAKE Create a new file called fname. After MAKE is executed, you are left in the new file. MAKE-CHAN --- U Make a new FCB/channel for file access. MATCH adr1 n1 adr2 n2 --- n3 U Find the string starting at adr2 (n2 bytes long) in the larger string starting at adr1 (n1 bytes long, n1>n2). If a match occurs, leave the address (in buffer adr1) of the first correct character; otherwise, leave 0. MATRIX U A defining word used in the form: n1 n2 MATRIX to create a dictionary entry for , making a 2- dimensional array (matrix) n1*n2 cells in length, presetting all elements to zero. When is later executed, it uses the top stack parameter as the column number {0..n2-1} and the second stack parameter as the row number {0..n1-1}, and returns the address of that element. UNIFORTH VOCABULARY LIST Page A-30 MAX n1 n2 --- n3 F "max" Leave the greater of two numbers. MAXI --- n1 U,C Copy the maximum iteration counter of the current DO-LOOP from the return stack to the data stack. MCOPY n1 n2 n3 --- U Copy n3 blocks from channel A (starting at block n1) to channel B (starting at block n2). MESSAGE n --- G Print on the selected output device the text of line n relative to screen 200 of drive 0. 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 (disk not available). MIN n1 n2 --- n2 F "min" Leave the lesser of two numbers. MOD n1 n2 --- n3 F "mod" Divide n1 by n2, leaving the remainder n3, with the same sign as n1. MOVE addr1 addr2 n --- F Move the specified quantity n of 16-bit memory cells beginning at addr1 into memory at addr2. The contents of addr1 is moved first. If n is negative or zero, nothing is moved. MS n --- G Delay n milliseconds before continuing execution. MSGBLK --- adr U Used by MESSAGE. A variable containing the starting block number on which messages are stored. NAME> adr1 --- adr2 F Convert the name field address adr1 of a word into its corresponding code field address adr2. NEGATE n --- -n F Leave the two's complement of a number, i.e., the difference of 0 less n. NOCASE n1 --- n1 n1 U Same as DUP, used in CASE statement. NOOP --- G Perform no operation whatsoever. UNIFORTH VOCABULARY LIST Page A-31 NOT n1 --- n2 U Perform the one's complement of n1. NUMBER addr --- d G Convert a character string left at addr with a preceeding count, to a signed double number, using the current numeric base. If numeric conversion is not possible, an error message will be given. O' --- n U Interpret the next number in base 8, regardless of the current base. O. n --- U Print n in octal, regardless of the current base. OCTAL U Change the current numeric conversion base to octal (base 8). ODUMP addr n ----- U Same as DUMP, except output is in octal, regardless of current base. OFFSET --- addr U A user variable which contains the sector offset from the beginning of the current drive. This offset is added to all sector requests. Note the difference between this definition and the FIG definition. OPEN --- U Used in the form: OPEN This word attempts to open file fname for future I/O. If fname does not currently exist, UNIFORTH will query you about creating it. OR n1 n2 --- n3 F Leave the bitwise inclusive-or of two numbers. OUT --- addr G A user variable that contains a value incremented by EMIT. The user may alter and examine OUT to control display formatting. OVER n1 n2 --- n1 n2 n1 F Leave a copy of the second number on the stack. P+ n1 n2 n3 n4 --- n5 n6 U Perform addition of an ordered pair. The results are: n5=n1+n3 n6=n2+n4 Used in the editor for offsets on x,y cursor positioning. UNIFORTH VOCABULARY LIST Page A-32 PAD --- addr F The address of a scratch area used to hold character strings for intermediate processing. The minimum capacity of PAD is 64 characters (addr through addr+63). PICK n1 --- n2 SYSTEM block 25 F Return a copy of the n1th stack value, not counting n1 itself. Aero relative: 1 PICK is equivalent to OVER. PLUS? --- flag U A flag for Z.R. If PLUS? is nonzero, Z.R will include a plus sign preceding all positive numbers. PRECIS --- adr U A USER variable containing the precision flag (0=16, 1=32, integer; 2=32-bit floating) of the last number converted. PREMIT b --- U Send a single ASCII character to the printer. PREV --- addr G A variable containing the address of the disk buffer most recently referenced. The UPDATE commands marks this buffer to be later written to disk. PRINTER U Select the printer to be the current output device. QUERY F Accept input of up to 80 characters (or until a 'return') from the operator's terminal, into the terminal input buffer. WORD may be used to accept text from this buffer as the input stream, by setting >IN and BLK to zero. QUIT F Clear the return stack, setting execution mode, and return control to the terminal. No message is given. R# --- addr G A user variable which may contain the location of an editing cursor, or ther file related function. R/W addr blk f --- G The primitive block-oriented disk read/write routine. Addr specified the source or destination block buffer, blk is the sequential number of the referenced block, and f is a flag (f=0, write; f=1, read). R/W determines the location on mass storage, performs the read/write and all error checking. R> --- n F,C Transfer n from the return stack to the data stack. "r- from" UNIFORTH VOCABULARY LIST Page A-33 R0 --- addr G A user variable containing the initial location of the return stack. "r-zero" See RP! R@ --- n F,C Copy the number on the top of the return stack to the data stack. "r-fetch" REMSPACE G Print the remaining space (in bytes) available for dictionary entries. REPEAT F,I,C Used in a colon-definition in the form: BEGIN . . . WHILE . . . REPEAT At run-time, REPEAT returns to just after the corresponding BEGIN. ROLL n --- F Extract the n-th stack value to the top of the stack, not counting n itself, moving the remaining values into the vacated position. An error condition results for n less than one. 3 ROLL is the same as ROT. 1 ROLL is a null operation. ROT n1 n2 n3 --- n2 n3 n1 F Rotate the top three values, bringing the deepest to the top. "rote" RP@ --- n1 G Copy the address that the return stack pointer is pointing to onto the data stack. RP! G Initialize the return stack pointer from user variable R0. S>D n --- d G Sign extend a single 16-bit number to form a double 32-bit number. S0 --- addr G A user variable that contains the initial value for the stack pointer. "s-zero" See SP! SAVE-BUFFERS F Write all blocks to mass storage that have been flagged as UPDATEd. An error condition results if mass storage writing is not completed. A synonym is FLUSH. SCR --- addr F Leave the address of a variable containing the number of the screen most recently listed. "s-c-r" UNIFORTH VOCABULARY LIST Page A-34 SHIFT n1 n2 --- n3 U Shift n1 by n2 bits right or left. If n2 is negative, the shift is to the left; if positive, to the right. SHOW n1 n2 --- G List all blocks at least including n1 through n2 in TRIAD form. SHUCK adr1 adr2 --- U Remove all words following adr1 in the vocabulary pointed to by adr2. SIGN n --- F,C Insert the ASCII "-" (minus sign) into the pictured numeric output string, if n is negative. SIGNON U A word that prints the signon message of UNIFORTH and then enters ABORT. SMUDGE G Used during word definition to toggle the "smudge bit" in a definition's name field. This prevents an uncompleted definition from being found during dictionary searches, until compiling is completed without error. SP! G Initialize the data stack pointer from user variable S0. SP@ --- addr G Return the address of the data stack position (that is, the value of the stack pointer) to the top of the stack, as it was before SP@ was executed. SPACE F Transmit an ASCII blank to the current output device. SPACES n --- F Transmit n spaces to the current output device. Take no action for n of zero of less. SPAN --- adr F A variable containing the number of characters input during the last EXPECT. SS*D n1 n2 --- d G A mixed magnitude math operation which leaves the double number signed product of two signed integers. Warning: this name may be changed to S*SD in future releases. UNIFORTH VOCABULARY LIST Page A-35 STATE --- addr F Leave the address of the variable containing the compilation state. A non-zero content indicates compilation is occurring, but the value itself may be installation dependent. SUBROUTINE U A defining word used in the form: SUBROUTINE . . . END-CODE to create a machine-language word that is only callable from other machine-language words. It has no code field address. Executing at a later time puts the address of the first machine-code instruction on the stack. would be used like: CODE XX . . . CALL, . . . JMP, . . . END-CODE by another word. SWAP n1 n2 --- n2 n1 F Exchange the top two stack values. TERMINAL U Select the system console for further output. THEN F,I Used in a colon-definition in the form: IF . . . ELSE . . . THEN or IF . . . THEN THEN is the point where execution resumes after ELSE or IF (when no ELSE is present). TIB --- addr G A user variable containing the address of the terminal input buffer. TLOAD --- U Load the current file as a text-oriented file. (May be called FLOAD in your system). TOGGLE addr b --- G Complement the contents of addr by the bit pattern b. TRACE --- addr U Flag to turn the "unravel" trace on (1) or off(0). TRAVERSE adr1 n --- adr2 G Move across the name field of a definition. adr1 is the address of either the length byte or the last letter. If n=1, the motion is toward high memory; if n=-1, the motion is toward low memory. The adr2 resulting the the address of the other end of the name. UNIFORTH VOCABULARY LIST Page A-36 TRIAD n --- G Display on the selected output device the three screens that include n, beginning with a screen that is evenly divisible by 3. TRUE --- n U A constant containing the value of a true flag (=-1). TRUNK --- adr F A variable containing the address of the trunk vocabulary. TURNKEY --- adr U The address in the kernel COLD routine of the CFA of the word SIGNON. By replacing SIGNON with a user-defined function, you can autostart any word upon coldstart. TYPE addr n --- F Transmit n characters beginning at address to the current output device. No action takes place for n less than or equal to zero. U. un --- F Display un converted according to BASE as an unsigned number, in a free-field format, with one trailing blank. "u- dot" U2/ ud1 --- ud2 F Divide unsigned double by 2. U< un1 un2 --- flag F Leave the flag representing the magnitude comparison of un1 < un2, where un1 and un2 are treated at 16-bit unsigned integers. "u-less-than" U<= un1 un2 --- flag U True if un1 is less than or equal to un2, unsigned. U> un1 un2 --- flag U True if un1 is greater than un2, unsigned. U>= un1 un2 --- flag U True if un1 is greater than or equal to un2, unsigned. UM/MOD ud1 un2 --- un3 un4 F Perform the unsigned division of double number ud1 by ud2, leaving the remainder un3 and quotient un4. All values are unsigned. UM/MODD ud1 u2 --- u3 ud4 G An unsigned mixed magnitude math operation which leaves a double quotient ud4 and remainder u3, from a double dividend ud1 and single divisor u2. UNIFORTH VOCABULARY LIST Page A-37 UNPRINT U Prints an informative message for LIST and INDEX. UNRAVEL --- U Trace the return stack nesting, then execute QUIT. UNTIL flag --- F,I Within a colon-definition, mark the end of a BEGIN-UNTIL loop, which will terminate based on a flag. If flag is true, the loop is terminated. If flag is false, execution returns to the first word after BEGIN. BEGIN-UNTIL structures may be nested. UPPER adr cnt -- U Convert the string to upper case ASCII. UPDATE F Mark the most recently referenced block as modified. The block will subsequently be automatically transferred to mass storage should its memory buffer be needed for storage of a different block, or upon execution of SAVE-BUFFERS. US>D u --- ud U Convert the unsigned 16-bit integer to 32-bit form. USE --- addr G A variable containing the address of the block buffer to use next, or in other words, the one least recently written. USER n --- G 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. USS*D un1 un2 --- ud3 F Perform an unsigned multiplication of un1 by un2, leaving the double number product ud3. All values are unsigned. "u- times" VARIABLE F A defining word executed in the form: VARIABLE to create a dictionary entry for and allot two bytes for storage in the parameter field. The application must initialize the stored value. When is later executed, it will place the storage address on the stack. UNIFORTH VOCABULARY LIST Page A-38 VECTOR U A defining word used in the form: n VECTOR to create a dictionary entry for , thereby making a vector n cells long, presetting all elements to zero. When is later executed, it uses the top stack value as an index into the array and returns the address of that element. {0..n-1} WORDS G List the names of the definitions in the context vocabulary. The actuation of any key on the terminal will stop the list. VOC-LINK --- addr G 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 FORGETing through multiple vocabularies. VOCABULARY F A defining word used in the form: VOCABULARY to create a vocabulary definition . Subsequent use of will make it the CONTEXT vocabulary which is searched first by INTERPRET. The sequence " DEFINITIONS" will also make the CURRENT vocabulary into which new definitions are placed. By convention, vocabulary names are to be declared IMMEDIATE. See VOC-LINK. WARM G A warm-start boot entry point. Resets the data stack pointer, but does not re-initialize the return stack or dictionary pointers. WARNING --- addr G A user variable containing a value controlling messages output from ?ERROR or MESSAGE. If WARNING=1, a disk is assumed present, and messages are printed relative to block 200 of disk drive 0. If it is equal to zero, messages are not retrieved from disk; they are just given numbers. If WARNING= -1, ?ERROR will execute ABORT. WHILE flag --- F,I,C Used in a colon-definition in the form: BEGIN . . . flag WHILE . . . REPEAT Select conditional execution based on the flag. On a true flag, continue execution through to REPEAT, which then returns back to just after BEGIN. On a false flag, skip execution to just after REPEAT, exiting the structure. UNIFORTH VOCABULARY LIST Page A-39 WIDTH --- addr G A user variable containing the maximum numbers of letters saved in the compilation of a definition's name. It must be 1 through 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 char --- addr F Receive characters from the input stream until the non-zero delimiting character is encountered or the input stream is exhausted, ignoring leading delimiters. The characters are stored as a packed string with the character count in the first character position. The actual delimiter encountered (char or null) is stored at the end of the text but not included in the count. If the input stream was exhausted as WORD is called, then a zero length will result. The address of the beginning of this packed string is left on the stack. X' --- n U Interpret the next number as decimal, regardless of the current base. X. n --- U Display the number in decimal, regardless of the current base. XON/XOFF --- adr U A variable that turns on/off the ctrl-s/ctrl-q keyboard check. XOR n1 n2 --- n3 F "x-or" Leave the bitwise exclusive-or of two numbers. Y/N --- flag U Bring in a yes/no/escape type answer. Z.R n1 n2 --- U Display n1 right justified in n2 columns. Zero fill to the left. See PLUS?. [ F,I "left-bracket" End the compilation mode. The text from the input stream is subsequently executed. See ]. ['] F Immediate form of tick. [COMPILE] F,I,C "bracket-compile" Used in a colon-definition in the form: [COMPILE] Force compilation of . This allows compilation of an IMMEDIATE word when it would otherwise be executed. UNIFORTH VOCABULARY LIST Page A-40 ] F "right-bracket" Set the compilation mode. The text from the input stream is subsequently compiled. See [.