home *** CD-ROM | disk | FTP | other *** search
/ Hall of Fame / HallofFameCDROM.cdr / prog1 / 4th_86.lzh / GLOSSARY.486 < prev    next >
Text File  |  1989-02-17  |  44KB  |  1,387 lines

  1. $    4th_86 version 3.0             GLOSSARY                   page  1
  2.     
  3.     
  4.     ==============================================
  5.     This is not a complete glossary. Only the words which differ from
  6.     more conventional FORTHs are described. A full glossary can be
  7.     found in the manual provided by United Controls Corporation.
  8.  
  9.     ** NOTE ** there is no difference between upper and lower case.
  10.         Some of the words below are in upper -- some in lower -- this
  11.         just depends on how they were defined. The system recognises
  12.         upper and lower as equivalent when searching the dictionary.
  13.     ==============================================
  14.  
  15.     $! (string store)
  16.         Purpose: Moves the string at the source address on the NOS to
  17.         the destination address on the TOS
  18.  
  19.     ' (tick or "defadr")
  20.         Purpose: Gets the definition address to the TOS of the word
  21.         immediately following ' in the input stream.
  22.  
  23.     '' (tick-tick or "datadr")
  24.         Purpose: Gets the contents of the 4th and 5th bytes of the
  25.         definition whose address immediately follows '' in the input
  26.         stream. This is used with the words BLOCK, CONST, etc
  27.  
  28.             5 BLOCK ABC
  29.               '' ABC .H
  30.  
  31.         would define the block ABC and then print its actual memor
  32.         address.
  33.  
  34.            ABC .H
  35.  
  36.         would also print the actual address of ABC -- but there are
  37.         times (eg in cross-compile) when words such as ABC can not be
  38.         executed per-se and the address has to be found with tick-tick.
  39.  
  40.         Note that tick-tick is two apostrophes -- not a double quote
  41.  
  42.     +! (plus store)
  43.         Purpose: Add NOS to contents of address at TOS and store at the
  44.         same address.
  45.  
  46.     -1* (negate)
  47.         Purpose: Compute the 2's complement of the TOS
  48.  
  49.           examples   FF Hex  =>  FF01 Hex
  50.                       0 Hex  =>     0 Hex
  51.                       2 Hex  =>  FFFE Hex
  52.                    FFFF Hex  =>  0001 Hex
  53.                     -2       =>   2
  54.  
  55.     ->L (rightshift logical)
  56.         Purpose: Logical shift right the value at NOS by the number of
  57.         bytes on TOS
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.     4th_86 version 3.0             GLOSSARY                   page  2
  68.     
  69.     
  70.     ." (dot-quote)
  71.         Purpose: Writes a styring of characters to the console device.
  72.         The TOS contains the address of the string. The first byte of
  73.         the string contains the length of the string.
  74.  
  75.         Note that defining the string by " ...string.." automatically
  76.         leaves the address of the string on the TOS.
  77.  
  78.         If the system is in high mode (ie compile) then the string is
  79.         stored in the definition being compiled. If the system is in
  80.         low mode (ie execute) then the string is stored in STRING and
  81.         its address is retorned on TOS.
  82.  
  83.     .C (dot-see)
  84.         Purpose: Writes the ASCII character on the TOS to the console
  85.         output device
  86.  
  87.     .CL (dot-see-el)
  88.          Same as .L but writes numerical value in a colour defined by
  89.          the current contents of GCOLR.
  90.  
  91.     . (dot)
  92.         Purpose: Prints the TOS as a five digit decimal number with a
  93.         leading space
  94.  
  95.     .H (dot-aitch)
  96.         Purpose: Prints the TOS as a four digit hexadecimal number with
  97.         a leading space.
  98.  
  99.     .HB (dot-aitch-bee)
  100.         Purpose: Prints the TOS as a two digit hexadecimal number with
  101.         a leading space
  102.  
  103.     .L Purpose: While this prints the TOS as a five digit decimal
  104.         number WITHOUT a leading space -- its purpose is to send ANSI
  105.         control parameters to the screen.
  106.  
  107.     0= (equal to zero)
  108.         Purpose: To test if the TOS is zero
  109.  
  110.         Returns 0 for FALSE and 1 for TRUE
  111.  
  112.         Can also be used to negate flag on TOS (see below)
  113.  
  114.     0> (positive)
  115.         Purpose: Test if TOS is greater than zero.
  116.  
  117.         Returns 0 (false) if TOS is less than or equal to zero.
  118.  
  119.         Note that 0< is not implemented as such. It can be simulated
  120.         with 0> and 0=
  121.                         : 0<  0>  0=  ;
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.     4th_86 version 3.0             GLOSSARY                   page  3
  134.     
  135.     
  136.  
  137.     16DM
  138.         Purpose: Dumps 16 lines of memory starting at the address on
  139.         TOS.
  140.                 example   8000H DM   will return the following memory
  141.                           dump and will ALSO leave on the TOS the
  142.                           address 8100 Hex ready for another 16DM
  143.  
  144.             ( see also DM and 8DM)
  145.  
  146.          8000  01E83281 887B747F 3E01E829 81407C74    *..2..{t.>..).@|t*
  147.          8010  7F3E01E8 CEF50000 0000E8C7 F5000080    *.>..............*
  148.          8020  3FE8C0F5 00000040 E8B9F500 002041E8    *?......@..... A.*
  149.          8030  B2F5CDCC CC3DE8FD 80EF014A 01FF7FBF    *.....=.....J....*
  150.          8040  02EF013E 01E8EE80 6576D002 91015A80    *...>....ev....Z.*
  151.          8050  EF014A01 0080E102 EF013E01 E8D780F8    *..J.......>.....*
  152.          8060  7FCC012D 053E01E8 CC808B76 5C803E01    *...-.>.....v\.>.*
  153.          8070  E871F5FC FFFFFFE8 BC80D175 7080AB75    *.q.........up..u*
  154.          8080  13773E01 5A5B0AC0 B000F512 073C0A73    *.w>.Z[.......<.s*
  155.          8090  03E90200 B0008807 4BFECA74 03E9E8FF    *........K..t....*
  156.          80A0  7303E90B 0043C607 01BA0800 03DAFE07    *s....C..........*
  157.          80B0  E95180E8 80801808 18081808 18083608    *.Q............6.*
  158.          80C0  FA013608 FA011808 3B080802 18084008    *..6.....;.....@.*
  159.          80D0  08026576 3680D002 9101BD81 C4011808    *..ev6...........*
  160.          80E0  FB049101 EE801D08 27080802 36806576    *........'...6.ev*
  161.          80F0  76010000 803FCA76 91010881 2F800180    *v....?.v..../...*
  162.  
  163.     2+ (increment by two)
  164.         Purpose: Increments the TOS by two
  165.  
  166.     8/ (divide by eight)
  167.         Purpose: Divides the TOS by eight
  168.  
  169.     8DM
  170.         Purpose: Dumps 9 lines of memory starting at the address on
  171.         TOS. (see 16DM)
  172.  
  173.     : (colon)
  174.         Purpose: Identifies the beginning of a high level definition. A
  175.         warning message will be given depending on the state of the
  176.         system variable REDEFINE (see later)
  177.  
  178.     :ENTER (colon enter)
  179.         Purpose: Allows the user to now use high level (Forth) words if
  180.         currently using low level (assembly) words.
  181.  
  182.     :EXIT (colon exit)
  183.         Purpose: Allows the user to now use low level words (assembly)
  184.         if currently using high level (Forth) words.
  185.  
  186.     ; (semi-colon)
  187.         Purpose: Terminates any definition and when executed returns
  188.         control to the threader.
  189.  
  190.         The words can be either high level (Forth) or low level
  191.         (assembly).
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.     4th_86 version 3.0             GLOSSARY                   page  4
  200.     
  201.     
  202.     ;NOTHREAD (semi-nothread)
  203.         Purpose: Terminates only code definitions and when executed
  204.         does not return control to the threader. Normally used when
  205.         defining assembly language subroutines ending in RET or
  206.         equivalent.
  207.  
  208.     ;PUSH (semi-push)
  209.         Purpose: Terminates only code definitions and when executed
  210.         will push the contents of the HL register pair (ie 8086 BX
  211.         register) onto the TOS and return control to the threader.
  212.  
  213.     <-L (rightshift logical)
  214.         Purpose: Logical shift left the value at NOS by the number of
  215.         bytes on TOS
  216.  
  217.     ?DUP
  218.         Purpose: Copies the TOS to the NOS if and only if the TOS is
  219.         non-zero.
  220.  
  221.     ABS (absolute value of)
  222.         Purpose: Get the absolute value of the TOS
  223.  
  224.                 If the TOS is a signed negative number then its
  225.         positive value will be returned.
  226.  
  227.          example    FFFF Hex  =>  0001 Hex
  228.                     7FFF Hex  =>  7FFF Hex
  229.  
  230.     ASM
  231.         Purpose: If the word being defined is a code definition
  232.            which is a subroutine with an assembly language return (or
  233.            equivalent), then the word ASM should be used after the
  234.            definition terminator and will cause the dictionary entry
  235.            flags to be set accordingly. This allows the interpreter to
  236.            avoid execution of the flagged word in immediate mode
  237.  
  238.                     example  CODE FRED ........ RET, ;NOTHREAD ASM
  239.  
  240.              ( see also IMMEDIATE )
  241.  
  242.     B! (byte store)
  243.         Purpose: Stores NOS as one byte at address on TOS
  244.  
  245.            example   00EFH  534EH  B!   will store the byte value EF
  246.                       Hex at the address 534E Hex
  247.  
  248.     B@ (byte fetch)
  249.         Purpose: Fetch to the TOS the byte value whose address is on
  250.         the TOS
  251.  
  252.            example   assuming we have a word value 2435 Hex stored at
  253.         address 3705 Hex  (for example by an MASM DW 2435 statement)
  254.             then
  255.                  3705H B@  will return 35 Hex on the TOS
  256.                                    ( ie the low byte of the word 2435)
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.     4th_86 version 3.0             GLOSSARY                   page  5
  266.     
  267.     
  268.  
  269.  
  270.     BEGIN ... END
  271.         Purpose: Provides loop control over the execution of the code
  272.         between the BEGIN and END. The code is executed repeatedly
  273.         until the TOS has a true value when the END is executed. Note
  274.         that the code is always executed at least one time.
  275.                                                    (  see alse END[  )
  276.         example  : print_ten
  277.                    0           ( initialise loop counter)
  278.                    begin
  279.                      1+ dup .  ( increment counter and print it)
  280.                      dup 10 =  ( TOS=1 ( true) if done )
  281.                    end
  282.                    drop        ( loop counter)
  283.                  ;
  284.  
  285.     BLOCK
  286.         Purpose: Reserves a block of contiguous memory where the size
  287.         of the block is defined by the value on TOS and the name of the
  288.         block is the next word. When the name of the block is executed,
  289.         the address of the block associated with it is placed on the
  290.         TOS.
  291.              example     Reserve 25 bytes of memory and name it BUFFER
  292.  
  293.                     25 BLOCK BUFFER
  294.  
  295.         The address of the buffer is determined automatically at the
  296.         top end of memory. If we assume the address is D912 Hex, then
  297.  
  298.                    BUFFER .H   will print  D912 on the console
  299.  
  300.     BR
  301.         Purpose: Unconditional branch for direct threaded code.
  302.  
  303.     BRKOFF
  304.         Disables the control-break function of DOS by redirecting the
  305.         ctrl-brk interrupt vector to an IRET. The original vectored
  306.         address is saved for restoring with BRKON. Gives error message
  307.         if BRKOFF is already in effect.
  308.             BRKOFF is normally implemented on initialisation of 4th/86.
  309.  
  310.     BRKON
  311.         Makes the ctrl-brk key functional so that endless loops can be
  312.         exited. Dumps the user back to DOS however.
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.     4th_86 version 3.0             GLOSSARY                   page  6
  332.     
  333.     
  334.     BRZ
  335.         Purpose: Used to transfer control within direct threaded code
  336.         if the TOS is zero. If the test is true then the address
  337.         immediately following the BRZ is loaded into the Forth PC and
  338.         control is passed to the THREADer. If the test is false,
  339.         control will continue with the word immediately following the
  340.         branch address of BRZ
  341.  
  342.            example   ...... TEST 0= BRZ  ' SUBR  CONT ...
  343.  
  344.         will branch to the routine SUBR if the word TEST returns a TRUE
  345.         value -- otherwise will continue with the word CONT
  346.  
  347.     BSWAP
  348.         Purpose: swap the bytes in the word at TOS
  349.  
  350.  
  351.     BYE
  352.         Purpose: the normal exit from UCC back to DOS. Closes all files
  353.         and resets the EGA card to normal text mode.
  354.  
  355.     CASE .. ENDCASE .. OF .. ENDOF
  356.         Purpose: Provides for selected code to be executed based on the
  357.         contents of TOS. The construct CASE .. ENDCASE defines the
  358.         scope of the case statement. The construcet OF .. ENDOF is used
  359.         inside the CASE .. ENDCASE to define the code to be executed if
  360.         the NOS equals the TOS.
  361.  
  362.         If NOS = TOS then both values are removed and the code between
  363.         OF .. ENDOF is executed. and control then passes to the code
  364.         following ENDCASE.
  365.  
  366.         If NOS is not equal to TOS then TOS is removed and control
  367.         continues following ENDOF -- which usually is another OF ..
  368.         ENDOF construct.
  369.  
  370.         See also the words  OF[ .. ]   and  THRU
  371.  
  372.         example    : FRED case
  373.                            23 of  " TOS was 23" ." endof
  374.                    32 of  " TOS was 32" ." endof
  375.  
  376.                             " TOS was neither 23 nor 32" ."
  377.                    drop  (TOS value on entry)
  378.                           endcase
  379.                    ;
  380.     CD
  381.         Change directory - use as for equivalent DOS comand
  382.  
  383.     CGAM
  384.         Purpose: Initialise multi-function graphics card in 640x200
  385.         2 color CGA graphics mode -- and clear video buffer.
  386.         (see also NEGAM EGAM NCGAM NORM NNORM)
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.     4th_86 version 3.0             GLOSSARY                   page  7
  398.     
  399.     
  400.     CIRCLE
  401.         Purpose: Draws a circle at centre X Y of radius R and color C
  402.  
  403.            Input --    X  Y  R  C  <= TOS
  404.  
  405.         This is based on an algorithm in July '83 Dobbs Journal. Larger
  406.         circles will be drawn with a coarser dot pattern than will
  407.         smaller circles.
  408.  
  409.         The aspect ratio is corrected so that a true circle is produced
  410.         in the EGA high-res mode. Other modes may produce a flattened
  411.         circle.
  412.  
  413.         Note that the card must be initialised first with either EGAM
  414.         or CGAM.
  415.  
  416.     CLOAD
  417.         Now replaced by GLOAD.   C0LOAD also replaced by G0LOAD.
  418.  
  419.  
  420.     CLOSE
  421.         Purpose: Closes a file that has previously been opened. The TOS
  422.         contains the file handle number of the file to be closed.
  423.         If all files should be closed then the TOS should contain a zero.
  424.         No error code will be returned.
  425.  
  426.     CODE
  427.         Purpose: Identifies the beginning of an in-line low level
  428.         definition. Only 8080 mnemonics are implemented at this stage.
  429.  
  430.         example    CODE SWAP
  431.                       H POP, D POP, H PUSH, D PUSH,
  432.                    ;
  433.  
  434.         defines an assembly routine for SWAP
  435.  
  436.            8086 code can be assembled with MASM and loaded using GLOAD.
  437.  
  438.     CONST
  439.         Purpose: Defines a constant whose value is on TOS and whose
  440.         name folllows CONST. When the name is executed, the value
  441.         associated with that name is placed on TOS. Only single
  442.         precision integers may be used as the value of a constant.
  443.  
  444.     CRLF
  445.         Purpose: Prints a carriage return and line feed on the console
  446.  
  447.     CROSS-COMPILE
  448.         Purpose: All user definitions following CROSS-COMPILE are
  449.         marked so that the new definitions may be save using the word
  450.         SAVE. On the TOS is the address-offset of the highest RAM
  451.         location to be used. The NOS is the address of where the code
  452.         should start.
  453.  
  454.         Only COM files can be handled -- not EXE -- hence the start
  455.         address would normally be 100 Hex.
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.     4th_86 version 3.0             GLOSSARY                   page  8
  464.     
  465.     
  466.     CSP@
  467.        Return the value of the Control Stack Pointer ( carried in
  468.        register DI
  469.  
  470.     CSP!
  471.       Store the value on TOS in register DI (Control Stack Pointer)
  472.  
  473.     DATA[
  474.         Purpose: Defines a block of memory with the values between
  475.         DATA[ and ] with the name of the block following ]
  476.  
  477.         For further details see manual
  478.  
  479.     DD (dump definition)
  480.         Purpose: The word DD decompiles any Forth word.
  481.  
  482.           example    DD QUIT  will decompile the word QUIT
  483.  
  484.            see manual for fuller details, including DDH and DDL
  485.  
  486.     DDICT (dump dictionary)
  487.         Purpose: The word DDICT has no arguments and dispalys each dictionary
  488.         entry of all the dictionaries (which are linked to each other).
  489.  
  490.         see manual for fuller details
  491.  
  492.     DDS (destructive display stack)
  493.         Purpose: Displays to the console device all the stack entries
  494.         currently on the stack, in hexadecimal -- and leaves the stack
  495.         empty.
  496.  
  497.         If the stack is empty when DDS is executed, then the message
  498.         STACK EMPTY is printed.
  499.  
  500.         If the stack has underflowed (ie too many entries DROPped),
  501.         then printed on the console is the message:
  502.  
  503.              STACK UNDERFLOW ... RESETTING STACK.
  504.  
  505.     DEBUG
  506.         Purpose: The word DEBUG toggles the debug facility on and off.
  507.         The debug facility allows the operator to view the stack while
  508.         executing words interactively.
  509.  
  510.         see manual for fuller details
  511.  
  512.     DEFINE
  513.         Purpose: Builds a new entry into the dictionary ( but does NOT
  514.         of itself allow building the code in the definition area)
  515.  
  516.         The TOS is used as the flag byte. The word being defined
  517.         follows DEFINE. If the word is already in the dictionary, then
  518.         a message is displayed asking whether the word should be
  519.         redefined.
  520.  
  521.             see manual for fuller details of dictionary structure.
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.     4th_86 version 3.0             GLOSSARY                   page  9
  530.     
  531.     
  532.     DEPTH
  533.         Purpose: Brings to the TOS the total number of entries on the stack
  534.  
  535.     DIR
  536.        Purpose: Display the directory of current drive
  537.  
  538.           The format is:
  539.  
  540.             DIR        or     DIR B: etc
  541.  
  542.            The current drive can be changed with A:   ---   D:
  543.            The subdirectory can be changed with CD
  544.            Paths are implemented -  DIR C:\FORTH\DOCS
  545.  
  546.     DISPLAY
  547.         Purpose: Displays the twelve top most data stack entries
  548.         regardless of how many items are currently on the data stack.
  549.  
  550.     DBOX
  551.         Purpose: Draws a filled box. The format is
  552.  
  553.                       X1 Y1 X2 Y2 C DLINE
  554.  
  555.              x1,y1  ------------------
  556.                    |                  |
  557.                    |                  |
  558.                    |                  |
  559.                    |                  |
  560.                     ------------------  x2,y2
  561.  
  562.                                             C is the color
  563.  
  564.     DLINE
  565.         Purpose: Draws a line starting from the end of the previous
  566.         line drawn. To move the starting point to a new position, use
  567.         DLINE with a colour value equal to the background colour. The
  568.         format is
  569.                       X Y C DLINE
  570.                                      where X and Y are the end
  571.         co-ordinates and C is the color
  572.  
  573.     DM
  574.         Purpose: Dumps one line of memory starting at the address on
  575.         TOS. (see 16DM)
  576.  
  577.     DO
  578.         Purpose: Provides iterative loop control over the code between
  579.         the DO and the LOOP. The structure may be nested up to three
  580.         levels,
  581.  
  582.     DPIX
  583.         Purpose: Draws a pixel at the specified co-ordinates
  584.         The format is
  585.                       X Y C DPIX
  586.                                      where X and Y are the
  587.         co-ordinates and C is the color
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.     4th_86 version 3.0             GLOSSARY                   page  10
  596.     
  597.     
  598.     D4PIX
  599.         Purpose: Draws a "nybble" -- 4 consecutive pixels all the same
  600.         color -- at the specified co-ordinates. This is implemented for
  601.         speed of drawing where a coarse pattern is acceptable.
  602.  
  603.         The format is
  604.                       X Y C DLINE
  605.                                      where X and Y are the
  606.         co-ordinates and C is the color
  607.  
  608.     DS
  609.         Purpose: Displays to the console device all the stack entries
  610.         currently on the stack, in hexadecimal -- and leaves the stack
  611.         unchanged.
  612.  
  613.         If the stack is empty when DS is executed, then the message
  614.         STACK EMPTY is printed.
  615.  
  616.         If the stack has underflowed (ie too many entries DROPped),
  617.         then printed on the console is the message:
  618.  
  619.              STACK UNDERFLOW ... RESETTING STACK.
  620.  
  621.     EDIT
  622.         Purpose: To shell into DOS and run the chosen DOS editor file.
  623.         The editor should (preferably) be renamed to VED.COM. The file
  624.         to be edited must previously have been specified with the word
  625.         USING.
  626.  
  627.         see manual for further details
  628.  
  629.     EGAM
  630.         Purpose: Initialise multi-function graphics card in 640x350
  631.         16 color EGA graphics mode -- and clear video buffer.
  632.         (see also NEGAM CGAM NCGAM NORM NNORM)
  633.  
  634.     EGANIB (same as D4PIX)
  635.         Purpose: Draws a "nybble" -- 4 consecutive pixels all the same
  636.         color -- at the specified co-ordinates. This is implemented for
  637.         speed of drawing where a coarse pattern is acceptable.
  638.  
  639.         The format is
  640.                       X Y C DLINE
  641.                                      where X and Y are the
  642.         co-ordinates and C is the color
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.     4th_86 version 3.0             GLOSSARY                   page  11
  662.     
  663.     
  664.     END[ (end left bracket)
  665.         Purpose: Used instead of END in BEGIN .. END construct.
  666.         Instead of using the TOS as a boolean value like END this
  667.         uses the TOS to compare against the list between END[ and its
  668.         matching ]        If the TOS matches any of the values in the
  669.         brackets, then a true condition exists and the loop is exited.
  670.  
  671.           example   Given the address of text on TOS, search for the
  672.                     first occurrence of an alphanumeric character "A"
  673.         through "Z". "0" through "9"
  674.  
  675.             : FINDAN  ( find first occurrence of alphanumeric)
  676.                 BEGIN
  677.                  1+ ( bump pointer)
  678.                  DUPB@  ( get character)
  679.                 END[ "A" THRU "Z"  "0" THRU "9" ]
  680.             ;
  681.  
  682.     ERMSG
  683.         Purpose: Provides a common exit back to the command line
  684.         interpreter whenever an error is detected.
  685.  
  686.         When executed, TOS contains the number of addresses on the
  687.         stack which point to strings containing parts of an error
  688.         message. The addresses should be pplaced on the stack such that
  689.         the first message to be printed is deeper into the stack.
  690.  
  691.     EXEC
  692.         Purpose: Executes Forth words which may be defined to be
  693.         "immediate" words or entered interactively through the console
  694.         in low mode or execute mode. The TOS contains the address of
  695.         the word to execute.
  696.  
  697.     EXIT
  698.         Purpose: Provides an abnormal exit from a DO .. LOOP or
  699.         DO .. +LOOP structure. When executed, the flow of control will
  700.         be transferred to the statement imediately following LOOP or
  701.         +LOOP.
  702.  
  703.     FILL
  704.         Purpose: Fills memory starting at the address on TOS for a
  705.         count of NOS with the value at 3OS.
  706.  
  707.           example     11H 20H 8000H FILL
  708.  
  709.     FIND
  710.         Purpose: Tries to find a word in a specified dictionary.
  711.         Returns either zero (if the word did not exist in the
  712.         dictionary) or the address of the dictionary entry of the word.
  713.         The TOS contains the address of the dictionary where the search
  714.         is to be started, and the NOS contains the address of the
  715.         string representing the word to find.
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.     4th_86 version 3.0             GLOSSARY                   page  12
  728.     
  729.     
  730.     FLOAD
  731.         Purpose: To load a Forth source file from disk. Format is
  732.  
  733.                        FLOAD  FILENAME
  734.  
  735.         An alternative is  " FILENAME"  LOAD
  736.  
  737.     FMEM
  738.         Purpose: Similar to FILL, but uses an end address instead of a
  739.         count value.
  740.  
  741.         Fills memory starting at the address on TOS and ending at the
  742.         adress on  NOS with the value at 3OS.
  743.  
  744.             example    11H 8020H 8000H FMEM
  745.  
  746.     FSAVE
  747.         Purpose: To allow the current state of the running 4th/86 --
  748.         including all new words loaded -- to be saved under a
  749.         specified name  xxxx  ==> use  FSAVE xxxx ( see also SAVESYS)
  750.  
  751.     GCOLR
  752.         A variable which controls the colour of all characters printed
  753.         with the word GCOUT ( or digits via .CL )
  754.  
  755.  
  756.     GCOUT
  757.         Prints ascii character on TOS in colour determined by value on
  758.         variable GCOLR.
  759.  
  760.     GETCHR
  761.         Purpose: When executed the TOS contains the next character
  762.         entered at the console.
  763.  
  764.     GETCLI
  765.         Purpose: Returns the tail of the command line that invoked a
  766.         UCC program. The TOS contains the address of a 128 byte buffer
  767.         which will receive the command line. When GETCLI is executed,
  768.         the command line will be moved into the buffer with the first
  769.         byte containing the length of the text read from the command
  770.         line.
  771.  
  772.     GETLIN
  773.         Purpose: Returns a line of text entered at the console. The TOS
  774.         contains the address of the buffer which should receive the text
  775.         with the first byte of the buffer containing the maximum length
  776.         of the string to be collected. When GETLIN is executed, the
  777.         second byte of the buffer will contain the actual number of
  778.         bytes read from the console with the text beginning at the
  779.         third byte of the buffer.
  780.  
  781.     GETLOC
  782.         Purpose: Fetch to the TOS the address of the next location
  783.         available for entering code into the current definition being
  784.         defined.
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.     4th_86 version 3.0             GLOSSARY                   page  13
  794.     
  795.     
  796.     GETMODE
  797.         Purpose: Return on TOS the active display page, and on NOS the
  798.         number of columns (high byte) and the display mode (low byte)
  799.  
  800.     GETSTS
  801.         Purpose: When executed the TOS contains a 1 if a character was
  802.         detected at the console, or a zero if no chartacter was detected.
  803.  
  804.         If a character is at the console, GETCHR can be executed to
  805.         fetch the character.
  806.  
  807.     GOTOXY
  808.         Purpose: To locate the cursor.
  809.  
  810.                : FRED 11h 11h gotoxy " test" ." ;
  811.  
  812.        will print the word 'test' at the Hex x,y co-ordinates 11,11
  813.  
  814.     GLOAD
  815.         ( formerly CLOAD - renamed because MASM file structure is
  816.                                                            changed )
  817.  
  818.         Purpose: Load a file created with MASM and EXE2BIN.
  819.  
  820.         The MASM file has two sections separated by the string
  821.                  DB    ' binload endproc '
  822.                    (note space after endproc - lower case mandatory )
  823.         The end of the file must also be defined by the string
  824.                  DB    ' endfile '
  825.  
  826.         Between the above two strings are the dictionary entries,
  827.         including flag bytes.
  828.  
  829.                If the file makes reference to data areas or absolute
  830.         addresses, it must contain special header code to make it
  831.         relocatable -- and G0LOAD must be used instead of GLOAD.
  832.         7EGAM3.ASM is an example for reference.
  833.  
  834.         At the moment no "external" calls or references can be made
  835.         unless their absolute addresses are already established, and
  836.         then defined in the MASM source.
  837.  
  838.     G0LOAD
  839.         Same function as GLOAD - but loads file at next page boundary
  840.         ( +/- 10 bytes ) above the current value of HEAD. This allows
  841.         segment register DS to address the data area with zero offset.
  842.  
  843.     GTDFA
  844.         Purpose: Searches the current dictionary for the word following
  845.         GTDFA. If found, the definition address is returned to TOS.
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.     4th_86 version 3.0             GLOSSARY                   page  14
  860.     
  861.     
  862.     GVAL (get numeric value)
  863.         Purpose: Evaluates a character string as a numeric string and
  864.         converts it into a binary number. The TOS on entry is the
  865.         address of the character string. On exit, the TOS is a flag:
  866.         zero - returned value is single precision
  867.         one  - returned value is double precision
  868.           The NOS is the low order two bytes of the double precision,
  869.         or floating point value, and the 3OS is the high order two
  870.         bytes.
  871.           If the value is single precision as denoted by TOS, then 3OS
  872.         must be DROPped.
  873.  
  874.     HEAD!
  875.         Purpose: Stores a word in the definition currently being
  876.         defined. The word on TOS is stored at the address in HEAD. The
  877.         contents of HEAD are then incremented by two bytes.
  878.  
  879.     HEADB!
  880.         Purpose: Identical to HEAD! but stores a byte value instead of
  881.         a word value, and only increments HEAD by one.
  882.  
  883.     IF .. ELSE .. THEN
  884.         Purpose: Provides conditional execution of the code between IF
  885.         and ELSE or ELSE and THEN.
  886.  
  887.     IFTRUE .. OTHERWISE .. ENDIF
  888.         Purpose: A construct for conditionally ignoring segmentgs of
  889.         the input stream. It is an immediate definition and is executed
  890.         when encountered, even in high mode.
  891.  
  892.          IFTRUE ( evaluate the TOS)
  893.           ....  ( execute code if TOS is true (non zero))
  894.          OTHERWISE
  895.           ....  ( execute code if TOS is false (zero))
  896.          ENDIF
  897.  
  898.     IF[
  899.         Purpose: Used instead of IF in IF .. THEN or IF .. ELSE .. THEN
  900.         constructs. Similar in concept to END[  and OF[
  901.  
  902.     ILOAD
  903.         Purpose: To allow a system image saved with ISAVE to be
  904.         reloaded for further work to be done.
  905.  
  906.     IMMEDIATE
  907.         Purpose: If the word being defined should not be compiled into
  908.         a definition, but executed whenever detected, then the word
  909.         IMMEDIATE should be used after the definition terminator
  910.            ( see ASM )
  911.  
  912.  
  913.  
  914.  
  915.  
  916.  
  917.  
  918.  
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925.     4th_86 version 3.0             GLOSSARY                   page  15
  926.     
  927.     
  928.     INSRT
  929.         Purpose: Removes the TOS, called n, and removes the NOS,
  930.         called x. The resultant stack contains two less stack elements.
  931.         x is inserted into the stack indexed by n.
  932.  
  933.         examples      1 2 3 4 5 1 => 1 2 3 4 5
  934.                       1 2 3 4 5 2 => 1 2 3 5 4
  935.                       1 2 3 4 5 3 => 1 2 5 3 4
  936.                       1 2 3 4 5 4 => 1 5 2 3 4
  937.  
  938.         note that 1 INSRT => NOP  => 1 XTRCT
  939.                   2 INSRT => SWAP => 2 XTRCT
  940.  
  941.     ISAVE
  942.         Purpose: To allow the current state of a partially
  943.         meta-compiled system to be saved under a specified name xxxx
  944.              ==> use  FSAVE xxxx
  945.  
  946.     LINK
  947.         Purpose: replaces one definition with another -- provided both
  948.         definitions are already existent.
  949.  
  950.         example  LINK EGAM CGAM   will cause all references to EGAM to
  951.         instead use CGAM.
  952.  
  953.         See UNLINK
  954.  
  955.     MON1
  956.         Purpose: A call is made to the operating system and no value is
  957.         returned. The TOS contains the function code and NOS contains
  958.         any address requirted by the function.
  959.  
  960.     MON2
  961.         Purpose: A call is made to the operating system and a value is
  962.         returned on TOS. The stack values on entry are as for MON1
  963.  
  964.     MOVE (data move)
  965.         Purpose: Move the number of bytes on the TOS to the address on
  966.         NOS from the address on 3OS
  967.  
  968.     NCGAM
  969.         Purpose: Initialise multi-function graphics card in 640x200
  970.         2 color CGA graphics mode -- but do NOT clear video buffer.
  971.         (see also NEGAM CGAM EGAM NORM NNORM)
  972.  
  973.     NEGAM
  974.         Purpose: Initialise multi-function graphics card in 640x350
  975.         16 color EGA graphics mode -- but do NOT clear video buffer.
  976.         (see also EGAM CGAM NCGAM NORM NNORM)
  977.  
  978.     NORM
  979.         Purpose: Initialise multi-function graphics card in 80x25
  980.         color text mode -- and clear video buffer.
  981.         (see also NEGAM CGAM NCGAM NORM NNORM)
  982.  
  983.  
  984.  
  985.  
  986.  
  987.  
  988.  
  989.  
  990.  
  991.     4th_86 version 3.0             GLOSSARY                   page  16
  992.     
  993.     
  994.     NNORM
  995.         Purpose: Initialise multi-function graphics card in 80x25
  996.         color text mode -- but do NOT clear video buffer.
  997.         (see also NEGAM CGAM NCGAM NORM NNORM)
  998.  
  999.     NUMBER
  1000.         Purpose: Evaluates a numeric string found in the input stream
  1001.         as a binary number and stores it into the current definition.
  1002.         The number may be eithert single or double precision.
  1003.  
  1004.     OMIT
  1005.         Purpose: To remove unwanted words from the dictionary - either
  1006.         for security - or to save space. Normally a file called
  1007.         OMITFILE is prepared containing a full list of all the words to
  1008.         be omitted.
  1009.             The code itself is not removed -- nor any threading from
  1010.         other WORDS to the code. Only the dictionary entry is removed.
  1011.        The gap created is closed up by moving the remaining dictionary
  1012.        entries up.
  1013.  
  1014.     OPEN
  1015.         Purpose: Opens a file for either input or output. The TOS
  1016.         contains a 1 for input or a 2 for output. The NOS contains the
  1017.         address of the ASCIIZ filename including any DOS paths, which
  1018.         is to be opened. If the file is opened for output, no data can
  1019.         be written to it. If the file is opened for
  1020.         output, any previous file will be deleted and a new file opened.
  1021.  
  1022.     PAT
  1023.         Purpose: Allows one word in a definition to be changed to
  1024.         another word. The format is
  1025.  
  1026.                     address  PAT  word
  1027.  
  1028.         where address is the patch address, and word is the dictionary
  1029.         name of the word to store at address.
  1030.  
  1031.     PATCH
  1032.         Purpose: Alters a constant value in the definitions. PATCH uses
  1033.         the TOS as the value to patch at the word which follows PATCH
  1034.  
  1035.         example   suppose the constant LENGTH was defined with a value
  1036.                   of 100, and later a value of 200 was needed.
  1037.  
  1038.                         200 PATCH LENGTH   will do this
  1039.  
  1040.     PDICT
  1041.         Purpose: The dictionary entry of a single word is displayed
  1042.  
  1043.         example    PDICT  DUP    will display the entry for DUP
  1044.  
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.     4th_86 version 3.0             GLOSSARY                   page  17
  1058.     
  1059.     
  1060.     PICK
  1061.         Purpose: Copy the TOSth element of the stack to TOS. The TOS is
  1062.         not counted as part of the stack.
  1063.  
  1064.         examples (all values in hex)
  1065.                   43 55 12 3e 4  =>  43 55 12 3e 43
  1066.                   43 55 12 3e 3  =>  43 55 12 3e 55
  1067.                   43 55 12 3e 2  =>  43 55 12 3e 12
  1068.                   43 55 12 3e 1  =>  43 55 12 3e 3e
  1069.  
  1070.            1 PICK => DUP   2 PICK => OVER
  1071.  
  1072.     PNOP
  1073.         Purpose: similar to PAT but patches in a NOP
  1074.  
  1075.     POKE
  1076.         Purpose: Move the NOS into the TOSth place. The TOS and NOS are
  1077.         not included in the poke count
  1078.  
  1079.         examples (all values in hex)
  1080.                   43 55 12 3e 3  =>  3e 55 1
  1081.                   43 55 12 3e 2  =>  43 3e 12
  1082.                   43 55 12 3e 1  =>  43 55 3e
  1083.                   43 55 12 3e 0  =>  43 55 12
  1084.  
  1085.     PRINTLOAD
  1086.         Purpose: Controls whether a file being FLOADed is printed at
  1087.         the console or not
  1088.                OFF PRINTLOAD -- don't show file
  1089.                 ON PRINTLOAD -- show file as it loads
  1090.  
  1091.     PRINTLOC
  1092.         Purpose: Controls whether a file being FLOADed has the compile
  1093.         location of each line displayed on the console.
  1094.  
  1095.     Q-U-IT
  1096.         Not normally used ( BYE is preferred exit method)
  1097.  
  1098.         Returns to DOS and closes all files - but does not restore the
  1099.         video mode to NORMal text mode.
  1100.  
  1101.     READ
  1102.         Purpose: Inputs data sequentially from a previously opened
  1103.         file. The TOS contains the file handle number of the already
  1104.         opened file to read from. The NOS contains the
  1105.         address of the buffer to read the data into. The 3OS contains
  1106.         the maximum number of bytes to read. When the input data has
  1107.         been moved into the buffer, or when an error occurs, then the
  1108.         TOS contains an error code and the NOS contains the actual
  1109.         number of bytes read into the buffer.
  1110.  
  1111.     RECURSE
  1112.         Purpose: Allows a word being defined to thread back to its own
  1113.         definition.
  1114.  
  1115.  
  1116.  
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122.  
  1123.     4th_86 version 3.0             GLOSSARY                   page  18
  1124.     
  1125.     
  1126.     REDEFINE
  1127.         Purpose: Normally when a definition is created that has the
  1128.         same name as another definition, UCC prompts with a warning
  1129.         message and queries for continuing or aborting. This featire is
  1130.         disabled by the command
  1131.  
  1132.                      ON REDEFINE and is restored by OFF REDEFINE
  1133.  
  1134.     REDIT
  1135.         Purpose: Equivalent to sequence EDIT  RELOAD ;
  1136.  
  1137.     RELOAD
  1138.         Purpose: Same function as FLOAD -- but the name of the file to
  1139.         be FLOADed does not have to be specified. It is the same name
  1140.         which has previously been defined by USING -- ie the same as
  1141.         the name used by EDIT and REDIT.
  1142.  
  1143.     REPEAT .. WHILE .. ENDWHILE
  1144.         Purpose: Provides loop control over the code between REPEAT and
  1145.         ENDWHILE. The code following the ENDWHILE is executed when the
  1146.         WHILE is executed and the TOS is false, otherwise the code
  1147.         between the REPEAT .. ENDWHILE will be executed.
  1148.  
  1149.         The construct is the same as the BEGIN .. END structure except
  1150.         that the exit test is made at the top of the loop instead of
  1151.         the bottom of the loop.
  1152.  
  1153.     RETURN
  1154.         Purpose: Provides an immediate exit from a high level definition.
  1155.         It can be used anywhere in a word except within a DO .. LOOP
  1156.         construct. When executed it is similar to encountering the word
  1157.         ;
  1158.  
  1159.     SAVESYS
  1160.         Purpose: To allow the current state of the running 4th/86 --
  1161.         including all new words loaded -- to be saved under the name
  1162.         4th_86.COM. (see also FSAVE)
  1163.  
  1164.             No parameters needed --- just type SAVESYS at any time. Any
  1165.          existing 4th_86.COM will be over-written.
  1166.  
  1167.     SETMEM
  1168.         Purpose: To set the amount of memory reserved for 4th/86 to
  1169.         operate in. Normally set to 64K on initialisation by
  1170.                        1000H SETMEM
  1171.  
  1172.     SHL8
  1173.         Purpose: Move the low byte of TOS to the high byte
  1174.  
  1175.     SHR8
  1176.         Purpose: Move the high byte of TOS to the low byte
  1177.  
  1178.     SIZE
  1179.         Purpose: Returns on TOS the number of bytes in the definition
  1180.         of the word which follows SIZE
  1181.  
  1182.  
  1183.  
  1184.  
  1185.  
  1186.  
  1187.  
  1188.  
  1189.     4th_86 version 3.0             GLOSSARY                   page  19
  1190.     
  1191.     
  1192.     SP@
  1193.         Purpose: Fetches to TOS the current pointer of the data stack
  1194.  
  1195.     STATUS
  1196.         Purpose: Provides the user information concerning the space
  1197.         available in the dictionary and the definition tables. If in
  1198.         cross mode, the code and data start and stop addresses are also
  1199.         displayed
  1200.  
  1201.     STRCMP
  1202.         Purpose: to compare two strings for a specified number of bytes.
  1203.            Returns 0 for mis-match and 1 for match
  1204.  
  1205.        The format is  Addr1  Addr2  Count  STRCMP
  1206.  
  1207.         Note --- : FRED " abcdef"  " abcde" 3 STRCMP ;
  1208.             will give a mis-match because the first byte of each string
  1209.             is the string-length byte. String one is 6 bytes long
  1210.             whereas string 2 is 5 bytes.
  1211.                  : FRED " abcdef" 1+ " abcde" 1+ 3 STRCMP ;
  1212.             will step over the count byte, and give a match.
  1213.  
  1214.     SYS
  1215.         Purpose: Causes the user to shell out to DOS. Return to UCC is
  1216.         achieved by typing EXIT (not a Forth word -- a DOS command)
  1217.  
  1218.     SYSCLOSE
  1219.         Purpose: Closes a file. The TOS contains the file handle number
  1220.         of the already opened file to be closed, or zero if all files
  1221.         should be closed.
  1222.  
  1223.     SYSOPEN
  1224.         Purpose: Opens a file for either input or output. The TOS
  1225.         contains the access code (1=input 2=output) and the NOS
  1226.         contains the address of the filename which should be opened.
  1227.         Upon exit, the TOS contains the DOS file handle number
  1228.  
  1229.     SYSRBYTE
  1230.         Purpose: Writes one byte to a file. The TOS contains the
  1231.         file handle number of the already opened file to be
  1232.         written to. The NOS contains the byte to be written.
  1233.  
  1234.     SYSREAD
  1235.         Purpose: Reads a block from a file to a buffer. The TOS
  1236.         contains the file handle number of the already opened file
  1237.         to be read from. The NOS contains the address of the
  1238.         buffer to read into. The 3OS contains the number of bytes
  1239.        to read. Upon exit  from SYSREAD the TOS contains the actual
  1240.        number of bytes read.
  1241.  
  1242.     SYSWBYTE
  1243.         Purpose: Writes one byte to a file. The TOS contains the
  1244.         file handle number of the already opened file to be written to.
  1245.         The NOS contains the byte to be written.
  1246.  
  1247.  
  1248.  
  1249.  
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255.     4th_86 version 3.0             GLOSSARY                   page  20
  1256.     
  1257.     
  1258.     SYSWRITE
  1259.         Purpose: Writes a block from a buffer to a file. The TOS
  1260.         contains the file handle number of the already opened file
  1261.         to be written into. The NOS contains the address of
  1262.         the buffer to write from. The 3OS contains the number of bytes
  1263.         to write.
  1264.  
  1265.     TD (time and delay)
  1266.         Purpose: displays the time in hours, minutes, seconds, tenths.
  1267.         Also displays the time elapsed since the previous reference to
  1268.         TD
  1269.  
  1270.     THEN
  1271.         see  IF .. ELSE .. THEN
  1272.  
  1273.     TM (time)
  1274.         Purpose: displays the time in hours, minutes, seconds, tenths.
  1275.  
  1276.     TYPE (type file)
  1277.         Purpose: To display on the screen the contents of a disk text
  1278.         file.
  1279.  
  1280.            The format is
  1281.  
  1282.                   TYPE  FILENAME    or   TYPE B:\FORTH\FILENAME
  1283.  
  1284.            The current drive can be changed with A:   ---   D:
  1285.  
  1286.  
  1287.     UNLINK
  1288.         Purpose: Removes the latest patch established with LINK. If
  1289.         more than one pair of words have been LINKed, only the latest
  1290.         one can be UNLINKed. The others are un-recoverable.
  1291.  
  1292.     USING
  1293.         Purpose: Defines the file name to be subsequently used by the
  1294.         words EDIT  REDIT  RELOAD.
  1295.  
  1296.         Format        REDIT  FILENAME
  1297.  
  1298.     WORD
  1299.         Purpose: Fetches a word from the input stream and stores it in
  1300.         ATOM, returning the address of ATOM on TOS. A word is defined
  1301.         in the input stream as ANY sequence of ASCII printable
  1302.         characters delineated by at least one space or blank.
  1303.  
  1304.     WRITE
  1305.         Purpose: Outputs data sequentially to a previously opened
  1306.         file. The TOS contains the file handle number of the already
  1307.         opened file to write to. The NOS contains the
  1308.         address of the buffer to write the data from. The 3OS contains
  1309.         the number of bytes to write. When the input data has
  1310.         been moved into the buffer, or when an error occurs, then the
  1311.         TOS contains an error code.
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.  
  1321.     4th_86 version 3.0             GLOSSARY                   page  21
  1322.     
  1323.     
  1324.     XTRCT
  1325.         Purpose: Removes the TOS called n and extracts (moves) the
  1326.         stack element indexed by n to the TOS
  1327.  
  1328.         example      1 2 3 4 5 1  =>  1 2 3 4 5
  1329.                      1 2 3 4 5 2  =>  1 2 3 5 4
  1330.                      1 2 3 4 5 3  =>  1 2 4 5 3
  1331.                      1 2 3 4 5 4  =>  1 3 4 5 2
  1332.                      1 2 3 4 5 5  =>  2 3 4 5 1
  1333.  
  1334.     [COMPILE]
  1335.         Purpose: Stores the definition address of a word declared to be
  1336.         immediate by the word IMMEDIATE into the current definition.
  1337.  
  1338.         Format     [COMPILE]  xxxxx    where xxxxx is the word
  1339.  
  1340.     [[
  1341.         Purpose: Toggles from execute mode to compile mode
  1342.  
  1343.     ]]
  1344.         Purpose: Toggles from compile mode to execute mode.
  1345.  
  1346.  
  1347.     1st. February 1989
  1348.     
  1349.  
  1350.  
  1351.  
  1352.  
  1353.  
  1354.  
  1355.  
  1356.  
  1357.  
  1358.  
  1359.  
  1360.  
  1361.  
  1362.  
  1363.  
  1364.  
  1365.  
  1366.  
  1367.  
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383.  
  1384.  
  1385.  
  1386.  
  1387. $