home *** CD-ROM | disk | FTP | other *** search
/ Software Du Jour / SoftwareDuJour.iso / BUSINESS / DBASE / CLIPNOTE.ARC / CLIPNOTE.710
Text File  |  1985-07-10  |  32KB  |  1,274 lines

  1.  
  2.  
  3.  
  4. NANTUCKET PRIVATE NETWORK
  5. -------------------------
  6. 1.  INSTRUCTIONS AND MENU-MAP
  7. 2.  REFERENCE NOTES
  8. 3.  ANOMALIES
  9. 4.  SAMPLE PROGRAMS
  10. 5.  FUNCTION LIBRARY
  11. 6.  MAIL
  12. 7.  WHAT'S NEW
  13.  
  14.  
  15. Enter item number or Help 2
  16.  
  17.  
  18. CLIPPER REFERENCE NOTES
  19. -----------------------
  20. 1.  Installation
  21. 2.  HELP.PRG
  22. 3.  PLINK86
  23. 4.  Size of Clipper indexes
  24. 5.  Numeric values for INKEY() and LASTKEY()
  25.  
  26.  
  27. Enter item number or Help 1
  28.  
  29.  
  30. FOUR INSTALLS
  31. -------------
  32. Each Clipper system disk may be installed four times to other
  33. media; twice to a hard disk and twice to floppies.  Once this
  34. count is depleted, the uninstall procedure may be used to get
  35. these installs back on the system disk.
  36.  
  37. Copying the disk will not make an executable copy of Clipper.
  38. The install procedure must be used.  Never write to the original
  39. system disk.  A write-protect tab cannot be placed on the disk
  40. during installation, however, because the install counter must be
  41. decremented.
  42.  
  43. The CLIPCOPY procedure uses a DOS batch file to call the SUPERLoK
  44. install program.  If for any reason the install not successful,
  45. the batch program will go ahead and execute the remaining
  46. commands in the file.  It can be terminated at any time with a
  47. control-C.  The batch file assumes that Clipper is being
  48. installed with the system disk in drive A:.  If another drive is
  49. being used, the batch file must be edited to provide the new
  50. drive designator.
  51.  
  52.  
  53. INSTALLING TO A FLOPPY ON AN XT
  54. -------------------------------
  55. On page A-5, item 2, the manual describes installing to a floppy
  56. with a one drive system by entering "CLIPCOPY A: F".  This works
  57. fine during the actual installation process, but when the batch
  58. file starts copying files, DOS returns the error message, "File
  59. cannot be copied onto itself".  To avoid this, place the system
  60. disk in the drive and type "INSTALL".  The installation program
  61. will prompt you for the product and target drives.  Enter "A" for
  62. both.  You will then be prompted at the appropriate times to
  63. switch disks.
  64.  
  65.  
  66. --End--
  67.  
  68.  
  69. CLIPPER REFERENCE NOTES
  70. -----------------------
  71. 1.  Installation
  72. 2.  HELP.PRG
  73. 3.  PLINK86
  74. 4.  Size of Clipper indexes
  75. 5.  Numeric values for INKEY() and LASTKEY()
  76.  
  77.  
  78. Enter item number or Help 2
  79.  
  80.  
  81. HELP.PRG PARAMETERS
  82. -------------------
  83. Page 1-13 of the manual list the parameters passed to HELP.PRG
  84. incorrectly.  There are 3 parameters passed not 2, and they are
  85. passed in the following order.
  86.  
  87.      1.  input_var - A character variable containing the name of
  88.          the memory variable that is waiting for user input.
  89.  
  90.      2.  line_num - A numeric variable containing the source code
  91.          line number of the program calling HELP.PRG.
  92.  
  93.      3.  call_prg - A character variable containing the name of
  94.          the file calling HELP.PRG.
  95.  
  96. These names are suggestions only.  You may use any legal memory
  97. variable name.  However, these parameters must be passed to your
  98. HELP.PRG.
  99.  
  100. RECURSIVE CALLS
  101. ---------------
  102. Recursive calling of HELP.PRG can be avoided by inserting the
  103. following code at the top of HELP.PRG.
  104.  
  105.      IF call_prg = "HELP"
  106.         RETURN
  107.      ENDIF
  108.  
  109.  
  110. --End--
  111.  
  112.  
  113. CLIPPER REFERENCE NOTES
  114. -----------------------
  115. 1.  Installation
  116. 2.  HELP.PRG
  117. 3.  PLINK86
  118. 4.  Size of Clipper indexes
  119. 5.  Numeric values for INKEY() and LASTKEY()
  120.  
  121.  
  122. Enter item number or Help 3
  123.  
  124.  
  125. OVERLAY MANAGEMENT
  126. ------------------
  127. Two classes of information are created by PLINK86 when creating
  128. overlays, a code class and a data class.  Data is any constant
  129. information such as strings in quotes and memory variable names.
  130. The default operation of the linker places only the code class
  131. into overlays.  The data class is added to the .EXE file.  This
  132. data "overhead" makes it difficult to run large applications on
  133. 256K machines even with careful overlay planning.
  134.  
  135. To place the data class into the overlay, use the following
  136. command in an .LNK file before the first "BEGIN" statement.
  137.  
  138.      OVERLAY NIL, $CONSTANTS
  139.  
  140. Example 1 on page 2-9 could include this command.
  141.  
  142.      FILE MAIN
  143.      LIB CLIPPER
  144.      OVERLAY NIL, $CONSTANTS
  145.      BEGIN
  146.         SECTION FILE AR
  147.         SECTION FILE AP
  148.         SECTION FILE GL
  149.      END
  150.  
  151. Placed in a file called ACCOUNT.LNK, these commands would be
  152. submitted to the linker by entering the following at the DOS
  153. prompt.
  154.  
  155.      PLINK86 @ACCOUNT
  156.  
  157. --End--
  158. 4
  159.  
  160.  
  161. CLIPPER REFERENCE NOTES
  162. -----------------------
  163. 1.  Installation
  164. 2.  HELP.PRG
  165. 3.  PLINK86
  166. 4.  Size of Clipper indexes
  167. 5.  Numeric values for INKEY() and LASTKEY()
  168.  
  169.  
  170. Enter item number or Help 
  171.  
  172. INDEX SIZES
  173. -----------
  174. The following formulas can be used to calculate the size of an
  175. index created by Clipper.
  176.  
  177. minimum # of index keys per page   (Kmn):
  178.  
  179.    int((1012 - Kl) / (2 * Kl + 20))   where Kl = key length
  180.  
  181. maximum # of index keys per page   (Kmx):
  182.  
  183.    2 * Kmn
  184.  
  185. Minimum number of index pages:     (Pmn)
  186.  
  187.    R / Kmx                         where R is No of records in
  188.                                    the file
  189.  
  190. If Pmn is not a whole number, Pmn is "rounded" to the next higher
  191. whole number.
  192.  
  193. Maximum number of index pages:     (Pmx)
  194.  
  195.    2 * Pmn
  196.  
  197. Minimum index size:
  198.  
  199.    (Pmn * 1024) + 1024             1024 is both the page  size
  200.                                    and the  size of the .NTX
  201.                                    header.
  202.  
  203. Maximum index size:
  204.  
  205.    (Pmx * 1024) + 1024
  206.  
  207. Notes:
  208.  
  209. A "page" is simply  the smallest whole division in an index. In
  210. clipper's scheme, the page size is 1024 bytes.
  211.  
  212. The first equation is a simplified form  of the actual size
  213. allocation formula used in the clipper compiler.
  214.  
  215. The index "header" contains the information  needed by your
  216. program to maintain the indeces.
  217.  
  218. A good working size for each index is roughly 2/3 of the maximum
  219. size.
  220.  
  221. --End--
  222. 5
  223.  
  224.  
  225. CLIPPER REFERENCE NOTES
  226. -----------------------
  227. 1.  Installation
  228. 2.  HELP.PRG
  229. 3.  PLINK86
  230. 4.  Size of Clipper indexes
  231. 5.  Numeric values for INKEY() and LASTKEY()
  232.  
  233.  
  234. Enter item number or Help 
  235.  
  236. Numeric values returned from INKEY() and LASTKEY()
  237. --------------------------------------------------
  238.  
  239. Special Keys    Inkey Returns
  240. ------------    -------------
  241. F1                      15104
  242. F2                      15360
  243. F3                      15616
  244. F4                      15872
  245. F5                      16128
  246. F6                      16384
  247. F7                      16640
  248. F8                      16896
  249. F9                      17152
  250. F10                     17408
  251.  
  252. Alt F1                  26624
  253. Alt F2                  26880
  254. Alt F3                  27136
  255. Alt F4                  27392
  256. Alt F5                  27648
  257. Alt F6                  27904
  258. Alt F7                  28160
  259. Alt F8                  28416
  260. Alt F9                  28672
  261. Alt F10                 28928
  262.  
  263. Ctrl F1                 24064
  264. Ctrl F2                 24320
  265. Ctrl F3                 24576
  266. Ctrl F4                 27392
  267. Ctrl F5                 25088
  268. Ctrl F6                 25344
  269. Ctrl F7                 25600
  270. Ctrl F8                 25856
  271. Ctrl F9                 26112
  272. Ctrl F10                26368
  273.  
  274. Shift  F1               21504
  275. Shift  F2               21760
  276. Shift  F3               22016
  277. Shift  F4               22272
  278. Shift  F5               25088
  279. Shift  F6               22784
  280. Shift  F7               23040
  281. Shift  F8               25856
  282. Shift  F9               23552
  283. Shift  F10              17408
  284.  
  285. End                     20224
  286. Ctrl End                29952
  287. Enter                      13
  288. Ctrl Enter                 10
  289.  
  290. Home                       55
  291. Up Arrow                18432
  292. Down Arrow              20480
  293. Left Arrow              19712
  294. Right Arrow             19712
  295. Pg Dn                   20736
  296. Pg Up                   18688
  297.  
  298. Ctrl Home               30464
  299. Ctrl Left Arrow         29440
  300. Ctrl Right Arrow        29696
  301. Ctrl Pg Dn              30208
  302. Ctrl Pg Up              33792
  303.  
  304. Ctrl PrtSc                 16
  305. Del                     21248
  306. Esc                        27
  307. Ins                     20992
  308. Space Bar                  32
  309. Tab                         9
  310. Backspace                   8
  311.  
  312. All the the printable keys return their ASCII value.
  313.  
  314. --End--
  315.  
  316.  
  317. CLIPPER REFERENCE NOTES
  318. -----------------------
  319. 1.  Installation
  320. 2.  HELP.PRG
  321. 3.  PLINK86
  322. 4.  Size of Clipper indexes
  323. 5.  Numeric values for INKEY() and LASTKEY()
  324.  
  325.  
  326. Enter item number or Help p
  327.  
  328.  
  329. NANTUCKET PRIVATE NETWORK
  330. -------------------------
  331. 1.  INSTRUCTIONS AND MENU-MAP
  332. 2.  REFERENCE NOTES
  333. 3.  ANOMALIES
  334. 4.  SAMPLE PROGRAMS
  335. 5.  FUNCTION LIBRARY
  336. 6.  MAIL
  337. 7.  WHAT'S NEW
  338.  
  339.  
  340. Enter item number or Help 2
  341.  
  342.  
  343. CLIPPER REFERENCE NOTES
  344. -----------------------
  345. 1.  Installation
  346. 2.  HELP.PRG
  347. 3.  PLINK86
  348. 4.  Size of Clipper indexes
  349. 5.  Numeric values for INKEY() and LASTKEY()
  350.  
  351.  
  352. Enter item number or Help p
  353.  
  354.  
  355. NANTUCKET PRIVATE NETWORK
  356. -------------------------
  357. 1.  INSTRUCTIONS AND MENU-MAP
  358. 2.  REFERENCE NOTES
  359. 3.  ANOMALIES
  360. 4.  SAMPLE PROGRAMS
  361. 5.  FUNCTION LIBRARY
  362. 6.  MAIL
  363. 7.  WHAT'S NEW
  364.  
  365.  
  366. Enter item number or Help 3
  367.  
  368.  
  369. ANOMALY REPORT - July 1, 1985
  370. -----------------------------
  371. >>> &<memvar>
  372.  
  373. Using "&" in a character string causes a 5,5 error message
  374. (variable not found) if the macro symbol is not followed by a
  375. space.  Inserting a space between the ampersand and the next word
  376. will not cause this error.
  377.  
  378.  
  379. >>> @ 24,<exp> SAY ...GET
  380.  
  381. Writing to row 24 will cause the screen to scroll.  To work
  382. around this anomaly, write the cursor to another row before
  383. completing the read.  For example:
  384.  
  385.    @ 24,10 SAY "Enter data:" GET data
  386.    @ 0,0
  387.    READ
  388.  
  389. To clear line 24 without scrolling, use the SPACE() function.
  390.  
  391.    @ 24,0 SAY SPACE(78)
  392.  
  393.  
  394. >>> @ <exp>,<exp> CLEAR
  395.  
  396. This command should clear the lower right hand corner of the
  397. screen starting at the coordinates indicated.  Instead, it clears
  398. the remainder of the current line and the entire rest of screen.
  399.  
  400.  
  401. >>> ALIAS
  402.  
  403. dBASE III allows a  memory variable with the same name as a field
  404. to be accessed by using the "M" alias.
  405.  
  406.    ? M->memvar
  407.  
  408. The "M" alias is not supported under Clipper.
  409.  
  410.  
  411. >>> CLEAR ALL
  412.  
  413. In addition to closing all open database files, releasing all
  414. memory variables, and selecting work area 1, CLEAR ALL will
  415. also clear the sereen.
  416.  
  417.  
  418. >>> COPY TO <filename> SDF
  419.  
  420. Creating an SDF file with SET DELETED ON produces a corrupted
  421. file.
  422.  
  423. Work-around:
  424.  
  425.    USE <filename>
  426.    SET FILTER TO .NOT. DELETED()
  427.    COPY TO <filename> SDF
  428.  
  429.  
  430.  
  431. >>> CREATE <newfile> FROM <structure extended file>
  432.  
  433. A structure extended file created by dBASE III will sometimes
  434. cause the computer to hang.  Create a structure extended file
  435. under Clipper to solve the problem.
  436.  
  437.  
  438. >>> CTOD()
  439.  
  440. The CTOD() function will return invalid data if the year portion
  441. of the date is 4 characters.  For example;
  442.  
  443.    ? CTOD("09/19/1985")
  444.  
  445. returns
  446.  
  447.    00/0.//
  448.  
  449.  
  450. >>> Date type
  451.  
  452. Adding 1 day to the next to the last day of any leap year will
  453. produce an invalid date.  For example;
  454.  
  455.      mdate = CTOD("12/30/84")
  456.      mnum = 0
  457.      DO WHILE mnum < 3
  458.         ? mdate + mnum
  459.         mnum = mnum  + 1
  460.      ENDDO
  461.  
  462. returns
  463.  
  464.      12/30/84
  465.      00/30/85
  466.      01/01/85
  467.  
  468. This works correctly in any year not a leap year.
  469.  
  470.  
  471. >>> INDEX ON <exp> TO <filename>
  472.  
  473. Creating an index leaves EOF() true and the record pointer at one
  474. greater than the number of records in the file.  If any
  475. sequential operation is performed on the file after the creation
  476. of an index, include the command GO TOP.
  477.  
  478.    INDEX ON <exp> TO <filename>
  479.    GO TOP
  480.    DO WHILE .NOT. EOF()
  481.  
  482.  
  483. >>> LOCATE FOR <condition>
  484.  
  485. LOCATE with an empty file will hang the computer.
  486.  
  487. Work-around:
  488.    * Test for empty file...
  489.    empty  = EOF() .AND. BOF()
  490.    IF .NOT. empty
  491.       LOCATE FOR <condition>
  492.    ENDIF
  493.  
  494.  
  495. >>> Multiple Indexes
  496.  
  497. The PACK and REINDEX commands will only update the first index
  498. correctly if more than one is in use.  To work around this
  499. problem, recreate the indexes individually after a PACK or
  500. REINDEX separately.
  501.  
  502.  
  503. >>> NOTE
  504.  
  505. Not implemented.  Use "*" to create comment lines.
  506.  
  507.  
  508. >>> PACK
  509.  
  510. If the last record or group of records in a file are marked for
  511. deletion, the PACK command will not remove them from the file.
  512. Only those deleted records that precede a record not marked for
  513. deletion will be removed.
  514.  
  515. Work-around 1.
  516.  
  517.    * This will leave one blank record at the end of the file.
  518.    USE <filename>
  519.    APPEND BLANK
  520.    PACK
  521.  
  522. Work-around 2.
  523.  
  524.    * This procedure saves a backup copy of the file.
  525.    RENAME <filename>.DBF TO <filename>.OLD
  526.    USE <filename>.OLD
  527.    SET DELETED ON
  528.    COPY TO <filename>
  529.  
  530.  
  531. >>> Programs created by MODIFY COMMAND
  532.  
  533. Command files created or changed with MODIFY COMMAND may have a
  534. "wrap" if they exceed 67 characters per line.  The Clipper
  535. compiler will not accept these lines.
  536.  
  537. Work-around:
  538.  
  539. Use the semi-colon as a line continuation character.
  540.  
  541.  
  542. >>> Reserved words
  543.  
  544. "WRITE" seems to be a reserved word.  Calling a procedure WRITE
  545. will produce a warning 11 when linking.  Rename the procedure.
  546.  
  547.  
  548.  
  549. >>> SELECT &<memvar>
  550.  
  551. Using a macro to SELECT a work area returns an error code (5,5).
  552. To SELECT an area based on the contents of a memory variable, use
  553. a DO CASE structure.
  554.  
  555.    DO CASE
  556.       CASE memvar = "ACCOUNTS"
  557.          SELECT ACCOUNTS
  558.       CASE memvar = "CLIENTS"
  559.          SELECT CLIENTS
  560.    ENDCASE
  561.  
  562.  
  563. >>> SET COLOR TO <standard>, [<enhanced>]
  564.  
  565. Many applications use SET COLOR TO 0/0 to turn off the display
  566. from the keyboard for passwords.  Clipper will not change the
  567. enhanced display with this syntax.  The correct syntax is;
  568.  
  569.    SET COLOR TO 7+/0,0/0
  570.  
  571. This will provide high intensity white on black for SAYs and
  572. black on black for GETs.
  573.  
  574.  
  575. >>> SET DEFAULT TO <drive>
  576.  
  577. When using the following commands, Clipper searches the DOS
  578. default directory instead of the one defined with the SET DEFAULT
  579. command.
  580.  
  581.    FILE()
  582.    RENAME
  583.    COPY FILE <filename> TO <filename>
  584.    DIR
  585.    DELETE FILE <filename>
  586.  
  587.  
  588. >>> SET FORMAT TO <filename>
  589.  
  590. If the same format file is used more than once in a program, the
  591. compiler returns "symbol redefinition error."  This message can
  592. be ignored.  It simply means that the format file has already
  593. been placed in a table of files to be compiled.
  594.  
  595. --End--
  596.  
  597.  
  598. NANTUCKET PRIVATE NETWORK
  599. -------------------------
  600. 1.  INSTRUCTIONS AND MENU-MAP
  601. 2.  REFERENCE NOTES
  602. 3.  ANOMALIES
  603. 4.  SAMPLE PROGRAMS
  604. 5.  FUNCTION LIBRARY
  605. 6.  MAIL
  606. 7.  WHAT'S NEW
  607.  
  608.  
  609. Enter item number or Help 4
  610.  
  611. CLIPPER SAMPLE PROGRAMS
  612. -----------------------
  613. 1.  Quit To Procedure
  614. 2.  LIST . . . . . LIST any .DBF file
  615. 3.  PRINTIT. . . . Print ascii files with header and page breaks.
  616.  
  617.  
  618. Enter item number or Help 1
  619.  
  620.  
  621. * Procedure: QTO.PRG
  622. * Author...: Barry Grant
  623. * Date.....: 05-29-85, modified 06-06-85 by Ray Love
  624. * Notes....: Based on a routine by Tom Rettig from the  "Advanced
  625. *            Programmer's Guide", copyright (c) 1985 Luis Castro,
  626. *            Jay Hansen, and Tom Rettig. Published by Ashton-Tate.
  627. *
  628. * This program allows programs to call one another by starting
  629. * execution with a batch file then modifying that batch file to
  630. * call the next program.  This is done by passing the name of the
  631. * next program to the procedure QUIT_TO.  For example,
  632. *
  633. *    DO Quit_to WITH next
  634. *
  635. * where the contents of next is the program to execute. The called
  636. * routines can return by using the same procedure.  To exit the batch
  637. * file, pass "GOTO END" to QUIT_TO.
  638. *
  639. * * * * * * * * * *  I M P O R T A N T  * * * * * * * * * * * * * *
  640. * The length of the memory variable passed to QUIT_TO must always *
  641. * be 8 characters.  The file pointer used by DOS must find the    *
  642. * instruction GOTO START at the same location in the the batch    *
  643. * file every time.                                                *
  644. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  645. *
  646. * Any memory variables that need to be passed may be SAVEd to a
  647. * .MEM file.
  648. *
  649. * This example uses the names START.BAT for the batch file and
  650. * MAIN.EXE for the intitial program to execute.  The file START.BAT
  651. * contains the following:
  652. *
  653. *     ECHO OFF
  654. *     MAIN
  655. *     GOTO START
  656. *     :START
  657. *     GOTO END
  658. *     GOTO START
  659. *     :END
  660. *     ECHO ON
  661.  
  662. PROCEDURE QUIT_TO
  663. PARAMETERS program
  664.    SET ALTERNATE TO START.BAT
  665.    SET ALTERNATE ON
  666.    SET CONSOLE OFF
  667.    ? "ECHO OFF"
  668.    ? "MAIN"
  669.    ? "GOTO START"
  670.    ? ":START"
  671.    ? program
  672.    ? "GOTO START"
  673.    ? ":END"
  674.    ? "ECHO ON"
  675.    SET ALTERNATE TO
  676.    SET CONSOLE ON
  677.    QUIT
  678. * EOP QUIT_TO
  679.  
  680. * The following three programs demonstrate the use of QUIT_TO.
  681. * Compile separately, create START.BAT, and enter "START" to the
  682. * DOS prompt.
  683.  
  684. * MAIN.PRG
  685. * Notes...: Main menu of a procedure to call other programs.
  686.  
  687. SET PROCEDURE TO QTO
  688. DO WHILE .T.
  689.    CLEAR
  690.    @ 10,30 SAY "M A I N   M E N U"
  691.    @ 11,30 SAY "_________________"
  692.    @ 12,30 SAY "1.  Program 1"
  693.    @ 13,30 SAY "2.  Program 2"
  694.    @ 14,30 SAY "3.  Quit"
  695.    choice = " "
  696.    DO WHILE .NOT. CHOICE $"123"
  697.       @ 18,30 SAY "Choice? " GET CHOICE PICTURE "9"
  698.       READ
  699.    ENDDO
  700.    DO CASE
  701.       CASE choice = "1"
  702.          * Add spaces to make next 8 characters long...
  703.          next = "TEST_1  "
  704.          DO QUIT_TO WITH next
  705.       CASE choice = "2"
  706.          next = "TEST_2  "
  707.          DO QUIT_TO WITH next
  708.       CASE choice = "3"
  709.          next = "GOTO END"
  710.          DO QUIT_TO WITH next
  711.    ENDCASE
  712. ENDDO
  713. * EOF MAIN.PRG
  714.  
  715. *TEST_1.PRG
  716. SET PROCEDURE TO QTO
  717. CLEAR
  718. WAIT "This is TEST_1.PRG.  Press any key to return to MAIN."
  719. next = "MAIN    "
  720. DO QUIT_TO WITH next
  721. * EOF TEST_1.PRG
  722.  
  723. *TEST_2.PRG
  724. SET PROCEDURE TO QTO
  725. CLEAR
  726. WAIT "This is TEST_2.PRG.  Press any key to return to MAIN."
  727. next = "MAIN    "
  728. DO QUIT_TO WITH next
  729. * EOF TEST_2.PRG
  730.  
  731.  
  732. --End--
  733. 2
  734.  
  735. CLIPPER SAMPLE PROGRAMS
  736. -----------------------
  737. 1.  Quit To Procedure
  738. 2.  LIST . . . . . LIST any .DBF file
  739. 3.  PRINTIT. . . . Print ascii files with header and page breaks.
  740.  
  741.  
  742. Enter item number or Help 
  743.  
  744.  
  745. * Program.: LIST.PRG
  746. * Author..: Brian Russel
  747. * Date....: 06/20/85
  748. * Notes...: Simulates the raw form of the dBASE LIST command.  Pass
  749. *           the file to be LISTed on the DOS command line.
  750. *              A:LIST <fiLEName>
  751.  
  752. * Get file to use.
  753. PARAMETER file
  754. file = UPPER(TRIM(file)) + ".DBF"
  755. IF .NOT. FILE("&file")
  756.    ? file + " not found"
  757.    RETURN
  758. ENDIF
  759.  
  760. USE &file
  761. * Display field name header.
  762. f = 1
  763. ? "Record#  "
  764. DO WHILE "" <> FIELD(f)
  765.    field = FIELD(f)
  766.    DO CASE
  767.       CASE TYPE("&field") = 'C'
  768.          LEN = LEN(&field)
  769.       CASE TYPE("&field") = 'N'
  770.          LEN = LEN(str(&field))
  771.       CASE TYPE("&field") = 'D'
  772.          LEN = LEN(DTOC(&field))
  773.       CASE TYPE("&field") = 'L'
  774.          LEN = 1
  775.    ENDCASE
  776.    ?? SUBSTR(field + SPACE(80), 1, LEN) + ' '
  777.    f = f + 1
  778. ENDDO
  779.  
  780. *Display data.
  781. DO WHILE .NOT. EOF()
  782.    ? RECNO(), IF(DELETED(), "*", " ")
  783.    f = 1
  784.    DO WHILE "" <> field(f)
  785.       field = FIELD(f)
  786.       ?? &field
  787.       ?? ' '
  788.       f = f + 1
  789.    ENDDO
  790.    SKIP
  791. ENDDO
  792.  
  793. *EOF:LIST.PRG
  794.  
  795.  
  796. --End--
  797. 3
  798.  
  799. CLIPPER SAMPLE PROGRAMS
  800. -----------------------
  801. 1.  Quit To Procedure
  802. 2.  LIST . . . . . LIST any .DBF file
  803. 3.  PRINTIT. . . . Print ascii files with header and page breaks.
  804.  
  805.  
  806. Enter item number or Help 
  807.  
  808. * Program.: PRINTIT.PRG
  809. * Author..: Barry W. Grant, CLU  (Source ID: TCN158)
  810. * Date....: 07/05/85
  811. * Notes...: My version of a utility program to print ASCII text files.
  812. *           Two database (.DBF) files must be CREATED.  Each .DBF file
  813. *           structure consists of one CHARACTER field:
  814. *
  815. *               .DBF file          Field Name       Field Length
  816. *
  817. *               PRINTLST.DBF       file_name            40
  818. *               PRINTFIL.DBF       m_line               80
  819. *
  820. *           Memory Variables Used:
  821. *
  822. *               doit     - logical for a "DO WHILE" loop
  823. *               ans      - length = 1, for user Y/N responses
  824. *               page_no  - numeric for the page number
  825. *               f_name   - length = 8, file name
  826. *               file_ext - length = 3, file extension
  827. *                             (.COM, .EXE, .DBF and .OBJ extensions are
  828. *                              "trapped" in Line 89.)
  829. *               m_path   - length = 36, complete DOS path search criteria
  830. *                             Example:  C:\SUBDIR1\SUBDIR2\
  831. *                             Leave blank if file(s) to be printed are
  832. *                             in same location as this program.
  833. *               p_file   - length = 12, complete DOS file name (including
  834. *                             path criteria when applicable)
  835. *
  836. *           DOS wildcard characters ("*", "?") may be used in the file name
  837. *           and file extension.  All matching files will be printed.
  838.  
  839. CLEAR
  840. SET TALK OFF
  841. SET CONFIRM ON
  842. SET SAFETY OFF
  843. SET BELL OFF
  844. SET COLOR TO  7/0,U
  845. SELECT 1
  846. USE printlst
  847. SELECT 2
  848. USE printfil
  849. STORE .T. TO doit
  850. DO WHILE doit
  851.    CLEAR
  852.    f_name = "        "
  853.    m_path = SPACE(36)
  854.    file_ext = "   "
  855.    p_file =  "            "
  856.    ans = " "
  857.    page_no = 1
  858.    @  8,5 SAY "Enter Drive and Path (if applicable):"
  859.    @  8,43 GET m_path PICTURE "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
  860.    @ 10,5 SAY "Enter the name of the ASCII text file to be printed: "
  861.    @ 10,58 GET f_name PICTURE "!!!!!!!!"
  862.    @ 12,5 SAY "                           Enter the file extension: "
  863.    @ 12,58 GET file_ext PICTURE "!!!"
  864.    READ
  865.    CLEAR
  866.    IF f_name = "        "
  867.       @  8,5  SAY "A FILE NAME (or wildcard character) MUST BE ENTERED!"
  868.       @ 10,5  SAY "Select another file? Y/N: "
  869.       @ 10,33 GET ans PICTURE "!"
  870.       READ
  871.       IF ans = "Y"
  872.          LOOP
  873.       ELSE
  874.          EXIT
  875.       ENDIF
  876.    ENDIF
  877.    @ 10,27 SAY "SEARCHING DISK FOR FILE(s)"
  878.    STORE TRIM(m_path)+TRIM(f_name)+"."+TRIM(file_ext) TO p_file
  879.    * next command redirects the DOS directory to a temporary .TXT file
  880.    DIR &p_file > tprint.txt
  881.    SELECT 1
  882.    IF LASTREC() <> 0
  883.       ZAP
  884.    ENDIF
  885.    APPEND FROM tprint SDF
  886.    GO TOP
  887.    DO WHILE SUBSTR(file_name,1,1) = " "
  888.       SKIP
  889.    ENDDO
  890.    IF SUBSTR(file_name,1,14) <> "File not found"
  891.       STORE .T. TO p_loop
  892.       DO WHILE p_loop
  893.          STORE SUBSTR(file_name,1,8) TO f_name
  894.          STORE SUBSTR(file_name,10,3) TO file_ext
  895.          STORE TRIM(m_path)+TRIM(f_name)+"."+TRIM(file_ext) TO p_file
  896.          IF file_ext="COM" .OR. file_ext="EXE" .OR. file_ext="OBJ" .OR. ;
  897.             file_ext="DBF"
  898.             CLEAR
  899.             @ 10,20 SAY "&p_file IS NOT AN ASCII FILE!"
  900.          ELSE
  901.             SELECT 2
  902.             IF LASTREC() <> 0
  903.                ZAP
  904.             ENDIF
  905.             CLEAR
  906.             @ 10,26 SAY "READING FILE TO BE PRINTED"
  907.             APPEND FROM &p_file SDF
  908.             STORE 1 TO line_cnt, page_no
  909.             CLEAR
  910.             @ 10,20 SAY "PRINTING FILE: &p_file"
  911.             SET DEVICE TO PRINT
  912.             @ 3,5 SAY p_file
  913.             @ 3,40 SAY DATE()
  914.             @ 3,70 SAY "Page "+STR(page_no,3,0)
  915.             STORE 5 TO line_cnt
  916.             GO TOP
  917.             DO WHILE .NOT. EOF()
  918.                IF line_cnt > 60
  919.                   EJECT
  920.                   STORE page_no + 1 TO page_no
  921.                   @ 3,5  SAY p_file
  922.                   @ 3,40 SAY DATE()
  923.                   @ 3,70 SAY "Page "+STR(page_no,3,0)
  924.                   STORE 5 TO line_cnt
  925.                ENDIF
  926.                @ line_cnt,0 SAY m_line
  927.                STORE line_cnt + 1 TO line_cnt
  928.                SKIP
  929.             ENDDO
  930.             EJECT
  931.             SET DEVICE TO SCREEN
  932.             CLEAR
  933.             SELECT 1
  934.          ENDIF
  935.          SKIP
  936.          IF EOF() .OR. SUBSTR(file_name,1,1) = " "
  937.             STORE .F. TO p_loop
  938.          ELSE
  939.             LOOP
  940.          ENDIF
  941.       ENDDO
  942.       CLEAR
  943.       @ 10,5  SAY "Print another file? Y/N: "
  944.       @ 10,32 GET ans PICTURE "!"
  945.       READ
  946.       IF ans = "Y"
  947.          ZAP
  948.          LOOP
  949.       ENDIF
  950.    ELSE
  951.       CLEAR
  952.       @  8,5  SAY "FILE DOES NOT EXIST!"
  953.       @ 10,5  SAY "Select another file? Y/N: "
  954.       @ 10,32 GET ans PICTURE "!"
  955.       READ
  956.       IF ans = "Y"
  957.          LOOP
  958.       ENDIF
  959.    ENDIF
  960.    STORE .F. TO doit
  961. ENDDO
  962. IF FILE("tprint.txt")
  963.    ERASE tprint.txt
  964. ENDIF
  965. SELECT 1
  966. ZAP
  967. SELECT 2
  968. ZAP
  969. CLEAR ALL
  970. QUIT
  971.  
  972. * End of file:  PRINTIT.PRG
  973. *******************************************************
  974.  
  975. --End--
  976.  
  977. CLIPPER SAMPLE PROGRAMS
  978. -----------------------
  979. 1.  Quit To Procedure
  980. 2.  LIST . . . . . LIST any .DBF file
  981. 3.  PRINTIT. . . . Print ascii files with header and page breaks.
  982.  
  983.  
  984. Enter item number or Help p
  985.  
  986.  
  987. NANTUCKET PRIVATE NETWORK
  988. -------------------------
  989. 1.  INSTRUCTIONS AND MENU-MAP
  990. 2.  REFERENCE NOTES
  991. 3.  ANOMALIES
  992. 4.  SAMPLE PROGRAMS
  993. 5.  FUNCTION LIBRARY
  994. 6.  MAIL
  995. 7.  WHAT'S NEW
  996.  
  997.  
  998. Enter item number or Help 5
  999.  
  1000.  
  1001.  
  1002. CLIPPER FUNCTION LIBRARY
  1003. ------------------------
  1004. 1.  LTRIM(). . . . removes leading spaces
  1005. 2.  RAND() . . . . random number generator
  1006. 3.  CLR(). . . . . work-around for @...CLEAR anomaly
  1007. 4.  EXPAND() . . . double space strings for menus and reports
  1008. 5.  CENTER() . . . center @..SAY's
  1009.  
  1010.  
  1011. Enter item number or Help 1
  1012.  
  1013.  
  1014. *Function....LTRIM()
  1015. *Syntax......LTRIM(expC)
  1016. *Parameters..Any character expression.
  1017. *Returns.....The same string with any leading blanks moved to the
  1018. *            end.
  1019. *Notes.......Removing the addition of a space in the assignment
  1020. *            statement will return a string that is shorter by
  1021. *            the number of leading spaces.
  1022.  
  1023. FUNCTION LTRIM
  1024.  
  1025. PARAM string
  1026.  
  1027. DO WHILE SUBSTR(string,1,1) = " " .AND. LEN(string) > 1
  1028.    string = SUBSTR(string,2) + " "
  1029. ENDDO
  1030.  
  1031. RETURN(string)
  1032.  
  1033. --End--
  1034. 2
  1035.  
  1036.  
  1037.  
  1038. CLIPPER FUNCTION LIBRARY
  1039. ------------------------
  1040. 1.  LTRIM(). . . . removes leading spaces
  1041. 2.  RAND() . . . . random number generator
  1042. 3.  CLR(). . . . . work-around for @...CLEAR anomaly
  1043. 4.  EXPAND() . . . double space strings for menus and reports
  1044. 5.  CENTER() . . . center @..SAY's
  1045.  
  1046.  
  1047. Enter item number or Help 
  1048.  
  1049. * Function...RAND() function
  1050. * Syntax.....RAND(expN)
  1051. * Parameters.A numeric expression that evaluates to an integer.
  1052. * Returns....An integer in the range of 0 to n-1.
  1053. * Notes......Requires that a memory variable called "seed" be
  1054. *            initialized to a value between 0 and 1 before calling.
  1055. *            For example:
  1056. *               seed = VAL(SUBSTR(TIME(),8,1)) * .1
  1057.  
  1058. FUNCTION RAND
  1059. PARAM n
  1060.  
  1061. seed = 997 * seed
  1062. seed = seed - INT(seed)
  1063.  
  1064. RETURN (INT(n * seed))
  1065.  
  1066. --End--
  1067. 3
  1068.  
  1069.  
  1070.  
  1071. CLIPPER FUNCTION LIBRARY
  1072. ------------------------
  1073. 1.  LTRIM(). . . . removes leading spaces
  1074. 2.  RAND() . . . . random number generator
  1075. 3.  CLR(). . . . . work-around for @...CLEAR anomaly
  1076. 4.  EXPAND() . . . double space strings for menus and reports
  1077. 5.  CENTER() . . . center @..SAY's
  1078.  
  1079.  
  1080. Enter item number or Help 
  1081.  
  1082. *Function....:CLR()
  1083. *Syntax......:CLR(expN,expN)
  1084. *Parameters..:row,col
  1085. *Returns.....:null
  1086. *Notes.......:@ row, col CLEAR does not perform as documented.
  1087. * It should clear a corner described by the row and column
  1088. * coordinates.  Clipper, however starts at the described row and
  1089. * column and clears everything to the end of screen.  This
  1090. * function will simulate the CLEAR command as documented.
  1091. * Since the purpose of a function is to return a value and what we
  1092. * really want here is to DO something, this should more properly
  1093. * be written as a procedure.  This is provided purely as an
  1094. * example of the enormous versatility of user defined functions.
  1095. * Since a function MUST return a value, CLR() returns null string.
  1096. * Call the function by with a question mark.
  1097. *   ? CLR(row,col)
  1098. * If used as a procedure, you don't have to worry about any
  1099. * of that (but then we wouldn't have a function example).
  1100. * Following are the two ways.  Take your pick.
  1101.  
  1102. *    FUNCTION EXAMPLE
  1103. FUNCTION clr
  1104. PARAM row,col
  1105. *
  1106. FOR f_row = row to 23
  1107.     @ f_row, col
  1108. NEXT
  1109. * Clear line 24 without scrolling...
  1110. @ 24, col SAY SPACE(79 - col)
  1111. RETURN ("")
  1112. *
  1113. *
  1114. *    PROCEDURE EXAMPLE
  1115. *    Syntax:  DO clr WITH row,col
  1116. PROCEDURE clr
  1117. PARAM row,col
  1118. *
  1119. FOR f_row = row to 23
  1120.     @ f_row, col
  1121. NEXT
  1122. @ 24, col SAY SPACE(79 - col)
  1123.  
  1124. RETURN
  1125.  
  1126. --End--
  1127. 4
  1128.  
  1129.  
  1130.  
  1131. CLIPPER FUNCTION LIBRARY
  1132. ------------------------
  1133. 1.  LTRIM(). . . . removes leading spaces
  1134. 2.  RAND() . . . . random number generator
  1135. 3.  CLR(). . . . . work-around for @...CLEAR anomaly
  1136. 4.  EXPAND() . . . double space strings for menus and reports
  1137. 5.  CENTER() . . . center @..SAY's
  1138.  
  1139.  
  1140. Enter item number or Help 
  1141.  
  1142. *Function....EXPAND()
  1143. *Syntax......EXPAND(expC)
  1144. *Author......Steve Straley
  1145. *Parameters..Any character string.
  1146. *Returns.....The same string is returned with spaces between characters
  1147. *
  1148. *Notes.......This function can be used when printing titles for reports
  1149. *            and menus with the display separated with spaces between
  1150. *            each character.  This function will should save the trouble
  1151. *            of typing out those extra spaces.
  1152.  
  1153. FUNCTION Expand
  1154.  
  1155. PARAMETER in_string
  1156.  
  1157. length = LEN(in_string)
  1158. counter = 1
  1159. out_str = ""
  1160.  
  1161. DO WHILE counter <= length
  1162.    out_str = out_str + SUBSTR(in_string,counter,1) + " "
  1163.    counter = counter + 1
  1164. ENDDO
  1165.  
  1166. RETURN(TRIM(out_str))
  1167.  
  1168.  
  1169. --End--
  1170. 5
  1171.  
  1172.  
  1173.  
  1174. CLIPPER FUNCTION LIBRARY
  1175. ------------------------
  1176. 1.  LTRIM(). . . . removes leading spaces
  1177. 2.  RAND() . . . . random number generator
  1178. 3.  CLR(). . . . . work-around for @...CLEAR anomaly
  1179. 4.  EXPAND() . . . double space strings for menus and reports
  1180. 5.  CENTER() . . . center @..SAY's
  1181.  
  1182.  
  1183. Enter item number or Help 
  1184.  
  1185. *Title........CENTER
  1186. *Syntax.......CENTER(expC)
  1187. *Paramenters..Any string less than 80 characters in length.
  1188. *Returns......The appropriate column position to center the line.
  1189. *Notes........Use this function in place of a column coordinate.
  1190. *                @ 12, CENTER("Hello") SAY "Hello"
  1191.  
  1192. FUNCTION CENTER
  1193.  
  1194. PARAM string
  1195.  
  1196. col_pos = LEN(string)
  1197. IF col_pos < 80
  1198.    col_pos = INT((80 - col_pos) / 2)
  1199. ELSE
  1200.    col_pos = 0
  1201. ENDIF
  1202.  
  1203. RETURN (col_pos)
  1204.  
  1205.  
  1206. --End--
  1207. p
  1208.  
  1209.  
  1210.  
  1211. CLIPPER FUNCTION LIBRARY
  1212. ------------------------
  1213. 1.  LTRIM(). . . . removes leading spaces
  1214. 2.  RAND() . . . . random number generator
  1215. 3.  CLR(). . . . . work-around for @...CLEAR anomaly
  1216. 4.  EXPAND() . . . double space strings for menus and reports
  1217. 5.  CENTER() . . . center @..SAY's
  1218.  
  1219.  
  1220. Enter item number or Help 
  1221.  
  1222. NANTUCKET PRIVATE NETWORK
  1223. -------------------------
  1224. 1.  INSTRUCTIONS AND MENU-MAP
  1225. 2.  REFERENCE NOTES
  1226. 3.  ANOMALIES
  1227. 4.  SAMPLE PROGRAMS
  1228. 5.  FUNCTION LIBRARY
  1229. 6.  MAIL
  1230. 7.  WHAT'S NEW
  1231.  
  1232.  
  1233. Enter item number or Help 6
  1234.  
  1235.  
  1236. ELECTRONIC MAIL INSTRUCTIONS
  1237. ----------------------------
  1238. On-line MAIL to Nantucket Support should be sent to NAN002.
  1239. In order for us to provide you with the best service possible,
  1240. please follow these guidlines.
  1241.  
  1242. 1.  Provide us with information concerning your hardware,
  1243. peripherals, operating system version, and any  utility programs
  1244. you may have residing in memory (i.e. SideKick, Smartkey, etc.).
  1245.  
  1246. 2.  Give a BRIEF description (1 or 2 lines) of your application's
  1247. general nature.
  1248.  
  1249. 3.  Finally, provide us with the SPECIFIC nature of your problem
  1250. including error messages and the command syntax being used. You
  1251. may provide some source code as an example.  However, due to the
  1252. time necessary to download files, only 25 lines of source code
  1253. will be accepted.  So please, consolidate your problem (or
  1254. suspected problem) to as few lines of code as possible.
  1255.  
  1256. 4.  Include your name, Clipper serial number, Source ID (not your
  1257. password), and phone number.
  1258.  
  1259. --End--
  1260.  
  1261.  
  1262. NANTUCKET PRIVATE NETWORK
  1263. -------------------------
  1264. 1.  INSTRUCTIONS AND MENU-MAP
  1265. 2.  REFERENCE NOTES
  1266. 3.  ANOMALIES
  1267. 4.  SAMPLE PROGRAMS
  1268. 5.  FUNCTION LIBRARY
  1269. 6.  MAIL
  1270. 7.  WHAT'S NEW
  1271.  
  1272.  
  1273. Enter item number or Help q
  1274.