B. UNCONTROLLED REFERENCE WORDS APPENDIX B. UNCONTROLLED REFERENCE WORDS The Uncontrolled Reference Word Set contains glossary definitions which are included for public reference of words that have past or present usage and/or are candidates for future standardization. No recommendation is made that these words be included in a system. No restrictions are placed on the definition or usage of uncontrolled words. However, use of these names for procedures differing from the given definitions is discouraged. !BITS 16b1 addr 16b2 -- "store-bits" Store the value of 16b1 masked by 16b2 into the equivalent masked part of the contents of addr, without affecting bits outside the mask. ** n1 n2 -- n3 "power" n3 is the value of n1 to the power n2. +BLOCK w -- u "plus-block" u is the sum of w plus the number of the block being interpreted. -' -- addr false "dash-tick" -- true Used in the form: -' Leave the parameter field of beneath zero (false) if can be found in the search order; leave only true if not found. -MATCH addr1 +n1 addr2 +n2 -- addr3 flag "dash-match" Attempt to find the +n2-length text string beginning at addr2 somewhere in the +n1-length text string beginning at addr1. Return the last+1 address addr3 of the match point and a flag which is zero if a match exists. -TEXT addr1 +n1 addr2 -- n2 "dash-text" Compare two strings over the length +n1 beginning at addr1 and addr2. Return zero if the strings are equal. If unequal, return n2, the difference between the last characters compared: addr1(i) - addr2(i). 58 B. UNCONTROLLED REFERENCE WORDS /LOOP +n -- C,I "up-loop" sys -- (compiling) A do-loop terminating word. The loop index is incremented by the positive value +n. If the unsigned magnitude of the resultant index is greater than the limit, then the loop is terminated, otherwise execution returns to the corresponding DO . The comparison is unsigned magnitude. sys is balanced with its corresponding DO . See: DO 1+! addr -- "one-plus-store" Add one to the 16-bit contents at addr. 1-! addr -- "one-minus-store" Subtract one from the 16-bit contents at addr. ;: -- addr C,I"semi-colon-colon" Used to specify a new defining word: : When is executed, it creates an entry for the new word . Later execution of will execute the sequence of words between ;: and ; , with the address of the first (if any) parameters associated with on the stack. ;S -- Interpret only"semi-s" Stop interpretation of a block. <> w1 w2 -- flag "not-equal" flag is true if w1 is not equal to w2. in defining words, in the form: : ... ... ; and then: When executes, . The sequence of words between established a parameter field for . When is later executed, the sequence of words following DOES> will be executed, with the parameter field address of on the data stack. . >< 16b1 -- 16b2 "byte-swap" Swap the high and low bytes within 16b1. >MOVE< addr1 addr2 u -- "byte-swap-move" Move u bytes beginning at addr1 to the memory beginning at addr2. During this move, the order of each byte pair is reversed. 59 B. UNCONTROLLED REFERENCE WORDS @BITS addr 16b1 -- 16b2 "fetch-bits" Return the 16-bits at addr masked by 16b1. AGAIN -- C,I sys -- (compiling) Effect an unconditional jump back to the start of a BEGIN- AGAIN loop. sys is balanced with its corresponding BEGIN . See: BEGIN ASCII -- char I,M "as-key" -- (compiling) Used in the form: ASCII ccc where the delimiter of ccc is a space. char is the ASCII character value of the first character in ccc. If interpreting, char is left on the stack. If compiling, compile char as a literal so that when the colon definition is later executed, char is left on the stack. ASHIFT 16b1 n -- 16b2 "a-shift" Shift the value 16b1 arithmetically n bits left if n is positive, shifting zeros into the least significant bit positions. If n is negative, 16b1 is shifted right; the sign is included in the shift and remains unchanged. B/BUF -- 1024 "bytes-per-buffer" A constant leaving 1024, the number of bytes per block buffer. BELL -- Activate a terminal bell or noise-maker as appropriate to the device in use. CHAIN -- M Used in the form: CHAIN Connect the CURRENT vocabulary to all definitions that might be entered into the vocabulary in the future. The CURRENT vocabulary may not be FORTH or ASSEMBLER . Any given vocabulary may only be chained once, but may be the object of any number of chainings. For example, every user- defined vocabulary may include the sequence: CHAIN FORTH CONTINUED u -- M Continue interpretation at block u. CUR -- addr A variable pointing to the physical record number before which the tape is currently positioned. REWIND sets CUR=1. DBLOCK ud -- addr M "d-block" Identical to BLOCK but with a 32-bit block unsigned number. 60 B. UNCONTROLLED REFERENCE WORDS DPL -- addr U "d-p-l" A variable containing the number of places after the fractional point for input conversion. FLD -- addr U "f-l-d" A variable pointing to the field length reserved for a number during output conversion. H. u -- M "h-dot" Output u as a hexadecimal integer with one trailing blank. The current base is unchanged. I' -- w C "i-prime" Used within a colon definition executed only from within a do-loop to return the corresponding loop index. IFEND Interpret only"if-end" Terminate a conditional interpretation sequence begun by IFTRUE . IFTRUE flag -- Interpret only "if-true" Begin an: IFTRUE ... OTHERWISE ... IFEND conditional sequence. These conditional words operated like: IF ... ELSE ... THEN except that they cannot be nested, and are to be used only during interpretation. In conjunction with the words [ and ] the words [ and ] they may be used within a colon definition to control compilation, although they are not to be compiled. INDEX u1 u2 -- M Print the first line of each screen over the range {u1..u2}. This displays the first line of each screen of source text, which conventionally contains a title. LAST -- addr U A variable containing the address of the beginning of the last dictionary entry made, which may not yet be a complete or valid entry. LINE +n -- addr M addr is the address of the beginning of line +n for the screen whose number is contained in SCR . The range of +n is {0..15}. LINELOAD +n u -- "line-load" Begin interpretation at line +n of screen u. 61 B. UNCONTROLLED REFERENCE WORDS LOADS u -- M A defining word executed in the form: u LOADS When is subsequently executed, block u will be loaded. MAP0 -- addr "map-zero" A variable pointing to the first location in the tape map. MASK n -- 16b 16b is a mask of n most-significant bits if n is positive, or n least-significant bits if n is negative. MOVE addr1 addr2 u -- The u bytes at address addr1 are moved to address addr2. The data are moved such that the u bytes remaining at address addr2 are the same data as was originally at address addr1. If u is zero nothing is moved. MS +n -- M "m-s" Delay for approximately +n milliseconds. NAND 16b1 16b2 -- 16b3 16b3 is the one's complement of the logical AND of 16b1 with 16b2. NOR 16b1 16b2 -- 16b3 16b3 is the one's complement of the logical OR of 16b1 with 16b2. NUMBER addr -- d Convert the count and character string at addr, to a signed 32-bit integer, using the value of BASE . If numeric conversion is not possible, an error condition exists. The string may contain a preceding minus sign. O. u -- M "o-dot" Print u in octal format with one trailing blank. The value in BASE is unaffected. OTHERWISE -- Interpret only An interpreter-level conditional word. See: IFTRUE PAGE -- M Clear the terminal screen or perform a form-feed action suitable to the output device currently active. READ-MAP -- M "read-map" Read to the next file mark on tape constructing a correspondence table in memory (the map) relating physical block position to logical block number. The tape should normally be rewound to its load point before executing READ- MAP . 62 B. UNCONTROLLED REFERENCE WORDS REMEMBER -- M A defining word executed in the form: REMEMBER Defines a word which, when executed, will cause and all subsequently defined words to be deleted from the dictionary. may be compiled into and executed from a colon definition. The sequence DISCARD REMEMBER DISCARD provides a standardized preface to any group of transient word definitions. REWIND -- M Rewind the tape to its load point, setting CUR equal to one. ROTATE 16b1 n -- 16b2 Rotate 16b1 left n bits if n is positive, right n bits if n is negative. Bits shifted out of one end of the cell are shifted back in at the opposite end. S0 -- addr U "s-zero" A variable containing the address of the bottom of the stack. SET 16b addr -- M A defining word executed in the form: 16b addr SET Defines a word which, when executed, will cause the value 16b to be stored at addr. SHIFT 16b1 n -- 16b2 Logical shift 16b1 left n bits if n is positive, right n bits if n is negative. Zeros are shifted into vacated bit positions. TEXT char -- M Accept characters from the input stream, as for WORD , into PAD , blank-filling the remainder of PAD to 84 characters. USER +n -- M A defining word executed in the form: +n USER which creates a user variable . +n is the offset within the user area where the value for is stored. Execution of leaves its absolute user area storage address. WORDS -- M List the word names in the first vocabulary of the currently active search order. 63 B. UNCONTROLLED REFERENCE WORDS \LOOP +n -- C,I "down-loop" sys -- (compiling) A do-loop terminating word. The loop index is decremented by the positive value +n. If the unsigned magnitude of the resultant index is less than or equal to the limit, then the loop is terminated, otherwise execution returns to the corresponding DO . The comparison is unsigned. sys is balanced with its corresponding DO . See: DO 64