home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / beehive / cpmforth / forthdoc.arc / FORTH-83.TXT < prev    next >
Text File  |  1980-01-01  |  62KB  |  1,410 lines

  1.  
  2.       +-----------------------------------------------------+
  3.       | The  following glossary has been extracted from the |
  4.       | Forth-83  Standard.  It gives the  description  and |
  5.       | operation  of words required in a Forth-83 Standard |
  6.       | System.  Though  all  care has been  taken,  it  is |
  7.       | possible  that  errors  may  have  resulted  during |
  8.       | transcription. Full copies of the Forth-83 Standard |
  9.       | may be obtained from the Forth Interest Group, P.O. |
  10.       | Box 8231, San Jose, CA 95155 USA.                   |
  11.       +-----------------------------------------------------+
  12.  
  13.  
  14.  
  15.                          FORTH-83 STANDARD
  16.  
  17.  
  18.                          A PUBLICATION OF
  19.                      THE FORTH STANDARDS TEAM
  20.  
  21.  
  22.                            AUGUST 1983
  23.  
  24.  
  25.               COPYRIGHT (c) 1983 FORTH STANDARDS TEAM
  26.  
  27.  
  28. Permission is hereby granted to reproduce this document in whole or 
  29. in part provided that such reproductions refer to the fact that the 
  30. copied  material  is  subject to copyright by the  FORTH  Standards 
  31. Team.   No  changes  or  modifications may be made  to  the  copied 
  32. material unless it is clearly indicated that such changes were  not 
  33. incorporated in the original copyrighted work.
  34.  
  35. The  existence of a FORTH Standard does not in any respect preclude 
  36. anyone,  whether the individual has approved this Standard or  not, 
  37. from  implementing,   marketing,   purchasing  or  using  products, 
  38. processes,  or  procedures not conforming to the  Standard.   FORTH 
  39. Standards are subject to periodic review and users are cautioned to 
  40. obtain the latest editions.
  41.  
  42.  
  43. FORTH STANDARDS TEAM
  44. P.O. BOX 4545
  45. MOUNTAIN VIEW, CA 94040
  46. USA
  47.  
  48.  
  49.  
  50.  
  51.                            1.  FOREWORD
  52.  
  53.  
  54. FORTH is an integrated programming approach and computer  language.  
  55. FORTH  was invented by Mr.  Charles Moore specifically to  increase 
  56. programmer  productivity  in  the development of  computer  related 
  57. applications  without sacrificing machine efficiency.   FORTH is  a 
  58. layered environment containing the elements of a computer  language 
  59. as  well  as  those of an operating system and a  machine  monitor.  
  60. This   extensible,   layered   environment  provides   for   highly 
  61. interactive program development and testing.
  62.  
  63. In  the  interests  of  transportability  of  application  software 
  64. written in FORTH,  standardization efforts began in the  mid-1970's 
  65. by the European FORTH User's Group (EFUG).  This effort resulted in 
  66. the  FORTH-77 Standard.   As the language continued to  evolve,  an 
  67. interim  FORTH-78  Standard  was published by the  FORTH  Standards 
  68. Team.  Following FORTH Standards Team meetings in 1979 the FORTH-79 
  69. Standard was published in 1980.
  70.  
  71. FORTH's  extensibility  allows  the language  to  be  expanded  and 
  72. adapted  to  special  needs  and  different  hardware  systems.   A 
  73. programmer  or  vendor  may  choose to  strictly  adhere  with  the 
  74. standard,  but  the choice to deviate is acknowledged as beneficial 
  75. and sometimes necessary.
  76.  
  77.  
  78.                             2.  PURPOSE
  79.  
  80.  
  81. The  purpose of the standard is to allow transportability of FORTH-
  82. 83  Standard  Programs  in  source  form  among  FORTH-83  Standard 
  83. Systems.   A  standard  program shall execute equivalently  on  all 
  84. standard systems.
  85.  
  86.  
  87.                              3.  SCOPE
  88.  
  89.  
  90. This  standard  shall  apply  to  any  FORTH-83  Standard   Program 
  91. executing  on  any FORTH-83 Standard System,  providing  sufficient 
  92. computer resources (memory, mass storage) are available.
  93.  
  94.  
  95.                              9.  USAGE
  96.  
  97.  
  98. 9.1  Word Names and Word Definitions
  99.  
  100.      A  Standard Program may reference only the definitions of  the 
  101.      Required  Word  Set and Standard  Extensions  and  definitions 
  102.      which  are  subsequently  defined  in terms  of  these  words.  
  103.      Furthermore, a Standard Program must use the standard words as 
  104.      required  by  any conventions of  this  Standard.   Equivalent 
  105.      execution must result from Standard Programs.
  106.  
  107.      The  implementation  of a Standard System may  use  words  and 
  108.      techniques outside the scope of the Standard, provided that no 
  109.      program  running  on  that  system is required  to  use  words 
  110.      outside the Standard for normal operation.
  111.  
  112.      If  a Standard System or Standard Program  redefines  Standard 
  113.      definitions  within  the FORTH vocabulary,  these  definitions 
  114.      must comply with the Standard.
  115.  
  116. 9.5  Terminal Input and Output
  117.  
  118. 9.5.1     KEY
  119.  
  120. A  Standard System must receive all valid ASCII  characters.   Each 
  121. KEY receives one valid ASCII character,  with more-significant bits 
  122. environmentally dependent and might not be zero.   KEY must receive 
  123. as  many  bits  as are  obtainable.   A  Standard  Program  without 
  124. environmental dependencies may only use the least significant 7-bit 
  125. ASCII character received by KEY.  For example:
  126.  
  127.           KEY  127 AND
  128.  
  129. 9.5.2     EXPECT
  130.  
  131. Control  characters  may  be processed to  allow  system  dependent 
  132. editing of the characters prior to receipt.   Therefore, a Standard 
  133. Program may not anticipate that control characters can be received.
  134.  
  135. 9.5.3     EMIT
  136.  
  137. Because  of  the  potential non-transportable  action  by  terminal 
  138. devices of control characters,  the use of ASCII control characters 
  139. is  an  environmental dependency.   Each EMIT deals with  only  one 
  140. ASCII   character.    The  ASCII  character  occupies  the   least-
  141. significant   7   bits;    the   more-significant   bits   may   be 
  142. environmentally  dependent.   Using the more-significant bits  when 
  143. other  than zero is an environmentally dependent usage.   EMIT must 
  144. display as many bits as can be sent.
  145.  
  146. 9.5.4     TYPE
  147.  
  148. Because  of  the  potential non-transportable  action  by  terminal 
  149. devices of control characters,  the use of ASCII control characters 
  150. is an environmental dependency.
  151.  
  152.  
  153.                       11.  GLOSSARY NOTATION
  154.  
  155.  
  156. 11.1  Order
  157.  
  158.      The  glossary  definitions  are listed in  ASCII  alphabetical 
  159.      order.
  160.  
  161.  
  162. 11.2  Capitalization
  163.  
  164.      Word names are capitalized throughout this Standard.
  165.  
  166.  
  167. 11.3  Stack Notation
  168.  
  169. The  stack  parameters  input to and output from a  definition  are 
  170. described using the notation:
  171.  
  172.           before -- after
  173.  
  174. before    stack parameters before execution
  175. after     stack parameters after execution
  176.  
  177. In this notation,  the top of the stack is to the right.  Words may 
  178. also be shown in context when appropriate.
  179.  
  180. Unless  otherwise  noted,  all stack notation  describes  execution 
  181. time.   If  it  applies at compile time,  the line is  followed  by 
  182. (compiling).
  183.  
  184.  
  185. 11.4  Attributes
  186.  
  187. Capitalized symbols indicate attributes of the defined words:
  188.  
  189.      C    The  word may only be used during compilation of a  colon 
  190.           definition.
  191.  
  192.      I    Indicates  that  the word is IMMEDIATE and  will  execute 
  193.           during compilation, unless special action is taken.
  194.  
  195.      M    This word has potential multiprogramming impact.
  196.  
  197.      U    A user variable.
  198.  
  199.  
  200. 11.5  Serial Numbers
  201.  
  202.      When  a substantive alteration to a word's definition is  made 
  203.      or  when a new word is added,  the serial number will  be  the 
  204.      last  two  digits  of the year of the Standard in  which  such 
  205.      change was made (i.e., "83").  When such change is made within 
  206.      a  Working  Draft,  the  number  will  be  suffixed  with  the 
  207.      character identifying the draft (i.e., "83A").
  208.  
  209.  
  210. 11.6  Pronunciation
  211.  
  212.      The  natural language pronunciation of word names is given  in 
  213.      double quotes (") where it differs from English pronunciation.
  214.  
  215.  
  216. 11.7  Stack Parameters
  217.  
  218.      Unless otherwise stated, all reference to numbers apply to 16-
  219.      bit signed integers.   The implied range of values is shown as 
  220.      (from..to).   The  content  of an address is shown  by  double 
  221.      parentheses, particularly for the contents of variables, i.e., 
  222.      BASE ((2..72)).
  223.  
  224.      The following are the stack parameter abbreviations and  types 
  225.      of numbers used throughout the glossary.   These abbreviations 
  226.      may  be  suffixed  with  a  digit  to  differentiate  multiple 
  227.      parameters of the same type.
  228.  
  229.  
  230. Stack     Number Type              Range in Decimal         Minimum
  231. Abbrv.                                                        Field
  232.  
  233. flag      boolean                  0=false, else=true            16
  234. true      boolean                  -1 (as a result)              16
  235. false     boolean                  0
  236. b         bit                      (0..1)                         1
  237. char      character                (0..127)                       7
  238. 8b        8 arbitrary bits (byte)  not applicable                 8
  239. 16b       16 arbitrary bits        not applicable                16
  240. n         number (weighted bits)   (-32768..32767)               16
  241. +n        positive number          (0..32767)                    16
  242. u         unsigned number          (0..65535)                    16
  243. w         unspecified weighted     (-32767..65535)               16
  244.            number (n or u)
  245. addr      address (same as u)      (0..65535)                    16
  246. 32b       32 arbitrary bits        not applicable                32
  247. d         double number            (-2147,483,648..2147,483,647) 32
  248. +d        positive double number   (0..2147,483,647)             32
  249. ud        unsigned double number   (0..4294,967,295)             32
  250. wd        unspecified weighted     (-2147,483,648..4294,967,295) 32
  251.            double number (d or ud)
  252. sys       0, 1, or more system     not applicable                na
  253.           dependent stack entries
  254.  
  255.  
  256.      Any other symbol refers to an arbitrary signed 16-bit  integer 
  257.      in the range (-32,768..32,767), unless otherwise noted.
  258.  
  259.      Because of the use of two's complement arithmetic,  the signed 
  260.      16-bit  number  (n) -1 has the same bit representation as  the 
  261.      unsigned number (u) 65,535.   Both of these numbers are within 
  262.      the set of unspecified weighted numbers (w).
  263.  
  264.  
  265. 11.8  Input Text
  266.  
  267.      <name>
  268.  
  269.      An arbitrary FORTH word accepted from the input stream.   This 
  270.      notation refers to text from the input stream,  not to  values 
  271.      on the data stack.
  272.  
  273.      ccc
  274.  
  275.      A  sequence  of arbitrary characters accepted from  the  input 
  276.      stream  until the first occurrence of the specified delimiting 
  277.      character.   The delimiter is accepted from the input  stream, 
  278.      but  is  not  one of the characters ccc and is  therefore  not 
  279.      otherwise  processed.   This notation refers to text from  the 
  280.      input stream,  not to values on the data stack.   Unless noted 
  281.      otherwise,  the number of characters accepted may be from 0 to 
  282.      255.
  283.      
  284.  
  285.                       12.  REQUIRED WORD SET
  286.  
  287.  
  288. 12.2  The Required Word Set Glossary
  289.  
  290. !              16b addr --                   79             "store"
  291.      16b is stored at addr.
  292.  
  293. #              +d1 -- +d2                    79             "sharp"
  294.      The remainder of +d1 divided by the value of BASE is converted 
  295.      to an ASCII character and appended to the output string toward 
  296.      lower memory addresses.  +d2 is the quotient and is maintained 
  297.      for further processing.  Typically used between <# and #> .
  298.  
  299. #>             32b -- addr +n                79     "sharp-greater"
  300.      Pictured numeric output conversion is ended dropping 32b. addr 
  301.      is  the  address  of the resulting output string.  +n  is  the 
  302.      number  of  characters  in the  output  string.  addr  and  +n 
  303.      together are suitable for TYPE .
  304.  
  305. #S             +d -- 0 0                     79           "sharp-s"
  306.      +d  is  converted appending each resultant character into  the 
  307.      pictured numeric output string until the quotient (see: # ) is 
  308.      zero.  A  single  zero is added to the output  string  if  the 
  309.      number was initially zero. Typically used between <# and #>.
  310.  
  311. #TIB           -- addr                       U,83    "number-t-i-b"
  312.      The  address  of a variable containing the number of bytes  in 
  313.      the  text input buffer.  #TIB is accessed by WORD when BLK  is 
  314.      zero. ((0..capacity of TIB))  
  315.  
  316. '              -- addr                       M,83            "tick"
  317.      Used in the form:
  318.           ' <name>
  319.      addr is the compilation address of <name>.  An error condition 
  320.      exists  if <name> is not found in the currently active  search 
  321.      order.
  322.  
  323. (              --                            I,M,83         "paren"
  324.      Used in the form:
  325.           ( ccc)
  326.      The characters ccc,  delimited by ) (closing parenthesis), are 
  327.      considered comments. Comments are not otherwise processed. The 
  328.      blank following ( is not part of the ccc. ( may be freely used 
  329.      while interpreting or compiling.  The number of characters  in 
  330.      ccc  may be from zero to the number of characters remaining in 
  331.      the input stream up to the closing parenthesis.
  332.  
  333. *              w1 w2 -- w3                   79             "times"
  334.      w3 is the least significant 16 bits of the arithmetic  product 
  335.      of w1 times w2.
  336.  
  337. */             n1 n2 n3 -- n4                83      "times-divide"
  338.      n1  is first multiplied by n2 producing an intermediate 32-bit 
  339.      result.  n4  is the floor of the quotient of the  intermediate 
  340.      32-bit  result divided by the divisor n3.  The product  of  n1 
  341.      times  n2  is maintained as an intermediate 32-bit result  for 
  342.      greater precision than the otherwise equivalent  sequence:  n1 
  343.      n2 * n3 / .  An error condition results if the divisor is zero 
  344.      or  if  the  quotient  falls outside  of  the  range  (-32768 
  345.      ..32767).  
  346.  
  347. */MOD          n1 n2 n3 -- n4 n5             83  "times-divide-mod"
  348.      n1  is first multiplied by n2 producing an intermediate 32-bit 
  349.      result.  n4  is  the  remainder and n5 is  the  floor  of  the 
  350.      quotient  of  the  intermediate 32-bit result divided  by  the 
  351.      divisor n3.  A 32-bit intermediate product is used as for */ . 
  352.      n4  has  the same sign as n3 or is zero.  An  error  condition 
  353.      results  if the divisor is zero or if the quotient falls  out-
  354.      side of the range (-32768..32767).  
  355.  
  356. +              w1 w2 -- w3                   79              "plus"
  357.      w3 is the arithmetic sum of w1 plus w2.
  358.  
  359. +!             w1 addr --                    79        "plus-store"
  360.      w1 is added to the w value at addr using the convention for +. 
  361.      This sum replaces the original value at addr.
  362.  
  363. +LOOP          n --                          C,I,83     "plus-loop"
  364.           sys --    (compiling)
  365.      n is added to the loop index. If the new index was incremented 
  366.      across the boundary between limit-1 and limit then the loop is 
  367.      terminated and loop control parameters are discarded. When the 
  368.      loop is not terminated,  execution continues to just after the 
  369.      corresponding DO .  sys is balanced with its corresponding DO. 
  370.      See: DO
  371.      
  372. ,              16b --                        79             "comma"
  373.      Allot space for 16b then store 16b at HERE 2-
  374.  
  375. -              w1 w2 -- w3                   79             "minus"
  376.      w3 is the result of subtracting w2 from w1.
  377.  
  378. -TRAILING      addr +n1 -- addr +n2          79     "dash-trailing"
  379.      The character count +n1 of a text string beginning at addr  is 
  380.      adjusted to exclude trailing spaces.  If +n1 is zero, then +n2 
  381.      is  also zero.  If the entire string consists of spaces,  then 
  382.      +n2 is zero.
  383.  
  384. .              n --                          M,79             "dot"
  385.      The  absolute value of n is displayed in a free  field  format 
  386.      with a leading minus sign if n is negative.
  387.  
  388. ."             --                            C,I,83     "dot-quote"
  389.                --    (compiling)
  390.      Used in the form:
  391.           ." ccc"
  392.      Later  execution will display the characters ccc up to but not 
  393.      including the delimiting " (close-quote).  The blank following 
  394.      ." is not part of ccc.
  395.  
  396. .(             --                            I,M,83     "dot-paren"
  397.                --   (compiling)
  398.      Used in the form:
  399.           .( ccc)
  400.      The  characters ccc up to but not including the  delimiting  ) 
  401.      (closing  parenthesis) are displayed.   The blank following .( 
  402.      is not part of ccc.
  403.  
  404. /              n1 n2 -- n3                   83            "divide"
  405.      n3  is the floor of the quotient of n1 divided by the  divisor 
  406.      n2.   An error condition results if the divisor is zero or  if 
  407.      the quotient falls outside of the range (-32768..32767).
  408.  
  409. /MOD           n1 n2 -- n3 n4                83        "divide-mod"
  410.      n3  is  the remainder and n4 the floor of the quotient  of  n1 
  411.      divided  by the divisor n2.   n3 has the same sign as n2 or is 
  412.      zero.  An error condition results if the divisor is zero or if 
  413.      the quotient falls outside of the range (-32768..32767).  
  414.  
  415. 0<             n -- flag                     83         "zero-less"
  416.      flag is true if n is less than zero (negative)
  417.  
  418. 0=             w -- flag                     83       "zero-equals"
  419.      flag is true if w is zero.
  420.  
  421. 0>             n -- flag                     83      "zero-greater"
  422.      flag is true if n is greater than zero.
  423.  
  424. 1+             w1 -- w2                      79          "one-plus"
  425.      w2  is  the  result  of adding one  to  w1  according  to  the 
  426.      operation of + .
  427.  
  428. 1-             w1 -- w2                      79         "one-minus"
  429.      w2  is the result of subtracting one from w1 according to  the 
  430.      operation of - .
  431.  
  432. 2+             w1 -- w2                      79          "two-plus"
  433.      w2  is  the  result  of  adding two to  w1  according  to  the 
  434.      operation of + .
  435.  
  436. 2-             w1 -- w2                      79         "two-minus"
  437.      w2  is the result of subtracting two from w1 according to  the 
  438.      operation of - .
  439.  
  440. 2/             n1 -- n2                      83        "two-divide"
  441.      n2 is the result of arithmetically shifting n1 right one  bit.  
  442.      The sign is included in the shift and remains unchanged.
  443.  
  444. :              -- sys                        M,79           "colon"
  445.      A defining word executed in the form:
  446.           : <name> ... ;
  447.      Create  a  word  definition  for  <name>  in  the  compilation 
  448.      vocabulary  and  set compilation state.   The search order  is 
  449.      changed  so that the first vocabulary in the search  order  is 
  450.      replaced  by  the  compilation  vocabulary.   The  compilation 
  451.      vocabulary  is unchanged.   The text from the input stream  is 
  452.      subsequently compiled.  <name> is called a "colon definition".  
  453.      The  newly created word definition for <name> cannot be  found 
  454.      in  the  dictionary  until the corresponding  ;  or  ;code  is 
  455.      successfully processed.
  456.  
  457.      An error condition exists if a word is not found and cannot be 
  458.      converted  to  a number or if,  during compilation  from  mass 
  459.      storage,  the  input stream is exhausted before encountering ; 
  460.      or ;CODE .  sys is balanced with its corresponding ; .
  461.  
  462. ;              --                            C,I,79    "semi-colon"
  463.                sys --    (compiling)
  464.      Stops compilation of a colon definition,  allows the <name> of 
  465.      this  colon  definition to be found in  the  dictionary,  sets 
  466.      interpret state and compiles EXIT (or a system dependent  word 
  467.      which performs an equivalent function).   sys is balanced with 
  468.      its corresponding : .  See: EXIT
  469.  
  470. <              n1 n2 -- flag                 83         "less-than"
  471.      flag is true if n1 is less than n2.
  472.           -32768 32767 <  must return true.
  473.           -32768 0 <  must return true.
  474.  
  475. <#             --                            79        "less-sharp"
  476.      Initialize pictured numeric output conversion. The words
  477.           #  #>  #S  <#  HOLD  SIGN
  478.      can  be used to specify the conversion of a double number into 
  479.      an ASCII text string stored in right-to-left order. 
  480.  
  481. =              w1 w2 -- flag                 83            "equals"
  482.      flag is true if w1 is equal to w2.
  483.  
  484. >              n1 n2 -- flag                 83      "greater-than"
  485.      flag is true if n1 is greater than n2.
  486.           -32768 32767 >  must return false
  487.           -32768 0 >  must return false
  488.  
  489. >BODY          addr1 -- addr2                83           "to-body"
  490.      addr2  is  the parameter field address  corresponding  to  the 
  491.      compilation address addr1.  
  492.  
  493. >IN            -- addr                       U,79           "to-in"
  494.      The address of a variable which contains the present character 
  495.      offset  within the input stream ((0..the number of  characters 
  496.      in the input stream)).  See: WORD
  497.  
  498. >R             16b --                        C,79            "to-r"
  499.      Transfers 16b to the return stack.  
  500.  
  501. ?DUP           16b -- 16b 16b                79     "question-dupe"
  502.                or 0 -- 0
  503.      Duplicate 16b if it is non-zero.
  504.  
  505. @              addr -- 16b                   79             "fetch"
  506.      16b is the value at addr.
  507.  
  508. ABORT                                        79
  509.      Clears the data stack and performs the function of QUIT .   No 
  510.      message is displayed.
  511.  
  512. ABORT"         flag --                       C,I,83   "abort-quote"
  513.                -- (compiling)
  514.      Used in the form:
  515.           flag ABORT" ccc"
  516.      When  later  executed,  if  flag is true the  characters  ccc, 
  517.      delimited by " (close-quote),  are displayed and then a system 
  518.      dependent  error  abort sequence,  including the  function  of 
  519.      ABORT,  is performed.   If flag is false,  the flag is dropped 
  520.      and  execution continues.   The blank following ABORT" is  not 
  521.      part of ccc.
  522.  
  523. ABS            n -- u                        79          "absolute"
  524.      u is the absolute value of n.   If n is -32,768 then u is  the 
  525.      same value.  
  526.  
  527. ALLOT          w --                          79
  528.      Allocates w bytes in the dictionary.   The address of the next 
  529.      available dictionary location is updated accordingly.
  530.  
  531. AND            16b1 16b2 -- 16b3             79
  532.      16b3 is the bit-by-bit logical 'and' of 16b1 with 16b2.
  533.  
  534. BASE           -- addr                       U,83
  535.      The  address  of  a variable containing  the  current  numeric 
  536.      conversion radix.  ((2..72))
  537.  
  538. BEGIN          --                            C,I,79
  539.                -- sys (compiling)
  540.      Used in the form:
  541.           BEGIN ... flag UNTIL
  542.      or
  543.           BEGIN ... flag WHILE ... REPEAT
  544.      BEGIN  marks  the  start  of a word  sequence  for  repetitive 
  545.      execution.   A BEGIN-UNTIL loop will be repeated until flag is 
  546.      true.   A BEGIN-WHILE-REPEAT loop will be repeated until  flag 
  547.      is  false.   The words after UNTIL or REPEAT will be  executed 
  548.      when  either  loop  is finished.   sys is  balanced  with  its 
  549.      corresponding UNTIL or WHILE .  
  550.  
  551. BLK            -- addr                       U,79           "b-l-k"
  552.      The  address  of a variable containing the number of the  mass 
  553.      storage block being interpreted as the input stream.   If  the 
  554.      value  of BLK is zero the input stream is taken from the  text 
  555.      input buffer.   ((0..the number of blocks available -1))  See:
  556.      TIB
  557.  
  558. BLOCK          u -- addr                     M,83
  559.      addr  is the address of the assigned buffer of the first  byte 
  560.      of block u.  If the block occupying that buffer is not block u 
  561.      and has been UPDATEed it is transferred to mass storage before 
  562.      assigning  that buffer.   If block u is not already in memory, 
  563.      it  is  transferred from mass storage into an  assigned  block 
  564.      buffer.   A block may not be assigned to more than one buffer.  
  565.      If  u  is not an available block number,  an  error  condition 
  566.      exists.   Only data within the last buffer referenced by BLOCK 
  567.      or BUFFER is valid.   The contents of a block buffer must  not 
  568.      be  changed  unless  the  change may be  transferred  to  mass 
  569.      storage.
  570.  
  571. BUFFER         u -- addr                     M,83
  572.      Assigns a block buffer to block u.  addr is the address of the 
  573.      first  byte of the block within its buffer.   This function is 
  574.      fully specified by the definition for BLOCK except that if the 
  575.      block  is  not already in memory it might not  be  transferred 
  576.      from mass storage.   The contents of the block buffer assigned 
  577.      to block u by BUFFER are unspecified.
  578.  
  579. C!             16b addr --                   79           "c-store"
  580.      The  least-significant 8 bits of 16b are stored into the  byte 
  581.      at addr.
  582.  
  583. C@             addr -- 8b                    79           "c-fetch"
  584.      8b is the contents of the byte at addr.
  585.  
  586. CMOVE          addr1 addr2 u --              83            "c-move"
  587.      Move u bytes beginning at address addr1 to addr2.  The byte at 
  588.      addr1 is moved first,  proceeding toward high memory.  If u is 
  589.      zero nothing is moved.
  590.  
  591. CMOVE>         addr1 addr2 u --              83         "c-move-up"
  592.      Move  u bytes at address addr1 to addr2.   The move begins  by 
  593.      moving  the  byte  at (addr1 plus u minus 1) to  (addr2 plus u 
  594.      minus  1) and proceeds to successively lower addresses  for  u 
  595.      bytes.   If u is zero nothing is moved.  (Useful for sliding a 
  596.      string towards higher addresses).
  597.  
  598. COMPILE        --                            C,83
  599.      Typically used in the form:
  600.           : <name> ... COMPILE <namex> ... ;
  601.      When <name> is executed,  the compilation address compiled for 
  602.      <name>  is  compiled and not executed.   <name>  is  typically 
  603.      immediate and <namex> is typically not immediate.
  604.  
  605. CONSTANT       16b --                        M,83
  606.      A defining word used in the form:
  607.           16b CONSTANT <name>
  608.      Creates  a dictionary entry for <name> so that when <name>  is 
  609.      later executed, 16b will be left on the stack.
  610.  
  611. CONVERT        +d1 addr1 -- +d2 addr2        79
  612.      +d2 is the result of converting the characters within the text 
  613.      beginning at addr1+1 into digits, using the value of BASE, and 
  614.      accumulating  each into +d1 after multiplying +d1 by the value 
  615.      of  BASE  .    Conversion  continues  until  an  unconvertible 
  616.      character is encountered.   addr2 is the location of the first 
  617.      unconvertible character.
  618.  
  619. COUNT          addr1 -- addr2 +n             79
  620.      addr2  is addr1 and +n is the length of the counted string  at 
  621.      addr1.   The byte at addr1 contains the byte count +n.   Range 
  622.      of +n is (0..255).  
  623.  
  624. CR             --                            M,79             "c-r"
  625.      Displays   a  carriage-return  and  line-feed  or   equivalent 
  626.      operation.
  627.  
  628. CREATE         --                            M,79
  629.      A defining word executed in the form:
  630.           CREATE <name>
  631.      Creates  a  dictionary  entry for  <name>.   After  <name>  is 
  632.      created,  the next available dictionary location is the  first 
  633.      byte of <name>'s parameter field.  When <name> is subsequently 
  634.      executed,  the address of the first byte of <name>'s parameter 
  635.      field is left on the stack.  CREATE does not allocate space in 
  636.      <name>'s parameter field.
  637.  
  638. D+             wd1 wd2 -- wd3                79            "d-plus"
  639.      wd3 is the arithmetic sum of wd1 plus wd2.
  640.  
  641. D<             d1 d2 -- flag                 83       "d-less-than"
  642.      flag  is true if d1 is less than d2 according to the operation 
  643.      of < except extended to 32 bits.
  644.  
  645. DECIMAL        --                            79
  646.      Set the input-output conversion base to ten.
  647.  
  648. DEFINITIONS    --                            79
  649.      The  compilation  vocabulary is changed to be the same as  the 
  650.      first vocabulary in the search order.
  651.  
  652. DEPTH          -- +n                         79
  653.      +n is the number of 16-bit values contained in the data  stack 
  654.      before +n was placed on the stack.
  655.  
  656. DNEGATE        d1 -- d2                      79          "d-negate"
  657.      d2 is the two's complement of d1.
  658.  
  659. DO             w1 w2 --                      C,I,83
  660.                -- sys    (compiling)
  661.      Used in the form:
  662.           DO ... LOOP
  663.      or
  664.           DO ... +LOOP
  665.      Begins  a  loop which terminates based on control  parameters.  
  666.      The loop index begins at w2, and terminates based on the limit 
  667.      w1.   See  LOOP  and  +LOOP for details on  how  the  loop  is 
  668.      terminated.   The loop is always executed at least once.   For 
  669.      example:   w  DUP DO ... LOOP   executes 65536 times.   sys is 
  670.      balanced with its corresponding LOOP or +LOOP .
  671.  
  672.      An  error condition exists if insufficient space is  available 
  673.      for at least three nesting levels.
  674.  
  675. DOES>          -- addr                       C,I,83          "does"
  676.                --   (compiling)
  677.      Defines the execution-time action of a word created by a high-
  678.      level defining word.  Used in the form:
  679.           : <namex> ... <create> ... DOES> ... ;
  680.      and then
  681.           <namex> <name>
  682.      where  <create>  is  CREATE  or any user  defined  word  which 
  683.      executes CREATE .
  684.  
  685.      Marks  the  termination of the defining part of  the  defining 
  686.      word <namex> and then begins the definition of the  execution-
  687.      time  action for words that will later be defined by  <namex>.  
  688.      When  <name>  is  later  executed,  the  address  of  <name>'s 
  689.      parameter  field is placed on the stack and then the  sequence 
  690.      of words between DOES> and ; are executed.
  691.  
  692. DROP           16b --                        79
  693.      16b is removed from the stack.
  694.  
  695. DUP            16b -- 16b 16b                79              "dupe"
  696.      Duplicate 16b.
  697.  
  698. ELSE           --                            C,I,79
  699.                sys1 -- sys2   (compiling)
  700.      Used in the form:
  701.           flag IF ... ELSE ... THEN
  702.      ELSE executes after the true part following IF .   ELSE forces 
  703.      execution to continue at just after THEN .   sys1 is  balanced 
  704.      with  its  corresponding  IF  .   sys2 is  balanced  with  its 
  705.      corresponding THEN .  See: IF THEN
  706.  
  707. EMIT           16b --                        M,83
  708.      The  least-significant  7-bit  ASCII character  is  displayed.  
  709.      See: "9.5.3 EMIT"
  710.  
  711. EXECUTE        addr --                       79
  712.      The word definition indicated by addr is executed.   An  error 
  713.      condition exists if addr is not a compilation address.
  714.  
  715. EXIT           --                            C,79
  716.      Compiled  within  a colon definition such that when  executed, 
  717.      that  colon definition returns control to the definition  that 
  718.      passed control to it by returning control to the return  point 
  719.      on the top of the return stack.   An error condition exists if 
  720.      the  top  of the return stack does not contain a valid  return 
  721.      point.  May not be used within a do-loop.  See: ;
  722.  
  723. EXPECT         addr +n --                    M,83
  724.      Receive  characters and store each in  memory.   The  transfer 
  725.      begins  at  addr proceeding towards higher addresses one  byte 
  726.      per character until either a "return" is received or until  +n 
  727.      characters have been transferred.   No more than +n characters 
  728.      will be stored.   The "return" is not stored into memory.   No 
  729.      characters  are  received or transferred if +n is  zero.   All 
  730.      characters  actually received and stored into memory  will  be 
  731.      displayed, with the "return" displaying as a space.  See: SPAN 
  732.      "9.5.2 EXPECT"
  733.  
  734. FILL           addr u 8b --                  83
  735.      u bytes of memory beginning at addr are set to 8b.   No action 
  736.      is taken if u is zero.
  737.  
  738. FIND           addr1 -- addr2 n              83
  739.      addr1 is the address of a counted string.  The string contains 
  740.      a  word  name  to be located in the  currently  active  search 
  741.      order.   If the word is not found, addr2 is the string address 
  742.      addr1,  and  n is zero.   If the word is found,  addr2 is  the 
  743.      compilation  address  and  n  is set to one  of  two  non-zero 
  744.      values.   If the word found has an immediate attribute,  n  is 
  745.      set to one.   If the word is non-immediate,  n is set to minus 
  746.      one (true).
  747.  
  748. FLUSH          --                            M,83
  749.      Performs the function of SAVE-BUFFERS then unassigns all block 
  750.      buffers.   (This  may be useful for mounting or changing  mass 
  751.      storage media).
  752.  
  753. FORGET         --                            M,83
  754.      Used in the form:
  755.           FORGET <name>
  756.      If  <name>  is  found in the  compilation  vocabulary,  delete 
  757.      <name>  from  the  dictionary  and  all  words  added  to  the 
  758.      dictionary  after  <name>  regardless  of  their   vocabulary.  
  759.      Failure  to  find  <name> is an  error  condition.   An  error 
  760.      condition   also  exists  if  the  compilation  vocabulary  is 
  761.      deleted.
  762.  
  763. FORTH          --                            83
  764.      The  name of the primary vocabulary.   Execution replaces  the 
  765.      first  vocabulary in the search order with FORTH .   FORTH  is 
  766.      initially  the compilation vocabulary and the first vocabulary 
  767.      in the search order.  New definitions become part of the FORTH 
  768.      vocabulary   until  a  different  compilation  vocabulary   is 
  769.      established.  See: VOCABULARY
  770.  
  771. FORTH-83       --                            83
  772.      Assures   that  a  FORTH-83  Standard  System  is   available, 
  773.      otherwise an error condition exists.
  774.  
  775. HERE           -- addr                       79
  776.      The address of the next available dictionary location.
  777.  
  778. HOLD           char --                       79
  779.      char  is  inserted  into  a pictured  numeric  output  string.  
  780.      Typically used between <# and #> .
  781.  
  782. I              -- w                          C,79
  783.      w is a copy of the loop index.  May only be used in the form:
  784.           DO ... I ... LOOP
  785.      or
  786.           DO ... I ... +LOOP
  787.  
  788. IF             flag --                       C,I,79
  789.                -- sys    (compiling)
  790.      Used in the form:
  791.           flag IF ... ELSE ... THEN
  792.      or
  793.           flag IF ... THEN
  794.      If flag is true,  the words following IF are executed and  the 
  795.      words  following ELSE until just after THEN are skipped.   The 
  796.      ELSE part is optional.
  797.      If  flag  is false,  words from IF through ELSE,  or  from  IF 
  798.      through  THEN (when no ELSE is used),  are  skipped.   sys  is 
  799.      balanced its corresponding ELSE or THEN .
  800.  
  801. IMMEDIATE      --                            79
  802.      Marks  the  most recently created dictionary entry as  a  word 
  803.      which  will  be executed when encountered  during  compilation 
  804.      rather than compiled.
  805.  
  806. J              -- w                          C,79
  807.      w is a copy of the index of the next outer loop.   May only be 
  808.      used  within  a nested DO-LOOP or DO-+LOOP in  the  form,  for 
  809.      example:
  810.           DO ... DO ... J ... LOOP ... +LOOP
  811.      
  812. KEY            -- 16b                        M,83
  813.      The  least-significant  7  bits  of  16b  is  the  next  ASCII 
  814.      character  received.    All  valid  ASCII  characters  can  be 
  815.      received.   Control characters are not processed by the system 
  816.      for any editing purpose.   Characters received by KEY will not 
  817.      be displayed.  See: "9.5.1 KEY"
  818.  
  819. LEAVE          --                            C,I,83
  820.                --   (compiling)
  821.      Transfers  execution to just beyond the next LOOP or  +LOOP  .  
  822.      The  loop  is  terminated  and  loop  control  parameters  are 
  823.      discarded.  May only be used in the form:
  824.           DO ... LEAVE ... LOOP
  825.      or
  826.           DO ... LEAVE ... +LOOP
  827.      LEAVE  may  appear within other control structures  which  are 
  828.      nested within the do-loop structure.   More than one LEAVE may 
  829.      appear within a do-loop.
  830.  
  831. LITERAL        -- 16b                        C,I,79
  832.                16b --    (compiling)
  833.      Typically used in the form:
  834.           [ 16b ] LITERAL
  835.      Compiles  a  system  dependent operation so  that  when  later 
  836.      executed, 16b will be left on the stack.
  837.  
  838. LOAD           u --                          M,79
  839.      The  contents of >IN and BLK,  which locate the current  input 
  840.      stream, are saved.  The input stream is then redirected to the 
  841.      beginning  of  screen u by setting >IN to zero and BLK  to  u.  
  842.      The screen is then interpreted.  If interpretation from screen 
  843.      u  is not terminated explicitly it will be terminated when the 
  844.      input stream is exhausted and then the contents of >IN and BLK 
  845.      will  be restored.   An error condition exists if u  is  zero.  
  846.      See: >IN BLK BLOCK
  847.  
  848. LOOP           --                            C,I,83
  849.                sys --    (compiling)
  850.      Increments  the  DO-LOOP index by one.   If the new index  was 
  851.      incremented across the boundary between limit-1 and limit  the 
  852.      loop  is terminated and loop control parameters are discarded.  
  853.      When the loop is not terminated,  execution continues to  just 
  854.      after the corresponding DO .   sys is balanced with its corre-
  855.      sponding DO .  See: DO
  856.  
  857. MAX            n1 n2 -- n3                   79               "max"
  858.      n3  is the greater of n1 and n2 according to the operation  of 
  859.      >.
  860.  
  861. MIN            n1 n2 -- n3                   79               "min"
  862.      n3 is the lesser of n1 and n2 according to the operation of <.
  863.  
  864. MOD            n1 n2 -- n3                   83
  865.      n3  is the remainder after dividing n1 by the divisor n2.   n3 
  866.      has  the  same  sign as n2 or is  zero.   An  error  condition 
  867.      results  if  the  divisor is zero or  if  the  quotient  falls 
  868.      outside of the range (-32768..32767).
  869.  
  870. NEGATE         n1 -- n2                      79
  871.      n2 is the two's complement of n1, i.e., the difference of zero 
  872.      less n1.
  873.  
  874. NOT            16b1 -- 16b2                  83
  875.      16b2 is the one's complement of 16b1.
  876.  
  877. OR             16b1 16b2 -- 16b3             79
  878.      16b3 is the bit-by-bit inclusive-or of 16b1 with 16b2.
  879.  
  880. OVER           16b1 16b2 -- 16b1 16b2 16b3   79
  881.      16b3 is a copy of 16b1.
  882.  
  883. PAD            -- addr                       83
  884.      The  lower  address  of a scratch area used to hold  data  for 
  885.      intermediate processing.   The address or contents of PAD  may 
  886.      change  and the data lost if the address of the next available 
  887.      dictionary location is changed.   The minimum capacity of  PAD 
  888.      is 84 characters.
  889.  
  890. PICK           +n -- 16b                     83
  891.      16b is a copy of the +nth stack value, not counting +n itself.  
  892.      (0..the number of elements on stack-1)
  893.           0 PICK  is equivalent to DUP
  894.           1 PICK  is equivalent to OVER
  895.  
  896. QUIT           --                            79
  897.      Clears the return stack, sets the interpret state, accepts new 
  898.      input   from  the  current  input  device,   and  begins  text 
  899.      interpretation.  No message is displayed.
  900.  
  901. R>             -- 16b                        C,79          "r-from"
  902.      16b  is removed from the return stack and transferred  to  the 
  903.      data stack.
  904.  
  905. R@             -- 16b                        C,79         "r-fetch"
  906.      16b is a copy of the top of the return stack.
  907.  
  908. REPEAT         --                            C,I,79
  909.                sys --    (compiling)
  910.      Used in the form:
  911.           BEGIN ... flag WHILE ... REPEAT
  912.      At  execution time,  REPEAT continues execution to just  after 
  913.      the  corresponding  BEGIN.   sys is balanced with  its  corre-
  914.      sponding WHILE .  See: BEGIN
  915.  
  916. ROLL           +n --                         83
  917.      The +nth stack value,  not counting +n itself is first removed 
  918.      and  then  transferred  to the top of the  stack,  moving  the 
  919.      remaining values into the vacant position.   (0..the number of 
  920.      elements on the stack-1)
  921.           2 ROLL  is equivalent to ROT
  922.           0 ROLL  is a null operation
  923.  
  924. ROT            16b1 16b2 16b3 -- 16b2 16b3 16b1   79         "rote"
  925.      The top three stack entries are rotated,  bringing the deepest 
  926.      to the top.
  927.  
  928. SAVE-BUFFERS   --                            M,79    "save-buffers"
  929.      The  contents  of  all block buffers marked  as  UPDATEed  are 
  930.      written  to  their corresponding  mass  storage  blocks.   All 
  931.      buffers are marked as no longer being modified, but may remain 
  932.      assigned.
  933.  
  934. SIGN           n --                          83
  935.      If n is negative, an ASCII "-" (minus sign) is appended to the 
  936.      pictured numeric output string.  Typically used between <# and 
  937.      #> .
  938.  
  939. SPACE          --                            M,79
  940.      Displays an ASCII space.
  941.  
  942. SPACES         +n --                         M,79
  943.      Displays +n ASCII spaces.  Nothing is displayed if +n is zero.
  944.  
  945. SPAN           -- addr                       U,83
  946.      The  address of a variable containing the count of  characters 
  947.      actually  received and stored by the last execution of EXPECT.  
  948.      See: EXPECT
  949.  
  950. STATE          -- addr                       U,79
  951.      The address of a variable containing the compilation state.  A 
  952.      non-zero  content indicates compilation is occurring,  but the 
  953.      value itself is system dependent.   A Standard Program may not 
  954.      modify this variable.
  955.  
  956. SWAP           16b1 16b2 -- 16b2 16b1        79
  957.      The top two stack entries are exchanged.
  958.  
  959. THEN           --                            C,I,79
  960.                sys --    (compiling)
  961.      Used in the form:
  962.           flag IF ... ELSE ... THEN
  963.      or
  964.           flag IF ... THEN
  965.      THEN is the point where execution continues after ELSE,  or IF 
  966.      when   no  ELSE  is  present.    sys  is  balanced  with   its 
  967.      corresponding IF or ELSE .  See: IF ELSE
  968.  
  969. TIB            -- addr                       83             "t-i-b"
  970.      The address of the text input buffer.   This buffer is used to 
  971.      hold  characters  when  the input stream is  coming  from  the 
  972.      current  input  device.   The minimum capacity of  TIB  is  80 
  973.      characters.
  974.  
  975. TYPE           addr +n --                    M,79
  976.      +n  characters  are displayed from memory beginning  with  the 
  977.      character   at   addr  and  continuing   through   consecutive 
  978.      addresses.   Nothing is displayed if +n is zero.   See: "9.5.4 
  979.      TYPE"
  980.  
  981. U.             u --                          M,79           "u-dot"
  982.      u is displayed as an unsigned number in free-field format.
  983.  
  984. U<             u1 u2 -- flag                 83       "u-less-than"
  985.      flag is true if u1 is less than u2.
  986.  
  987. UM*            u1 u2 -- ud                   83         "u-m-times"
  988.      ud  is  the unsigned product of u1 times u2.   All values  and 
  989.      arithmetic are unsigned.
  990.  
  991. UM/MOD         ud u1 -- u2 u3                83    "u-m-divide-mod"
  992.      u2 is the remainder and u3 is the floor of the quotient  after 
  993.      dividing ud by the divisor u1.   All values and arithmetic are 
  994.      unsigned.   An  error condition results if the divisor is zero 
  995.      or if the quotient lies outside the range (0..65535).
  996.  
  997. UNTIL          flag --                       C,I,79
  998.                sys --    (compiling
  999.      Used in the form:
  1000.           BEGIN ... flag UNTIL
  1001.      Marks the end of a BEGIN-UNTIL loop which will terminate based 
  1002.      on flag.  If flag is true, the loop is terminated.  If flag is 
  1003.      false,  execution  continues  to just after the  corresponding 
  1004.      BEGIN.   sys is balanced with its corresponding  BEGIN.   See: 
  1005.      BEGIN
  1006.  
  1007. UPDATE         --                            79
  1008.      The  currently  valid  block  buffer is  marked  as  modified.  
  1009.      Blocks  marked as modified will subsequently be  automatically 
  1010.      transferred to mass storage should its memory buffer be needed 
  1011.      for storage of a different block or upon execution of FLUSH or 
  1012.      SAVE-BUFFERS .
  1013.  
  1014. VARIABLE       --                            M,79
  1015.      A defining word executed in the form:
  1016.           VARIABLE <name>
  1017.      A  dictionary  entry for <name> is created and two  bytes  are 
  1018.      ALLOTed in its parameter field.  This parameter field is to be 
  1019.      used  for  contents  of  the  variable.   The  application  is 
  1020.      responsible  for  initializing  the contents of  the  variable 
  1021.      which it creates.   When <name> is later executed, the address 
  1022.      of its parameter field is placed on the stack.
  1023.  
  1024. VOCABULARY     --                            M,83
  1025.      A defining word executed in the form:
  1026.           VOCABULARY <name>
  1027.      A dictionary entry for <name> is created which specifies a new 
  1028.      ordered  list of word definitions.   Subsequent  execution  of 
  1029.      <name>  replaces the first vocabulary in the search order with 
  1030.      <name>.   When  <name> becomes the compilation vocabulary  new 
  1031.      definitions   will  be  appended  to  <name>'s   list.    See: 
  1032.      DEFINITIONS
  1033.  
  1034. WHILE          flag --                       C,I,79
  1035.                sys1 -- sys2   (compiling)
  1036.      Used in the form:
  1037.           BEGIN ... flag WHILE ... REPEAT
  1038.      Selects  conditional execution based on flag.   When  flag  is 
  1039.      true,  execution  continues to just after the WHILE through to 
  1040.      the  REPEAT which then continues execution back to just  after 
  1041.      the  BEGIN.   When the flag is false,  execution continues  to 
  1042.      just after the REPEAT, exiting the control structure.  sys1 is 
  1043.      balanced with its corresponding BEGIN.   sys2 is balanced with 
  1044.      its corresponding REPEAT .  See: BEGIN
  1045.  
  1046. WORD           char -- addr                  M,83
  1047.      Generates  a  counted string  by  non-destructively  accepting 
  1048.      characters   from  the  input  stream  until  the   delimiting 
  1049.      character   char  is  encountered  or  the  input  stream   is 
  1050.      exhausted.    Leading  delimiters  are  ignored.   The  entire 
  1051.      character  string is stored in memory beginning at addr  as  a 
  1052.      sequence of bytes.  The string is followed by a blank which is 
  1053.      not  included in the count.   The first byte of the string  is 
  1054.      the  number  of characters (0..255).  If the string is  longer 
  1055.      than 255 characters,  the count is unspecified.   If the input 
  1056.      stream  is already exhausted as WORD is called,  then  a  zero 
  1057.      length character string will result.
  1058.  
  1059.      If  the delimiter is not found the value of >IN is the size of 
  1060.      the input stream.   If the delimiter is found >IN is  adjusted 
  1061.      to   indicate  the  offset  to  the  character  following  the 
  1062.      delimiter.  #TIB is unmodified.
  1063.  
  1064.      The  counted string returned by WORD may reside in the  "free" 
  1065.      dictionary  area  at  HERE  or  above.   Note  that  the  text 
  1066.      interpreter may also use this area.
  1067.  
  1068. XOR            16b1 16b2 -- 16b3             79              "x-or"
  1069.      16b3 is the bit-by-bit exclusive-or of 16b1 with 16b2.
  1070.  
  1071. [              --                            I,79    "left-bracket"
  1072.                --   (compiling)
  1073.      Sets  interpret  state.   The text from the  input  stream  is 
  1074.      subsequently  interpreted.   For  typical usage see LITERAL  .  
  1075.      See: ]
  1076.  
  1077. [']            -- addr                  C,I,M,83     "bracket-tick"
  1078.                --   (compiling)
  1079.      Used in the form:
  1080.           ['] <name>
  1081.      Compiles  the compilation address addr of <name> as a literal.  
  1082.      When  the colon definition is later executed addr is  left  on 
  1083.      the  stack.   An error condition exists if <name> is not found 
  1084.      in the currently active search order.  See: LITERAL
  1085.  
  1086. [COMPILE]      --                       C,I,M,79  "bracket-compile"
  1087.                --   (compiling)
  1088.      Used in the form:
  1089.           [COMPILE] <name>
  1090.      Forces compilation of the following word <name>.   This allows 
  1091.      compilation of an immediate word when it would otherwise  have 
  1092.      been executed.
  1093.  
  1094. ]              --                            79     "right-bracket"
  1095.      Sets the compilation state.  The text from the input stream is 
  1096.      subsequently compiled.   For typical usage see LITERAL .  See: 
  1097.      [
  1098.  
  1099.  
  1100.                13. DOUBLE NUMBER EXTENSION WORD SET
  1101.  
  1102.  
  1103. 13.2  The Double Number Extension Word Set Glossary
  1104.  
  1105. 2!             32b addr --                   79         "two-store"
  1106.      32 b is stored at the addr.
  1107.  
  1108. 2@             addr -- 32b                   79         "two-fetch"
  1109.      32b is the value at addr.
  1110.  
  1111. 2CONSTANT      32b --                        M,83    "two-constant"
  1112.      A defining word executed in the form:
  1113.           32b 2CONSTANT <name>
  1114.      creates  a dictionary entry for <name> so that when <name>  is 
  1115.      later executed, 32b will be left on the stack.
  1116.  
  1117. 2DROP          32b --                        79          "two-drop"
  1118.      32b is removed from the stack.
  1119.  
  1120. 2DUP           32b -- 32b 32b                79          "two-dupe"
  1121.      Duplicate 32b.
  1122.  
  1123. 2OVER          32b1 32b2 -- 32b1 32b2 32b3   79          "two-over"
  1124.      32b3 is a copy of 32b1.
  1125.  
  1126. 2ROT           32b1 32b2 32b3 -- 32b2 32b3 32b1   79     "two-rote"
  1127.      The  top  three  double  numbers on  the  stack  are  rotated, 
  1128.      bringing the third double number to the top of the stack.
  1129.  
  1130. 2SWAP          32b1 32b2 -- 32b2 32b1        79          "two-swap"
  1131.      The top two double numbers are exchanged.
  1132.  
  1133. 2VARIABLE      --                            M,79    "two-variable"
  1134.      A defining word executed in the form:
  1135.           2VARIABLE <name>
  1136.      A  dictionary  entry for <name> is created and four bytes  are 
  1137.      ALLOTed in its parameter field.  This parameter field is to be 
  1138.      used  for  contents  of  the  variable.   The  application  is 
  1139.      responsible  for  initializing the contents  of  the  variable 
  1140.      which it creates.   When <name> is later executed, the address 
  1141.      of its parameter field is placed on the stack.  See: VARIABLE
  1142.  
  1143. D+             wd1 wd2 -- wd3                79
  1144.      See the complete definition in the Required Word Set.
  1145.  
  1146. D-             wd1 wd2 -- wd3                79           "d-minus"
  1147.      wd3 is the result of subtracting wd2 from wd1.
  1148.  
  1149. D.             d --                          M,79           "d-dot"
  1150.      The  absolute value of d is displayed in a free field  format.  
  1151.      A leading negative sign is displayed if d is negative.
  1152.  
  1153. D.R            d  +n --                      M,83         "d-dot-r"
  1154.      d  is  converted using the value of BASE  and  then  displayed 
  1155.      right aligned in a field +n characters wide.   A leading minus 
  1156.      sign  is  displayed  if  d is  negative.   If  the  number  of 
  1157.      characters required to display d is greater than +n,  an error 
  1158.      condition exists.
  1159.  
  1160. D0=            wd -- flag                    83     "d-zero-equals"
  1161.      flag is true if wd is zero.
  1162.  
  1163. D2/            d1 -- d2                      83      "d-two-divide"
  1164.      d2  is the result of d1 arithmetically shifted right one  bit.  
  1165.      The sign is included in the shift and remains unchanged.
  1166.  
  1167. D<             d1 d2 -- flag                 83            "d-less"
  1168.      See the complete definition in the Required Word Set.
  1169.  
  1170. D=             wd1 wd2 -- flag               83           "d-equal"
  1171.      flag is true if wd1 equals wd2.
  1172.  
  1173. DABS           d -- ud                       79        "d-absolute"
  1174.      ud is the absolute value of d.  If d is -2147483648 then ud is 
  1175.      the same value.
  1176.  
  1177. DMAX           d1 d2 -- d3                   79             "d-max"
  1178.      d3 is the greater of d1 and d2.
  1179.  
  1180. DMIN           d1 d2 -- d3                   79             "d-min"
  1181.      d3 is the lesser of d1 and d2.
  1182.  
  1183. DNEGATE        d1 -- d2                      79
  1184.      See the complete definition in the Required Word Set.
  1185.  
  1186. DU<            ud1 ud2 -- flag               83          "d-u-less"
  1187.      flag  is  true  if ud1 is less than  ud2.   Both  numbers  are 
  1188.      unsigned.
  1189.  
  1190.  
  1191.                  14. ASSEMBLER EXTENSION WORD SET
  1192.  
  1193.  
  1194. 14.2  Assembler Extension Word Set Usage
  1195.  
  1196.      Because  of  the system dependent nature of  machine  language 
  1197.      programming, a Standard Program cannot use CODE or ;CODE .
  1198.  
  1199.  
  1200. 14.3  Assembler Extension Word Set Glossary
  1201.  
  1202. ;CODE          --                       C,I,79    "semi-colon-code"
  1203.                sys1 -- sys2   (compiling)
  1204.      Used in the form:
  1205.           : <namex> ... <create> ... ;CODE ... END-CODE
  1206.      Stops  compilation,  terminates the defining word <namex>  and 
  1207.      executes ASSEMBLER.  When <namex> is executed in the form:
  1208.           <namex> <name>
  1209.      to define the new <name>, the execution address of <name> will 
  1210.      contain  the address of the code sequence following  ;CODE  in 
  1211.      <namex>.  Execution of any <name> will cause this machine code 
  1212.      sequence   to  be  executed.    sys1  is  balanced  with   its 
  1213.      corresponding  :  .   sys2 is balanced with its  corresponding 
  1214.      END-CODE .  See: CODE  DOES>
  1215.  
  1216. ASSEMBLER      -- sys                   M,83
  1217.      Execution  replaces  the first vocabulary in the search  order 
  1218.      with the ASSEMBLER vocabulary.  See: VOCABULARY
  1219.  
  1220. CODE           -- sys                   M,83
  1221.      A defining word executed in the form:
  1222.           CODE <name> ... END-CODE
  1223.      Creates  a  dictionary  entry for <name> to be  defined  by  a 
  1224.      following  sequence of assembly language  words.   Words  thus 
  1225.      defined are called code definitions.   This newly created word 
  1226.      definition  for <name> cannot be found in the dictionary until 
  1227.      the  corresponding  END-CODE is successfully  processed  (see: 
  1228.      END-CODE).   Executes  ASSEMBLER.   sys is balanced  with  its 
  1229.      corresponding END-CODE .
  1230.  
  1231. END-CODE       sys --                   79               "end-code"
  1232.      Terminates  a  code  definition and allows the <name>  of  the 
  1233.      corresponding  code definition to be found in the  dictionary.  
  1234.      sys is balanced with its corresponding CODE or ;CODE .
  1235.  
  1236.  
  1237.                  15. THE SYSTEM EXTENSION WORD SET
  1238.  
  1239.  
  1240. 15.2  System Extension Word Set Usage
  1241.  
  1242.      After  BRANCH  or ?BRANCH is compiled,  >MARK or  <RESOLVE  is 
  1243.      executed.  The addr left by >MARK is passed to >RESOLVE .  The 
  1244.      addr left by <MARK is passed to <RESOLVE .  For example:
  1245.  
  1246.           : IF      COMPILE  ?BRANCH  >MARK  ;  IMMEDIATE
  1247.  
  1248.           : THEN    >RESOLVE  ;  IMMEDIATE
  1249.  
  1250.  
  1251. 15.3  The System Extension Word Set Glossary
  1252.  
  1253. <MARK          -- addr                  C,83        "backward-mark"
  1254.      Used  at  the  destination  of a  backward  branch.   addr  is 
  1255.      typically only used by <RESOLVE to compile a branch address.
  1256.  
  1257. <RESOLVE       addr --                  C,83     "backward-resolve"
  1258.      Used  at the source of a backward branch after  either  BRANCH 
  1259.      or  ?BRANCH  .   Compiles a branch address using addr  as  the 
  1260.      destination address.
  1261.  
  1262. >MARK          -- addr                  C,83         "forward-mark"
  1263.      Used at the source of a forward branch.   Typically used after 
  1264.      either  BRANCH or ?BRANCH.   Compiles space in the  dictionary 
  1265.      for a branch address which will later be resolved by >RESOLVE.
  1266.  
  1267. >RESOLVE       addr --                  C,83      "forward-resolve"
  1268.      Used  at the destination of a forward branch.   Calculates the 
  1269.      branch  address  (to the current location in  the  dictionary) 
  1270.      using addr and places this branch address into the space  left 
  1271.      by >MARK .
  1272.  
  1273. ?BRANCH        flag --                  C,83      "question-branch"
  1274.      When used in the form:   COMPILE ?BRANCH  a conditional branch 
  1275.      operation is compiled.   See BRANCH for further details.  When 
  1276.      executed,  if  flag  is false the branch is performed as  with 
  1277.      BRANCH.    When  flag  is  true  execution  continues  at  the 
  1278.      compilation address immediately following the branch address.
  1279.  
  1280. BRANCH         --                       C,83
  1281.      When  used  in the form:   COMPILE  BRANCH   an  unconditional 
  1282.      branch  operation  is  compiled.   A branch  address  must  be 
  1283.      compiled immediately following this compilation address.   The 
  1284.      branch address is typically generated by following BRANCH with 
  1285.      <RESOLVE or >MARK .
  1286.  
  1287. CONTEXT        -- addr                  U,79
  1288.      The  address  of  a variable which determines  the  dictionary 
  1289.      search order.
  1290.  
  1291. CURRENT        -- addr                  U,79
  1292.      The  address of a variable specifying the vocabulary in  which 
  1293.      new word definitions are appended.
  1294.  
  1295.  
  1296.                   16. CONTROLLED REFERENCE WORDS
  1297.  
  1298.  
  1299. The Controlled Reference Words are word definitions which, although 
  1300. not required,  cannot be present with a non-standard definition  in 
  1301. the  vocabulary  FORTH  of a Standard  System.   These  words  have 
  1302. present usage and/or are candidates for future standardization.
  1303.  
  1304.  
  1305. -->            --                       I,M,79         "next-block"
  1306.                --   (compiling)
  1307.      Continue interpretation on the next sequential block.   May be 
  1308.      used within a colon definition that crosses a block boundary.
  1309.  
  1310. .R             n +n --                  M,83                "dot-r"
  1311.      n  is converted using BASE and then displayed right aligned in 
  1312.      a field +n characters wide.  A leading minus sign is displayed 
  1313.      if  n is negative.   If the number of characters  required  to 
  1314.      display n is greater than +n, an error condition exists.
  1315.  
  1316. 2*             w1 -- w2                 83              "two-times"
  1317.      w2  is  the  result of shifting w1 left one bit.   A  zero  is 
  1318.      shifted into the vacated bit position.
  1319.  
  1320. BL             -- 32                    79                    "b-l"
  1321.      Leave the ASCII character value for space (decimal 32).
  1322.  
  1323. BLANK          addr u --                83
  1324.      u  bytes  of  memory beginning at addr are set  to  the  ASCII 
  1325.      character value for space.  No action is taken if u is zero.
  1326.  
  1327. C,             16b --                   83                "c-comma"
  1328.      ALLOT one byte then store the least-significant 8 bits of  16b 
  1329.      at HERE 1- .
  1330.  
  1331. DUMP           addr u --                M,79
  1332.      List the contents of u addresses at addr.  Each line of values 
  1333.      may be preceded by the address of the first value.
  1334.  
  1335. EDITOR         --                       83
  1336.      Execution  replaces  the first vocabulary in the search  order 
  1337.      with the EDITOR vocabulary.  See: VOCABULARY
  1338.  
  1339. EMPTY-BUFFERS  --                       M,79        "empty-buffers"
  1340.      Unassigns all block buffers.   UPDATEed blocks are not written 
  1341.      to mass storage.  See: BLOCK
  1342.  
  1343. END            flag --                  C,I,79
  1344.                sys --    (compiling)
  1345.      A synonym for UNTIL.
  1346.  
  1347. ERASE          addr u --                79
  1348.      u  bytes  of memory beginning at addr are  set  to  zero.   No 
  1349.      action is taken if u is zero.
  1350.  
  1351. HEX            --                       79
  1352.      Set the numeric input-output conversion base to sixteen.
  1353.  
  1354. INTERPRET      --                       M,83
  1355.      Begin  text  interpretation  at the character indexed  by  the 
  1356.      contents of >IN relative to the block number contained in BLK, 
  1357.      continuing  until  the  input stream  is  exhausted.   If  BLK 
  1358.      contains  zero,  interpret  characters  from  the  text  input 
  1359.      buffer.
  1360.  
  1361. K              -- w                     C,83
  1362.      w is a copy of the index of the second outer loop.   May  only 
  1363.      be  used within a nested DO-LOOP or DO-+LOOP in the form,  for 
  1364.      example:  DO ... DO ... DO ... K ... LOOP ... +LOOP ... LOOP
  1365.  
  1366. LIST           u --                     M,79
  1367.      The  contents  of screen u are displayed.   SCR is set  to  u.  
  1368.      See: BLOCK
  1369.  
  1370. OCTAL          --                       83
  1371.      Set the numeric input-output conversion base to eight.
  1372.  
  1373. OFFSET         -- addr                  U,83
  1374.      The  address of a variable that contains the offset  added  to 
  1375.      the  block number on the stack by BLOCK or BUFFER to determine 
  1376.      the actual physical block number.
  1377.  
  1378. QUERY          --                       M,83
  1379.      Characters  are received and transferred into the memory  area 
  1380.      addressed  by  TIB .   The transfer terminates when  either  a 
  1381.      "return"  is received or the number of characters  transferred 
  1382.      reaches the size of the area addressed by TIB .  The values of 
  1383.      >IN  and BLK are set to zero and the value of #TIB is  set  to 
  1384.      the value of SPAN .  WORD may be used to accept text from this 
  1385.      buffer.  See: EXPECT
  1386.  
  1387. RECURSE        --                       C,I,83
  1388.                --   (compiling)
  1389.      Compile  the  compilation  address  of  the  definition  being 
  1390.      compiled  to  cause  the  definition  to  later  be   executed 
  1391.      recursively.
  1392.  
  1393. SCR            -- addr                  U,79                "s-c-r"
  1394.      The  address of a variable containing the number of the screen 
  1395.      most recently LISTed.
  1396.  
  1397. SP@            -- addr                  79              "s-p-fetch"
  1398.      addr  is the address of the top of the stack just  before  SP@ 
  1399.      was executed.
  1400.  
  1401. THRU           u1 u2 --                 M,83
  1402.      Load consecutively the blocks from u1 through u2.
  1403.  
  1404. U.R            u +n --                  M,83              "u-dot-r"
  1405.      u is converted using the value of BASE and the displayed as an 
  1406.      unsigned  number right aligned in a field +n characters  wide.  
  1407.      If  the number of characters required to display u is  greater 
  1408.      than +n, an error condition exists.
  1409.  
  1410.