home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1993 #2 / Image.iso / clipper / bcklib2.zip / BECKLIB2.DOC < prev    next >
Text File  |  1993-05-30  |  106KB  |  3,087 lines

  1. Welcome!  The Beckner Library & Utilities package that you now have in your
  2. hands is the same library used by BecknerVision Inc to create its many
  3. vertical market applications over the years.
  4.  
  5. THIS VERSION IS CERTIFIED TO WORK WITH CLIPPER 5.01 OR CLIPPER 5.2.
  6.  
  7. As one reviewer said, "There is something for everyone in this library".  This
  8. same reviewer said that this package suffered from an identity crisis, because
  9. it covered so many diverse areas.  We took this in a complimentary fashion.
  10.  
  11. So, why shareware?  First, we believe in the shareware concept.  The idea of
  12. trying the software before you actually buy it makes since.  The package is
  13. complete.  Nothing is missing.  The Library is not limited in any fashion.
  14. The documentation, however, is minimal in this guide.  Upon registration you
  15. will receive a complete printed manual, as well as the COMPLETE source code
  16. for the library, so you can make any changes you like.  By "complete", we mean
  17. the clipper and assembly code for all library functions, utility programs and
  18. samples.  Nothing is left out.
  19.  
  20. This is "Beckner Library & Utilities II", which goes way beyond the
  21. capabilities of BecknerLib I.  We hope you enjoy it.
  22.  
  23. THE LEGAL PAGE - THIS IS REQUIRED READING
  24.  
  25. Beckner Library and Utilities II is Copyright (c)1990-1993 BecknerVision Inc,
  26. All Rights Reserved.  The software and documentation are manufactured/printed
  27. in the United States of America.  This product is being distributed by our
  28. interpretation of the shareware concept.  You may distribute the shareware
  29. portion of the product, which specifically contains these files:
  30.  
  31. REGISTER.DOC            BECKNER.INC             BECKNER.LIB
  32. ALIAS.CH                BECKLIB2.DOC            READ.ME
  33. INDEX.PRG               AMORT.PRG               APR.PRG
  34. FINDREPL.PRG            BVASST.PRG              WP.PRG
  35. BROWSE.PRG              EXTRACT.PRG             STANDARD.PRG
  36. FIXDBF.PRG              COMPUTE.PRG             FUNCPROC.PRG
  37. EXAMPLEA.PRG            FORMS.PRG               BVUPDATE.PRG
  38. DOCS.PRG                ELIDUP.PRG              BLUEBG.PRG
  39. EXAMPLED.PRG            SS.PRG
  40.  
  41. This product may be distributed only if all files shown above are distributed
  42. as a single archive file, and with no other files present.  Specifically, you
  43. may NOT distribute function source code.
  44.  
  45. WHAT YOU GET WHEN YOU REGISTER
  46.  
  47. You receive the following upon receipt of your registration and payment:
  48.  
  49. 1.      The complete source code to all functions written in either Clipper or
  50. Assembly.  95% of this product is written in Clipper 5.01.
  51.  
  52. 2.      The printed documentation, which goes way beyond the scope of this
  53. text file.
  54.  
  55. 3.    An Expert Help guide.
  56.  
  57. 4.    Ability to purchase specialty libraries for extreme discounts.
  58.  
  59. REGISTRATION
  60.  
  61. You are required to register this software if you decide to use it.
  62. You can print the document REGISTER.DOC, fill it out, include your
  63. payment for $50.00 US and either fax it or mail it.  To fax it, fill
  64. out the credit card info or mark the COD box and fax to (919) 760-1550 
  65. or in Europe: +49-40-7665664 Or mail it to:  
  66. U.S.A.                              Europe 
  67. BecknerVision Inc                   SOFTSOL 
  68. Dept 15                             Neue Str. 35a 
  69. PO Box 11945                        2100 Hamburg 90 
  70. Winston-Salem,NC 27116-1945         Germany
  71.  
  72.  
  73. LEGAL STUFF - CONTINUED
  74.  
  75. DISCLAIMER & WARRANTY
  76.  
  77. This product, including all associated software and documentation, is
  78. provided "AS IS", without any implied warranty of merchantability or
  79. fitness for a particular purpose.  BecknerVision Inc makes no
  80. representations or warranties with respect to the contents hereof, and
  81. specifically disclaims any implied warranties.  BecknerVision Inc
  82. reserves the right to alter this documentation or the associated
  83. software without any obligation whatsoever to notify any person of such
  84. revision.
  85.  
  86. BecknerVision Inc will not be liable for any damages, real or imagined,
  87. direct or indirect, which results from the use of or purchase of this
  88. product.  In no event shall liability exceed the actual price paid for
  89. the software license.
  90.  
  91. In the event any rememdy hereunder is determined to have failed, all
  92. limitations and exclusion of damages set forth shall remain in full
  93. force and effect.
  94.  
  95. Any statements by any agents, employees or distributors of
  96. BecknerVision Inc do not constitute warranties and are not binding.
  97. This written warranty is the entire warranty, and no employee of
  98. BecknerVision Inc may modify it.
  99.  
  100. This warranty gives you specific legal rights, which vary from state to
  101. state.  Some states do not allow exclusion of incidental or
  102. consequential damages.
  103.  
  104. LEGAL STUFF - CONTINUED
  105.  
  106. LICENSE
  107.  
  108. YOUR FIRST USE OF THIS PRODUCT CONSTITUTES YOUR AGREEMENT TO THE
  109. LICENSE AGREEMENT SET FORTH HEREIN.
  110.  
  111. BecknerVision Inc, hereinafter LICENSOR, grants to you, the customer,
  112. hereinafter LICENSEE, the right to use this copy of Beckner Library and
  113. Utilities II on a signle computer, which may be part of a network, at a
  114. single location as long as LICENSEE complies with the terms set forth
  115. in this agreement.  LICENSOR reserves the right to revoke this
  116. license if the LICENSEE violates any portion of this agreement.  In the
  117. event of such termination, LICENSEE agrees to return all copies of the
  118. product, including original and backup copies of the diskettes, and the
  119. documentation, any all other materials delivered as part of the
  120. product, to LICENSOR within thirty (30) days of the termination of this
  121. agreement.
  122.  
  123. LICENSEE agrees to make copies of this software for backup purposes
  124. only.  LICENSEE agrees to not copy, or have made, copies of this
  125. documentation and to take all necessary precautions to insure the
  126. archival copies of the software are not distributed to or acquired by
  127. other parties, but in no case will LICENSEE use less caution than that
  128. afforded to LICENSEE'S own proprietary products.
  129.  
  130. LICENSEE has the right to combine all or part of the contents of
  131. the product with any application, private or commercial, which they may
  132. develop from time to time.  LICENSEE agrees to not extract specific
  133. portions of the product and distribute them in any form or fashion
  134. unless as an integral part, and incorporated into, their application.
  135. LICENSEE agrees to not sell the product to any other person or entity
  136. in whole or in part.
  137.  
  138. SHAREWARE EXCLUSION
  139.  
  140. LICENSEE may distribute a complete copy of the SHAREWARE version of the
  141. product, which specifically includes these files, and only these files:
  142.  
  143. REGISTER.DOC            BECKNER.INC             BECKNER.LIB
  144. ALIAS.CH                BECKLIB2.DOC            READ.ME
  145. INDEX.PRG               AMORT.PRG               APR.PRG
  146. APRX.PRG                FINDREPL.PRG            BVASST.PRG
  147. BROWSE.PRG              EXTRACT.PRG             ADDAREC.PRG
  148. FIXDBF.PRG              COMPUTE.PRG             FUNCPROC.PRG
  149. EXAMPLEA.PRG            FORMS.PRG               BVUPDATE.PRG
  150. DOCS.PRG                ELIDUP.PRG              EXPORT.PRG
  151. EXAMPLED.PRG
  152.  
  153. These files must be distributed as a single product, with no files
  154. excluded, nor any added.  LICENSEE may not replace any of the files
  155. with modified files before distributing them.
  156.  
  157.  
  158. ACKNOWLEDGEMENTS
  159.  
  160. This library package is dedicated to the hard working Clipper programmer, who
  161. goes through so much frustration during the long hours or application
  162. development.  Our sincerest hope is that this package will ease some of the
  163. frustration and shorten the hours to completion of your application.
  164.  
  165. This package would never have been put on the market if it hadn't been for
  166. Jeanne Nerwinski and the North Carolina Clipper Users Group.  Jeanne's
  167. inspiration in helping me get this product moving was greatly needed, even as
  168. her health was failing.  A stronger individual I never met.
  169.  
  170. The North Carolina Clipper Users Group (NCCUG), who reminded me that you can
  171. really accomplish something if you don't let yourself get bogged down.  There
  172. is always someone to ask for help, and someone to offer encouragement.
  173.  
  174. Dr Charles Beattie, PhD, without whom this project would never have been
  175. completed.
  176.  
  177. The file classes in the CLASS chapter were added at the last minute.  These
  178. were created by the NCCUG members at their January 1993 regular meeting, to
  179. help teach object-oriented programming.  These classes do require that you
  180. have the Class(y) library.
  181.  
  182. My family, Mary Ann, Elizabeth and Joey, thanks for your patience during those
  183. long hours in the office.
  184.  
  185. Computer Associates, for continuing the evolution of the revolution.  Things
  186. are happening!
  187.  
  188. Ed Tiley, for showing me HOW to release this product.
  189.  
  190. John Fried, for challenging me.  And for the devcon/technicon trips.
  191.  
  192. David Coulter, most especially for making me appreciate what objects
  193. can do.
  194.  
  195. NOTE:  3% of the gross product revenues are donated to the North
  196. Carolina Clipper Users Group.  Please be sure to register.
  197.  
  198. SAMPLE PROGRAMS
  199.  
  200. All sample programs are compiled and linked as follows:
  201.  
  202. CLIPPER <program> -N -M -W
  203. RTLINK FILE <program> LIB BECKNER
  204.  
  205. ----------------------------------------------------------------------------
  206. BLUEBG
  207.  
  208. This is nothing more than a program to show a real silly implementation
  209. of the preprocessor.  Don't just compile/link/execute it, look at the
  210. code.  A good way to really see what the preprocessor does is to look
  211. include the switches -P -B when compiling, then using CLD to look at
  212. the program as it executes, turning on the preprocessor view first.
  213.  
  214. ----------------------------------------------------------------------------
  215. APR
  216.  
  217. Run this program to determine the APR, giving it the amount financed,
  218. the payment amount and the number of payments.
  219.  
  220. ----------------------------------------------------------------------------
  221. AMORT
  222.  
  223. Displays an amortization schedule.  You enter the number of payments,
  224. the starting balance, the first due date and the APR.  For each
  225. payment, the program displays the payment number, the due date, the
  226. payment amount, the principal, the interest and the balance after the
  227. payment.
  228.  
  229. ----------------------------------------------------------------------------
  230. SS
  231.  
  232. Tests the screen saver built into our READ.  When you execute the
  233. program, wait 15 seconds for the default screen saver to invoke.
  234.  
  235. ----------------------------------------------------------------------------
  236. EXAMPLEA
  237.  
  238. Gives examples of the array functions.
  239.  
  240. ----------------------------------------------------------------------------
  241. DOCS
  242.  
  243. A sample program to create Expert Help files.  This is the actual
  244. program we created to create our own Expert Help files, which come with
  245. your registered program.
  246.  
  247. ----------------------------------------------------------------------------
  248. EXAMPLED
  249.  
  250. Gives examples of date functions.
  251.  
  252.  
  253. UTILITY PROGRAMS
  254.  
  255. Compile and link the same as the sample programs.
  256.  
  257. ----------------------------------------------------------------------------
  258. FINDREPL
  259.  
  260. This is a global file search and replace utility written entirely in
  261. CA-Clipper 5.  It can be run as a command line utility to find and
  262. replace a single character string, though it can function through
  263. multiple files.  The syntax is:
  264.  
  265. FINDREPL[ /I][ /F<ftext> /R<rtext>][ /N<wildcard>]
  266.  
  267. /I ignores case, /F specifies the character string to find, /R
  268. specifies the replacement string, and /N lets you specify the filename
  269. or a wildcard.  Specifying the find and replace parameters without
  270. specifying the /N option causes the default wildcard of "*.PRG" to be
  271. used.  If you don't specify the /F or /R parameters, then the file
  272. FINDREPL.TXT is used to make the changes.  You build this file as a
  273. standard delimited file.  If I wanted to change all lowercase "return"
  274. to "RETURN" and change all "function" to "FUNCTION", FINDREPL.TXT would
  275. contain:
  276.  
  277. "return","RETURN"
  278. "function","FUNCTION"
  279.  
  280. MAKE A BACKUP BEFORE USING THIS FUNCTION.  THIS IS A DANGEROUS UTILITY
  281. WHICH CAN MAKE MASSIVE CHANGES TO MANY FILES AT ONE TIME.  YOU ARE
  282. WARNED!
  283.  
  284. ----------------------------------------------------------------------------
  285. BVASST
  286.  
  287. THIS UTILITY IS TOO LARGE TO GO OVER IN DETAIL IN THIS DOCUMENT.  A
  288. COMPLETE CHAPTER COMES IN THE REGISTERED DOCUMENTATION.
  289.  
  290. This utility is more-or-less a menu-driven dot prompt replacement.  We
  291. have used it since the early days of Clipper, adding to it with each
  292. release.
  293.  
  294. You are first prompted for a filename and an index list.  The filename
  295. is required, the index list is optional.
  296.  
  297. The options are:
  298.  
  299. A. Add          Add a new field to the structure.
  300.  
  301. B. Delete       Delete a field, giving its ordinal position.
  302.  
  303. C. Change       Change a field, giving its ordinal position.
  304.  
  305. D. Display      Display the structure.
  306.  
  307. E. Print        Print the structure.
  308.  
  309. F. Ed/Add       Edit a record or add a new record.
  310.  
  311. G. Rep/Del      Replace the contents of a field or delete records,
  312.                 specifying an optional filter expression.
  313.  
  314. H. Struct       Creates an extended structure file, \STRUCT.DBF.
  315.  
  316. I. ZapAll       Removes all data from the file.
  317.  
  318. J. Browse       Full-screen browse, using fBrowse function.
  319.  
  320. K. Pack         Packs the file.
  321.  
  322. L. Append       Prompts for a filename to append data from and a filter.
  323.  
  324. M. Sets         Gives access to various SET functions.
  325.  
  326. N. Stat/+++     Suboptions include:  [I]nfo, which displays some file
  327.                 information; [C]ount, which counts the records; [A]vg,
  328.                 which returns an average; [S]um, which returns a total;
  329.                 [E]xpr, which allows you to enter a freeformat
  330.                 expression whose value is returned; [G]enerators, which
  331.                 give you access to our Forms Generator, Word Processor
  332.                 and Report/Label Generator; [O]rphanage, which deletes
  333.                 records in secondary files which do not have a
  334.                 corresponding master record in the current database;
  335.                 [R]eindex, reindexes all open indices; [P]rint, which
  336.                 dumps the file to the printer; and [D]upl, which
  337.                 deletes duplicate records based on a supplied
  338.                 expression.
  339.  
  340. Quit            Quits the primary program, returning to the filename
  341.                 prompt.  Press <space> to delete the filename, then
  342.                 <enter> 3 times to actually quit.
  343.  
  344. ----------------------------------------------------------------------------
  345. INDEX
  346.  
  347. A command line indexer for convenience.  Run it with no parameters for
  348. help.
  349.  
  350. ----------------------------------------------------------------------------
  351. BROWSE
  352.  
  353. A command line browse implementor.  Use this syntax:
  354.  
  355. BROWSE <filename>
  356.  
  357. ----------------------------------------------------------------------------
  358. EXTRACT
  359.  
  360. A command line program which creates a database file by extracting
  361. records from another database file.  Enter the EXTRACT command with no
  362. parameters to see how it functions.
  363.  
  364. ----------------------------------------------------------------------------
  365. FIXDBF
  366.  
  367. Fixes trashed records in a database file.  Uses the fFixDbf() function.
  368. Use this syntax:
  369.  
  370. FIXDBF <file>
  371.  
  372. The fixed file will be called "$BECKNER.DBF".
  373.  
  374. ----------------------------------------------------------------------------
  375. WP
  376.  
  377. Executes the BecknerWP() meta-function (word processor).
  378.  
  379. ----------------------------------------------------------------------------
  380. COMPUTE
  381.  
  382. Evaluates and returns the result of any valid expression from the
  383. command line.  The syntax is:
  384.  
  385. COMPUTE <expression>
  386.  
  387. ----------------------------------------------------------------------------
  388. FUNCPROC
  389.  
  390. Creates FUNCPROC.DBF, which contains the function or procedure name and
  391. the filename where it is located, for all source code files in the
  392. current subdirectory.
  393.  
  394. ----------------------------------------------------------------------------
  395. FORMS
  396.  
  397. Invokes the BecknerFG() meta-function (forms generator).
  398.  
  399. ----------------------------------------------------------------------------
  400. BVUPDATE
  401.  
  402. Creates BVUPDATE.DBF/DBT, containing the structure records required by
  403. the pUpdate() function to easily update client database structures.
  404. Optionally may specify a wildcard on the command line, without
  405. extension (which is always "DBF").  Use the [C]reate option to create
  406. the file, then [Q]uit when done.  Send the BVUPDATE.DB? files to your
  407. clients along with your program update.  At the beginning of your
  408. program, include the statement:
  409.  
  410. pUpdate("bvUpdate")
  411.  
  412. ----------------------------------------------------------------------------
  413. ELIDUP
  414.  
  415. Eliminates duplicate records based on a specified expression.
  416.  
  417. ----------------------------------------------------------------------------
  418. STANDARD
  419.  
  420. Interactive program which creates a program for you, ie Applications
  421. Generator - very simplistic, but can help you get started.
  422.  
  423.  
  424. COMMANDS
  425.  
  426. Commands which are new or are enhanced are included in the header file
  427. BECKNER.INC, and are described below:
  428.  
  429. WHILE LOOPING
  430.         Same as WHILE .y..
  431.  
  432. ENDWHILE
  433.         Same as END.
  434.  
  435. INT86 <nInterrupt> [AX <nAX>] [BX <nBX>] [CX <nCX>] [DX <nDX>] [AL
  436.         <nAL>] [AH <nAH>] [BL <nBL>] [BH <nBH>] [CL <nCL>] [CH <nCH>]
  437.         [DL <nDL>] [DH <nDH>]
  438.         Invokes the pInt86 function.
  439.  
  440. USE
  441. CLOSE
  442.         Clear the relationships before closing the work area.
  443.  
  444. @ <nRow>, <nCol> GET <xVar> [PICTURE <cPic>] [VALID <bcValid>] [WHEN <bcWhen>]
  445.         [COLOR <cColor>] [MESSAGE <cMsg>] [POPUP <bPop>] [EXIT [WITH]
  446.         <cKey>] [DATESET] [IDLE <bIdle>] [MEMO [AT] <nMStartRow>,
  447.         <nMStartCol>, <nMEndRow>, <nMEndCol>]
  448.  
  449.         Adds new clauses:
  450.         MESSAGE: same functionality as MESSAGE clause for @...PROMPT
  451.         command.
  452.         POPUP: allows a popup box.
  453.         EXIT WITH: allows special exit key.
  454.         DATESET: allows special date movement keys for this GET.
  455.         IDLE: allows background processing while in this GET.
  456.         MEMO AT:  sets auto memo edit field during READ.
  457.  
  458. READ [IDLE <bIdle>] [TIME <nTime>]
  459.         Adds clauses:
  460.         IDLE: allow background processing during entire READ.
  461.         TIME: Times out after specified number of idle seconds.
  462.  
  463. DEFAULT <var1> TO <val1> [, <varN> TO <valN>]
  464.         Allows default values to be assigned to NIL values.
  465.  
  466. INITIALIZE <var1> TO <val1> [, <varN> TO <valN>]
  467.         Initializes undefined variables to specified values.
  468.  
  469. FORCETYPE <var1> TO <type1> [, <varN> TO <typeN>]
  470.         Forces the specified variable to be the specified type.
  471.  
  472. ADDRECORD [ALIAS <a>]
  473.         Invokes fAddRecord().
  474.  
  475. LOCK [ALIAS <a>]
  476.         Invokes fLockRec().
  477.  
  478. ENDFUNCTION
  479.         Used at physical end of function.
  480.  
  481. ENDPROCEDURE
  482.         Used at physical end of procedure.
  483.  
  484. SET SAVETIME TO [<nTime>]
  485.         Sets first parameter of pSetSaver() function.
  486.  
  487. SET SAVEBLOCK TO [<bToDo>]
  488.         Sets second parameter of pSetSaver() function.
  489.  
  490. BEGIN BLOCK
  491.         Defines beginning of logical block.  EXIT will exit early and
  492.         LOOP will go to statement following BEGIN BLOCK.
  493.  
  494. END[ ]BLOCK
  495.         Defines end of logical block.
  496.  
  497. BROWSE [ALIAS <a>]
  498.         Invokes fBrowse() function.
  499.  
  500. WRITE [LINE [<cLine>]] TO <nFile>
  501.         Writes a line to the end of the file specified by the handle
  502.         <nFile>.  If <cLine> is not specified, a null line is written.
  503.  
  504. META-FUNCTIONS
  505.  
  506. We define "meta-functions" as those functions which, in and of themselves, are
  507. actually complete, or near-complete, applications, but which are useful as
  508. functions of other programs.  The meta-functions included herein are:
  509.  
  510. BecknerFG()     Forms Generator
  511. BecknerGL()     General Ledger System
  512. BecknerRL() *   Old Report & Label Generator
  513. BecknerV()      VariData Template System
  514. BecknerWP()     Word Processor
  515. pRepGen()       New Report & Label Generator
  516.  
  517. The BecknerRL() function is maintained herein for compatibility with
  518. BecknerLib I.  pRepGen() replaces BecknerRL() in BecknerLib II.
  519.  
  520. FORMS GENERATOR
  521.  
  522. BecknerFG()
  523.  
  524. This meta-function is the Beckner Forms Generator, allowing the creation,
  525. printing and maintenance of forms.  If no parameters are passed, then the
  526. interactive forms generator is brought up.  If you simply want a form or
  527. alignment check printed, then two parameters must be passed:
  528.  
  529. (cFormNo, nType)
  530.  
  531. cFormNo is the form code.  When you add a form, you enter a 2 character form
  532. code.  To this is appended a 3-digit number to make the form code unique.
  533. Where nType is 1 or 2, cFormNo is the 5-character form code matching an
  534. existing form.  Where nType is 3, cFormNo is a series of form codes appended
  535. to each other with no intervening space.  For example, if you had 2 forms to
  536. print, and they were coded "BP001" and "BP002", you could issue the function:
  537.  
  538. BecknerFG("BP001BP002", 3)
  539.  
  540. If nType is 1, then the form is printed.  If nType is 2, then an alignment
  541. check is printed based on the form definition.  If nType is 3, then a list of
  542. forms is presented for the user to choose from; any or all of the forms may be
  543. printed.
  544.  
  545. The utility program FORMS.PRG may be compiled/linked to create a stand-alone
  546. forms generator.  The compile link commands are:
  547.  
  548. CLIPPER FORMS -N-M RTLINK FILE FORMS LIB BECKNER
  549.  
  550. If using FORMS.EXE or BecknerFG() with no parameters, a screen will display
  551. with the first form in the file displayed (if any).  Each form has these
  552. characteristics:
  553.  
  554. Form #        The actual form code.
  555.  
  556. Where           The filename or device where this form will print, default is
  557.                 current SET PRINTER TO option.
  558.  
  559. Form Name    The name or description of the form.
  560.  
  561. Prefix          A 0 to 2 character field depicting the beginning characters of
  562.                 every DBF/NTX name subsequently defined.  If the form
  563.                 is to be printed from a program, and the files are
  564.                 already open, then this should be left blank.
  565.  
  566. Codes           2 fields defining the starting and ending printer codes to be
  567.                 sent before and after the printing of this form.  The
  568.                 are in decimal format separated by slashes.  For
  569.                 example, to send an escape character followed by
  570.                 Chr(20), you would enter "27/20".
  571.  
  572. DBF/NTX         Up to 8 database files and indices may be defined, only
  573.                 one index per database.  This is only used in
  574.                 interactive mode and should not be included for
  575.                 non-interactive forms, that is, forms printed
  576.                 exclusively from a program.
  577.  
  578. Length        The number of lines on a physical page.
  579.  
  580. Single          .True. if forms are fed one form at a time, ie manual-feed
  581.                 forms.
  582.  
  583. Align        .True. if an alignment check is printed in interactive mode.
  584.  
  585. Stagger/+       .False. in most cases.  We had a form once where the print was
  586.                 staggered between two consecutive forms to provide for
  587.                 a standard printing size.  We've only seen this once in
  588.                 a decade.  The + field should normally be 0.  In our
  589.                 one strange case, the two forms together had a form
  590.                 length of 51, so we would specify a length of 25,
  591.                 .true. to stagger, and 1 to +.  Again, this is
  592.                 extremely rare.
  593.  
  594. Micro Adj       4 fields to specify the start, stop and usage codes, along
  595.                 with the number of times to execute the usage code,
  596.                 primarily to use micro adjustments prior to printing
  597.                 the form.  For example, you may need to back a form up
  598.                 1/4 of an inch.  The start code is specified if the
  599.                 line feed control merely sets a specified line feed,
  600.                 instead of executes it.  The stop code resets line
  601.                 feeds to normal.  The usage code is the actual
  602.                 execution code.  The multiplier is normally 1, and
  603.                 specifies the number of times to execute the usage
  604.                 code.
  605.  
  606. Memo tabs       The number of spaces to change each TAB setting to when
  607.                 printing memo fields.
  608.  
  609. Width        The maximum width to print free-format memo fields.
  610.  
  611. Also associated with each forms, are the individual variable expressions which
  612. define each field on the form.  The expression characteristics are defined
  613. below:
  614.  
  615. Description    Your description of the expression.
  616.  
  617. Expression      A valid clipper expression.  When using the interactive
  618.                 FORMS.EXE, most available functions from the
  619.                 BECKNER.LIB are available to you as well.
  620.  
  621. Row/Col         These are character fields.  You may specify literal
  622.                 numeric row/column positions, the normal way, or
  623.                 complete expressions.
  624.  
  625. *               The next four fields are currently undefined and should be
  626.                 .False..
  627.  
  628. Max Rows    The maximum rows to print.  Valid for memo fields only.
  629.  
  630. Alt Col         Allows memo fields to print from the current row/column
  631.                 position until reaching, the maximum rows defined
  632.                 above, then will continue printing beginning at the
  633.                 defined row but using this alternate column.  This
  634.                 allows memos in 2 columns.
  635.  
  636. Prelim Expr     An expression to be evaluated prior to printing this variable.
  637.                 Usually used for record positioning.
  638.  
  639. Micro Adj       Used for this individual variable the same as it was used for
  640.                 the entire form.
  641.  
  642. Condition       A WHILE condition to evaluate, so a recurring line item does
  643.                 not have to be specifically defined.  More on this in
  644.                 the registered docs.
  645.  
  646. Note:  In the documentation which you get upon registration, several examples
  647. make quite a bit of the form creation/use process much clearer.  Space
  648. constraints limit this herein.
  649.  
  650. The forms generator has the following options:
  651.  
  652. Delete        Deletes the current form definition.
  653.  
  654. Get             Presents a list of form definitions, lets you choose one,
  655.                 which becomes the currently displayed form definition.
  656.  
  657. Add        Lets you create a new form.
  658.  
  659. Edit        Lets you edit the current form definition.
  660.  
  661. Variables    Presents a submenu, allowing you to:
  662.  
  663.         Display        Display a list of variable definitions.
  664.  
  665.                 Scan            Scan the variable definitions, letting you
  666.                                 Add, Delete, Edit, +/next, -/prior,
  667.                                 Quit, Get & Browse.
  668.  
  669.                 Filters         Set up filters/relationships for specified
  670.                                 files.
  671.  
  672.                 Conditions      Allows interactive conditions, including
  673.                                 preliminary expressions, Variables,
  674.                                 Prompts, WHILE, NEXT & REST.
  675.  
  676. +/Next        Get next forms definition.
  677.  
  678. -/Prior        Get prior forms definition.
  679.  
  680. Filter        Set the filter for scanning through form definitions.
  681.  
  682. Reports        The following options are available:
  683.  
  684.                 A. Grid         Prints a setup grid on the form to aid in
  685.                                 alignment.
  686.  
  687.         B. Print Form    Prints a form interactively.
  688.  
  689.         C. List        Prints a list of available form definitions.
  690.  
  691.         D. Alignment    Prints alignment check.
  692.  
  693. Maintenance     The following options are available:
  694.  
  695.         A. Row/Col    Allows quick entering of row/col data.
  696.  
  697.                 B. Vars/DBF     Imports all fields from a database file into
  698.                                 the current form.
  699.  
  700.                 C. Transform    Lets you set the TRANSFORM function for a
  701.                                 series of variables existing at the
  702.                                 same column.
  703.  
  704.                 D. Mass Chg     Lets you change all row and/or col definitions
  705.                                 using a single value or a ratio.
  706.  
  707.         E. <not used>
  708.  
  709.         F. <not used>
  710.  
  711.                 G. Duplicate    Makes a new form identical to the current
  712.                                 form.
  713.  
  714.         H. Expr Cnt    Gives you a count of all variable definitions.
  715.  
  716.         I. Fast New    Quickly enter new descriptions/expressions.
  717.  
  718.                 J. Increment    Create line item definitions from existing
  719.                                 line.
  720.  
  721.         K. Chg #    Change the current form #.
  722.  
  723.         L. Fld Lst    Presents a field list from any file.
  724.  
  725. Quit        Quits the forms generator interactive mode.
  726.  
  727. VARIDATA TEMPLATE SYSTEM
  728.  
  729.         The VariData Template system allows the user to define additional data
  730. entry windows for additional items of information which may be unique to the
  731. customer.  This is a powerful window creation system.  Calling the function
  732. BecknerVEd() invokes the full-screen template management system.  To create a
  733. new template, use the function BecknerVEd("").  A 1 x 1 character window
  734. appears in the center of the screen, and the options at the top of the screen
  735. are:
  736.  
  737. Window
  738.         Press <alt-W> to access this option, which makes these options
  739.         available:
  740.  
  741.     Expand        Lets you use the arrow keys to expand the window.
  742.  
  743.     Shrink        Lets you use the arrow keys to shrink the window.
  744.  
  745.         Insert          Inserts a row or column at the current cursor
  746.                         position.
  747.  
  748.     Delete        Deletes the current row or column.
  749.  
  750.     Middle        Centers the window.
  751.  
  752.         Position        Lets you use the arrow keys to move the window.
  753.  
  754.         Borders         Specify the type of border.
  755.  
  756.     Clear BG    Clears the background.
  757.  
  758.     Lines/Boxes    <not implemented>
  759.  
  760. Fields
  761.         Press <alt-F> to access this option, giving you these options:
  762.  
  763.     Next        Position cursor at next field.
  764.  
  765.     Previous    Position cursor at previous field.
  766.  
  767.     Create        Create a field at current cursor position.
  768.  
  769.     Delete        Delete the current field.
  770.  
  771. Abort
  772.         Press <alt-A> to access this option, which aborts all changes
  773.         since last saved.
  774.  
  775. Exit
  776.         Press <alt-E> to access this option, which saves the template
  777.         and exits the interactive mode, returning the new template to
  778.         the program.
  779.  
  780. To use the template, you must have a memo field available to contain the
  781. variable data, and issue a command such as:
  782.  
  783. Field->mVariData := BecknerV(mVariData, mTemplate, IsColor())
  784.  
  785. This meta-function is covered in great detail with examples in the registered
  786. docs.
  787.  
  788. REPORT & LABEL GENERATOR (NEW)
  789.  
  790.         Issue the function call pRepGen() to use the Report & Label Generator
  791. interactively.  After the title display, the Print option is invoked if there
  792. are any reports/labels defined.  Press <escape> to abort the Print option.
  793. Each report and label definition includes the following characteristics:
  794.  
  795. Title        Description of the report/label.
  796.  
  797. Filename        Filename without extension.  The program will properly append
  798.                 the extension of FRM or LBL, as needed.
  799.  
  800. Report?         Answer .true. to create a report definition, .false. to create a label
  801.                 definition.
  802.  
  803. Created         Current date.
  804.  
  805. Printed        Date last printed.
  806.  
  807. Special Index?  .True. if you want a special index created before printing the
  808.                 report/label.
  809.  
  810. Index Expr    The special index expression.
  811.  
  812. Output device    The output device or filename.
  813.  
  814. Start codes     Sequence of codes to initialize the printer, which are decimal
  815.                 codes separated by slashes.
  816.  
  817. End codes       Sequence of codes to send to the printer after the end of the
  818.                 print job.
  819.  
  820. Repeat Expr     The report/label will print until this expression evaluates
  821.                 .true.; Opposite of a WHILE clause.
  822.  
  823. Prim Vars       The primary variable names, and their initial values,
  824.                 separated by a slash.  For multiple definitions,
  825.                 separate each set of variable definitions with a
  826.                 double-slash.
  827.  
  828. Prim Prompts    The primary variable prompts, separated by double-slashes.
  829.  
  830. Heading         An expression to be printed as the report heading.
  831.  
  832. Prelim Expr    An expression to evaluate prior to printing the report/label.
  833.  
  834. Databases    Accessed by <F2>.  Must define at least one database file.
  835.  
  836. Indices         Accessed by <F3>.  May define a list of indices, delimited by
  837.                 commas, for each file.
  838.  
  839. Filters        Accessed by <F4>.  May define a filter for each work area.
  840.  
  841. Relations    Accessed by <F6>.  May define multiple relationships per file.
  842.  
  843. Sequence    Accessed by <F7>.  Not used in the current implementation.
  844.  
  845. Reports have the following additional characteristics:
  846.  
  847. Page Hdr    4 lines of page headings.
  848.  
  849. Width        The maximum width of the report.
  850.  
  851. Margins         A left and right margin.
  852.  
  853. Lines        The number of printed lines per page.
  854.  
  855. Double Sp?    .True. to double space.
  856.  
  857. Plain Pg?    .True. for plain page report.
  858.  
  859. Eject After?    .True. to eject after the report completes printing.
  860.  
  861. Eject Before?    .True. to eject a page before the report starts printing.
  862.  
  863. Grp Expr    The primary group expression.
  864.  
  865. Grp Hdr         The primary group header.
  866.  
  867. Summary?    .True. to receive only a summary report.
  868.  
  869. After Grp?    .True. to eject a page after each group prints.
  870.  
  871. SubGrp Expr    The secondary group expression.
  872.  
  873. SubGrp Hdr    The secondary group header.
  874.  
  875. Each line on a report has the following characteristics:
  876.  
  877. Width        The column width.
  878.  
  879. Total?        .True. if this is a total column.
  880.  
  881. Decimals    Number of decimal positions, if applicable.
  882.  
  883. Contents    The expression to evaluate for this column.
  884.  
  885. Header        4 fields to contain the column header.
  886.  
  887. Sequence    Determines the order each column will print in.
  888.  
  889. Each label has the following characteristics:
  890.  
  891. Height        Number of lines per label.
  892.  
  893. Width        Number of characters per label line.
  894.  
  895. Margin        Number of characters for the left margin.
  896.  
  897. Lines Btwn    Number of lines between labels.
  898.  
  899. Spaces Btwn    Number of spaces between labels.
  900.  
  901. Lbls across    Number of labels in a row.
  902.  
  903. Comments    Anything.
  904.  
  905. Exprs        A line for each expression possible on the label.
  906.  
  907. There are 5 options associated with the Report & Label Generator:
  908.  
  909. Create        Creates a new report/label definition record.
  910.  
  911. Modify        Lets you modify an existing definition.
  912.  
  913. Delete        Deletes a definition record.
  914.  
  915. Print        Lets you print a report or label based on a definition.
  916.  
  917. Exit        Leaves the report & label generator.
  918.  
  919. GENERAL LEDGER SYSTEM
  920.  
  921.         You access the interactive General Ledger system with the function
  922. BecknerGL().  If you have more than one set of books defined, then you must
  923. choose which set you want to work with.  Then, you choose what period you want
  924. to work in, 1-13, and whether you are working with history records or not
  925. (blank is current and "H" is history).
  926.  
  927.     Each G/L account has these characteristics:
  928.  
  929. Account #    A user-defined 1-10 digit account number.
  930.  
  931. Name        A user-defined account name, up to 40 characters.
  932.  
  933. PTD Amount      The period-to-date amount for the current period (13 periods
  934.                 are maintained in both the current and history year).
  935.  
  936. YTD Amount    The current year-to-date amount.
  937.  
  938. Type            The account type, which may be:  [A] Current Asset, [B] Fixed
  939.                 Asset, [C] Other Asset, [D] Current Liability, [E]
  940.                 Long-Term Note, [F] Equity, [G] Other Liability, [H]
  941.                 Sales, [I] Cost of Sales, [J] Other Income, [K]
  942.                 Operating Expense, [L] Tax Provision.
  943.  
  944. Notes        A memo field for any notes about the account.
  945.  
  946. Further, each account has transactions.  Each transaction line has the
  947. following characteristics:
  948.  
  949. Description    What the transaction is about.
  950.  
  951. Date        Posting date.
  952.  
  953. Amount          Transaction amount.
  954.  
  955. Reference    A check #, if applicable, or any other valid reference.
  956.  
  957. Code        No longer used.
  958.  
  959. The options available are:
  960.  
  961. Add        Lets you add a new account into the current set of books.
  962.  
  963. Delete        Deletes the current account.
  964.  
  965. Edit            Lets you edit the account characteristics for the current
  966.                 account.
  967.  
  968. Get             Lets you get a specific account, making it the currently
  969.                 displayed account.
  970.  
  971. Tr Disp         Lets you display transactions for the current account based on
  972.                 a start and end date, or browse the entire transaction
  973.                 file based beginning with the current account's first
  974.                 transaction.
  975.  
  976. Post            Allows 3 methods of posting: [1] Double entry, [2] Journal or
  977.                 [3] Check writer.  Method [1] requires that 2 entries
  978.                 are made to post properly and keep everything in
  979.                 balance.  Method [2] checks that you're in balance as
  980.                 you are posting, and lets you abort an entire posting
  981.                 session if needed.  Method [3] lets you post and print
  982.                 checks, posting them into a separate check register.
  983.  
  984. Reports         These reports are available:  [A] Daily Transactions, [B]
  985.                 Chart of Accounts, [C] Trial Balance, [D] Balance
  986.                 Sheet, [E] P & L (Income) Statement, [F] Supporting P &
  987.                 L Schedules, [H] Year-to-Date Closeout, [I] Check
  988.                 Register, [J] Print Current Account, [K] Print System
  989.                 File, [L] Periodic Transactions, [M] Access to Forms
  990.                 Generator and [N] Access to Report Generator.
  991.  
  992. Maintenance     These suboptions are available:  [A] Index G/L Files, [B]
  993.                 System File Maintenance, [C] Revise Transaction Data
  994.                 and [D] Unpost a Day's Work.
  995.  
  996. Quit        Quits the BecknerGL() function.
  997.  
  998. +/Forward    Get and display next account.
  999.  
  1000. -/Backward    Get and display prior account.
  1001.  
  1002. ARRAY FUNCTIONS
  1003.  
  1004. a1From2
  1005.         (a2Dim, nElement)
  1006.         Returns a single-dimensional array from a 2-dimensional array.
  1007.         a2Dim is the 2- dimensional array, and nElement is the
  1008.         dimension to extract.
  1009.  
  1010. aAppend
  1011.         (aLines, cFile)
  1012.         Appends the lines in the array aLines to the end of the file
  1013.         cFile.
  1014.  
  1015. aArray2Char
  1016.         (aWords, [cDelimiter])
  1017.         Returns a string where the words in aWords have been
  1018.         concatenated together, delimited by cDelimiter, which defaults
  1019.         to <space>.
  1020.  
  1021. aAverage
  1022.         (aNumbers, [nStart], [nCount])
  1023.         Returns the average of an array of numbers, aNumbers, beginning
  1024.         with element nStart, which defaults to 1, for nCount number of
  1025.         elements, which defaults to the last element in the array.
  1026.  
  1027. aChar2Array
  1028.         (cString, cDelimiter)
  1029.         Returns an array of words from a sentence, cString, using the
  1030.         delimiter cDelimiter.
  1031.  
  1032. aCount
  1033.         (aAny, [cTypes], [nStart], [nCount], [bFor])
  1034.         Counts the elements of an array, beginning with nStart, which
  1035.         defaults to 1, for nCount number of elements, which defaults to
  1036.         the last element in the array.  If cTypes is specified, then it
  1037.         contains the valid types to count.  bFor can further restrict
  1038.         the counting based on a FOR condition, which must return a
  1039.         logical value; if .true., then it is counted.
  1040.  
  1041. aDelElement
  1042.         (aAny, nElement)
  1043.         Deletes the nElement element from the array aAny, resizing the
  1044.         array to physically one less than before the deletion.
  1045.  
  1046. aEmpty
  1047.         (aArray)
  1048.         Returns .true. if aArray contains no elements or all elements
  1049.         are NIL.
  1050.  
  1051. aFromFile
  1052.         (cFile)
  1053.         Returns an array where each element contains one line from the
  1054.         file, cFile.
  1055.  
  1056. aFromRec
  1057.         ([aAny])
  1058.         Returns an array where each element contains the content of
  1059.         each field in a record.
  1060.  
  1061. aLine2Array
  1062.         (cLine)
  1063.         Returns an array containing the words from a line, cLine.
  1064.  
  1065. aList
  1066.         (nStartRow, nStartCol, nEndRow, nEndCol, aAny, [cTitle])
  1067.         Displays the elements of aAny in a window defined by nStartRow,
  1068.         nStartCol to nEndRow, nEndCol, with an optional title, cTitle.
  1069.  
  1070. aLongest
  1071.         (aAny)
  1072.         Returns the length of the longest string element found in aAny.
  1073.  
  1074. aMarkList
  1075.         (nStartRow, nStartCol, nEndRow, nEndCol, aList)
  1076.         Returns an array of the elements marked in aList.  Elements are
  1077.         marked/demarked by pressing <space> on the current item.
  1078.  
  1079. aMatch
  1080.         (aAny, cType, [nStart], [nCount])
  1081.         Returns the first element with the same type as specified in
  1082.         cType, starting at element nStart, which defaults to 1,  for
  1083.         nCount number of elements, which defaults to the last element
  1084.         in the array.
  1085.  
  1086. aMatchNum
  1087.         (aAny, cType, [nStart], [nCount])
  1088.         Returns the number of the first element with the same type as
  1089.         specified in cType, starting at element nStart, which defaults
  1090.         to 1,  for nCount number of elements, which defaults to the
  1091.         last element in the array.
  1092.  
  1093. aMax
  1094.         (aAny, [cTypes], [nStart], [nCount])
  1095.         Returns the maximum value found in aAny.  Only checks types
  1096.         which match cType, which defaults to "N", starting at element
  1097.         nStart, which defaults to 1,  for nCount number of elements,
  1098.         which defaults to the last element in the array.
  1099.  
  1100. aMaxElement
  1101.         (aAny, [cTypes], [nStart], [nCount])
  1102.         Returns the element number of the maximum value found in aAny.
  1103.         Only checks types which match cType, which defaults to "N",
  1104.         starting at element nStart, which defaults to 1,  for nCount
  1105.         number of elements, which defaults to the last element in the
  1106.         array.
  1107.  
  1108. aMin
  1109.         (aAny, [cTypes], [nStart], [nCount])
  1110.         Returns the minimum value found in aAny.  Only checks types
  1111.         which match cType, which defaults to "N", starting at element
  1112.         nStart, which defaults to 1,  for nCount number of elements,
  1113.         which defaults to the last element in the array.
  1114.  
  1115. aMinElement
  1116.         (aAny, [cTypes], [nStart], [nCount])
  1117.         Returns the element number of the minimum value found in aAny.
  1118.         Only checks types which match cType, which defaults to "N",
  1119.         starting at element nStart, which defaults to 1,  for nCount
  1120.         number of elements, which defaults to the last element in the
  1121.         array.
  1122.  
  1123. aPack
  1124.         (aAny, [lResize])
  1125.         Removes all NIL elements from an array, aAny.  If lResize, then
  1126.         the size of aAny is adjusted to exclude all NIL elements.  If
  1127.         not lResize, which is the default, then all NIL elements are
  1128.         moved to the end of the array.
  1129.  
  1130. aPickList
  1131.         ([nStartRow, nStartCol, nEndRow, nEndCol,] aList, [nStart],
  1132.         [cTitle])
  1133.         Displays an aChoice list with optional title.  The default
  1134.         window coordinates are 3, 38 to 22, 79.
  1135.  
  1136. aPrint
  1137.         (aAny, [nStart], [nCount], [cDevice], [lFormFeed], [nLPP])
  1138.         Prints the contents of an array, each element treated as a
  1139.         line, starting with nStart, which defaults to 1, for nCount
  1140.         elements, which defaults to the end of the array.  The default
  1141.         device is "PRN", nLPP (lines per logical page) is 58, and
  1142.         lFormFeed is .true. (issues a form feed at the end of the print
  1143.         job).
  1144.  
  1145. aRead
  1146.         ([aAny,] cFile, [nStartLine], [nNumLines])
  1147.         Returns an array, aAny, of the lines in cFile beginning with
  1148.         line nStartLine, which defaults to 1, for nNumLines number of
  1149.         lines, which defaults to the end of file.
  1150.  
  1151. aSum
  1152.         (aAny, [nStart], [nCount])
  1153.         Returns the total of all numeric elements in aAny, beginning
  1154.         with nStart, which defaults to 1, for nCount number of
  1155.         elements, which defaults to the last element in the array.
  1156.  
  1157. aToRec
  1158.         (aData)
  1159.         Replaces the data in the current record with the data in aData.
  1160.  
  1161. aTotalLen
  1162.         (aAny)
  1163.         Returns the total length of all string elements in aAny.
  1164.  
  1165. aWrite
  1166.         (aLines, cFile)
  1167.         Creates a text file, cFile, with each element of aLines being a
  1168.         line in the file.  If the file already existed, then the
  1169.         previous data in the file is destroyed.
  1170.  
  1171. BINARY FUNCTIONS
  1172.  
  1173. bArray2Byte
  1174.         (aBit)
  1175.         Converts an array of 8 or less logical elements into a single
  1176.         byte.
  1177.  
  1178. bBitIf
  1179.         (cByte, nBitNumber, lOn)
  1180.         Sets or resets bit number nBitNumber in cByte, based on the
  1181.         expression lOn, where .true.  sets the bit and .false.  resets
  1182.         the bit.
  1183.  
  1184. bBitReset
  1185.         (cByte, nBitNumber)
  1186.         Resets bit number nBitNumber in cByte.
  1187.  
  1188. bBitSet
  1189.         (cByte, nBitNumber)
  1190.         Sets bit number nBitNumber in cByte.
  1191.  
  1192. bBitTest
  1193.         (cByte, nBitNumber)
  1194.         Returns .true. if bit number nBitNumber in cByte is on,
  1195.         otherwise returns .false..
  1196.  
  1197. bByte2Array
  1198.         (cByte)
  1199.         Returns an 8-element array of logical values depicting the
  1200.         on-off settings of individual bits in cByte.
  1201.  
  1202. bInt2Num
  1203.         (cIntWord, [lSigned])
  1204.         Returns an integer value.  If lSigned, then the value will be
  1205.         in the range -32768 to 32767.  If not lSigned, the default, the
  1206.         value will be in the range 0 to 65535.
  1207.  
  1208. bLong2Num
  1209.         (cLongWord, [lSigned])
  1210.         Returns a long integer value.  Default lSigned is .false.
  1211.  
  1212. bResetBit
  1213.         (cnByte, nBit)
  1214.         Resets bit number nBit in cnByte, which may be character or
  1215.         numeric.
  1216.  
  1217. bRPadNull
  1218.         (cBytes, nLen)
  1219.         Pads cBytes with null characters, returning a string with the
  1220.         length nLen.
  1221.  
  1222. bSetBit
  1223.         (cnByte, nBit)
  1224.         Sets bit number nBit in cnByte, which may be character or
  1225.         numeric.
  1226.  
  1227. bTestBit
  1228.         (cnByte, nBit)
  1229.         Tests bit number nBit in cnByte, which may be character or
  1230.         numeric.  If the bit is on, .true. is returned.
  1231.  
  1232. iBase
  1233.         <internal function>
  1234.  
  1235. ASSEMBLY SUPPORT FUNCTIONS
  1236.  
  1237. NOTE: These functions are internal, and are listed in case of a name
  1238. conflict with other libraries.  You should not use these functions
  1239. directly, as they are likely to change in future versions.
  1240.  
  1241. afBytes
  1242.         <internal>.
  1243.  
  1244. afChDir
  1245.         (cPath)
  1246.         <internal>.  Changes the current directory, returning .true.
  1247.         if successful.
  1248.  
  1249. afClusters
  1250.         <internal>.
  1251.  
  1252. afMkDir
  1253.         (cPath)
  1254.         <internal>.  Makes the specified path, if possible, returns
  1255.         .true. if successful.
  1256.  
  1257. afRmDir
  1258.         (cPath)
  1259.         <internal>.  Removes the specified directory, returning .true.
  1260.         if successful.
  1261.  
  1262. afSectors
  1263.         <internal>.
  1264.  
  1265. amBStat
  1266.         ()
  1267.         <internal>.  Returns the number of buttons on the mouse device.
  1268.  
  1269. amDown1
  1270.         <internal>.
  1271.  
  1272. amDown2
  1273.         <internal>.
  1274.  
  1275. amDown3
  1276.         <internal>.
  1277.  
  1278. amInit
  1279.         ()
  1280.         <internal>.  Returns number of buttons after initializing mouse
  1281.         driver.
  1282.  
  1283. amLimits
  1284.         (nStartRow, nStartCol, nEndRow, nEndCol)
  1285.         <internal>.  Sets screen area where mouse cursor may reside.
  1286.  
  1287. amOff
  1288.         ()
  1289.         <internal>.  Turns off mouse cursor.
  1290.  
  1291. amOn
  1292.         ()
  1293.         <internal>.  Turns on mouse cursor.
  1294.  
  1295. amSetXY
  1296.         (nX, nY)
  1297.         <internal>.  Sets X-Y coordinate mouse cursor position.
  1298.  
  1299. amUp1
  1300.         <internal>.
  1301.  
  1302. amUp2
  1303.         <internal>.
  1304.  
  1305. amUp3
  1306.         <internal>.
  1307.  
  1308. amXPos
  1309.         ()
  1310.         <internal>.  Returns the X-coordinate mouse cursor position.
  1311.  
  1312. amYPos
  1313.         ()
  1314.         <internal>.  Returns the Y-coordinate mouse cursor position.
  1315.  
  1316. apAssign
  1317.         ()
  1318.         <internal>.  Returns .true. if DOS ASSIGN is loaded.
  1319.  
  1320. apDriver
  1321.         ()
  1322.         <internal>.  Returns .true. if DRIVER.SYS loaded.
  1323.  
  1324. apInstall
  1325.         ()
  1326.         Returns .true. if PRINT.COM is installed.
  1327.  
  1328. apInt86
  1329.         (nInt, nAX, nBX, nCX, nDX)
  1330.         <internal>.  Sets the register values, calls the interrupt
  1331.         nInt, then returns a string of word values corresponding to the
  1332.         registers.
  1333.  
  1334. apNetBios
  1335.         ()
  1336.         <internal>.  Returns .true. if NetBios is available.
  1337.  
  1338. apPark
  1339.         ()
  1340.         <internal>.  Parks disk drives.
  1341.  
  1342. apPeekLpt
  1343.         (nPort)
  1344.         <internal>.  Returns address of the specified line printer
  1345.         port.
  1346.  
  1347. apPokeLpt
  1348.         (nPort, nAddress)
  1349.         <internal>.  Sets the address of the specified line printer
  1350.         port.
  1351.  
  1352. apShare
  1353.         ()
  1354.         <internal>.  Returns .true. if SHARE.EXE is loaded.
  1355.  
  1356. apSetDate
  1357.         <internal>.
  1358.  
  1359. apSetTime
  1360.         <internal>.
  1361.  
  1362. apHold
  1363.         ()
  1364.         <internal>.  Requires PRINT.COM preloaded.  Returns .true. if
  1365.         successful at pausing the current print job.
  1366.  
  1367. apRelease
  1368.         ()
  1369.         <internal>.  Requires PRINT.COM preloaded.  Releases a
  1370.         previously held print job.
  1371.  
  1372. apRemove
  1373.         (cFile)
  1374.         <internal>.  Requires PRINT.COM preloaded.  Removes cFile from
  1375.         the print queue, returns .true. if successful.
  1376.  
  1377. apSubmit
  1378.         (nPriority, cFile)
  1379.         <internal>.  Requires PRINT.COM preloaded.  Submits cFile to
  1380.         the print queue with nPriority priority.
  1381.  
  1382. apTestBit
  1383.         (nByte, nBit)
  1384.         <internal>.  Returns .true. if specified bit is set.
  1385.  
  1386. avScreenMo
  1387.         <internal>.
  1388.  
  1389. DATE FUNCTIONS
  1390.  
  1391. dApprox
  1392.         (cFreeFormat, [aHelpScreen], [cDelims], [aValid])
  1393.         Returns an array containing 2 dates, the start and end date
  1394.         which represents a character free-format range of dates.
  1395.         aHelpScreen defaults to: {"Please enter a valid date in", "one
  1396.         of  the following fields:", "", "mm/dd/yyyy   mm/yyyy", "", "Or
  1397.         enter the year with your", "choice below:", "", "1st Quarter
  1398.         January", "2nd Quarter February", "3rd Quarter         March",
  1399.         "4th Quarter April", "Winter May", "Spring         June",
  1400.         "Summer July", "Fall August", " September", " October", "
  1401.         November", " December"}.  cDelims defaults to ", " and aValid
  1402.         defaults to:  {{3, "1ST", "Q1"}, {3, "2ND", "Q2"}, {3, "3RD",
  1403.         "Q3"}, {3, "4TH", "Q4"}, {3, "WINTER", "S1"}, {3, "AUTUMN",
  1404.         "S2"}, {4, "FALL", "S2"}, {3, "SPRING", "S3"}, {3, "SUMMER",
  1405.         "S4"}, {3, "JANUARY", "M01"}, {3, "FEBRUARY", "M02"}, {3,
  1406.         "MARCH", "M03"}, {3, "APRIL", "M04"}, {3, "MAY", "M05"}, {3,
  1407.         "JUNE", "M06"}, {3, "JULY", "M07"}, {3, "AUGUST", "M08"}, {3,
  1408.         "SEPTEMBER", "M09"}, {3, "OCTOBER", "M10"}, {3, "NOVEMBER",
  1409.         "M11"}, {3, "DECEMBER", "M12"}}.
  1410.  
  1411. dBegMonth
  1412.         ([dAny])
  1413.         Returns the first date in any month.  Default dAny is Date().
  1414.  
  1415. dBegQuarter
  1416.         (dAny)
  1417.         Returns the first date in any quarter.
  1418.  
  1419. dBegYear
  1420.         ([dAny])
  1421.         Returns the first date in any year. Default dAny is Date().
  1422.  
  1423. dDayOfYear
  1424.         ([dAny])
  1425.         Returns the number of days since the beginning of the year.
  1426.         Default dAny is Date().
  1427.  
  1428. dDay2Str
  1429.         (nDay)
  1430.         Returns a character day, ie "1st", "2nd", etc.
  1431.  
  1432. dDays30
  1433.         (dStart, dEnd)
  1434.         Returns the number of days between dStart and dEnd assuming a
  1435.         360-day year, 30-day month.  This is used in many financial
  1436.         calculations.
  1437.  
  1438. dDaysGoneM
  1439.         ([dAny])
  1440.         Returns the number of days gone in the month which dAny is in.
  1441.         Default dAny is Date().
  1442.  
  1443. dDaysGoneQ
  1444.         ([dAny])
  1445.         Returns the number of days gone in the quarter which dAny is
  1446.         in.  Default dAny is Date().
  1447.  
  1448. dDaysInMonth
  1449.         (dnMonth, [nYear])
  1450.         Returns the number of days in the month.  May specify a
  1451.         complete date or a month and year.  If the latter, the default
  1452.         for year is the current year.
  1453.  
  1454. dDaysLeftM
  1455.         ([dAny])
  1456.         Returns the number of days left in the month which dAny is in.
  1457.         Default dAny is Date().
  1458.  
  1459. dDaysLeftQ
  1460.         ([dAny])
  1461.         Returns the number of days left in the quarter which dAny is
  1462.         in.  Default dAny is Date().
  1463.  
  1464. dDec*
  1465.         ([cIgnored], [nIgnored], cVariable)
  1466.         Used in SET KEY K_MINUS TO dDec, to allow decrementing a date
  1467.         field in a READ.  Only useable with public or private
  1468.         variables.
  1469.  
  1470. dEmpty
  1471.         ()
  1472.         Returns an empty date.
  1473.  
  1474. dEndMonth
  1475.         ([dAny])
  1476.         Returns the last date in any month.  Default dAny is Date().
  1477.  
  1478. dEndQuarter
  1479.         (dAny)
  1480.         Returns the last date in any quarter.
  1481.  
  1482. dEndYear
  1483.         ([dAny])
  1484.         Returns the last date in any year.  Default dAny is Date().
  1485.  
  1486. dInc*
  1487.         ([cIgnored], [nIgnored], cVariable)
  1488.         Used in SET KEY K_PLUS TO dInc, to allow incrementing a date
  1489.         field in a READ.  Only useable with public or private
  1490.         variables.
  1491.  
  1492. dInRange
  1493.         (dTest, dFirst, dLast, [lInclusive])
  1494.         Returns .true. if dTest is within the range defined by dFirst
  1495.         and dLast.  If lInclusive is .true. (the default), then this
  1496.         function will return .true. if dTest is the same date as either
  1497.         dFirst or dLast.
  1498.  
  1499. dLeapYear
  1500.         ([dStart], [dEnd])
  1501.         Returns .true. if a leap day is between the 2 dates.  If the
  1502.         second date is not specified, then returns .true. if dStart is
  1503.         in the same year as a leap day.  Default dStart is Date().
  1504.  
  1505. dMMYY
  1506.         (dAny)
  1507.         Returns the date in "MM/YY" character format.
  1508.  
  1509. dMMYY2Date
  1510.         (nMM, nYY)
  1511.         Creates a date from the supplied month and year.
  1512.  
  1513. dNumMonths
  1514.         (dStart, dEnd)
  1515.         Returns the number of months between two dates.
  1516.  
  1517. dPicture
  1518.         (dAny)
  1519.         Returns a character string to use as a picture template.
  1520.         Depending on value of dAny, the return value will be " <none> "
  1521.         or "99/99/99".
  1522.  
  1523. dQuarter
  1524.         (dAny)
  1525.         Returns the quarter number which the date is within.
  1526.  
  1527. dRestore
  1528.         (cCompressed)
  1529.         Decompresses a compressed date string.  Compressed dates take 3
  1530.         bytes instead of 8.
  1531.  
  1532. dSame
  1533.         ([dAny], [nMonths])
  1534.         Returns a date which is a number of months before or after the
  1535.         current or specified date.  Default nMonths is 1, dAny is
  1536.         Date().
  1537.  
  1538. dSave
  1539.         (d2Save)
  1540.         Compresses a date.  Compressed dates take 3 bytes instead of 8.
  1541.  
  1542. dSetCentury*
  1543.         ([lNewSetting])
  1544.         Returns the current SET CENTURY setting, and optionally sets
  1545.         it.
  1546.  
  1547. dSetDate*
  1548.         (cdDate)
  1549.         Sets the system date.
  1550.  
  1551. dSetSysDate
  1552.         (dAny)
  1553.         Sets the system date.
  1554.  
  1555. dStrFormat
  1556.         (cDate)
  1557.         Returns .true. if cDate is a valid character date.
  1558.  
  1559. dWeekNum
  1560.         ([dAny])
  1561.         Returns the week number of the year in which dAny is.  Default
  1562.         dAny is Date().
  1563.  
  1564. dWord
  1565.         (dAny)
  1566.         Returns the worded format of the date.
  1567.  
  1568. dYear2
  1569.         (dAny)
  1570.         Returns a 2-digit number representing the year.
  1571.  
  1572. ENVIRONMENT FUNCTIONS
  1573.  
  1574. eFlush*
  1575.         ()
  1576.         Flushes the buffers in the all work area.
  1577.  
  1578. eRestore
  1579.         ()
  1580.         Restores the Clipper environment.
  1581.  
  1582. eSave
  1583.         ()
  1584.         Saves the Clipper environment.
  1585.  
  1586. eSetBuffers
  1587.         (nValue)
  1588.         Sets the Buffers value in CONFIG.SYS.  Requires re-boot to
  1589.         activate.
  1590.  
  1591. eSetClipper
  1592.         (cSettings)
  1593.         Establishes a SET CLIPPER statement in AUTOEXEC.BAT with the
  1594.         settings of cSettings.
  1595.  
  1596. eSetFiles
  1597.         (nValue)
  1598.         Sets the Files value in CONFIG.SYS.  Requires re-boot to
  1599.         activate.
  1600.  
  1601. eVariable
  1602.         (cSetVar, cNewValue)
  1603.         Sets the DOS environment variable cSetVar to cNewValue.
  1604.  
  1605. iEnvironment
  1606.         <internal>
  1607.  
  1608. FILE FUNCTIONS
  1609.  
  1610. fAddLine
  1611.         (cnFile, cLine)
  1612.         Adds a new line, cLine, to the end of an existing text file.
  1613.         cnFile may be the filename or the handle of an already open
  1614.         file.
  1615.  
  1616. fAddRecord
  1617.         ([nSeconds])
  1618.         Appends a blank record to the database, locking it, if possible
  1619.         and returns .true.  if successful.  nSeconds is the number of
  1620.         seconds to try before timing out, the default being 3600 (1
  1621.         hour).  There are 3/10's of a second between attempts.
  1622.  
  1623. fAverage
  1624.         (cFieldList)
  1625.         Returns an array of averages corresponding directly to the
  1626.         number of field names specified in cFieldList, where each field
  1627.         name is separated by a slash "/".
  1628.  
  1629. fBlankRec
  1630.         ()
  1631.         Blanks the current record.
  1632.  
  1633. fBrowse
  1634.         ([nTopRow], [nTopCol], [nBottomRow], [nBottomCol], [aColumnInfo],
  1635.         [nFreeze], [cF2Expr], [bSeek], [cColorTable], [lDisplayOnly],
  1636.         [lSuppressRec], [cSubAlias])
  1637.         Browses the current data file.  Note that record locks are
  1638.         handled internally when editing data.  Also, certain special
  1639.         keys are defined: <alt-C> Cut current column, <alt-I> insert
  1640.         last cut column before current column, <alt-M> modify browse
  1641.         window aspects, <alt-G> go to a specific column by way of pop-up
  1642.         column list, <alt-L> mark a list of columns to delete.  Default
  1643.         values are (2, 2, MaxRow()-2, MaxCol()-2, {all field data},
  1644.         iif(lSupressRec, 0, 1), , , iif(IsColor(), "N/W, N/BG, B/W,
  1645.         B/BG, B/W, B/BG, R/W, B/R", "N/W, W/N, N/W, W/N, N/W, W/N,
  1646.         N+/W, W*/N", .n., .n.)
  1647.  
  1648. fBytesNS
  1649.         ([cDrive])
  1650.         Returns the number of bytes per sector from the specified or
  1651.         current drive.
  1652.  
  1653. fChangeKey
  1654.         ("cField/cOldKey/cNewKey")
  1655.         Changes the value of all records where field cField contains
  1656.         the value of &cOldKey to the new value of &cNewKey.
  1657.  
  1658. fChDir
  1659.         (cPath)
  1660.         Changes the current directory to cPath.  Same as DOS CHDIR.
  1661.  
  1662. fClustersND
  1663.         ([cDrive])
  1664.         Returns the number of clusters per drive on the specified or
  1665.         current drive.
  1666.  
  1667. fCompute
  1668.         (cFile|aComputor, [bFor], [bWhile], [nNext], [nRec], [lRest])
  1669.         Computes combinations of sum and average in a single pass.  For
  1670.         example, to compute both the sum and average of the field
  1671.         BALANCE, aComputor would be {{"S", "Balance"}, {"A", "Balance",
  1672.         {||Balance>0}}}.  For lots of calculations, it is simpler to
  1673.         maintain the list in a file, cFile.
  1674.  
  1675. fDriveReady
  1676.         (cDrive)
  1677.         Returns whether the specified drive is ready or not.  cDrive
  1678.         may be specified with or without the colon, eg "C" and "C:" are
  1679.         both acceptable.
  1680.  
  1681. fCreateRpt
  1682.         (cFilename, aReport)
  1683.         Creates a BecknerVision Enhanced Report.
  1684.  
  1685. fEmpty
  1686.         ()
  1687.         Returns .true. if the current record is blank, that is, all
  1688.         fields are empty.
  1689.  
  1690. fExtNew
  1691.         (cFilename, cExtension)
  1692.         Returns cFilename with the extension cExtension.
  1693.  
  1694. fFixDbf
  1695.         (cFile, [cNewFile])
  1696.         Fixes bad records, invalid sectors and other nasty stuff in the
  1697.         database file cFile, creating the new file cNewFile, which
  1698.         defaults to "$Beckner.dbf".
  1699.  
  1700. fIsDir
  1701.         (cDir)
  1702.         Returns .true. if the specified directory exists.  Drive
  1703.         specification is optionally, and defaults to current drive.
  1704.  
  1705. fIsLocked
  1706.         ()
  1707.         Returns .true. if the current record currently has a lock on
  1708.         it.
  1709.  
  1710. fList
  1711.         ()
  1712.         Lists all field data to the current output device in the file.
  1713.         Basically, a data dump.
  1714.  
  1715. fLockRec
  1716.         ([nSeconds])
  1717.         Locks the current record, if possible, returning .true.  if
  1718.         successful.  nSeconds is the number of seconds to try before
  1719.         timing out, the default being 3600 (1 hour).  There are 3/10's
  1720.         of a second between attempts.
  1721.  
  1722. fNumLines
  1723.         (nFile)
  1724.         Returns the number of lines in a text file.  nFile is the
  1725.         handle of a previously opened file.
  1726.  
  1727. fReadFrm
  1728.         (cFilename)
  1729.         Returns an array containing an FRM definition.
  1730.  
  1731. fRestoreRecord
  1732.         ()
  1733.         Restore the contents of the previously saved record contents
  1734.         into the current record.
  1735.  
  1736. fSetFilter
  1737.         ()
  1738.         Prompts for, then sets, a filter expression.  You can use the
  1739.         <F2> key to pop up a field list.
  1740.  
  1741. fSumRec
  1742.         (cFieldList)
  1743.         Returns an array corresponding to the sum of the field name
  1744.         list in cFieldList, in which fields are separated by "/".  For
  1745.         example, to sum 2 balance fields, named BALANCE1 and BALANCE2,
  1746.         you would execute the function fSumRec("Balance1/Balance2"),
  1747.         for which the return value would be a 2-element array
  1748.         containing the sum of each field.
  1749.  
  1750. fUnique
  1751.         ([cTargetDir], [cExtension])
  1752.         Returns a unique filename to be located in the directory
  1753.         cTargetDir, default being the current directory, with the
  1754.         extension cExtension, default being "DBF".
  1755.  
  1756. fZip2City
  1757.         (cZipCode)
  1758.         Returns a 2-element array containing the city and state which
  1759.         correspond to the zip code passed.
  1760.  
  1761. MATH & FINANCIAL FUNCTIONS
  1762.  
  1763. mAmortPmt
  1764.         (nStartBal, nAPR, nNumPmts)
  1765.         Returns the payment amount based on the starting balance
  1766.         nStartBal, the annual percentage rate of nAPR and the number of
  1767.         payments nNumPmts.
  1768.  
  1769. mAmortSched
  1770.         (nStartBal, nAPR, nNumPmts, [dStart], [lUse365])
  1771.         Returns an array containing an amortization schedule.  Elements
  1772.         of each line item are:  [1] payment date, [2] payment amount,
  1773.         [3] principal, [4] interest, [5] balance.  dStart defaults to
  1774.         the first day of the following month.  lUse365 defaults to
  1775.         .false., whereas a 360-day year is used.
  1776.  
  1777. mAPR
  1778.         (nAmtFin, nPayment, nNumPmts)
  1779.         Returns the APR (annual percentage rate) knowing the amount
  1780.         financed nAmtFin, the payment amount nPayment and the number of
  1781.         payments nNumPmts.
  1782.  
  1783. mBase2Val
  1784.         (cNumber, [nBase], [cSpace])
  1785.         Converts any number in any base, from 2 to 38, to a decimal
  1786.         number.  Default nBase is 16.  Some base numbers use a space
  1787.         character, usually <space>, to separate groups of numbers.
  1788.         Binary is a good example of this.  The default cSpace is null.
  1789.  
  1790. mCents
  1791.         (nAmount, [nDecimals])
  1792.         Returns the cents portion of a dollar amount, returning the
  1793.         specified number of decimal positions nDecimals, the default
  1794.         being 2.
  1795.  
  1796. mDigit1Word
  1797.         (nDigit)
  1798.         Returns a word to represent the digit, a value in the range 0
  1799.         to 9.
  1800.  
  1801. mDigitWord
  1802.         (nNumber)
  1803.         Converts nNumber to a worded representation.
  1804.  
  1805. mDivide
  1806.         (nDividend, nDivisor)
  1807.         Returns the result of nDividend/nDivisor or 0 if nDivisor=0.
  1808.         Eliminates the divide by zero error.
  1809.  
  1810. mDollarWord
  1811.         (nAmount)
  1812.         Returns a string representation of the dollar amount, nAmount.
  1813.         Used in check writing procedures.
  1814.  
  1815. mEvenNumber
  1816.         (nAny)
  1817.         Returns .true. if nAny is an even number.
  1818.  
  1819. mHex*
  1820.         (nAny, [nPlaces])
  1821.         Returns a string representing the hexadecimal value of nAny, to
  1822.         a maximum number of digits nPlaces, the default being 2.
  1823.  
  1824. mOddNumber
  1825.         (nAny)
  1826.         Returns .true. if nAny is an odd number.
  1827.  
  1828. mRandom
  1829.         (nBase)
  1830.         Returns a pseudo-random number in the range 1 to nBase, where
  1831.         nBase must be greater than 1.
  1832.  
  1833. mSplit2Sngl
  1834.         (nAmtFin, nNumPmts, dAcquired, nSplitAmt, nBeforeRate, nAfterRate,
  1835.         [lGetPmt], [nPrecision])
  1836.         Returns either the payment amount or the APR, of a split-rate
  1837.         percentage.  A Split-rate is one where one percentage applies
  1838.         to a certain amount of principal, then another APR applies for
  1839.         amounts greater than the split amount.  If lGetPmt, the
  1840.         payment amount is returned.  If not lGetPmt, the default, then
  1841.         the single APR is returned.  Nprecision specifies the decimal
  1842.         precision to use, the default being 7 decimal places.
  1843.  
  1844. MOUSE FUNCTIONS
  1845.  
  1846. iMouse
  1847.         <internal>
  1848.  
  1849. mAvailable
  1850.         ()
  1851.         Returns .true. if a mouse device is available.
  1852.  
  1853. mButtons
  1854.         ()
  1855.         Returns the number of buttons on the mouse device.
  1856.  
  1857. mDownC
  1858.         ()
  1859.         Returns an array with 3 elements, which are [1] number of times
  1860.         the center button has been pressed since the last call, [2] the
  1861.         row where last pressed and [3] the column where last pressed.
  1862.  
  1863. mDownL
  1864.         ()
  1865.         Returns an array with 3 elements, which are [1] number of times
  1866.         the left button has been pressed since the last call, [2] the
  1867.         row where last pressed and [3] the column where last pressed.
  1868.  
  1869. mDownR
  1870.         ()
  1871.         Returns an array with 3 elements, which are [1] number of times
  1872.         the right button has been pressed since the last call, [2] the
  1873.         row where last pressed and [3] the column where last pressed.
  1874.  
  1875. mInit
  1876.         ()
  1877.         Initializes the mouse driver.  This function must be called
  1878.         prior to using any of the mouse functions.
  1879.  
  1880. mLimits
  1881.         (nStartRow, nStartCol, nEndRow, nEndCol)
  1882.         Sets the screen coordinates wherein the mouse cursor may
  1883.         reside.
  1884.  
  1885. mOff
  1886.         ()
  1887.         Turns off the mouse cursor.
  1888.  
  1889. mOn
  1890.         ()
  1891.         Turns on the mouse cursor.
  1892.  
  1893. mPos
  1894.         ()
  1895.         Returns an array where element [1] is the current row, and [2]
  1896.         is the current column, where the mouse cursor is located.
  1897.  
  1898. mSetPos
  1899.         (nRow, nCol)
  1900.         Specifies the coordinates to place the mouse cursor on.
  1901.  
  1902. mStatusC
  1903.         ()
  1904.         Returns .true. if the center button is currently depressed.
  1905.  
  1906. mStatusL
  1907.         ()
  1908.         Returns .true. if the left button is currently depressed.
  1909.  
  1910. mStatusR
  1911.         ()
  1912.         Returns .true. if the right button is currently depressed.
  1913.  
  1914. mUpC
  1915.         ()
  1916.         Returns an array with 3 elements, which are [1] number of times
  1917.         the center button has been released since the last call, [2]
  1918.         the row where last released and [3] the column where last
  1919.         released.
  1920.  
  1921. mUpL
  1922.         ()
  1923.         Returns an array with 3 elements, which are [1] number of times
  1924.         the left button has been released since the last call, [2] the
  1925.         row where last released and [3] the column where last released.
  1926.  
  1927. mUpR
  1928.         ()
  1929.         Returns an array with 3 elements, which are [1] number of times
  1930.         the right button has been released since the last call, [2] the
  1931.         row where last released and [3] the column where last released.
  1932.  
  1933. mWait
  1934.         ()
  1935.         Similar to Inkey(), but will wait until either a key depression
  1936.         or a mouse button has been pressed.
  1937.  
  1938. mWithin
  1939.         (nStartRow, nStartCol, nEndRow, nEndCol)
  1940.         Returns .true. if the mouse cursor is currently within the
  1941.         specified screen coordinates.
  1942.  
  1943. mXPos
  1944.         ()
  1945.         Returns the X-coordinate position of the mouse cursor.
  1946.  
  1947. mYPos
  1948.         ()
  1949.         Returns the Y-coordinate position of the mouse cursor.
  1950.  
  1951. OBJECT-ORIENTED FUNCTIONS
  1952.  
  1953. oRefresh
  1954.         (aGetList)
  1955.         Refreshes all GET objects within the array aGetList,
  1956.         redisplaying each.
  1957.  
  1958. PRINTER & SPOOLER FUNCTIONS
  1959.  
  1960. iRoute
  1961.         <internal>
  1962.  
  1963. pAddrLPT
  1964.         ()
  1965.         Returns a 3-dimensional array giving the addresses of LPT1,
  1966.         LPT2 and LPT3, respectively.
  1967.  
  1968. pCurrent
  1969.         ()
  1970.         Requires PRINT.COM to be preloaded.  Returns the filename of
  1971.         the currently printing file.
  1972.  
  1973. pDespool
  1974.         ()
  1975.         Begins despooling a spooled/network print file.
  1976.  
  1977. pFileList
  1978.         ([cFile], [aFields], [bFor], [bWhile], [nNext], [nRecord], [lRest])
  1979.         Prints data from a file.  cFile defaults to the current alias
  1980.         (but must be a filename), aFields defaults to the record number
  1981.         plus all fields.  bFor, bWhile, nNext, nRecord and lRest
  1982.         correspond to FOR, WHILE, NEXT, RECORD and REST clauses,
  1983.         respectively.
  1984.  
  1985. pHold
  1986.         ()
  1987.         Requires PRINT.COM to be preloaded.  Temporarily halts print
  1988.         despooling.
  1989.  
  1990. pInstalled
  1991.         ()
  1992.         Returns .true. if PRINT.COM is installed.
  1993.  
  1994. pl10CPI
  1995.         ()
  1996.         Requires Hewlett Packard compatible laser printer.  Sets 10 CPI
  1997.         (characters per inch).
  1998.  
  1999. pl12CPI
  2000.         ()
  2001.         Requires Hewlett Packard compatible laser printer.  Sets 12 CPI
  2002.         (characters per inch).
  2003.  
  2004. pl17CPI
  2005.         ()
  2006.         Requires Hewlett Packard compatible laser printer.  Sets 17 CPI
  2007.         (characters per inch).
  2008.  
  2009. pl6LPI
  2010.         ()
  2011.         Requires Hewlett Packard compatible laser printer.  Sets 6 LPI
  2012.         (lines per inch).
  2013.  
  2014. pl8LPI
  2015.         ()
  2016.         Requires Hewlett Packard compatible laser printer.  Sets 8LPI
  2017.         (lines per inch).
  2018.  
  2019. plCopies
  2020.         (nCopies)
  2021.         Requires Hewlett Packard compatible laser printer.  Sets the
  2022.         number of copies to make for the next printout.
  2023.  
  2024. plPageLength
  2025.         ([cnLength], [nLPI])
  2026.         Requires Hewlett Packard compatible laser printer.  Sets the
  2027.         page length based on number of lines per page cnLength and
  2028.         lines per inch nLPI.  Defaults to 66, 6.  cnLength may be a
  2029.         value of 0, 66, 84, 63, 70 or 60 at 6 LPI, or 0, 88, 112, 84,
  2030.         93 or 80 at 8LPI, or may be the capitalized letter in these
  2031.         words:  "Default", "Letter", "leGal", "Executive", "A4" or
  2032.         "B5".
  2033.  
  2034. plReset
  2035.         ()
  2036.         Requires Hewlett Packard compatible laser printer.  Resets
  2037.         printer defaults.
  2038.  
  2039. plSetHMI
  2040.         ([nHMI])
  2041.         Requires Hewlett Packard compatible laser printer.  Sets the
  2042.         characters per inch to nHMI, which defaults to 12.
  2043.  
  2044. plSetVMI
  2045.         ([nVMI])
  2046.         Requires Hewlett Packard compatible laser printer.  Sets the
  2047.         lines per inch to nVMI, which defaults to 8.
  2048.  
  2049. plSource
  2050.         ([cSource])
  2051.         Requires Hewlett Packard compatible laser printer.  Sets the
  2052.         paper source, which may be the capitalized letter in one of
  2053.         these phrases: "Current source", "Upper tray", "Manual feed" or
  2054.         "manual Envelope", and defaults to "C".
  2055.  
  2056. plUnderline
  2057.         ([lOn])
  2058.         Requires Hewlett Packard compatible laser printer.  Turns on or
  2059.         off underlined print, depending on the value of lOn, which
  2060.         defaults to .true..
  2061.  
  2062. pPrinter
  2063.         ()
  2064.         Returns .true. if the printer is available.  If not, a list of
  2065.         possible cures is displayed, and a wait state is invoked.
  2066.         Pressing <escape> or correcting the problem will halt the wait
  2067.         state, returning .true.  if the problem was corrected or
  2068.         .false. if <escape> was pressed.
  2069.  
  2070. pRelease
  2071.         ()
  2072.         Requires PRINT.COM to be preloaded.  Restarts despooling
  2073.         following a pHold() function was issued.
  2074.  
  2075. pRemove
  2076.         (cFile)
  2077.         Requires PRINT.COM to be preloaded.  Removes the specified
  2078.         file, cFile, from the print queue.
  2079.  
  2080. pRoute
  2081.         (cFile)
  2082.         Routes subsequent printing to the file or device cFile.  Use
  2083.         pUnRoute() to disable routing.
  2084.  
  2085. pSendCodes
  2086.         (cCodes)
  2087.         Sends the specified codes to the printer.  cCodes is a list of
  2088.         decimal codes separated by a slash.
  2089.  
  2090. pSetLPT
  2091.         (nPort, [nAddress])
  2092.         Returns the current address of the specified line printer port
  2093.         (1, 2 or 3), and, optionally, sets a new address.
  2094.  
  2095. pSubmit
  2096.         (cFile, [nPriority])
  2097.         Requires PRINT.COM to be preloaded.  Submits cFile to the print
  2098.         queue, with the specified priority, which defaults to 0.
  2099.  
  2100. pSwapLPT
  2101.         (nPort1, nPort2)
  2102.         Swaps the addresses of the specified line printer ports, which
  2103.         may be 1, 2 or 3.
  2104.  
  2105. pTab
  2106.         (nTab, x2Print)
  2107.         Prints the expression, x2Print, at the tab position nTab.
  2108.         Printing must be enabled.
  2109.  
  2110. pUnRoute
  2111.         ()
  2112.         Restores printer routing to what it was prior to the last
  2113.         pRoute() function call.
  2114.  
  2115. PROGRAMMING & MISCELLANEOUS FUNCTIONS
  2116.  
  2117. iCount
  2118.         (nOption)
  2119.         Normally <internal>.  Sets up a static variable as a counter.
  2120.         If nOption is 0, then the static variable's value is
  2121.         initialized to 0, returning the value of the counter prior to
  2122.         initialization.  If nOption is 1, the default, then the counter
  2123.         is incremented and the new counter value is returned.
  2124.  
  2125. iReadIdle
  2126.         <internal>
  2127.  
  2128. iSyntax
  2129.         <internal>
  2130.  
  2131. pAbort
  2132.         ()
  2133.         Returns .true. unless <escape> is pressed.  Use in WHILE
  2134.         clauses to allow <escape> to be an abort key.
  2135.  
  2136. pAltC*
  2137.         ()
  2138.         Sets <alt-C> to ask the user if they really want to quit, then
  2139.         saving the screen to a file "altc.txt" before clearing the
  2140.         screen and quitting.
  2141.  
  2142. pAnalyze
  2143.         (xData1, cRel, xData2)
  2144.         Returns the result of the evaluation of xData1 combined with
  2145.         the evaluation of xData2 using the operation cRel.
  2146.  
  2147. pAnyTouch*
  2148.         ()
  2149.         Same as Inkey(0).
  2150.  
  2151. pBeep
  2152.         ()
  2153.         Makes a beep sound.
  2154.  
  2155. pBegin*
  2156.         ()
  2157.         Logs the current date and time to a file called "_beckner.trk",
  2158.         in compressed format.  Returns .true. if the program last
  2159.         issued a pEnd() before this pBegin().  Primarily used to see if
  2160.         a program ended normally.
  2161.  
  2162. pCrashCheck
  2163.         ([lStart], [cNotes], [lDelIndices])
  2164.         The newer method of checking to see if a program ended
  2165.         abnormally.  Maintains a file with a record for each terminal,
  2166.         if networked, to see that they ended their programs normally.
  2167.         Uses the same "errorlog.txt" used by the error handler.  lStart
  2168.         should be .true., the default, when first encountered in a
  2169.         program, and must be .false. when ending a program.  cNotes is
  2170.         usually an indication of where you were in the program, for
  2171.         easier debugging.  If lDelIndices, the default, then all
  2172.         indices will be deleted prior to quitting the program.  A
  2173.         notice will be given to warn the user of the situation.  If not
  2174.         lDelIndices, then the user will be prompted to reindex or
  2175.         ignore the condition.
  2176.  
  2177. pCtrlW
  2178.         ()
  2179.         Stuffs a <ctrl-W> into the keyboard buffer.
  2180.  
  2181. pDemo
  2182.         ([dExpires], [nMaxUse], [aFileMax], [acMessage])
  2183.         Sets up the current program as a demo program, based on one or
  2184.         more criteria.  dExpires is a date of expiration, nMaxUse is
  2185.         the maximum number of times the program can be used and
  2186.         aFileMax sets a maximum number of records in one or more files
  2187.         in the format {{cFile, nMax}}.  acMessage is an optional
  2188.         message possibly letting the user know the demo nature of the
  2189.         program.
  2190.  
  2191. pDisplayRec
  2192.         ([nRow], [nCol])
  2193.         Displays the current record number in the format "99,999,999"
  2194.         at the specified screen coordinates nRow, nCol, which default
  2195.         to MaxRow(), 0, respectively.
  2196.  
  2197. pDosCmd*
  2198.         (cCommand, [cParm])
  2199.         Issues a RUN command appending cParm, if specified, to
  2200.         cCommand.
  2201.  
  2202. pEnd*
  2203.         ()
  2204.         Logs the end of the program.  A pBegin() functions must have
  2205.         previously been called.
  2206.  
  2207. pError*
  2208.         ([nErrorCode])
  2209.         Sets or returns the last BecknerVision error code.  These are
  2210.         not used by most functions and are obsolete.
  2211.  
  2212. pErrorMsg*
  2213.         (cMsg, lQuit)
  2214.         Displays a message cMsg, and optionally, quits.
  2215.  
  2216. pErrorSys
  2217.         ([cSystem])
  2218.         Replaces Clipper's error handler with a more complete one.
  2219.         Maintains a log of errors in "errorlog.txt".  Should be first
  2220.         thing used in a program.
  2221.  
  2222. pEvaluate
  2223.         (cExprList, [cDelimiter])
  2224.         Evaluates a series of expression, each delimited by cDelimiter,
  2225.         which defaults to "//".
  2226.  
  2227. pHelp
  2228.         (cProcedure, nLine, cVar)
  2229.         Usually assigned to a key, ie SET KEY K_F1 TO pHelp, to allow
  2230.         for context-sensitive help.  Automatically creates a help
  2231.         record in a file called "help.dbf" if one doesn't exist.
  2232.         Fully-interactive.
  2233.  
  2234. pInSet
  2235.         (xExpr, cExprSet, [cDelimiter])
  2236.         Evaluates xExpr, then returns .true. if the result is found in
  2237.         the set cExprSet, delimited by cDelimiter, which defaults to
  2238.         ",".
  2239.  
  2240. pInt86
  2241.         (nInt, nAX, nBX, nCX, nDX, nAH, nAL, nBH, nBL, nCH, nCL, nDH, nDL)
  2242.         Sets the registers AX, BX, CX and DX based on the supplied
  2243.         parameters, then issues the interrupt nInt, returning an array
  2244.         containing the registers {AX, BX, CX, DX}.
  2245.  
  2246. pKeyClear
  2247.         ()
  2248.         Clears all SET KEY action block from all keys.
  2249.  
  2250. pLineChk
  2251.         (cFile)
  2252.         Prints the contents of the program source file cFile, verifying
  2253.         all levels of quote marks.
  2254.  
  2255. pLoopEval
  2256.         (b2Eval, [nCount], [nStart], [nStep])
  2257.         A FOR...NEXT loop in function form, so that this sequence of
  2258.         commands is executed:  FOR nCtr := nStart TO nCount STEP nStep;
  2259.         Eval(b2Eval, nCtr); NEXT Default values are 1 for nCount,
  2260.         nStart and nStep.
  2261.  
  2262. pMenu
  2263.         ()
  2264.         An interactive menu system for DOS, creating and executing
  2265.         batch files to execute menu options.
  2266.  
  2267. pOnDo
  2268.         (nOption, aProcs)
  2269.         Emulates BASIC's ON...GOSUB command.  aProcs contains the
  2270.         procedures to execute, nOption specifies which one to execute.
  2271.         Note that STATIC PROCEDURES/FUNCTIONS cannot be used here.
  2272.  
  2273. pQuit
  2274.         ()
  2275.         Turns off color, clears the screen and quits the program.
  2276.  
  2277. pRandom*
  2278.         (nMax)
  2279.         Same as mRandom().
  2280.  
  2281. pSetSaver
  2282.         ([nTime], [bTimer])
  2283.         Sets values for the SET SAVETIME, SET SAVEBLOCK and READ
  2284.         commands.  nTime is the time before the screen saver is
  2285.         invoked, in seconds.  Specify 0 to disable the screen saver.
  2286.         bTimer is the code block to execute when the idle time exceeds
  2287.         nTime.  A default function is provided internally simply
  2288.         displays the message "-press any key-" at random locations on
  2289.         the screen.
  2290.  
  2291. pSetType
  2292.         (bGetSet, cNewType)
  2293.         Evaluates bGetSet, then changes the type of the return value to
  2294.         cNewType, then re- evaluates bGetSet, passing the block the
  2295.         altered original return value.
  2296.  
  2297. pSoundError
  2298.         ()
  2299.         Makes an error sound.
  2300.  
  2301. pTestBit*
  2302.         Same as bTestBit, except it requires the first parameter to be
  2303.         numeric only.
  2304.  
  2305. pTSR
  2306.         ([nKey], [cKey], [cExe], [cPath], [nMemory], [lEMS], lXMS])
  2307.         Requires Dr Switch-ASE Library.  Sets up a TSR hot-key, and
  2308.         invokes the hot-key program.  nKey is the numeric key
  2309.         expression, which defaults to K_ALT_F1.  cKey is the character
  2310.         representation of the hot key, which defaults to "{alt}{F1}".
  2311.         cExe is the program to invoke.  Passing a null string, the
  2312.         default, causes a COMMAND.COM to be invoked.  cPath is the path
  2313.         where cExe is to be found, which defaults to "C:\".  nMemory is
  2314.         the total conventional memory to make available, which defaults
  2315.         to 640.  If lEMS , the default, then EMS memory is made
  2316.         available.  If lXMS, the default, then XMS memory is made
  2317.         available.
  2318.  
  2319. pUpdate
  2320.         (cFile)
  2321.         cFile is a structure file, and contains file definitions for
  2322.         other database files.  Using the data in the structure file,
  2323.         all matching files are verified for integrity.  If the file is
  2324.         different in the structure file, then it is updated,
  2325.         maintaining all data integrity.  New files are created as
  2326.         needed.
  2327.  
  2328. pVal2Word*
  2329.         (nInt)
  2330.         Returns a word value.
  2331.  
  2332. pVarMake
  2333.         (cVar, xInitialValue)
  2334.         Creates a public variable named cVar, with an initial value of
  2335.         xInitialValue.
  2336.  
  2337. pVarRelease
  2338.         (cVar)
  2339.         Release a public or private variable named cVar.
  2340.  
  2341. pWord2Val*
  2342.         (cWord)
  2343.         Returns an integer value from cWord.
  2344.  
  2345. RECORD POSITIONING FUNCTIONS
  2346.  
  2347. rAbsRecord
  2348.         (cAlias, cSeek, cWhile, nCount)
  2349.         Positions the record pointer in the work area cAlias after
  2350.         issuing a SEEK command for the expression cSeek, WHILE cWhile
  2351.         is evaluated .true. or FOR nCount times, whichever becomes
  2352.         .false.  first.
  2353.  
  2354. rDuplicate
  2355.         ([nStart], [nEnd])
  2356.         Duplicates a series of records, copying the new records to the
  2357.         end of the current file.  If no parameters are specified, then
  2358.         only the current record is duplicated.  No indices may be
  2359.         active if parameters are specified, or the result will be
  2360.         improper.  If only nStart is specified, then records are
  2361.         duplicated from the current record to record # nStart.  If both
  2362.         parameters are specified, then records from # nStart to # nEnd
  2363.         will be duplicated.  Upon completion, the record pointer will
  2364.         be at the first duplicated record.
  2365.  
  2366. rFullGet
  2367.         ([cAlias], [cGetVar])
  2368.         An interactive function which lets you get a specified record
  2369.         in the work are cALias, which defaults to the current work
  2370.         area.
  2371.  
  2372. rFullLocate
  2373.         ()
  2374.         An interactive search feature to get a record.
  2375.  
  2376. rGoBottom*
  2377.         ()
  2378.         Same as dbGoBottom().
  2379.  
  2380. rGoRecord*
  2381.         (nRecord)
  2382.         Similar to dbGoto().  If the specified record number is
  2383.         invalid, then functions the same as dbGoBottom().
  2384.  
  2385. rGoTop*
  2386.         ()
  2387.         Same as dbGoTop().
  2388.  
  2389. rLocate
  2390.         (cAlias, cLocator, cWhile)
  2391.         In work area cAlias, a record is located which matches the
  2392.         expression cLocator while the condition cWhile is .true..  If
  2393.         not found, then the record pointer is positioned to the last
  2394.         record in the file.
  2395.  
  2396. rNextRec
  2397.         ([cAlias], [cTest])
  2398.         Skips to the next record in work area cAlias, which defaults to
  2399.         the current work area, then evaluates cTest, if specified.  If
  2400.         the evaluation returns .false., then the record pointer is
  2401.         positioned to the last record in the file.
  2402.  
  2403. rPickList*
  2404.         (cField, [cFilter], [cWhile], [nStart], [lAllowNew], [nMaxRecs],
  2405.         [nFirstRec], [nIndex], [cTitle], [cPrompt])
  2406.         Superceded by vPopWhen().
  2407.  
  2408. rPriorRec
  2409.         ([cAlias], [cTest])
  2410.         Skips to the previous record in work area cAlias, which
  2411.         defaults to the current work area, then evaluates cTest, if
  2412.         specified.  If the evaluation returns .false., then the record
  2413.         pointer is positioned to the last record in the file.
  2414.  
  2415. rSeek*
  2416.         (cAlias, cSeek)
  2417.         Use dbSeek() instead.  Issues a SEEK command for the expression
  2418.         cSeek in the work area cAlias.
  2419.  
  2420. rSequence
  2421.         ([cAlias])
  2422.         Interactive function to let the user change the current master
  2423.         index in the work area cAlias, which defaults to the current
  2424.         work area.
  2425.  
  2426. rSkip
  2427.         ([cAlias], [cSkipCond], [nDistance])
  2428.         Similar to dbSkip().  If no parameters are specified, or cAlias
  2429.         is the only parameter specified, then SKIPs a single record in
  2430.         the work area cAlias, which defaults to the current work area.
  2431.         If cSkipCond is specified, then it is evaluated after the SKIP
  2432.         completes.  If .false., then the record pointer is positioned
  2433.         to the last record in the file.  nDistance is the number of
  2434.         records to skip beginning with the current record and defaults
  2435.         to 1.
  2436.  
  2437. STRING FUNCTIONS
  2438.  
  2439. sChar2Type
  2440.         (cExpr, xTypeChk)
  2441.         Evaluates xTypeChk, then converts the string cExpr into the
  2442.         same type as xTypeChk, and returns the converted string.
  2443.  
  2444. sCharPos
  2445.         (cFind, cSource, [nCount])
  2446.         Returns the position in cSource where the nCount occurrence of
  2447.         cFind is found.  nCount defaults to 1.
  2448.  
  2449. sCharRange
  2450.         (cAny, nMin, nMax)
  2451.         Returns .true. if every character in cAny is within the ASCII
  2452.         range nMin to nMax.
  2453.  
  2454. sChrData
  2455.         (aNumbers)
  2456.         Returns a string where each number in aNumbers represent an
  2457.         ASCII value.
  2458.  
  2459. sConvertName
  2460.         (cName)
  2461.         Returns a name converted from "L,[ ]F[ M][ S]" to the format
  2462.         "F[ M] L[ S]", where F is the first name, M is the middle name
  2463.         or initial, L is the last name and S is a suffix in the set
  2464.         {"II", "III", "JR", "SR"}.
  2465.  
  2466. sCount
  2467.         (cSearch4, cAny)
  2468.         Returns the number of occurrences of cSearch4 found in cAny.
  2469.  
  2470. sCountBegin
  2471.         (cSearch4, cAny)
  2472.         Returns the number of consecutive times cSearch4 is found at
  2473.         the beginning of cAny.
  2474.  
  2475. sDistribute
  2476.         (cAny, [nWidth])
  2477.         Returns a string of length nWidth, which defaults to 80, where
  2478.         all words are evenly spaced.
  2479.  
  2480. sDollar
  2481.         (nAmount)
  2482.         Returns a string, prefixed with a dollar sign, and no
  2483.         intervening spaces, of nAmount.
  2484.  
  2485. sEval
  2486.         (cAny, bCode)
  2487.         Evaluates bCode, sending every character of cAny to bCode
  2488.         individually.
  2489.  
  2490. sExtract
  2491.         (cAny, [cDelimiter], [nCount])
  2492.         Returns the nCount string "field", which defaults to the first
  2493.         "field", from the string "record", where each "field" is
  2494.         separated by cDelimiter, which defaults to "/".
  2495.  
  2496. sFieldNum
  2497.         (cAny, [cDelimiter], cFind)
  2498.         Returns the string "field" number from the string "record" cAny
  2499.         where the string "field" cFind is found.  Each "record" is
  2500.         delimited by cDelimiter, which defaults to "/".
  2501.  
  2502. sFirstName
  2503.         (cName, nLength)
  2504.         Returns the first name extracted from a name field in the
  2505.         format "L,[ ]F[ etc]", where L is the last name and F is the
  2506.         first name.  The returned string will be padded with spaces or
  2507.         truncated to be the length nLength.
  2508.  
  2509. sGetDelimited
  2510.         (cAny, [cDelimiters], [nCount])
  2511.         Returns a substring of cAny, which is delimited on both sides
  2512.         be the delimiters specified in cDelimiters.  cDelimiters may be
  2513.         one character, which would delimit both sides of the string
  2514.         "field", or both the left and right delimiter.  The default
  2515.         cDelimiters is a double-quote mark.  nCount specifies the
  2516.         "field" to extract, and defaults to 1.  Note that only the
  2517.         characters between the delimiters are returned, not including
  2518.         the delimiters.
  2519.  
  2520. sInitial
  2521.         (cName, cWhich)
  2522.         Returns the first or last name's initial from the name cName,
  2523.         in the format "L,[ ]F[ etc]", where L is the last name and F is
  2524.         the first name.  cWhich determines which initial to return, and
  2525.         may be "F" for first name or "L" for last name.
  2526.  
  2527. sLastName
  2528.         (cName, nLength)
  2529.         Returns the last name extracted from a name field in the format
  2530.         "L,[ ]F[ etc]", where L is the last name and F is the first
  2531.         name.  The returned string will be padded with spaces or
  2532.         truncated to be the length nLength.
  2533.  
  2534. sMake
  2535.         (xAny)
  2536.         Returns a string, converting any other data type.  Character
  2537.         types are returned without change, logical types are returned
  2538.         as "Y" or "N", date types are converted using DToC() and
  2539.         numeric types are trimmed of all spaces.  Any other type
  2540.         returns "error".
  2541.  
  2542. sParse
  2543.         ([@]cAny, [cnDelimiter])
  2544.         Returns a substring parsed from the first characters of cAny up
  2545.         to the delimiter cnDelimiter, which defaults to "/".
  2546.         cnDelimiter may also be numeric, and thus specifies the number
  2547.         of characters to parse.  If passed by reference, cAny is
  2548.         modified by physically removing the substring and the delimiter
  2549.         (when cnDelimiter is a character delimiter).
  2550.  
  2551. sParseEval
  2552.         (cAny, [cnDelimiter], bCode)
  2553.         Repetitively evaluates bCode by passing the result of
  2554.         sParse(@cAny, cnDelimiter).  cAny is not modified.
  2555.  
  2556. sProtect
  2557.         (cAny, [cProtector])
  2558.         Returns an encrypted form of cAny based on cProtector, which
  2559.         may be any string.
  2560.  
  2561. sSetLength
  2562.         (cAny, nLength)
  2563.         Returns cAny with the absolute length of nLength, which is
  2564.         created by either truncating or padding the end of the string
  2565.         with spaces.
  2566.  
  2567. sSqueeze
  2568.         (cAny, nStart, nCount)
  2569.         Returns a substring of cAny by removing every (nCount)th
  2570.         character, beginning with the character at nStart.
  2571.  
  2572. sStateName
  2573.         (cAbbrev)
  2574.         Returns the state name based on the valid 2-character
  2575.         abbreviation cAbbrev.
  2576.  
  2577. sStrZero
  2578.         (nAny, nPlaces)
  2579.         Returns a string whose length is nPlaces, where all spaces are
  2580.         converted to zeroes.
  2581.  
  2582. sTrimZero
  2583.         (nAmount)
  2584.         Returns a string representation of nAmount with all zeroes
  2585.         removed from the left and right sides.
  2586.  
  2587. sType2Char*
  2588.         Same as sMake().
  2589.  
  2590. sUnProtect
  2591.         (cAny, cProtector)
  2592.         Decrypts a previously encrypted string, cAny, using cProtector,
  2593.         which MUST be the same as specified with sProtect().
  2594.  
  2595. sUnSqueeze
  2596.         (cAny, cReturn, nStart, nCount)
  2597.         Stuffs cAny into cReturn by spreading the characters nCount
  2598.         apart, beginning at character position nStart.
  2599.  
  2600. sValidChars
  2601.         (cAny, cChars)
  2602.         Returns .true. if every character in cAny is contained in
  2603.         cChars.
  2604.  
  2605. sValidState
  2606.         (cState)
  2607.         Returns .true. if the 2-letter abbreviation cState is a valid
  2608.         state abbreviation, or is empty.
  2609.  
  2610. sZipPicture
  2611.         (cZipCode)
  2612.         Returns "" if cZipCode is empty, or a 5-character zip code if
  2613.         the right 4 character of cZipCode are empty, or in the format
  2614.         "99999-9999" otherwise.
  2615.  
  2616. TIME FUNCTIONS
  2617.  
  2618. iElapse
  2619.         <internal>
  2620.  
  2621. tChar2Time
  2622.         (cTime)
  2623.         Returns a compressed (3-character) time string from a normal
  2624.         time string in the format "HH:MM:SS".
  2625.  
  2626. tDiffHr
  2627.         (cStart, cEnd)
  2628.         Returns the time difference in hours.
  2629.  
  2630. tDiffMin
  2631.         (cStart, cEnd)
  2632.         Returns the time difference in minutes.
  2633.  
  2634. tElapsedC
  2635.         ([nTimer])
  2636.         Returns the elapsed time of the last started timer, or nTimer,
  2637.         if specified.
  2638.  
  2639. tElapsedO
  2640.         ([nTimer])
  2641.         Turns off nTimer, which defaults to the last timer set,
  2642.         recovering the space it used.
  2643.  
  2644. tElapsedR
  2645.         ([nTimer])
  2646.         Restarts a previously stopped timer nTimer, which defaults to
  2647.         the last available timer.
  2648.  
  2649. tElapsedS
  2650.         ()
  2651.         Starts an elapsed-time timer, returning the timer number.
  2652.  
  2653. tElapsedX
  2654.         ([nTimer])
  2655.         Temporarily halts the timer nTimer, which defaults to the last
  2656.         available timer.
  2657.  
  2658. tSetSysTime
  2659.         (cTime)
  2660.         Sets DOS' time.
  2661.  
  2662. tTime2Char
  2663.         (cPacked)
  2664.         Returns a time string in the format "HH:MM:SS" from a
  2665.         previously packed time.
  2666.  
  2667. VIDEO FUNCTIONS
  2668.  
  2669. iBackground
  2670.         <internal>
  2671.  
  2672. iCursor
  2673.         <internal>
  2674.  
  2675. iJunk
  2676.         <internal>
  2677.  
  2678. iScreen
  2679.         <internal>
  2680.  
  2681. iViewColor
  2682.         <internal>
  2683.  
  2684. iViewNum
  2685.         <internal>
  2686.  
  2687. vActiveGet
  2688.         ([aGetList])
  2689.         Returns the GET object number which has focus.  aGetList
  2690.         defaults to vSetGetList().
  2691.  
  2692. vAnswer
  2693.         (cPrompt, nGetLength, [xDefault])
  2694.         Returns a string answer which the user enters in response to
  2695.         cPrompt, for a maximum length of nGetLength, using a default
  2696.         value of xDefault, which defaults to spaces.  The prompt is
  2697.         presented on the last row on the screen.
  2698.  
  2699. vAnyKey
  2700.         ()
  2701.         Prompts the user to press a key to continue, then awaits a
  2702.         keypress.
  2703.  
  2704. vAsk
  2705.         (cPrompt, cType, cPicture)
  2706.         Issues the prompt cPrompt on the last row and awaits a response
  2707.         from the user.  The GET variable will be of type cType, using
  2708.         the picture cPicture.  The returned answer will be of type
  2709.         cType.
  2710.  
  2711. vBackground
  2712.         ([cText], [cColor])
  2713.         cText defaults to "Beckner", and cColor defaults to gray on
  2714.         white.  If cText is a single character, then the screen, except
  2715.         for the first row, is set to this character.  Multiple
  2716.         characters are printed in a special design.
  2717.  
  2718. vBorder
  2719.         (nStartRow, nStartCol, nEndRow, nEndCol, [cType])
  2720.         A border is drawn at the specified coordinates.  If cType is
  2721.         "D", the default, a double-line box is drawn.  If cType is "S",
  2722.         a single-line box is drawn.  Otherwise, cType contains the
  2723.         characters to use in a @...BOX command.
  2724.  
  2725. vCenter
  2726.         (nWidth, nRow, nCol, cAny)
  2727.         Centers the string cAny on the screen beginning at nRow, nCol,
  2728.         within the width nWidth.
  2729.  
  2730. vCenterPos
  2731.         (cAny, nWidth)
  2732.         Returns the column number to start printing the string cAny to
  2733.         fit in the width nWidth, which defaults to MaxCol()+1.
  2734.  
  2735. vCopy
  2736.         (nStartRow, nStartCol, nEndRow, nEndCol, nNewRow, nNewCol)
  2737.         Copies the screen defined by the first four coordinates to the
  2738.         screen area whose top coordinates are nNewRow and nNewCol.
  2739.  
  2740. vCopyW
  2741.         (nStartRow, nStartCol, nNumRows, nNumCols, nNewRow, nNewCol)
  2742.         Copies the screen defined by the first two coordinates to the
  2743.         screen area whose top coordinates are nNewRow and nNewCol,
  2744.         copying nNumRows number of rows and nNumCols number of columns.
  2745.  
  2746. vCreateScreen
  2747.         <internal>
  2748.  
  2749. vCursRest
  2750.         ()
  2751.         Restores the cursor to the position it was at when the last
  2752.         vCursSave() function was called.
  2753.  
  2754. vCursSave
  2755.         ()
  2756.         Saves the current cursor position.  Use vCursRest() to restore
  2757.         it.
  2758.  
  2759. vFullColor
  2760.         ()
  2761.         Returns a color string created by the user in an interactive
  2762.         fashion.
  2763.  
  2764. vGet
  2765.         (oGet)
  2766.         A replacement reader for READ.  Automatically used when
  2767.         including the Beckner header file "beckner.inc"
  2768.  
  2769. vHighlight
  2770.         ()
  2771.         Returns a color string to highlight the current.
  2772.  
  2773. vInsCursor
  2774.         ()
  2775.         Toggles the state of the insert mode, with the cursor being
  2776.         full block for non insert mode and half size for insert mode.
  2777.         Usually used in set key, eg SET KEY K_INS TO vInsCursor.
  2778.  
  2779. vIsSure
  2780.         ([nRow], [nCol], [lBeep])
  2781.         Displays and "Are you sure?" message, returning the user's
  2782.         logical response.  The message is in a centered window unless
  2783.         the screen coordinates are specified.  If one screen coordinate
  2784.         is specified, both must be specified.  If lBeep, a beep sound
  2785.         is made prior to the prompt.  The default for lBeep is .false..
  2786.  
  2787. vMakeCoord
  2788.         (nRows, nCols, [lBorder])
  2789.         Returns an array of 4 screen coordinates corresponding to the
  2790.         upper left row & column and the lower right row & column to
  2791.         create a window nRows high by nCols wide.  If lBorder, the
  2792.         default, the screen coordinates are made one larger in any
  2793.         direction to accommodate a border.
  2794.  
  2795. vMenu
  2796.         (cMenuData, [aMenuList])
  2797.         Produces a menu and returns the users menu choice number.
  2798.         cMenuData is a menu type, followed by a slash, followed by the
  2799.         menu options if aMenuList is not specified.  If specified, then
  2800.         aMenuList's element correspond to each menu choice and
  2801.         cMenuData merely specifies the menu type, which may be "T" for
  2802.         top menu or "D" for down menu, which is centered on the screen.
  2803.         If "D" is used, then the number of rows, columns and window
  2804.         width must be specified after the "D", separated by slashes.
  2805.  
  2806. vMenu2
  2807.         (aMenuList)
  2808.         Produces a top-line menu, using the elements of aMenuList as
  2809.         the menu options, returning the user's menu choice number or 0
  2810.         if <esc> is pressed.
  2811.  
  2812. vMessageOff
  2813.         ()
  2814.         Turns off the last message turned on by vMessageOn().
  2815.  
  2816. vMessageOn
  2817.         (acMessage, [cColor])
  2818.         Displays a centered message on-screen.  acMessage may be a
  2819.         single string or an array of string lines.
  2820.  
  2821. vMove
  2822.         (nStartRow, nStartCol, nEndRow, nEndCol, nNewRow, nNewCol)
  2823.         Moves the screen defined by the first four coordinates to the
  2824.         screen area whose top coordinates are nNewRow and nNewCol.
  2825.  
  2826. vMoveW
  2827.         (nStartRow, nStartCol, nNumRows, nNumCols, nNewRow, nNewCol)
  2828.         Moves the screen defined by the first two coordinates to the
  2829.         screen area whose top coordinates are nNewRow and nNewCol,
  2830.         copying nNumRows number of rows and nNumCols number of columns.
  2831.  
  2832. vNewColor
  2833.         (nStartRow, nStartCol, nEndRow, nEndCol, cColor)
  2834.         Changes the screen color to cColor in the screen area defined
  2835.         by the first four coordinates.
  2836.  
  2837. vPause
  2838.         ()
  2839.         If the current row is one away from the bottom row, a pause
  2840.         message is issued and a wait state insues.  When the user
  2841.         presses a key, the screen is cleared and the cursor is
  2842.         positioned at 0, 0.
  2843.  
  2844. vPhonePict
  2845.         (nPhone)
  2846.         Returns a valid picture string for the phone number specified
  2847.         in nPhone.  Return string will be one of these:  "   <none> ",
  2848.         "    999-9999" or "999/999-9999".
  2849.  
  2850. vPopWhen
  2851.         (cTital, cAlias, [nStart], cRetExpr, [cDispExpr], [aCoord],
  2852.         [cSeekExpr], [lAllowNew], [bOnZero], [bFor], [bWhile], [nNext],
  2853.         [nRecord], [lRest])
  2854.         Pops up a window and returns the evaluation of cRetExpr.  The
  2855.         window is displayed at the coordinates defined by aCoord, which
  2856.         defaults to {7, 45, 20, 78}.  The displayed items are defined
  2857.         by the evaluation of cDispExpr, which defaults to cRetExpr.
  2858.         The record pointer is positioned in cAlias based on cSeekExpr,
  2859.         if specified.  If lAllowNew (default is .false.), then the user
  2860.         may enter a new record into the list and database.  bOnZero, if
  2861.         specified, is executed if the <esc> key is pressed.  The list
  2862.         is built from consecutive records, or as defined by specifying
  2863.         bFor, bWhile, nNext, nRecord and/or lRest.
  2864.  
  2865. vPrintScreen
  2866.         ([nStartRow, nStartCol, nEndRow, nEndCol])
  2867.         Prints the contents of the screen area defined by the specified
  2868.         coordinates, which defaults to the entire screen.
  2869.  
  2870. vReadAttr
  2871.         ([nRow], [nCol])
  2872.         Returns the character attribute of the specified screen
  2873.         coordinates, which defaults to the current cursor position.
  2874.  
  2875. vReadChar
  2876.         ([nRow], [nCol])
  2877.         Returns the character of the specified screen coordinates,
  2878.         which defaults to the current cursor position.
  2879.  
  2880. vReadLines
  2881.         ([nStartRow], [nStartCol], [nEndRow], [nEndCol])
  2882.         Returns an array containing the lines from the screen defined
  2883.         by the specified coordinates, which default respectively to 0,
  2884.         0, MaxRow(), MaxCol().
  2885.  
  2886. vReadStr
  2887.         ([nStartRow], [nStartCol], [nEndRow], [nEndCol])
  2888.         Returns a string containing the characters from the screen
  2889.         defined by the specified coordinates, which default
  2890.         respectively to 0, 0, MaxRow(), MaxCol().
  2891.  
  2892. vRepHorz*
  2893.         (cString, nTimes)
  2894.         Same functionality as Replicate().
  2895.  
  2896. vRepVert
  2897.         (cString, nTimes)
  2898.         Repeatedly displays cString vertically for the number of times,
  2899.         nTimes, specified.
  2900.  
  2901. vRestore
  2902.         ([nScreen], [anStartRow], [nStartCol], [nEndRow], [nEndCol], [lPack])
  2903.         Restores a previously saved screen, using vSave().  The default
  2904.         screen number is the last one saved.  The default screen
  2905.         coordinates are the same as the ones saved.  Screen coordinates
  2906.         may be specified by an array, or individual coordinates.
  2907.  
  2908. vSave
  2909.         ([nStartRow], [nStartCol], [nEndRow], [nEndCol], [lClear])
  2910.         Saves a portion of the screen whose coordinates are as
  2911.         specified, which defaults to 0, 0, MaxRow(), MaxCol(),
  2912.         optionally clearing the area saved.
  2913.  
  2914. vScr2File
  2915.         (cFile, [nStartRow], [nStartCol], [nEndRow], [nEndCol])
  2916.         Saves the screen area defined by the coordinates, which default
  2917.         to 0, 0, MaxRow(), MaxCol(), to a file, cFile.
  2918.  
  2919. vScr2Prg
  2920.         (cFile, [nStartRow], [nStartCol], [nEndRow], [nEndCol])
  2921.         Saves the screen area defined by the coordinates, which default
  2922.         to 0, 0, MaxRow(), MaxCol(), to a Clipper source-code file,
  2923.         cFile.
  2924.  
  2925. vScreenMode
  2926.         ([nNewMode])
  2927.         Optionally sets the video mode, returning the old value.
  2928.  
  2929. vScroll*
  2930.         (nStartRow, nStartCol, nEndRow, nEndCol, [cDirection], [nDistance])
  2931.         Superceded by Clipper's Scroll() function.  The screen area
  2932.         defined by the specified coordinates would be scrolled in the
  2933.         direction specified by cDirection, which may be "U" for "up",
  2934.         the default, "D" for "down", "L" for "left" or "R" for "right".
  2935.         The distance of the scroll is nDistance, which defaults to 1.
  2936.  
  2937. vScrollW
  2938.         (nRow, nCol, nNumRows, nNumCols, [cDirection], [nDistance])
  2939.         Superceded by Clipper's Scroll() function.  The screen area
  2940.         beginning at nRow, nCol, for nNumRows number of rows and
  2941.         nNumCols number of columns, would be scrolled in the direction
  2942.         specified by cDirection, which may be "U" for "up", the
  2943.         default, "D" for "down", "L" for "left" or "R" for "right".
  2944.         The distance of the scroll is nDistance, which defaults to 1.
  2945.  
  2946. vSetGetList
  2947.         ([aGetList])
  2948.         If aGetList is specified, then the array is saved on a stack.
  2949.         If not specified, then the last saved aGetList is returned.
  2950.  
  2951. vTab
  2952.         (nTab, xExpr)
  2953.         Displays xExpr beginning at the tab position nTab.
  2954.  
  2955. vTitle
  2956.         (aTitle, [nDelay], [cColor])
  2957.         The title is displayed in a centered window for nDelay, which
  2958.         defaults to 5, number of seconds.
  2959.  
  2960. vViewBorder
  2961.         (aCoordinates, [cType], [cColor])
  2962.         aCoordinates contains the four screen coordinates where a
  2963.         border will be drawn.  cType, which defaults to "D", may be "D"
  2964.         for double-line border, "S" for single-line border, "N" for no
  2965.         border or may contain the @...BOX characters.
  2966.  
  2967. vViewClose
  2968.         ()
  2969.         Closes the last window opened by vViewOpenC().
  2970.  
  2971. vViewOpenC
  2972.         (nNumRows, nNumCols, [cType], [cColor])
  2973.         Opens a centered window which will contain nNumRows number of
  2974.         rows and nNumCols number of columns, with a border type cType,
  2975.         which may be the same as that for vViewBorder().
  2976.  
  2977. vWindow
  2978.         (nNumRows, nNumCols, [lDouble], [cTitle], [cColor])
  2979.         Creates a centered window for nNumRows number of rows and
  2980.         nNumCols number of columns, with either a single or double-line
  2981.         border as specified by lDouble, which defaults to .true., with
  2982.         an optional title cTitle.
  2983.  
  2984. CLASSES
  2985.  
  2986. This section is a last-minute addition.  Thanks first to the North
  2987. Carolina Clipper Users Group for allowing their inclusion.  These were
  2988. created for teaching purposes by the members of the group in the
  2989. January 1993 meeting.  My special thanks to Dr Charles Beattie and
  2990. David Coulter for their help getting this together at the last moment
  2991. before release.  Remember, all source code is included with the
  2992. REGISTERED version.  To use these classes, YOU MUST OWN CLASS(Y).
  2993.  
  2994. CLASS   FileIO
  2995.  
  2996.         A basic file i/o class.
  2997.  
  2998. Constructor:
  2999.  
  3000. new
  3001.         (cFile, [cPath])
  3002.         Returns an object.  cFile is the filename.  cPath is optional
  3003.         and defaults to the current directory.
  3004.  
  3005.  
  3006. Exported Instance Variables:
  3007.  
  3008. none
  3009.  
  3010.  
  3011. Methods:
  3012.  
  3013. open
  3014.         ([nHow])
  3015.         Opens the file.  nHow specifies the method to open, and may be
  3016.         FO_READ, the default, FO_WRITE or FO_READWRITE.  The manifest
  3017.         constants are in "fileio.ch".
  3018.  
  3019. close
  3020.         ()
  3021.         Closes the file.
  3022.  
  3023. create
  3024.         ()
  3025.         Creates the file.  If the file already exists, its contents are
  3026.         destroyed.
  3027.  
  3028. top
  3029.         ()
  3030.         Positions the byte pointer to the top of the file.
  3031.  
  3032. bottom
  3033.         ()
  3034.         Positions the byte pointer to the end of the file.  Note that
  3035.         it points to the last byte in the file, not after the byte.
  3036.  
  3037. posChar
  3038.         ([nOffset])
  3039.         Positions the byte pointer to a position nOffset bytes from the
  3040.         current position.  This is a move relative to the current
  3041.         position, and may be a positive or negative number.  The
  3042.         default is 1.
  3043.  
  3044. fileSize
  3045.         ()
  3046.         Returns the number of bytes in the file.
  3047.  
  3048. writeChar
  3049.         (cString)
  3050.         Writes cString into the file at the current position,
  3051.         overwriting any data already at the location, or adding to the
  3052.         end of the file, depending upon the current byte position prior
  3053.         to the write.
  3054.  
  3055. readChar
  3056.         ([nBytes])
  3057.         Returns a string which contains the bytes read.  nBytes is the
  3058.         number of characters to read, and defaults to 1.
  3059.  
  3060.  
  3061. CLASS   FileText
  3062.  
  3063.         Inherited from FileBasic.  The constructor and all methods are
  3064.         the same.  New methods are shown below
  3065.  
  3066. METHODS
  3067.  
  3068. readLine
  3069.         ([nLines])
  3070.         Returns an array containing the actual lines read.  nLines
  3071.         specifies the number of lines to read, and defaults to 1.
  3072.  
  3073. writeLine
  3074.         (cLine)
  3075.         Writes the line, cLine, at the current line position.  Be sure
  3076.         to position the file to the end of the file with (::bottom();
  3077.         ::readChar()) before using this function if you want to append
  3078.         lines.
  3079.  
  3080. posLine
  3081.         (nLineNumber)
  3082.         Positions the file so that the next line read is line number
  3083.         nLineNumber.
  3084.  
  3085.  
  3086.  
  3087.