home *** CD-ROM | disk | FTP | other *** search
/ Software Du Jour / SoftwareDuJour.iso / BUSINESS / DBASE / CLIPMSG.ARC / BBSCLIP.MSG
Text File  |  1980-01-03  |  23KB  |  813 lines

  1.                CLIPPER WINTER '85 UPDATE HIGHLIGHTS
  2.  
  3. 3/2/86
  4.   Compliments of Rudolph Schmidt
  5.   (I hope I'm not breaking any laws)
  6.   
  7. For those of your interested here is an abbreviated copy of CLIPPER
  8. Read_me.1st file for the latest release of the Clipper Compiler.
  9.  
  10.    Highlights include:
  11.  
  12.      Separately compilable modules - (extern definitions)
  13.  
  14.      UDF's - user definable functions written in any language which 
  15.        supports Intel OBJ code format. (full parameter passing)
  16.      
  17.      Call by reference option on DO command -- parameters may be
  18.        passed by reference to allow changing values.
  19.  
  20.      Memo variable editing - "best of both worlds" memo still treated
  21.        like strings only now there is a function to edit memo fields
  22.        in a user-defined window.  Full array of editing keys available
  23.      
  24.      Memory variable arrays - array of any memo var type supported.
  25.      
  26.      NOTE: problems with private memovars seem to be solved - hopefully
  27.      Also LABEL command now strips blank lines from output -- just like
  28.      dBase III.
  29.  
  30.  
  31.      NOTE II: Clipper still is using proprietary index structure
  32.      I have talked with some of TECH staff at Nantucket and they
  33.      gave no hint of a change in this strategy.  I am currently
  34.      writing C code to convert Clipper indexes of arbitrary size 
  35.      to dBase III indexes without re-reading data files.  This
  36.      utility will be available sometime within the next 2-3 months
  37.      for a reasonable price.  Anyone interested can leave me a 
  38.      Email message on this BBS [I'm Rudolph Schmidt].
  39.  
  40.  
  41. ************************* READ_ME.1ST **************************
  42. *           C L I P P E R   -   W I N T E R   ' 8 5            *
  43. ****************************************************************
  44.  
  45. This file is organized in the following manner.
  46.  
  47.  I.  LIST OF FILES - [deleted]
  48.   
  49. II.  ADDITIONAL COMMANDS
  50.     Commands added to Clipper not included in the documentation.
  51.  
  52. III.  ADDITIONAL FUNCTIONS
  53.     Functions added to Clipper not included in the documentation.
  54.  
  55. IV.  ADDENDUM TO THE DOCUMENTATION
  56.     1.  Differences between dBASE and Clipper (Chapter 3)
  57.  
  58.     2.  Clipper Commands and Functions (Chapter 4)
  59.  
  60. V.  dBASE III PLUS Compatability and the Extend library
  61.  
  62.  
  63.  
  64. ******************** ADDITIONAL COMMANDS ***********************
  65.  
  66. >>> &&
  67.  
  68. NOTES: Comments may placed on the same line as commands if
  69.        preceded with two ampersands.
  70.  
  71.        &&memvar is not supported as a macro but Clipper supports
  72.        ? &x  where x = "&y" and y = "&z"
  73.  
  74.  
  75. >>> @ ... SAY ... GET - New PICTURE
  76.  
  77. NOTES: Function "@)" in PICTURE clause behaves as "@(" except that
  78.        leading blanks are not displayed within the parenthesis.
  79.  
  80. EXAMPLE:
  81.  
  82. @ 5,10 SAY net_loss PICTURE "@)"
  83.  
  84. Produces    (125.50)
  85.  
  86.  
  87.  
  88. >>> <scope>
  89.  
  90. NOTES: <scope> is now compatible with dBASE III PLUS, except for
  91.        REST, (use WHILE .T.).
  92.  
  93.        FOR and WHILE are no longer exclusive.  This allows
  94.        conditional operations within a scope.
  95.  
  96. EXAMPLE:  With a file indexed by state:
  97.  
  98.       SEEK "CA"
  99.       LIST FOR Balance <> 0 WHILE State = 'CA'
  100.  
  101.  
  102.  
  103. >>> 3 New menu building commands
  104.  
  105. SYNTAX: SET MESSAGE TO <expN>        && designate line 1 - 24 to
  106.                                      && display messages for prompts
  107.  
  108.         @ <row,col> PROMPT <expC> [MESSAGE <expC>]
  109.  
  110.         MENU TO <memvar>             && similar to READ
  111.  
  112. NOTES:  The @...PROMPT command is used to place menu selections on
  113.         the screen.  MENU TO <memvar> highlights the first prompt,
  114.         allows cursoring from prompt to prompt, and places in memvar
  115.         the numeric value of the prompt selected.   32 PROMPTs per
  116.         MENU are allowed.  SET MESSAGE TO allows a related message
  117.         for each prompt to be displayed.  Messages will appear
  118.         on line <expN>.  If 0 or TO nothing messages will not
  119.         display.
  120.  
  121.         Return, PgUp, or PgDn will store in the memvar the relative
  122.         number of the prompt selected.  Escape will return 0.
  123.         The first character of a PROMPT will highlight and
  124.         select that selection.
  125.  
  126.         Help can be activated and is passed the memvar name.
  127.         That is, if function key one is pressed to call Help.prg
  128.         the parameter passed as input_var is the memvar created
  129.         by MENU TO.
  130.  
  131.         Menus can be nested (i.e. inside help) without CLEARing
  132.         GETS (unlike GET/READ).  However, if the same memvar is
  133.         used for nested menus, the memvar retains the previous
  134.         value.  Therefore, it is best to use different memvars 
  135.         for each menu.
  136.  
  137.  
  138.  
  139. >>> Debugger - new options
  140.  
  141.       C       Clears the screen
  142.  
  143.       R       Run a DOS program.  For example, run Line.exe
  144.               or your editor to check code on a line that causes
  145.               an error.
  146.  
  147.       D       Display status.  Shows current selection and SET
  148.               commands status.
  149.  
  150.       Memory variables passed by reference now display "@" as their
  151.       type.
  152.  
  153.  
  154.  
  155. >>> DECLARE - Arrays
  156.  
  157. SYNTAX: DECLARE  <memvar>[<expN>] [, <array list> ]
  158.  
  159. NOTES: Creates an array of <expN> elements.  Elements may be of
  160.        mixed type in usage.  Arrays are always private.
  161.  
  162.        The brackets surrounding <expN> do not indicate optional
  163.        syntax in this one case.  They are required when
  164.        declaring and referencing arrays.
  165.  
  166.        Elements of the array are used by placing the index
  167.        number of the desired element in the brackets.
  168.  
  169.        The LEN() function will return the number of elements in
  170.        an array if the array name only is the parameter.  In the
  171.        example below, LEN(up_alpha) would return 26.
  172.  
  173.        The TYPE() function will return "A" for an array.
  174.  
  175.        Assigning a value to a memory variable with the same name
  176.        as an array will destroy the array and release the values
  177.        stored.
  178.  
  179.        Arrays and array elements cannot be SAVEd in .MEM files
  180.        and cannot be passed by reference as parameters with the
  181.        DO and CALL commands.
  182.  
  183.        Array expressions can be used with macros, but assignment
  184.        is restricted to the following conventions.
  185.  
  186.           ma = "A"
  187.           mx = "A[1]"
  188.  
  189.          * legal
  190.          declare &ma[1]
  191.          &mx = 100
  192.          ? &ma[1], &mx
  193.          &ma[1] = 100
  194.         
  195.          * illegal
  196.          declare &mx
  197.  
  198. Example:
  199.  
  200.        To create two arrays of 26 elements each, one containing
  201.        the uppercase alphabet, one the lowercase alphabet.
  202.  
  203.         DECLARE up_alpha[26], low_alpha[26]
  204.         FOR i = 1 TO 26
  205.            up_alpha[i] = CHR(64+i)
  206.            low_alpha[i] = CHR(96+i)
  207.         NEXT
  208.  
  209.  
  210.  
  211. >>> The following rules apply when passing arrays and memory
  212.     variables to functions, procedures, and CALLed procedures.
  213.  
  214.     1.  Parameters are always passed to functions by value.  
  215.  
  216.     2.  Parameters are passed to PROCEDUREs and CALLed programs
  217.         by reference only if the identifier is passed.  If an
  218.         expression is passed, then the parameter is passed by
  219.         value.  Elements of arrays can only be passed by value.
  220.  
  221.         A parameter passed by reference can be changed by the
  222.         called routine.  A parameter passed by value, is a
  223.         duplicate of the original parameter.  Changing this
  224.         duplicate does not change the original.  
  225.  
  226.  
  227. EXAMPLES:
  228.  
  229. This syntax passes the memory variable "mem1" to the procedure
  230. PROC1 by reference.  Any change in the called procedure changes
  231. the original memvar.  This parameter is an identifier.
  232.  
  233.            DO PROC1 WITH mem1
  234.  
  235. This syntax passes the value of the expression "mem1 + 1" and
  236. the value of array element "up_alpha[1]" to PROC2.
  237.  
  238.            DO PROC2 WITH mem1 + 1, up_alpha[1]
  239.  
  240. Placing the memvar in parentheses passes the value only.
  241. Changing the parameter does not change the original element.
  242.  
  243.            DO <proc> WITH (<memvar>)
  244.  
  245. By passing just an array identifier, the called procedure has
  246. access to the entire array and any changes in the procedure
  247. affect the original array.
  248.  
  249.           DO SOUP WITH up_alpha
  250.  
  251.  
  252.  
  253. >>> EXTERNAL
  254.  
  255. SYNTAX: EXTERNAL <procedure list>
  256.  
  257. NOTES:  This is used to declare a symbol for the linker.
  258.         Procedures that are declared external can then be placed
  259.         in overlays and still called with a macro.
  260.  
  261. Example:
  262.  
  263.           EXTERNAL P1, P2, P3
  264.           n = "1"
  265.           DO P&n                && P1 can be in an overlay
  266.  
  267.  
  268.  
  269. >>> KEYBOARD 
  270.  
  271. SYNTAX: KEYBOARD <expC>
  272.  
  273. NOTES:  Stuffs the keyboard input buffer with the given string.
  274.         Each execution of KEYBOARD flushes the type-ahead
  275.         buffer.  Multiple KEYBOARD commands cannot be used to
  276.         que multiple strings.  However, KEYBOARD "" can be used
  277.         to clear the buffer.
  278.  
  279. EXAMPLE:
  280.         * To return to a main menu from three menu levels deep
  281.         * with one key entry.  "Q" and a carriage return exits
  282.         * each menu, simulation RETURN TO MASTER.
  283.         
  284.         KEYBOARD "Q" + CHR(13) + "Q" + CHR(13) + "Q" + CHR(13)
  285.     
  286.         See also MENU.PRG on the Utility disk.
  287.  
  288.  
  289. >>> New operator "==" (double equal):
  290.  
  291. NOTES: Compares character types for a perfect match, i.e. same
  292.        length and same chars.  Similar to (but not the same as)
  293.        SETting EXACT ON for an "=".
  294.  
  295.        SET EXACT ON will ignore trailing blanks with "=".  For
  296.        example;
  297.  
  298.           SET EXACT OFF
  299.           ? "abc" = "abc "             && Returns .F.
  300.           ? "abc " = "abc"             && Returns .T.
  301.           SET EXACT ON
  302.           ? "abc" = "abc "             && Returns .T.
  303.           ? "abc " = "abc"             && Returns .T.
  304.  
  305.           SET EXACT OFF
  306.           ? "abc" == "abc "            && All return .F.
  307.           ? "abc " == "abc"
  308.           SET EXACT ON
  309.           ? "abc" == "abc "
  310.           ? "abc " == "abc"
  311.  
  312.        Same as "=" for other types except for numeric
  313.        comparisons.  Only the 12  most significant digits are
  314.        compared.  This operator should be used when comparing
  315.        two numbers if 12 or less significant digits are used.
  316.  
  317.  
  318.  
  319. >>>  Optional new logical operators
  320.  
  321. NOTES: "!" for .NOT. 
  322.        "!=" for not equal
  323.  
  324. EXAMPLE:
  325.  
  326.        * Same as "DO WHILE .NOT. .T."
  327.        DO WHILE ! .T.
  328.  
  329.  
  330.  
  331. >>> SET KEY
  332.  
  333. SYNTAX: SET KEY <expN> TO [<proc>]
  334.  
  335. NOTES: This command allows a procedure to be executed from any
  336.        wait state when a designated key is pressed.  A wait
  337.        state being any command that pauses program execution.
  338.        
  339.            WAIT
  340.            READ
  341.            ACCEPT
  342.            INPUT
  343.            MENU TO
  344.  
  345.        <expN> will be the INKEY() value of the designated key.
  346.        At startup the system assumes:
  347.  
  348.           SET KEY <F1-code> TO help
  349.  
  350.        Like HELP.PRG, three parameters are always passed and
  351.        must be assigned to memory variables in the called
  352.        procedure (even if never used). 
  353.  
  354. EXAMPLE:
  355.  
  356.        See MENU.PRG on the Utility disk
  357.  
  358.  
  359.  
  360. ********************** ADDITIONAL FUNCTIONS *********************
  361.  
  362. >>> DTOS()
  363.  
  364. SYNTAX: DTOS(<expD>)
  365.  
  366. NOTES:  Returns a string in yyyymmdd day order.  This can be used
  367.         to index on a date + character expression.
  368.  
  369.  
  370. Example:
  371.            xmas = CTOD("12/25/85")
  372.            ? DTOS(xmas)             && returns "19851225"
  373.  
  374.  
  375.  
  376. >>> EMPTY()
  377.  
  378. SYNTAX: EMPTY(<exp>)
  379.  
  380. NOTES:  TRUE if:
  381.  
  382.           Character - expression is a null string or all
  383.              spaces
  384.           Numeric - expression = 0
  385.  
  386.           Date - expression = empty date
  387.  
  388.           Logical -  expression = .F.
  389.  
  390.  
  391.  
  392. >>> FOUND()
  393.  
  394. NOTES:  Returns .T. if a previous SEEK, FIND, LOCATE, or CONTINUE
  395.         was successful.
  396.  
  397. Example:
  398.  
  399.            SEEK memvar
  400.            IF FOUND()
  401.               ...<display record>
  402.            ELSE
  403.               ? "Record not in file"
  404.            ENDIF
  405.  
  406.  
  407.  
  408. >>> LTRIM()
  409.  
  410. SYNTAX: LTRIM(<expC>)
  411.  
  412. NOTES:  Trims leading blanks from a character string.
  413.  
  414.  
  415.  
  416. >>> MEMOEDIT() - Memo edit function
  417.  
  418. SYNTAX: <varC> = MEMOEDIT(<expC>, <expN>, <expN>, <expN>, <expN>[, <expL>])
  419.  
  420. NOTES:  <varC> is the variable (or field) where the NEW memo is
  421.                to be stored.
  422.  
  423.         <expC> is the begining string or memo.
  424.  
  425.         <expN> are the 4 coordinates defining the edit window in the
  426.                order: top, left, bottom, right
  427.  
  428.         <expL> is an update flag.  This determines if a memo is to be
  429.                updated (TRUE) or merely displayed (FALSE). 
  430.  
  431.         
  432. EXAMPLE:
  433.  
  434.     *To edit the current memo.
  435.  
  436.        REPLACE memo_field WITH MEMOEDIT(memo_field, 5, 10, 20, 69, .T.)
  437.  
  438.     *To display only the field without replacing or assigning it to
  439.     *a memvar.
  440.  
  441.        IF "" = MEMOEDIT(memo_field, 5, 10, 20, 69, .F.) 
  442.        ENDIF
  443.  
  444.  
  445. CURSOR MOVEMENT KEYS:
  446.  
  447.      Up arrow or ^E . . . . . . Up one line
  448.      Down arrow or ^C . . . . . Down one line
  449.      Left arrow or ^S . . . . . Left one character
  450.      Right arrow or ^D. . . . . Right one character
  451.      ^Left arrow or ^A. . . . . Left one word
  452.      ^Right arrow or ^F . . . . Right one word
  453.      HOME . . . . . . . . . . . Beginning of current line
  454.      END. . . . . . . . . . . . End of current line
  455.      ^HOME. . . . . . . . . . . Beginning of memo
  456.      ^END . . . . . . . . . . . End of memo
  457.      PgUp . . . . . . . . . . . Next edit window up
  458.      PgDn . . . . . . . . . . . Next edit window down
  459.      ^PgUp. . . . . . . . . . . Beginning of current window
  460.      ^PgDn. . . . . . . . . . . End of current window
  461.  
  462.  
  463. EDITING KEYS:
  464.  
  465.      ^W . . . . . . . . . . . . Finish editing
  466.      Esc. . . . . . . . . . . . Abort edit and return original memo
  467.      ^Y . . . . . . . . . . . . Delete current line
  468.      ^T . . . . . . . . . . . . Delete word right
  469.      ^B . . . . . . . . . . . . Reformat memo in the edit window
  470.  
  471.  
  472.  
  473. >>>  READVAR()
  474.  
  475. NOTES:  Returns the name of the current GET/MENU variable or a
  476.         null string if none is pending.
  477.  
  478.  
  479.  
  480. >>> SECONDS()
  481.  
  482. NOTES:  Returns the system time as <seconds>.<hundreds>.  The
  483.         value returned is the number of seconds elapsed since
  484.         midnight and is based on a twenty-four hour clock.  The
  485.         range is 0 to 86399.
  486.  
  487.  
  488.  
  489. >>> SELECT()
  490.  
  491. SYNTAX: SELECT()
  492.  
  493. NOTES:  Returns the numeric value of the currently selected area.
  494.  
  495. Example:
  496.  
  497.        IF SELECT() = 1
  498.           @ 23,0 SAY "PLEASE ENTER MAIN DATA"
  499.        ENDIF
  500.        IF SELECT() = 2
  501.           @ 23,0 SAY "PLEASE ENTER SECONDARY DATA"
  502.        ENDIF
  503.  
  504.  
  505.  
  506.  
  507. >>> TRANSFORM()
  508.  
  509. SYNTAX: TRANSFORM(<exp>,<picture>)
  510.  
  511. NOTES:  Returns a character string with the specified picture.
  512.         Picture options are those available in the @...SAY...GET
  513.         command.  Same as dBASE III PLUS.
  514.  
  515. Example:
  516.  
  517.         ? TRANSFORM( 123456789, "###,###,###")
  518.         *Returns 123,456,789
  519.  
  520.  
  521.  
  522. >>> UPDATED()
  523.  
  524. NOTES: TRUE if the last READ changed any data in the associated
  525.        GETs. 
  526.  
  527.  
  528.  
  529. >>> WORD()
  530.  
  531. SYNTAX: CALL <process> WITH WORD(expN)
  532.  
  533. NOTES: Converts numeric parameters to a CALLed routine from data
  534.        type DOUBLE to type INT to reduce the routine's overhead.
  535.        IF the value of <expN> does not exceed +-32k, there is no
  536.        need to pass a larger parameter.  Do NOT use WORD() if
  537.        the variable is beyound this range.
  538.  
  539.  
  540. **************** ADDENDUM TO THE DOCUMENTATION *****************
  541.  
  542.             * Differences between dBASE and Clipper *
  543.                        * Chapter 3 *
  544.  
  545. >>> Filenames
  546.  
  547.      Program and procedure names are evaluated by Clipper like
  548.      any other identifier (memvars, alias's, etc.).  Therefore,
  549.      hyphens are not allowed in filenames.  To be consistent,
  550.      use the underscore to to make identifiers more readable.
  551.      Do not begin procedures with the underscore, however.
  552.  
  553.  
  554.  
  555. >>> Memory variables
  556.  
  557.     Clipper will allow up to 2,048 public and private memory
  558.     variables before returning an error message.  An array
  559.     counts as one of these memory varibles.  Each array may
  560.     contain another 2048 memory elements.  
  561.  
  562.     Fields always take precedence over memory variables of the
  563.     same name unless the "M" alias is used.  
  564.  
  565.  
  566.  
  567. >>> Procedures in program files
  568.  
  569.     Procedures and functions may be placed in the same file with
  570.     the calling program.  Clipper imposes no limits to the
  571.     number of procedures and functions in a file.
  572.  
  573.  
  574.  
  575. >>> SET FORMAT TO
  576.  
  577.      Clipper does not CLEAR the screen before executiing format
  578.      files.  Commands, however, are allowed in format files.
  579.      This allows more flexibility when using format files.
  580.  
  581.  
  582.  
  583.               * Clipper Commands and Functions *
  584.                         * Chapter 4 *
  585.  
  586. >>> CALL
  587.  
  588. SYNTAX: CALL <proc> WITH <expr>
  589.  
  590. NOTES:  Two additional features have been added to CALL to
  591.         provide more compatibility with dBASE III PLUS.
  592.  
  593. 1)      DX:BX and ES:BX registers point to the first parameter,
  594.         similar to the dBASE III PLUS "standard" DS:BX
  595.         (DS is reserved due to upward compatability)
  596.  
  597.         The only commands to add to a LOAD module are
  598.  
  599.         "PUBLIC <proc>" and
  600.         "MOV DS,DX"
  601.  
  602. 2)      The WORD() function converts numeric parameters from
  603.         type DOUBLE to type INT to reduce the overhead of the
  604.         CALLed routine. (See ADDITIONAL FUNCTIONS)
  605.  
  606.  
  607. >>> DISPLAY [OFF] [scope] <field list> [FOR <condition>]
  608.             [WHILE <condition>] [TO PRINT/TO FILE <filename>]
  609.  
  610. NOTES:  TO PRINT and TO FILE have been added to the syntax.
  611.  
  612.  
  613.  
  614. >>> INDEX - Indexing on the trim of a field
  615.  
  616.      Index key sizes under Clipper are calculated by evaluating
  617.      the index expression on a blank record.  Therefore, the
  618.      TRIM() of a field evaluates to a null string.  An index can
  619.      be built on the trim of a field, however, if a number of
  620.      spaces equal to the length of the trimmed fields is added
  621.      to the end of the key expression.  For example;
  622.  
  623.        INDEX ON  TRIM(lname) + ", " + TRIM(fname) +  " ";
  624.           + SPACE(LEN( lname + fname )) TO Trimntx
  625.  
  626.  
  627.  
  628. >>> LABEL
  629.  
  630.    Contents of a LABEL field must be a valid expression.  
  631.    Clipper will ignore anything following a comma in a label.
  632.    
  633.    dBASE                        Clipper
  634.    -----                        -------
  635.    Fname,Lname                  TRIM(Fname) + " " + Lname
  636.  
  637.  
  638.  
  639. >>> LIST [OFF] [scope] <field list> [FOR <condition>]
  640.          [WHILE <condition>] [TO PRINT/TO FILE <filename>]
  641.  
  642. NOTES:  TO PRINT and TO FILE have been added to the syntax.
  643.  
  644.  
  645.  
  646. >>> REPORT FORM
  647.  
  648.    Clipper will generate a runtime error whenever an attempt is
  649.    made to divide by zero.  This can sometimes occur in REPORTs 
  650.    when dividing by a numeric field that has been left blank.
  651.    The following function will suppress the error and return
  652.    zero if an attempt is made to divide by zero.
  653.  
  654.    FUNCTION ZERO
  655.    PARAMETERS  znum1,znum2
  656.    IF znum2 <> 0
  657.       RETURN (znum1/znum2)
  658.    ENDIF
  659.    RETURN (0)
  660.  
  661.    If the first expression evaluates to true, the division will
  662.    be executed.  Otherwise, a zero will be returned.
  663.  
  664.  
  665.  
  666. >>> SET COLOR TO
  667.  
  668. NOTES: SET COLOR TO accepts numbers or letters as parameters.
  669.        Do not mix the letters with numbers. The "+" and "*"
  670.        for high intensity and flashing are only supported with
  671.        letters and only affect the foreground.
  672.  
  673.        When the numbers are used, the number to the left of the
  674.        slash is written to the high order 4 bits of the color
  675.        attribute byte and the number to the right is written to the
  676.        low order 4 bits.  
  677.  
  678.        ----------------------------
  679.        | Color  | Number | Letter |
  680.        ----------------------------
  681.        | Black  |   0    | N      |
  682.        | Blue   |   1    | B      |
  683.        | Green  |   2    | G      |
  684.        | Cyan   |   3    | BG     |
  685.        | Red    |   4    | R      |
  686.        | Magenta|   5    | RB     |
  687.        | Brown  |   6    | GR     |
  688.        | White  |   7    | W      |
  689.        ----------------------------
  690.  
  691. Example: To set color for SAYs flashing red on blue, GETs white
  692.          on black, with a blue border. 
  693.           
  694.             SET COLOR TO R*/B,W/N,B
  695.  
  696.  
  697.  
  698. >>> SET ESCAPE ON/off
  699.  
  700. NOTES: ON - default
  701.           Escape from GET...READ ignores VALID and Alt-C allows
  702.           program termination.
  703.  
  704.        OFF
  705.           Will not allow escape to terminate a READ.
  706.           Alt-C is ignored.
  707.  
  708.  
  709.  
  710. >>> SET PATH TO <path list>
  711.  
  712.    Continuation with semi-colon is not supported with the SET PATH
  713.    command.
  714.  
  715.    SET PATH TO A:\INVENTORY,;          && not ok
  716.      B:\VENDORS
  717.  
  718.   * this is ok
  719.    SET PATH TO A:\INVENTORY, B:\VENDORS
  720.  
  721.  
  722.  
  723. >>> SKIP - New options
  724.  
  725. SYNTAX: SKIP [expN] [ALIAS <selection>]
  726.  
  727. NOTES:  Allows the record pointer of an area not currently
  728.         selected to be moved.
  729.  
  730. Example:
  731.  
  732.          SKIP ALIAS 4
  733.  
  734.        * Same as
  735.  
  736.          SELECT 4
  737.          SKIP
  738.          SELECT 1
  739.  
  740.  
  741.          SKIP 3 ALIAS ACCOUNTS
  742.  
  743.        * Same as
  744.  
  745.          SELECT ACCOUNTS
  746.          SKIP 3
  747.          SELECT 1
  748.  
  749.  
  750.  
  751. >>> TEXT [TO PRINT/TO FILE <filename>] ... ENDTEXT
  752.  
  753. NOTES:  TO PRINT and TO FILE have been added to the syntax.
  754.  
  755.  
  756.  
  757. >>> TYPE <file> [TO PRINT] [TO FILE <filename>]
  758.  
  759. NOTES: DOS redirection with the ">" is no longer supported as
  760.        documented on page 4 - 42.  TO PRINT and TO FILE are
  761.        new options.
  762.  
  763.  
  764.  
  765.                         * FUNCTIONS *
  766.  
  767. >>> INKEY() - New options
  768.  
  769. NOTES: Two new options have been added to the INKEY() function.
  770.  
  771.        INKEY(0)              && waits for a key to be pressed
  772.        INKEY(<expN>)         && <n> > 0.00 waits <n> seconds for key
  773.  
  774.        When zero is used as the parameter, the program halts
  775.        until a key is pressed.  The numeric value returned is
  776.        the ASCII value of the key pressed.
  777.        
  778.        When a number greater than zero is the parameter,  the
  779.        INKEY() delays program execution for that number of
  780.        seconds or until a key is pressed.  Zero is returned if a
  781.        key was not pressed and LASTKEY() is not changed.  This
  782.        time value uses the operating system clock and is
  783.        independent of microprocessor speed.
  784.  
  785.        The value returned from INKEY() is always the key value.
  786.        setting a function key will not change its key value.
  787.  
  788. Example:
  789.            ? "Copyright 1986, EMULSIFIED SOFTWARE"
  790.            ? INKEY(5)            && pause 5 seconds and 
  791.            CLEAR                 && clear the screen.
  792.  
  793.  
  794.  
  795. >>> SUBSTR()
  796.  
  797.      The SUBSTR() function always returns a null string if the
  798.      start and length parameters point beyond the end of the
  799.      string.
  800.  
  801.  
  802. *************** dBASE III PLUS COMPATABILITY *******************
  803.  
  804.  
  805. The compiler now recognizes IIF() and RECCOUNT().  These are the
  806. same as the IF() and LASTREC() functions.
  807.  
  808. The enclosed file, Extend.doc, details the use of the Extended
  809. Library that gives Clipper compatability with most of the
  810. functions in the Developer's Release of dBASE III and dBASE III
  811. PLUS.  It also demonstrates how to custom tailor Clipper to your
  812. programming needs.
  813.  the numeri