home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a075 / 1.img / TOOLKIT1.EXE / README.SJS < prev    next >
Encoding:
Text File  |  1989-11-27  |  39.8 KB  |  898 lines

  1. IMPORTANT NOTICE * IMPORTANT NOTICE * IMPORTANT NOTICE * IMPORTANT NOTICE * 
  2.  
  3. This file contains Notes on using the files on the distribution
  4. disks and also has Corrections and Additions to the manual for
  5.             Steve Straley's ToolkiT(r) - Release 2.10
  6.  
  7.               THIS RELEASE CONTAINS 3 DISKS.
  8.  
  9. Technical Support and Service is now available at the following numbers:
  10.  
  11.         1-212-599-3225 : East Coast Phone Support
  12.         1-818-342-1616 : West Coast Phone Support
  13.         1-212-599-3226 : Fax Support
  14.         1-201-943-5419 : 2400 Baud Support BBS
  15.  
  16. After the listing of the files contained on the distribution disks and 
  17. installation instructions, this file contains a section covering additions
  18. and modifications to the manual. IT IS VITALLY IMPORTANT THAT YOU READ THIS.
  19.  
  20. Please print out the contents of README.SJS (the same as this file)
  21. which is in Toolkit1.exe on Disk 1 and keep it with your documentation. 
  22. If you don't wish to extract all of the source code (about 670 KB) you can 
  23. extract README.SJS with the following syntax assuming you are logged 
  24. onto drive C:\ and Disk 1 is in drive A:
  25.  
  26.             C:\>A:toolkit1 readme.sjs -o
  27.  
  28. INSTALLATION INSTRUCTIONS:
  29.  
  30. The full contents of any of the .exe files may be extracted 
  31. simply by logging onto the drive and directory which you wish to 
  32. contain these files and then, assuming that Disk 1 is in 
  33. drive A:, using the following syntax:
  34.  
  35.        C:\>A:toolkit1 -o
  36.  
  37. If you wish to extract only specific files, then use this syntax:
  38.  
  39.        C:\>A:toolkit1 <filename> <filename> ... <filename> -o
  40.  
  41. Wildcards may be used:
  42.  
  43.        C:\>A:toolkit1  sst9??.* -o
  44.  
  45. CONTENTS OF TOOLKIT1.EXE CONTAINED ON DISK 1
  46.  
  47. ADDLIB        Script file for Microsoft LIB utility which will remake
  48.               Toolkit.lib    
  49. README.SJS    The contents of this file in straight ASCII.
  50. SST*.PRG      Source code files for the ToolkiT functions.
  51.  
  52. CONTENTS OF TOOLKIT2.EXE CONTAINED ON DISK 2
  53.  
  54. TOOLKIT.LIB   The Toolkit Library
  55. TOOLKIT.OBJ   Linked in with Toolkit.Lib to call ALL of the 
  56.               pop-up utilities inside TOOLKIT.LIB.
  57. TCLIP.BAT     This batch file is identical to TCLP.BAT except 
  58.               the TOOLKIT.OBJ is added to link list as well.
  59.               The contents of the default setting to ToolkiT.obj
  60.               is to call ALL of the pop-up utilities inside
  61.               TOOLKIT.LIB.   It will be assumed that
  62.               CLIPPER.LIB and EXTEND.LIB are in a subdirectory
  63.               named CLIPPER, that a DOS path is set to the
  64.               CLIPPER directory, and that there is a TOOLKIT
  65.               subdirectory (off the root) that contains
  66.               ToolkiT.Lib and ToolkiT.obj.                       
  67. TCLP.BAT      This batch file will compile the passed file
  68.               and the specified Clipper switch.  This batch
  69.               file calls TOOLKIT.LIB.  It will be assumed that
  70.               CLIPPER.LIB and EXTEND.LIB are in a subdirectory
  71.               named CLIPPER, that a DOS path is set to the
  72.               CLIPPER directory, and that there is a TOOLKIT
  73.               subdirectory (off the root) that contains
  74.               ToolkiT.Lib.
  75. TOOLKIT       This file, with no extention, is the MAKE file
  76.               for MICROSOFT's MAKE utility that will "make"
  77.               the TOOLKIT.LIB.  It is will NOT work with
  78.               Nantucket's MAKE utility and it requires
  79.               Microsoft's LIB utility program as well.       
  80. TOOLKIT.PRG   This contains the three functions used for the
  81.               pop-up routines.   Please refer to the sections
  82.               of the manual regarding this topic or SETKEYON(),
  83.               SETKETSET(), or SETKEYOFF()                       
  84.  
  85. ALLDEMO.PRG     This should be compiled with TCLP.BAT file.  This
  86.                 will generate the general demonstration program
  87.                 for the ToolkiT. It requires CLIENTS.DBF and PEOPLE.DBF
  88.  
  89. POPDEMO.PRG     This should be compiled with TCLIP.BAT. This program
  90.                 demonstrates all the pop-up utilities and Data
  91.                 Driven Programming text file functions.
  92.  
  93. LINE.PRG        This program converts .PRG's to text files adding
  94.                 line numbers to the front of each line.
  95.  
  96. CONF0.PRG       This makes up the data files for all of the
  97.                 program files with a file prefix of CONF*
  98.  
  99. DEMO1.PRG       This program demonstrates the NUMERIC, MATHEMATICAL, 
  100.                 and FINANCIAL functions within the ToolkiT.
  101.  
  102. CONTENTS OF TOOLKIT3.EXE CONTAINED ON DISK 3 OF 3 
  103.  
  104. CLIENTS.DBF     This is a dummy database to be used by the ALLDEMO program.
  105.  
  106. PEOPLE.DBF      This is a dummy database to be used by the ALLDEMO program.
  107.  
  108. CONF1.PRG       This shows the extended use of the DBEDIT() function, 
  109.                 working with the ToolkiT
  110.  
  111. CONF2.PRG       This shows how a database can be tagged to prevent
  112.                 x number of records from being added to the databases.
  113.  
  114. CONF3.PRG       This shows how variables can be stored to disk.  
  115.                 It is similiar to VARTEST.PRG
  116.  
  117. DEMO2.PRG       This program demonstrates the TIME and DATE functions.
  118.  
  119. DEMO3.PRG       This program demonstrates the ARRAY functions.
  120.  
  121. DEMO4.PRG       This program demonstrates the PROGRAMMING functions.
  122.  
  123. DEMO5.PRG       This program demonstrates the DISPLAY functions.
  124.  
  125. DEMO6.PRG       This program demonstrates the DATABASE functions.
  126.  
  127. DEMO7.PRG       This program demonstrates the LOW / FILE functions.
  128.  
  129. DEMO8.PRG       This program demonstrates the STRING functions.
  130.  
  131. DEMO9.PRG       This program demonstrates the WINDOWING functions.
  132.  
  133. DEMO10.PRG      This program demonstrates the DATA DRIVEN functions.
  134.  
  135. BASE1.TXT       Text file for Demo10.prg
  136.  
  137. COLOR.TXT       Text file for Demo10.prg
  138.  
  139. DATAHELP.TXT    Text file for Demo10.prg
  140.  
  141. MASTER.TXT      Text file for Demo10.prg
  142.  
  143. MENU1.TXT       Text file for Demo10.prg
  144.  
  145. MENU2.TXT       Text file for Demo10.prg
  146.  
  147. READ.TXT        Text file for Demo10.prg
  148.  
  149. READ1.TXT       Text file for Demo10.prg
  150.  
  151. READING.TXT     Text file for Demo10.prg
  152.  
  153. SETUP.TXT       Text file for Demo10.prg
  154.  
  155. WIN1.TXT        Text file for Demo10.prg
  156.  
  157. WINDOW.TXT      Text file for Demo10.prg
  158.  
  159. WRITING.TXT     Text file for Demo10.prg
  160.  
  161. SJSDEBUG.PRG    This file is a debugging utility that will work in place 
  162.                 of ERRORSYS.PRG.  Pressing TAB will get all of the memory
  163.                 variables as seen by Clipper; pressing SHIFT TAB will get
  164.                 an on-line note taking utility; ALT G will go to a specific
  165.                 line number within the file; ALT F will open a NEW file.
  166.  
  167. TOOLKIT.TRH     This is the compiled help file for Tom Rettig's
  168.                 Help system.  It is not to be used with any other
  169.                 help utility.  Source for this file is not available.
  170.                 To acquire a copy of Tom Rettig's Help, please
  171.                 contact Tom Rettig & Associates at 213-272-3784
  172.  
  173. TOUCH.PRG       This is a utility program that "touches" the date
  174.                 and time stamps of the specified files.  This is
  175.                 handy when attempting to re-make the TOOLKIT.LIB
  176.                 file.  It should be compiled with the TCLP.BAT file.
  177.  
  178. VARTEST.PRG     This program shows how, with the ToolkiT, variables
  179.                 can be initialized outside of the Clipper program.
  180.                 It should be compiled with TCLP.BAT  It requires
  181.                 access to the text file named SCREEN.TXT            
  182.  
  183. SCREEN.TXT      Text file for Vartest.prg. It contains the values of
  184.                 two variables.
  185.  
  186.  
  187. WORKING WITH THE DEMO PROGRAMS (from Rel. 2.0) AND OTHER .PRGs
  188.  
  189. Compiling and linking syntax
  190.  
  191. Demo1.prg       Compile = Clipper Demo1 -m -l
  192.                 Link    = Plink86 Fi Demo1 Lib Clipper Lib ToolkiT Lib Extend
  193.                        or Mslink /noe /se:1024 Demo1,,,Clipper ToolkiT Extend
  194.  
  195. Demo2.prg       Compile = Clipper Demo2 -m -l
  196.                 Link    = Plink86 Fi Demo2 Lib Clipper Lib ToolkiT Lib Extend
  197.                        or Mslink /noe /se:1024 Demo2,,,Clipper ToolkiT Extend
  198.  
  199. Demo3.prg       Compile = Clipper Demo3 -m -l
  200.                 Link    = Plink86 Fi Demo3 Lib Clipper Lib ToolkiT Lib Extend
  201.                        or Mslink /noe /se:1024 Demo9,,,Clipper ToolkiT Extend
  202.  
  203. Demo4.prg       Compile = Clipper Demo4 -m -l
  204.                 Link    = Plink86 Fi Demo4 Lib Clipper Lib ToolkiT Lib Extend
  205.                        or Mslink /noe /se:1024 Demo4,,,Clipper ToolkiT Extend
  206.  
  207. Demo5.prg       Compile = Clipper Demo5 -m -l
  208.                 Link    = Plink86 Fi Demo5 Lib Clipper Lib ToolkiT Lib Extend
  209.                        or Mslink /noe /se:1024 Demo5,,,Clipper ToolkiT Extend
  210.  
  211. Demo6.prg       Compile = Clipper Demo6 -m -l
  212.                 Link    = Plink86 Fi Demo6 Lib Clipper Lib ToolkiT Lib Extend
  213.                        or Mslink /noe /se:1024 Demo6,,,Clipper ToolkiT Extend
  214.  
  215. Demo7.prg       Compile = Clipper Demo7 -m -l
  216.                 Link    = Plink86 Fi Demo7 Lib Clipper Lib ToolkiT Lib Extend
  217.                        or Mslink /noe /se:1024 Demo7,,,Clipper ToolkiT Extend
  218.  
  219. Demo8.prg       Compile = Clipper Demo8 -m -l
  220.                 Link    = Plink86 Fi Demo8 Lib Clipper Lib ToolkiT Lib Extend
  221.                        or Mslink /noe /se:1024 Demo8,,,Clipper ToolkiT Extend
  222.  
  223. Demo9.prg       Compile = Clipper Demo9 -m -l
  224.                 Link    = Plink86 Fi Demo9 Lib Clipper Lib ToolkiT Lib Extend
  225.                        or Mslink /noe /se:1024 Demo9,,,Clipper ToolkiT Extend
  226.  
  227. Demo10.prg      Compile = Clipper Demo10 -m -l
  228.                 Link    = Plink86 Fi Demo10 Lib Clipper Lib ToolkiT Lib Extend
  229.                        or Mslink /noe /se:1024 Demo10,,,Clipper ToolkiT Extend
  230.  
  231.                 In order for this program to work properly, the following
  232.                 files must be present:
  233.  
  234.                     DATAHELP.TXT    READ.TXT
  235.                     MASTER.TXT      BASE1.TXT
  236.                     COLOR.TXT       MENU1.TXT
  237.                     READING.TXT     MENU2.TXT
  238.                     WRITING.TXT     READ1.TXT
  239.                     WINDOW.TXT      WIN1.TXT
  240.  
  241. The following files were shown at the 1989 Clipper Developers Conference
  242. and have been included with this package.  Please compile, link, and
  243. execute CONF0.PRG.  This will make up the databases for the demos with
  244. a file prefix of CONF*. 
  245.  
  246. Conf0.prg       Compile = Clipper Conf0 -m -l
  247.                 Link    = Plink86 Fi Conf0 Lib Clipper Lib ToolkiT Lib Extend
  248.                        or Mslink /noe /se:1024 Conf0,,,Clipper ToolkiT Extend
  249.  
  250. Conf1.prg       Compile = Clipper Conf1 -m -l
  251.                 Link    = Plink86 Fi Conf1 Lib Clipper Lib ToolkiT Lib Extend
  252.                        or Mslink /noe /se:1024 Conf1,,,Clipper ToolkiT Extend
  253.  
  254. Conf2.prg       Compile = Clipper Conf2 -m -l
  255.                 Link    = Plink86 Fi Conf2 Lib Clipper Lib ToolkiT Lib Extend
  256.                        or Mslink /noe /se:1024 Conf2,,,Clipper ToolkiT Extend
  257.  
  258. Conf3.prg       Compile = Clipper Conf3 -m -l
  259.                 Link    = Plink86 Fi Conf3 Lib Clipper Lib ToolkiT Lib Extend
  260.                        or Mslink /noe /se:1024 Conf3,,,Clipper ToolkiT Extend
  261.  
  262.  
  263.  
  264.  
  265. CHANGES, ADDITIONS AND MODIFICATIONS SINCE THE MANUAL WAS PRINTED:
  266.  
  267.  
  268. WARNING: If, when using the Report Writer and/or Word Processor, you
  269.         choose to build a condition (e.g. "RELATE('B/Z', 'pmart')"))
  270.         which calls UDF's inside the ToolkiT, you must use the EXTERNAL
  271.         command in your .PRG. For example, to make the filter in the above
  272.         RELATE clause work, you must have the following code in the .PRG.
  273.  
  274.                 EXTERNAL Relate
  275.  
  276. NOTE:   CONF0.PRG has been modified. Previously the system had to be
  277.         set to open 30 files or an error condition was reported and the
  278.         program aborted. Now, it tests the F parameter in SET CLIPPER and
  279.         won't run if it is not correct.
  280.  
  281. NOTE:   Make sure that you DELETE any prior version of SCREEN.SYS. 
  282.         There are additonal public variables and any TOOLKIT operation
  283.         based on prior releases of SCREEN.SYS may not work properly.
  284.  
  285. NOTE:   It is imperative that proper programming strucuture is maintained
  286.         while working with functions from the ToolkiT.  For example, your
  287.         screen's windowing system will be totally fouled up if you follow
  288.         the following format:
  289.  
  290.             Pushscreen()
  291.             Publics()
  292.             CLEAR
  293.             IF !Chkpass(16,4)
  294.                Badpass(16,4,"Need original password in order",;
  295.                             "to alter password. Access denied!")
  296.             ELSE
  297.                Password()
  298.                Savesys()
  299.             ENDIF
  300.             Popscreen()
  301.  
  302.         Since the call to the Publics() function re-sets all of the
  303.         public variables, even those used by the Pushscreen() and Popscreen()
  304.         functions, the windowing system at this point is off.  Make sure
  305.         that none of the variables beginning with the letters SCR* are
  306.         reset (i.e., do not make a call to the Publics(), Startup(), or
  307.         Bringitup().
  308.  
  309. NOTE:   The password to get into the modification routine of Demo10
  310.         is the word 'Steve' (quotation marks excluded).
  311.  
  312.  
  313. NOTE:   All references in the manual to REST_ENV() should be changed
  314.         to RESET_ENV().
  315.  
  316.         Any reference to the Hideget() function in Tom Rettig's Help
  317.         file for the ToolkiT should be ignored.
  318.  
  319. NOTE:   The following functions now work with Clipper's extended ()
  320.         operations:
  321.  
  322.         Array_size()
  323.         Blankarray()
  324.         Storarray()
  325.         Replarray()
  326.         Sarray()
  327.         Rarray()
  328.         Mpop()
  329.         Got()
  330.  
  331.         This is an undocumented feature: added at the last second.   
  332.         Basically, it allows the extended features of Clipper to work. 
  333.         Therefore, what used to be the following:
  334.  
  335.            SELECT B
  336.            USE People
  337.            SELECT A
  338.            USE Clients
  339.            DECLARE thearray[Arraysize("B")]
  340.            Blankarray(thearray, "B")
  341.  
  342.         now can be expressed like this:
  343.  
  344.            SELECT B
  345.            USE People
  346.            SELECT A
  347.            USE Clients
  348.            DECLARE thearray[B->(Arraysize())]
  349.            Op(B->(Blankarray(thearray)))
  350.         
  351.         If additional parameters are needed for any of the functions
  352.         (parameters pass the name of the database/work area alias),
  353.         then pass a NULL byte to the function instead of the work 
  354.         area number, alias letter, or database name.  This will tell 
  355.         the function to work in the current database, which, in the 
  356.         case of the extended () feature, will be the designated work 
  357.         area.
  358.  
  359. NOTE:   The file called TOOLKIT is to be used by the Microsoft MAKE
  360.         utility.  It will check the date and time stamp of
  361.         all of the .PRG files which make up the TOOLKIT.LIB.  To activate
  362.         this, use the following syntax:
  363.  
  364.         MAKE Toolkit
  365.  
  366.         This also calls Microsoft's LIB utility and calls the
  367.         script file called ADDLIB.  This file will create the 
  368.         TOOLKIT.LIB which may be copied to your CLIPPER directory.
  369.  
  370.         TOOLKIT is to be used with Microsoft's MAKE utility, and not
  371.         Nantucket's make utility.  We do not support Nantucket's MAKE
  372.         utility and urge people to obtain a copy of Microsoft's MAKE and
  373.         LIB utilities.
  374.  
  375.  
  376. 1.      The Adjustit() function (p. 85) has a default value  of a logical
  377.         false (.F.). There is an added parameter to the Adjustit() function
  378.         with a default value of a logical true (.T.).  If true,
  379.         then the function will check to see if the record is deleted and
  380.         will display a message if it is.  Otherwise, a blank message will
  381.         be displayed.
  382.  
  383. 2.      The Altercolor() function (p. 89) now works as documented.  In
  384.         Release 2.0, the Altercolor() function did not adjust the
  385.         various color options: standard, enhanced, foreground, and
  386.         background.
  387.  
  388. 3.      Asizetxt() (p.108) has an error in the example
  389.         section.  There is a reference to "Afiletxt()"; the example
  390.         should look like this:
  391.         
  392.                 howmany = ASIZETXT(<filename>)
  393.  
  394.         * where <filename> is the name of the file so specified in
  395.         * the text.
  396.  
  397. 4.      Make sure that if the ATSAYGET()(p. 111) or WSAYGET() (p.509)
  398.         functions are used in conjunction with a VALID clause expression, 
  399.         that the expression listed in the clause can be resolved.  
  400.         For example, the follow VALID expression always returns a 
  401.         logical true (.T.):
  402.  
  403.         Wsayget(.T., 2,5,"Enter Sex of Client => ", "sex", "!", ;
  404.                  "Inlist(@sex, [Male/Female/Unkown/Yes/No])" )
  405.  
  406.         The trouble is with the INLIST() function.  If this function is
  407.         not brought into the system during the linking phase, both the
  408.         WSAYGET() and ATSAYGET() functions will force the VALID clause
  409.         to a logical true and the function will not work properly.
  410.  
  411.         The WSAYGET() and ATSAYGET() functions have also been enhanced
  412.         to accept a variable for a GET statement which does not exist.
  413.         If there is a corresponding SAY expression, then that will be
  414.         processed.  If there is none, then the function will simply
  415.         ignore the call to it.
  416.  
  417. 5.      The Backup() function (p. 114) now works as documented with an added
  418.         feature.  The "files" parameter (<expC1>) will now accept wildcards.
  419.  
  420. 6.      SHOW_CLO() (p. 118) is out of order. It should appear after page 426.
  421.  
  422. 7.      Dep_rate() (page 133) is out of order.  It should appear
  423.         after page 172.
  424.  
  425. 8.      The Copyfile() function (p. 156) now strips leading
  426.         and trailing blank spaces from the passed parameters.  Before, the
  427.         value of the parameters had to have all blank spaces removed.
  428.  
  429. 9.      The Delfile() function (p. 168) now strips leading
  430.         and trailing blank spaces from the passed parameters.  Before, the
  431.         value of the parameters had to have all blank spaces removed.
  432.  
  433. 10.     The Dispstru() function (p. 175) now allows the ability to EDIT
  434.         a field; namely, the field that is highlighted if the letters
  435.         "E" or "e" are pressed.  No networking hooks are provided;
  436.         however, they may be added to the individual function.
  437.  
  438. 11.     Disp_mem() (p. 176) now takes a template parameter (<expC>) so that
  439.         the passed parameter will allow only those variables which match the
  440.         template/parameter format. For example, DISP_MEM("scr") means any
  441.         variable with the letters "scr" contained in it will appear in the
  442.         window.
  443.  
  444. 12.     The Dulling() function (p. 182) now takes a character or numeric
  445.         as a second parameter.  This is the attribute to dull with.  If no
  446.         parameter is passed to the function, CHR(8) will be used.  If a
  447.         character data type is passed as the second parameter, then the 
  448.         ASCII value of the first character will be used.  Otherwise, the
  449.         numeric parameter is used as the ASCII attribute byte.
  450.  
  451. 13.     The Fill_out() function (p. 204) now can take an array or character
  452.         string as the first parameter; it fills out all of the character
  453.         elements in the array to the specified size.
  454.  
  455. 14.     The Fill_zero() function (p. 205) should note that 
  456.         if the numeric expression that is to be converted to a string
  457.         with leading (or trailing) zeros is a negative number, then the
  458.         number of "0" characters that will be appended to the expression
  459.         will be one less than expected.   This is to allow for the "-"
  460.         character.   To avoid this, pass to it the ABS() of the number 
  461.         and add the "-" character sign to the return value from either
  462.         function.
  463. 15.     The Ftypecnt() function (p. 215) now takes a 4th parameter, <expL>.
  464.         If set to a logical true (.T.), it will take the actual field position
  465.         of the database and build the string (<expC3>) accordingly.
  466.         Otherwise, the actual byte position will be put into the
  467.         string.  The default value will be a logical false (.F.).
  468.  
  469. 16.     The FV() function (p. 216) has been corrected and now returns the
  470.         proper future value based on (payment, rate per period, # of periods.)
  471.         The period for the annuity could be months, quarters, years, etc.
  472.  
  473. 17.     The header for the Gen_code() function (p. 220) has been changed to
  474.         reflect the appropriate date, company name, and proper
  475.         copyright notice.
  476.  
  477. 18.     The Inc_date() function (p. 235) Description section should have
  478.         the incrementing key as the letter "I" or the "+" key, not the letter
  479.         "N".
  480.  
  481. 19.     Functions SST237 and SST239 both referred to a function named
  482.         ISADBF() while the manual (p. 250) and SST244 referred to ISA_DBF().
  483.         We have altered SST237 and SST239 accordingly.
  484.  
  485. 20.     Make_dbf() function (p. 277): line 392 of the source code 
  486.         (SST264.PRG) should not have the additional 2 logical parameters 
  487.         associated with it.  This has been corrected.
  488.  
  489. 21.     The Make_empty() function (p. 279) now accepts an array and may be
  490.         used to blank out an array with values from a database.  For example,
  491.         
  492.         CLEAR SCREEN
  493.         USE Client
  494.         DECLARE names[fcount()]
  495.         AFILL(names, "")
  496.         Op(Client->(Make_empty(names)))
  497.         FOR x = 1 TO FCOUNT()
  498.            ? names[x]
  499.         NEXT
  500.  
  501. 22.     On page 284 of the manual, the less than sign ( < ) in the example
  502.         text is missing. The example should read:
  503.                 IF MEMRY() < 100
  504.  
  505. 23.     The Modi_auto() function (p. 290) did not write the AUTOEXEC.BAT file
  506.         to the proper drive due to a "\" character being dropped from the 
  507.         file specs.  This has been fixed.
  508.  
  509. 24.     The Modi_con() (p. 291) function now works if NEITHER the files nor
  510.         buffers are specified in the file.  It also has been modified to
  511.         accept numeric data items as the first two parameters.
  512.  
  513. 25.     O_array() (p. 314) should be spelled O_arrays().
  514.  
  515. 26.     The O_arrays() function (p. 314) now recognizes as comments lines
  516.         in its associated text files beginning with an "*" or "&&" or the 
  517.         word NOTE as the first characters.  In the prior release, a comment
  518.         would yield a macro expansion error.  In addition, you 
  519.         can now initialize an array from a text file and
  520.         call Clipper functions (which have already been called in the EXE or 
  521.         declared External) from a text file.
  522.  
  523. 27.     The O_asize() function (p. 316) has been modified to allow
  524.         specification of the number of bytes to read in at one time.  This is
  525.         passed as the third parameter. The default value is now 1024 instead
  526.         of 1 as it was in the previous release.
  527.  
  528. 28.     The O_file() function (P. 317) has been fixed to now take decimal
  529.         values from the text file.
  530.  
  531. 29.     The O_VARS() function documentation (p. 324) is unclear as to the
  532.         proper format for all character strings.  For example, in the
  533.         documentation, the variable SCRPROG is set to C:.  The proper
  534.         syntax for this should be the following (similiar to the
  535.         SCRCOLOR variable):
  536.  
  537.                 scrprog = "C:"
  538.  
  539.         The O_vars() function now recognizes as comments those lines
  540.         in its associated text files beginning with an "*" or "&&" or the 
  541.         word NOTE as the first characters.  In the prior release, a comment
  542.         would yield a macro expansion error.  In addition, you 
  543.         can now initialize an array from a text file and
  544.         call Clipper functions (which have already been called in the EXE or 
  545.         declared External) from a text file.
  546.         The O_vars() function now allows the creation of arrays on
  547.         the fly.  The text file will have the following in it:
  548.  
  549.                 allscreens[20]
  550.  
  551.         The O_vars function will make a PUBLIC array named ALLSCREENS
  552.         and declare it to 20 elements.
  553.  
  554.         The O_vars function will now execute functions which are called 
  555.         in the text file. For example:
  556.                 allscreens[20]
  557.                 AFILL(allscreens, "")
  558.         declares the array to 20, and it is initialized to beginning values.
  559.  
  560.         Make sure that the names of the functions in the text files
  561.         are included in the .EXE file, either via prior calls to the
  562.         function or via the EXTERNAL command.
  563.  
  564.         The O_vars() function has been modified to allow
  565.         specification of the number of bytes to read in at one time.  This is
  566.         passed as the second parameter. The default value is now 1024 instead
  567.         of 1 (as it was in the previous release.
  568.  
  569. 30.     Packdbt() function (p. 328) Dependencies should refer to the 
  570.         ISA_DBF() function, not the ISADBF() function.
  571.  
  572. 31.     The Palate() function (p. 330) now takes 4 additional parameters,
  573.         <expN3> to <expN6>: the top, left, bottom, right corners of the screen
  574.         area.  The default positions are 0,0,24,79.  To use these, make the
  575.         call to the Palate() function in the following manner:
  576.  
  577.                 Palate(2, "", 2,2,2,20)
  578.  
  579.  
  580. 32.     The Pan() function (p. 331) works within the current window area as
  581.         set by either the Setwindow(), Windowpush(), Pushscreen(), or Wpush()
  582.         functions.   It should be noted that text which is left justified
  583.         on the screen will have one character per row remaining as all
  584.         other characters will pan properly.  If this is to include window
  585.         borders, thus avoiding this problem, changes will have to be made
  586.         to the source code.
  587.         
  588. 33.     The Parsing() function (p. 338) has been modified to take multiple
  589.         characters as a delimiter or separator string.  This is now used by
  590.         the text file processing functions with a prefix of O_.
  591.         On page 338 of the manual, the reference to the Getnum() function
  592.         should be changed to the Parsing() function. The example should read:
  593.  
  594.                  ? PARSING(@string)
  595.  
  596. 34.     The Password() function (p. 339) example program 
  597.         shows a reference to the Publics() function.  This is 
  598.         acceptable if working from C: drive.  To get the example to
  599.         work properly on any other drive, a call to the Startup(.T.)
  600.         function is needed as replacement of the Publics() call.
  601.  
  602. 35.     The Percent() function (p. 343) Example should read:
  603.  
  604.                 USE Chart
  605.                 @ 7,0
  606.                 @ 7,0 SAY "Percentage Index: "
  607.                 GO TOP
  608.                 INDEX ON STR(RECNO()) + Percentage(7,10) TO Per
  609.  
  610.                 ********************
  611.  
  612.                 FUNCTION Percentage
  613.  
  614.                    PARAMETERS row, col
  615.  
  616.                    @ row, col SAY Percent(RECNO(), LASTREC())
  617.                    RETURN("")
  618.  
  619. 36.     The Pop_calc() function (p. 346) now allows the use of the "=" key to
  620.         resolve the equation being worked on by the calculator.
  621.  
  622. 37.     The Pop_phon() function (p. 349) now notifies the user if a file is
  623.         larger than 12K.  In the past, an out of memory error was reported.
  624.  
  625. 38.     The Randomize() function (p. 364) now works as documented.
  626.  
  627. 39.     The Renfile() function (p. 380) now strips leading
  628.         and trailing blank spaces from the passed parameters.  Before, the
  629.         value of the parameters had to have all blank spaces removed.
  630.  
  631. 40.     The Report Writer (REPORTER(), p. 383) now allows saved .SST files to
  632.         be brought back into the system in their proper order.
  633.  
  634.         If the CODE generation option in the Report Writer is not
  635.         wanted, a variable named NOCODE needs to be initialized to ANY
  636.         value prior to the call to the Report Writer.  This will remove
  637.         the option from the menu screen.
  638.  
  639.         If the tag line 'End of Report' is not wanted, a variable
  640.         named NOTAG needs to be initialized to ANY value prior to the
  641.         call to the Report Writer.
  642.  
  643. 41.     The Restoring function (p. 389) now works as documented with an added
  644.         feature.  The third parameter (<expC>) states what drive to restore
  645.         from.  An added fourth parameter (<expC2>) is the drive
  646.         and/or path to restore to.  Please observe that the order of
  647.         the parameters are different from the order in the Backup()
  648.         function.  Additionally, the "to drive" expression MUST be a
  649.         valid path; otherwise, the function will not prompt the user and
  650.         will simply return a logical false (.F.) expression.
  651.  
  652. 42.     The RESTSYS() function (p. 390) description section
  653.         of the document should read as follows in the last line of the 
  654.         paragraph:
  655.         Once the file is restored and if the operation is successful,
  656.         the return value from the function will be a logical true
  657.         (.T.); otherwise, a logical false (.F.) will be returned.
  658.  
  659. 43.     The STATS() function (p.440) now allows the Up and Down arrow keys
  660.         to be used to SKIP (+/-) a record in the current and selected work
  661.         area.
  662.  
  663. 44.     The SELECTING() function (p. 413) now allows a NULL byte
  664.         as the name of the database.  This will tell the function to
  665.         close the database in the appointed work area.  In other wrods,
  666.         if a database is opened in the following manner:
  667.  
  668.                    Op(A->(Selecting("Notap", "Notap")))
  669.  
  670.         the proper procedure to close that file would be the following:
  671.  
  672.                    Op(A->(Selecting("")))
  673.                    
  674. 45.     The SJSREAD() function (p. 434) has an added and undocumented
  675.         parameter. If used and if set to a logical true, the function will
  676.         return the status of the UPDATE() function.  If not passed, then the
  677.         function will return a logical false (.F.) if the last key pressed
  678.         was the ESC key; otherwise a logical true (.T.) will be returned.
  679.         In the Example section,  the letter "m" is missing from in front of
  680.         every variable and the fourth line should read:
  681.                  @13, 10 SAY ...  
  682.         The function, however, works properly.
  683.  
  684. 46.     The Strz() function (p. 448) Description should note that 
  685.         if the numeric expression that is to be converted to a string
  686.         with leading (or trailing) zeros is a negative number, then the
  687.         number of "0" characters that will be appended to the expression
  688.         will be one less than expected.   This is to allow for the "-"
  689.         character.   To avoid this, pass to it the ABS() of the number 
  690.         and add the "-" character sign to the return value from either
  691.         function.
  692.  
  693. 47.     Te Updtable() function (p. 464) is also dependant on Whatcolor().
  694.         The Updtable() function now allows 2 lines of GET information if
  695.         the specified field in the GET list is a memo field.  In the 2.0
  696.         release, only 1 line was allowed.
  697.         Also, Updtable() now has two rows opened if the field that is to be
  698.         modified is a MEMO field.  In the previous release, this was one row.
  699.  
  700. 48.     The VIEWING() function, page 471, now accepts line numbers
  701.         as well as new file names.  There is a 7th parameter in the
  702.         Viewing() function which is the beginning line number.  This
  703.         is used by the source-code level debugger.  Additionally,
  704.         while in the Viewing() function, the user can press ALT-G to
  705.         go to a specific line number; ALT-F will allow the user to
  706.         type in a new file name.  If the file does not exists, a
  707.         message indicating this will appear on the screen.
  708.  
  709. 49.     The Wcenter() function (p. 473) now takes a character expression in
  710.         place of the numeric value.  Normally, the Wcenter() function will
  711.         return the actual screen coordinate for the center position for
  712.         the specified window area.  The default value is the current
  713.         window.  Now, if a character string is passed to the Wcenter()
  714.         function, the function will assume you want to work with the
  715.         current screen, and it will return a numeric value that would
  716.         center the character expression within the current window.  For
  717.         example, consider the following:
  718.  
  719.         Wsayget(1, Wcenter("changing system data"), "Changing System Date" )
  720.         Wsayget(2, Wcenter(prompt), prompt )
  721.  
  722. 50.     The Whatcolor() function (p. 479) will now take three additional
  723.         words:
  724.                 BOLD
  725.                 BLINK
  726.                 DULL
  727.  
  728. 51.     The WINDOWPUSH() function (p. 487) now can take a single logical 
  729.         parameter.  If this is passed to the function, this will tell
  730.         the function to act like PUSHSCREEN() with all of the parameters
  731.         for a full screen save (without a shadow line).  The WINDOWPOP()
  732.         function has been adjusted to acknowledge this addition as well
  733.         as the CLEAR_AREA() and WINDOWCLS() functions.
  734.         Also, the Wpush() and Windowpush() now will accept NO
  735.         parameters; this will clear the entire screen, set the
  736.         window parameters to the default values and will NOT draw a
  737.         frame, and NOT draw a shadow line.
  738.         Windowpush() will now take the character numbers as well as
  739.         the worded amount.
  740.  
  741. 52.     The Wpush() function (p. 500) now will accept NO
  742.         parameters; this will clear the entire screen, set the
  743.         window parameters to the default values and will NOT draw a
  744.         frame, and NOT draw a shadow line.
  745.  
  746.  
  747. 53.     The Inhelp() function (P. 238) has been modified to make a call to a
  748.         new function, Putframe() (SST417.PRG).  Additionally, the Onhelp()
  749.         function (SST916.PRG) has been added which is identical to INHELP()
  750.         for display purposes only but it uses less  overhead.
  751.  
  752.         Onhelp()                A smaller version of Inhelp() that only 
  753.                                 displays.
  754.  
  755.         Putframe()              Returns a string which may be parsed to 
  756.                                 yield the four coordinates of a boxed area.
  757.  
  758. 54.     There is an added Function called RANGE().  Here is the 
  759.         description:
  760.  
  761.         Syntax: Range(<expN1>, <expN2>, <expN3> [, <expN4> 
  762.                       [, <expN5>]])
  763.  
  764.         Parameters: <value>, <lowest amount>, <highest amount>
  765.                     [, <row number for message> [, <column number
  766.                     for message>]]
  767.  
  768.         Returns: <logical expression>
  769.  
  770.         Description: This function is used in conjunction with the
  771.                      VALID clause but is to replace the functionality
  772.                      of the RANGE clause.  If the value of <expN1> is
  773.                      not within the range of <expN2> and <expN3>, a
  774.                      message saying this will appear at row, column
  775.                      coordinates of <expN4>, <expN5>.   The default
  776.                      values for <expN4>, <expN5> will be 24,00.   If
  777.                      any of the parameters are not of the proper data
  778.                      type, a logical false (.F.) will be returned; if
  779.                      the proper minimum number of parameters are not
  780.                      passed to the function, again, a logical false (.F.)
  781.                      will be returned.  If <expN1> is within the range
  782.                      of <expN2> and <expN3>, a logical true (.T.) will
  783.                      be returned; otherwise, a logical false (.F.) will
  784.                      be returned.
  785.         
  786.  
  787. 55.     There is a new function called ALLUNDEF()
  788.  
  789.         Syntax: Allundef(<expC>)
  790.  
  791.         Parameters: <array name>
  792.  
  793.         Returns: <logical expression>
  794.  
  795.         Description: This function returns a logical true (.T.) if
  796.                      all of the element positions within the array
  797.                      <expC> are NOT yet set to a value and are
  798.                      undefined.  The function will also return a
  799.                      logical true (.T.) if the parameter passed to
  800.                      the function is NOT of an array type or if no
  801.                      parameter is passed.
  802.         
  803. 56.     There is a new function called ANYUNDEF()
  804.  
  805.         Syntax: Anyundef(<expC>)
  806.  
  807.         Parameters: <array name>
  808.  
  809.         Returns: <logical expression>
  810.  
  811.         Description: This function returns a logical true (.T.) if any
  812.                      of the element positions within the array <expC>
  813.                      are undefined.  The function will also return a
  814.                      logical true (.T.) if the parameter passed to the
  815.                      function is not of an array type or if no parameter
  816.                      is passed.  If all of the array items in <expC> are
  817.                      defined and set to any value, the function will
  818.                      return a logical false (.F.)
  819.  
  820. 57.     There is an additional PUBLIC scr* variable named:
  821.  
  822.                 SCRPNTNOR
  823.  
  824.         It has a default value of "CHR(18)" and is the printer code
  825.         for the Epson printer that will reset it back to normal
  826.         print mode from condensed mode.
  827.  
  828. 58.     There is a new function called OFFWINDOW()
  829.  
  830.         Syntax: Offwindow()
  831.  
  832.         Parameters: None
  833.  
  834.         Returns: <logical expression>
  835.  
  836.         Description: This function returns a logical true (.T.) if it 
  837.                      was able to remove the window area created by   
  838.                      the Setwindow() function.  This function should
  839.                      only be used with that function and NOT the Wpop()
  840.                      NOR the Windowpop().  If the function was unable to
  841.                      to remove the window, the function will return a   
  842.                      logical false (.F.).
  843.  
  844. 59.     The O_vars() function now allows the assignment of a variable
  845.         from a function.  For example, consider this line from a text
  846.         file that will be processed by the O_vars() function:
  847.  
  848.                 date = Printdate(DATE())
  849.  
  850.         The variable DATE will be assigned to the value from the
  851.         Printdate() function.  This function must be avaialble to the
  852.         program before the O_vars() function is called; therefore, an
  853.         EXTERNAL command may be required.
  854.  
  855. 60.     We have changed the macro template character in the word
  856.         processor.  Originally, CHR(127) started and terminated a
  857.         mail-merge field.  Now, CHR(174) starts the macro and CHR(175)
  858.         terminates the macro.  You must alter any saved MERGE files to
  859.         accomodate this change.
  860.  
  861. 61.     We have enhanced the Report Writer to accept a pre-existing filter
  862.         condition.  In order to set this up, consider the following code
  863.         fragment:
  864.  
  865.         SELECT D   && Journals
  866.  
  867.         IF mpost = "B"
  868.            SET FILTER TO D->ref_num >= mref1 .AND. D->ref_num <=mref2 .AND. ;
  869.                          D->entry_date >= mdate1 .AND. D->entry_date <=mdate2
  870.  
  871.         ELSEIF mpost = "P"
  872.            SET FILTER TO D->ref_num >= mref1 .AND. D->ref_num <=mref2 .AND. ;
  873.                          D->entry_date >= mdate1 .AND. D->entry_date <=mdate2 .AND. D->posted
  874.  
  875.         ELSE              
  876.            SET FILTER TO D->ref_num >= mref1 .AND. D->ref_num <=mref2 .AND. ;
  877.                          D->entry_date >= mdate1 .AND. D->entry_date <=mdate2 .AND. !D->posted
  878.  
  879.         ENDIF
  880.  
  881.         addfilter = "D->(" + DBFILTER() + ")"
  882.  
  883.         As long as the character string ADDFILTER is set to an alias pointer
  884.         followed by the filter expression, terminated with the ")" charac-
  885.         ter, then the filter for that area will be SET.  In this example,
  886.         based on user input PRIOR to the call to the Report Writer, the
  887.         filter was SET on the D work area.  We then build a NEW character
  888.         expression to point to that area and BUILD the filter.  This will
  889.         ONLY work in work areas other than the master area for the Report
  890.         Writer.
  891.  
  892. 62.     The Roundit() function now accepts negative numbers, as documented:
  893.  
  894.         Before:
  895.               ? ROUNDIT(5*-1)  && Yields 4.99
  896.         Now:
  897.               ? ROUNDIT(5*-1)  && Yields 5.0000
  898.