home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / database / snap312.zip / SNAP.DOC < prev    next >
Text File  |  1988-05-23  |  131KB  |  3,896 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.                                  SNAP!
  12.                  Documentation and Development System
  13.                for dBASE III, dBASE II, Clipper, FoxBASE
  14.                           and Similar Systems
  15.  
  16.  
  17.                 Written by Walter J. Kennamer 74025,514
  18.  
  19.  
  20.  
  21.  
  22. -----------------------------------------------------------------------
  23.  
  24.                                 License
  25.  
  26.  
  27.  
  28. Copyright (c) 1986, 1987, 1988 Walter J. Kennamer.  
  29. All Rights Reserved.
  30.  
  31. You are free to use, copy and distribute SNAP! providing that:
  32.  
  33.         NO FEE IS CHARGED FOR USE, COPYING OR DISTRIBUTION.
  34.  
  35.         IT IS NOT MODIFIED IN ANY WAY.
  36.  
  37.         THIS DOCUMENTATION FILE (UNMODIFIED) ACCOMPANIES ALL COPIES.
  38.  
  39. This  program  is  provided  AS  IS  without any warranty, expressed or
  40. implied, including but not limited to fitness for a particular purpose.
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54. dBASE II and dBASE  III are  trademarks of  Ashton-Tate.   Clipper is a
  55. trademark of  Nantucket Software.   FoxBASE and FoxBASE+ are trademarks
  56. of Fox Software, Inc.   UNIX  is a  trademark of  AT&T.   "Tom Rettig's
  57. Library" is probably a trademark of Tom Rettig Associates.
  58.  
  59.  
  60.                                    1
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.                            Table of Contents
  68.  
  69. Overview                                                              3
  70.  
  71. Getting Started                                                       4
  72.      Basic Operation . . . . . . . . . . . . . . . . . . . . . . .    4
  73.      A Tour of the SNAP! Screens . . . . . . . . . . . . . . . . .    5
  74.      Author and Copyright Holder . . . . . . . . . . . . . . . . .    5
  75.      Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . .    5
  76.      Saving and Restoring Default Choices  . . . . . . . . . . . .    6
  77.      Abbreviations . . . . . . . . . . . . . . . . . . . . . . . .    7
  78.      Status Reports  . . . . . . . . . . . . . . . . . . . . . . .    7
  79.      Searching the Program Tree  . . . . . . . . . . . . . . . . .    8
  80.      Ignoring Drive Designations . . . . . . . . . . . . . . . . .    8
  81.  
  82. SNAP! Commands                                                       10
  83.      Macros  . . . . . . . . . . . . . . . . . . . . . . . . . . .   10
  84.      SNAPCODE--Fake Program Statements . . . . . . . . . . . . . .   12
  85.      Other SNAP! Directives  . . . . . . . . . . . . . . . . . . .   12
  86.  
  87. Source Code Formatting Options                                       14
  88.      File Headings . . . . . . . . . . . . . . . . . . . . . . . .   14
  89.      Indentation . . . . . . . . . . . . . . . . . . . . . . . . .   15
  90.      Capitalization  . . . . . . . . . . . . . . . . . . . . . . .   15
  91.      Key Word Expansion and Compression  . . . . . . . . . . . . .   16
  92.      Suppressing Blank Lines and Comments  . . . . . . . . . . . .   17
  93.      Key Words File  . . . . . . . . . . . . . . . . . . . . . . .   17
  94.  
  95. Reports and Outputs                                                  19
  96.      Tree Structure Diagram  . . . . . . . . . . . . . . . . . . .   19
  97.      File List . . . . . . . . . . . . . . . . . . . . . . . . . .   20
  98.      Data Dictionary . . . . . . . . . . . . . . . . . . . . . . .   20
  99.      Index File Summary  . . . . . . . . . . . . . . . . . . . . .   21
  100.      Format File Summary . . . . . . . . . . . . . . . . . . . . .   22
  101.      Report Form Summary . . . . . . . . . . . . . . . . . . . . .   22
  102.      Procedure File Summary  . . . . . . . . . . . . . . . . . . .   23
  103.      Variable Cross-Reference Report . . . . . . . . . . . . . . .   23
  104.      LNK and MAKE files  . . . . . . . . . . . . . . . . . . . . .   26
  105.      Batch Files . . . . . . . . . . . . . . . . . . . . . . . . .   27
  106.      Action Diagrams . . . . . . . . . . . . . . . . . . . . . . .   28
  107.      Source Code Printout  . . . . . . . . . . . . . . . . . . . .   31
  108.      Printing Without Documenting  . . . . . . . . . . . . . . . .   32
  109.  
  110. Using SNAP! in a Batch Environment                                   33
  111.  
  112. Program Limitations                                                  35
  113.      Continuation Lines  . . . . . . . . . . . . . . . . . . . . .   36
  114.      Multiple Procedure Files  . . . . . . . . . . . . . . . . . .   36
  115.  
  116. Change History                                                       38
  117.  
  118.  
  119.                                    2
  120.  
  121.  
  122.  
  123.  
  124.  
  125. Some Administrative Matters                                          40
  126.      Version Numbers . . . . . . . . . . . . . . . . . . . . . . .   40
  127.      Updates and New Versions  . . . . . . . . . . . . . . . . . .   40
  128.      How to Get Support  . . . . . . . . . . . . . . . . . . . . .   40
  129.  
  130. Acknowledgements                                                     40
  131.  
  132. Appendix A -- Sample Reports                                         41
  133.  
  134.  
  135. Index                                                                62
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.                                    3
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.                                  Overview
  187.  
  188. SNAP! makes documenting dBASE programs a snap.  Written in Turbo Pascal, SN-
  189. AP! is designed to produce technical documentation for an entire  dBASE sys-
  190. tem, including:
  191.  
  192.     System summary showing lines of code, file statistics, etc.
  193.     Variable cross-reference report
  194.     Tree structure of the system.  The tree optionally can also show
  195.        databases, index files, etc. used by each program.
  196.     List of all files in the system
  197.     Data dictionary
  198.     Index file summary
  199.     Format file summary
  200.     Label form summary
  201.     Report form summary
  202.     Procedure file summary
  203.     Link files for Clipper applications (either PLINK86, TLINK, MS-LINK)
  204.     Make file for Clipper applications
  205.     Formatted source code listings
  206.     Action diagrams
  207.     Batch files to back up programs, databases, etc.
  208.     Batch file to move SNAP! output files back to the source subdirectory
  209.  
  210. In addition, on each program file, SNAP! can write a heading showing:
  211.  
  212.     Program name
  213.     System name
  214.     Author and copyright notice
  215.     Which files call this program
  216.     Which files this program calls
  217.     Databases used
  218.     Index files used
  219.     Formats used
  220.     Report forms used
  221.     Procedures
  222.     Memory files used
  223.     Date and time last modified
  224.  
  225. If you wish, all source code headings can also be echoed to a separate file.
  226.  
  227. Additionally, SNAP!  can indent  your source  code and  capitalize dBASE key
  228. words to make your code easier to read, understand and maintain.
  229.  
  230. Unlike  many  other  dBASE  documentation  systems,  SNAP!  documentation is
  231. system-wide.   In other words, not only can it tell you where variable X was
  232. used in a particular program,  it  can  cross-reference  all  occurrences of
  233. variable X  anywhere in  the program system you are documenting.  You merely
  234. enter the "top" program file name, and SNAP! does the rest.   Of course, you
  235. may also document a single program if you wish.
  236.  
  237.                                      3
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.                              Getting Started
  245.  
  246. First, make  a backup  copy of  your program  files.   I have  tried to test
  247. SNAP!  on  a  variety  of  hardware  and  software  combinations,  and there
  248. shouldn't be any danger, but I would feel awful if anyone lost program files
  249. due to some curious combination of resident programs,  unusual equipment and
  250. sunspot activity, not to mention (gasp!) "features."   SNAP! has been around
  251. for several years now and nobody has reported that SNAP!  has ever corrupted
  252. source code, but I would hate for you to be the first.
  253.  
  254.  
  255. Basic Operation
  256.  
  257. SNAP! is very easy to use.  If you accept the program's default options, you
  258. only have to enter the following information on the TopFile screen:
  259.  
  260.     "Top" file name
  261.     System name
  262.     Author
  263.     Paths for program, data, output and SNAP! files
  264.  
  265. If you are happy with the defaults, just enter the information on  the first
  266. screen (the  System screen),  press F10 to see the main menu, then press 'B'
  267. to begin documenting your system.
  268.  
  269. The term "TopFile" (spelled  and punctuated  in a  variety of  ways) is used
  270. throughout this  documentation to  mean the  first file in a system--the one
  271. first invoked.
  272.  
  273. You can press F10 to see the main menu.  If you don't want to use  the menu,
  274. you can save a keystroke or two by using the Alt key in combination with the
  275. menu choice you want.  For example, without pressing F10 to pop up the menu,
  276. you can  press Alt-R  to see the Reports Screen, Alt-B to Begin Documenting,
  277. Alt-Q to quit, and so forth.  Also,  the Ctrl-PgUp  and Ctrl-PgDn  keys take
  278. you to the preceding and succeeding screens, respectively.
  279.  
  280. The  line  at  the  bottom  of  the screen tells you which function keys are
  281. active.  At any point, you can press the F1 key to receive context-sensitive
  282. help.  Help is available for each field.  
  283.  
  284. The SNAP! system is composed of the following files:
  285.     SNAP.EXE      -- main program file
  286.     SNAP.HLP      -- help file 
  287.     SNAP.DOC      -- this documentation file
  288.     DB2WORDS.SNP  -- key word file for dBASE II/FoxBASE
  289.     DB3WORDS.SNP  -- key word file for dBASE III/Clipper/FoxBASE+
  290.  
  291.  
  292. All of  these files must be in the same subdirectory, which may be different
  293. than the subdirectory in which your dBASE source code files are stored.
  294.  
  295.  
  296.                                      4
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303. A Tour of the SNAP! Screens
  304.         
  305. SNAP! has seven main screens on which you can select various combinations of
  306. options:
  307.      System --contains  system-level information (system name, author, top  
  308.                 file name, etc.)
  309.      Reports--determines which documentation reports will be generated
  310.      Format --determines source code formatting and action diagram  options 
  311.                 in effect
  312.      Xref   --determines what kinds of words will be in the cross-reference
  313.      Tree    --determines what kinds of files will be shown on the tree     
  314.                 diagram
  315.      Print  --determines source code printing parameters
  316.      Other  --other options
  317.  
  318. The next sections highlight  a  few  of  the  fields  that  may  have hidden
  319. mysteries.
  320.  
  321.  
  322. Author and Copyright Holder
  323.  
  324. Enter the  author and copyright holder in these fields.  This information is
  325. used only in the program headings, and may be omitted  if you  choose not to
  326. write program  headings (you make that choice on the Format screen).  If you
  327. enter either author or holder, but not both,  the program  assumes that they
  328. are the same.
  329.  
  330.  
  331. Paths
  332.  
  333. The TopFile  menu screen  has four  fields for path information--the path to
  334. the source code, data, output and SNAP! files.   Your  response should  be a
  335. valid MS-DOS  path, with or without drive designation.  It doesn't matter if
  336. you omit  the final  backslash (e.g.,  C:\SNAP is  valid, as  is C:\SNAP\ or
  337. \SNAP).
  338.  
  339. If the "Top" file you specify cannot be found, or if the SNAP! files are not
  340. where you  say  they  are,  SNAP!  complains  and  will  not  let  you begin
  341. documentation.   If the  output directory  does not exist, SNAP! will create
  342. it.
  343.  
  344. If your input and  output paths  are different,  SNAP! will  not modify your
  345. original source  code files  in any way.  Only the output files will contain
  346. capitalized key words, indents, headings and so on.  
  347.  
  348. On the other hand, if the source code and output  paths are  the same, SNAP!
  349. adds  .BAK  extensions  to  your  original  input files and creates modified
  350. output files with the original names.   For  example, if  one of  your input
  351. programs was  named EDIT.PRG, after running SNAP! it will be called EDIT.BAK
  352. and a new, modified EDIT.PRG will be in  the directory.   This  scheme works
  353. fine as  long as  all your  input files  have unique names (not counting the
  354.  
  355.                                      5
  356.  
  357.  
  358.  
  359.  
  360.  
  361. extension).  Otherwise, all but the last non-unique input file  will be lost
  362. (though the  modified output  files will  still be there).  The best idea is
  363. never to direct output to the input directory if the  first eight characters
  364. of all of your program files are not unique.  
  365.  
  366. All  of  your  source  code  files--including programs, format files, report
  367. forms, memory files and so forth--must be in  the same  source directory for
  368. SNAP!  to  find  them.    (Databases  and  indexes can be either in the data
  369. directory or in the source code  directory.)   Even if  the application runs
  370. fine in  multiple subdirectories under dBASE III, you still need to move all
  371. program files into a single subdirectory  for SNAP!     If you  use explicit
  372. drive and path designations when you reference another file, SNAP! will find
  373. it (as long as  you have  not told  SNAP! to  ignore drive designations--see
  374. below), but  it otherwise  cannot tell  which subdirectory is current.  Note
  375. that SNAP! pays no attention to "SET PATH TO" statements.  SNAP! also cannot
  376. handle macro substitutions for drives or paths.
  377.  
  378. SNAP!  never  modifies  database,  index,  report form, label form or memory
  379. files.
  380.  
  381. When SNAP! decides you are about to do something particularly  dangerous, it
  382. may require  you to  direct output  files to  a different directory than the
  383. input  files  are  in.    Some  "dangerous"  options  include  expanding  or
  384. compressing key words and eliminating comments from source code.
  385.  
  386.  
  387. Saving and Restoring Default Choices
  388.  
  389. As you  use SNAP!,  you may  wish to  modify the  default values for certain
  390. fields.  For example, you may want to set the  SNAP! path  to \SNAP,  or the
  391. author  and  copyright  holder  to  your  name. Press F5 to save the current
  392. values of each field.  SNAP! will prompt you for a filename  to use  for the
  393. configuration file.  
  394.  
  395. When you  start SNAP!,  you can  specify the  file to  use for default field
  396. values.  SNAP! assumes that the configuration file should be  present in the
  397. current  directory   when  you   invoked  SNAP!.     You  can  name  another
  398. configuration file by using the /F switch on the command line.  For example,
  399. the command:
  400.  
  401.    SNAP /fc:\foo\bar.baz  (note: no space between '/f' and the filename).
  402.  
  403. tells SNAP!  to look  for a configuration file named 'bar.baz' in the '\foo'
  404. subdirectory on drive c:.  If it  cannot  find  it,  SNAP!  will  start with
  405. default values.   When  you save  the configuration, SNAP! uses the name you
  406. specified.  If you do  not  specify  a  file,  SNAP!  looks  for  one called
  407. CONFIG.SNP in  the current directory.  If the file you specify does not have
  408. an extension, SNAP! assumes the extension is '.SNP'.
  409.  
  410. I ordinarily save a separate configuration file for each system I use in the
  411. same subdirectory  with the system.  This is a big help for running SNAP! in
  412.  
  413.  
  414.                                      6
  415.  
  416.  
  417.  
  418.  
  419.  
  420. batch mode (see  below)  and  for  keeping  subdirectories,  filenames, etc.
  421. straight.
  422.  
  423. You can also press F6 to retrieve saved specifications.  Invoking SNAP! with
  424. the  /F  command-line  paramater  is  equivalent  to  entering  the program,
  425. pressing F6 at the System screen and entering a filename.
  426.  
  427.  
  428. Abbreviations
  429.  
  430. In   general,   SNAP!   is   pretty   good  about  recognizing  valid  dBASE
  431. abbreviations.  For example, it will properly detect that
  432.     <tab>DO <tab> WHIL<tab>
  433. initiates a DO loop.  Version 3.00 also  removes the  earlier restriction on
  434. abbreviating INDEX ('SET INDE TO foo' is fine now).
  435.  
  436. Also, if  you use  dBASE key  words as  variable names,  SNAP! can sometimes
  437. become confused.  For example, if you use 'PROC' as a variable name within a
  438. procedure file  and put  the statement  'PROC =  FOO' within the file, SNAP!
  439. will see the 'PROC' and think that it is initiating a new procedure.  Common
  440. sense will  ordinarily avoid this problem.  As always, it is a good idea not
  441. to use key words  in  a  way  other  than  that  intended  by  the language,
  442. especially if  you plan to compile the code; compilers tend to be more picky
  443. about this restriction than interpreters.
  444.  
  445.  
  446. Status Reports
  447.  
  448. As SNAP! documents your programs, it updates a status screen  that tells you
  449. how much  progress it  has made.   The  screen shows  the file that SNAP! is
  450. currently documenting and the number of lines in the file.  SNAP!  makes two
  451. passes through  each file--one  to determine  which files  use or call which
  452. other files, and one for cross-referencing variables, formatting source code
  453. and preparing action diagrams.
  454.  
  455. In addition,  if you  choose any  option that modifies source code (heading,
  456. indentation, key word capitalization, compression or expansion, etc.), or if
  457. you choose  to display the cross-reference report, SNAP! will display a more
  458. elaborate screen  indicating how  many programs,  databases, indexes, format
  459. files, report  forms and variables it has found, along with the total number
  460. of program lines documented so far, and the amount of free memory available.
  461. This screen also shows the elapsed time since you began documentation.
  462.  
  463. Note:  some  people  have  reported  that  the  elapsed time is occasionally
  464. negative.  This is normal.  It means that your computer is  actually running
  465. faster than  light.   It is nothing to be concerned about unless you have an
  466. 8087 chip, which sometimes overheats when moving backwards in time.
  467.  
  468. If SNAP! identifies any errors during its run, it will  print a  brief error
  469. message in  a separate  window in the upper right corner of the screen.  All
  470. error messages are also echoed to the ERROR.DOC file.
  471.  
  472.  
  473.                                      7
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.  
  481.  
  482. Searching the Program Tree
  483.  
  484. SNAP! assumes that you want  to  document  not  only  the  TopFile,  but all
  485. programs it  calls, all  programs called  by programs that Top calls, and so
  486. on.   In  fact,  SNAP!  will  search  the  program  tree  for  all programs,
  487. databases, index  files, report  forms, format files, label forms and memory
  488. files as it prepares system documentation.  You  never need  to specify more
  489. than the top program file name.  
  490.  
  491. If you  choose not to search the tree (you can make this choice on the Other
  492. Options Screen), only the specific file you enter will be documented.  Thus,
  493. you can  limit documentation to a particular file or a branch of the program
  494. tree by varying either  the  file  you  input  as  Top  or  the  search tree
  495. parameter.
  496.  
  497. Note that  SNAP! does  not track  "SET DEFAULT  TO x" statements, but always
  498. expects to see files with no drive designations on the default drive  and in
  499. the source file subdirectory.  
  500.  
  501.  
  502. dBASE II or dBASE III?
  503.  
  504. On the  Other Options screen, SNAP! asks if this is a dBASE III system.  You
  505. should answer "Y" if this is  dBASE  III  or  a  dBASE  III  "compatible" --
  506. specifically Clipper,  FoxBASE+, or QuickSilver.  Answer "N" for dBASE II or
  507. FoxBASE (original, dBASE II variety).
  508.  
  509. SNAP! needs this information  since  dBASE  III  uses  a  different internal
  510. format for  database and index files, as well as different key words.  SNAP!
  511. reads Clipper  index files,  and handles  Clipper source  code and databases
  512. without difficulty.  If a specified dBASE III index file is not found, SNAP!
  513. automatically searches for the corresponding Clipper index file (with an NTX
  514. extension). SNAP!  will also  automatically detect  FoxBASE index files (IDX
  515. extension) and document them properly.
  516.  
  517. Further, if you say that your  system  is  a  dBASE  III-type  system, SNAP!
  518. assumes that  report form  files are  in dBASE III format.  If they are not,
  519. the system can hang when SNAP! bravely tries to read data that isn't there. 
  520.  
  521.  
  522. Ignoring Drive Designations
  523.  
  524. Sometimes  you  may  want  SNAP!  to  disregard  explicit   drive  and  path
  525. designations when  searching for  program or  other files.  A choice off the
  526. Other Options screen instructs SNAP! to drop any drive or  path designations
  527. before attempting  to find  a file.   As  an example, you may have written a
  528. backup routine to copy a database to B:BACKUP.DBF.  If you would  like SNAP!
  529. not to  try to  find that  file on the B: drive, choose the option to ignore
  530. drive designations.  
  531.  
  532.                                      8
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.  
  541.  
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.                                      9
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.                               SNAP! Commands
  599.  
  600. SNAP! supports several commands that you  can  insert  in  your  source code
  601. files.   These commands  will look  like comments to Dbase systems, but will
  602. have a special meaning for SNAP!.  The commands allow you to  define macros,
  603. insert imaginary program statements into your system, turn SNAP! features on
  604. and off for particular parts of your system, and so forth.
  605.  
  606. Macros
  607.  
  608. SNAP! has a limited ability to do macro substitutions.   To define  a macro,
  609. place the following line in your source code:
  610.  
  611.      *# SNAPMACRO  source  target1 target2 . . .
  612.  
  613. Alternatively, or in conjunction with this method, you can also define macro
  614. substitutions in a separate file.   Specify  the  /mfilename  switch  on the
  615. command line  to tell SNAP! which file the substitution strings are in.  For
  616. example, the following command will start  SNAP! and  read macro definitions
  617. from the file FOO.MAC:
  618.  
  619.    SNAP /mFOO.MAC
  620.  
  621. If you  do not specify a filename with the /m switch, SNAP! will try to find
  622. MACRO.SNP. You must use the full "*# SNAPMACRO" command verb on each line of
  623. the file.   Macro substitutions defined in source code files take precedence
  624. over those defined in a separate macro file.
  625.  
  626. The /O switch on the SNAP! command line disables all  macro processing, both
  627. from SNAPMACRO statements in source code and in a named macro file.
  628.  
  629. Note that  the SNAPMACRO statement begins with an asterisk and a pound sign.
  630. SNAP! uses this sequence of characters to designate a SNAP! command (see the
  631. /T command  line switch  for information on how to change these characters).
  632. 'Source' must be a single word, delimited by spaces or tabs.  "Target" means
  633. the rest  of the line.  Everything on the line--both source and target--will
  634. be converted to upper case.  
  635.  
  636. Note that the source string does  not include  the ampersand  (&) symbol for
  637. the  macro  (e.g.,  use  SOURCE  instead  of &SOURCE).  The rest of the line
  638. (minus leading and trailing blanks) will be used  as a  substitution string.
  639. The target can be a single word or several words.
  640.  
  641. You cannot  use &&  comments on a SNAPMACRO line since SNAP! will think they
  642. are part of the target.    If  you  want  to  document  the  purpose  of the
  643. SNAPMACRO statement, put a comment on the line above it.
  644.  
  645. The SNAPMACRO statement can appear anywhere, as long as SNAP! sees it before
  646. encountering the macro that you want to replace.   If  the target  will have
  647. the same  value throughout  the system (e.g., FOO will always be replaced by
  648.  
  649.  
  650.                                     10
  651.  
  652.  
  653.  
  654.  
  655.  
  656. BAR), it is a good idea to put all of  the macros  in one  place, perhaps at
  657. the top of the TopFile or in a separate macro file.
  658.  
  659. If you  would like SNAP! to use different macro values during documentation,
  660. you may  want  to  place  the  SNAPMACRO  statement  immediately  before the
  661. specific  location  of  each  macro  substitution.    If  you  have multiple
  662. definitions for a single  macro,  only  the  last  one  SNAP!  sees  will be
  663. effective.   For example,  if the following series of statements are in your
  664. program,
  665.  
  666.    *# SNAPMACRO s_ddndx  target1
  667.    *# SNAPMACRO s_ddndx  target2
  668.    *# SNAPMACRO s_ddndx  target3
  669.  
  670. only 'target3' will be effective and will be substituted for each occurrence
  671. of &s_ddndx.   See  also the  discussion of SNAPCODE statements below for an
  672. alternative approach.
  673.  
  674. SNAP! will try to remove macros that look  like drive  or path designations.
  675. For example, if the following statement is in one of your programs:
  676.  
  677.     USE &MPATH.DATABASE
  678.  
  679. SNAP!  will   detect  the   macro  and  remove  it  before  trying  to  find
  680. DATABASE.DBF.  One consequence of this limit is  that you  cannot use macros
  681. to refer to program files in different directories.  All source code program
  682. files (programs, format files, memory files, etc.) must reside in the single
  683. program directory  you specify  in the System screen.  Databases and indexes
  684. can be in either the program or data directories you specify.
  685.  
  686. SNAP! will not substitute the macro  in the  code itself,  but will  use the
  687. substitution value everywhere else.  For example, assume your program uses a
  688. database whose name is  contained  in  a  macro  variable  named 'dataname'.
  689. Assume further that you have included the following line in your code:
  690.  
  691.    *# SNAPMACRO dataname ABC.DBF
  692.  
  693. If your code has this line in it:
  694.  
  695.    USE &dataname
  696.  
  697. the  source  code  will  be  unchanged  after running SNAP!, but the program
  698. headings and all other  SNAP!  reports  will  show  this  program  using the
  699. ABC.DBF database.
  700.  
  701. See  also  the  section  below "Fake Program Statements--SNAPCODE" for other
  702. ideas on how to document macros.
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.                                     11
  710.  
  711.  
  712.  
  713.  
  714.  
  715. SNAPCODE--Fake Program Statements
  716.  
  717. Sometimes you may want to  enter  fake  program  source  code  statements --
  718. statements that  SNAP! treats  as real  but which  do not actually interfere
  719. with your program when it executes.  A  good example  is a  macro that calls
  720. one of  a number  of programs,  depending on  the value  it has  at run time
  721. (e.g., DO &program).  The macro substitution discussed in the  section above
  722. provides a  way for you to specify one value for 'program'.  But suppose you
  723. wanted SNAP! to assume  that 'program'  had several  values and  to document
  724. each one in turn?  The *# SNAPCODE directive provides a way. 
  725.  
  726. The *#  SNAPCODE directive  causes SNAP! to treat any text on the line as if
  727. it were a program source code statement.   In the  example above,  you could
  728. enter the following lines where the macro was called:
  729.  
  730.    DO &program                    <---- in original program
  731.    *# SNAPCODE DO foo
  732.    *# SNAPCODE DO bar
  733.    *# SNAPCODE DO brlfq
  734.  
  735. SNAP! acts  as if these were perfectly straightforward calls to 'foo', 'bar'
  736. and 'brlfq', and documents them  accordingly.    dBASE  and  related systems
  737. ignore the statements.
  738.  
  739. Note that  SNAP! does  not know that these SNAPCODE statements have anything
  740. to do with the  DO statement  above.   SNAP! does  not associate  'foo' with
  741. 'program'.   The next  time SNAP! sees 'DO &program' it will not assume that
  742. 'program' has the value 'foo'.  If you want SNAP!  to associate  values with
  743. macros, use the SNAPMACRO directive.
  744.  
  745. As a side benefit, SNAPCODE statements help document your code by specifying
  746. the permissable values that particular macros can take.
  747.  
  748.  
  749. Other SNAP! Directives
  750.  
  751. Other SNAP! commands, or directives, allow you to turn cross-referencing and
  752. program formatting  on or off for particular programs.  For example, you may
  753. have "boilerplate" code that  you  have  thoroughly  debugged  and formatted
  754. which you  insert into  many other systems.  It would be unnecessarily time-
  755. consuming to reformat this code every  time you  ran SNAP!.   SNAP! provides
  756. other  commands  to  temporarily  suspend cross-referencing and formatting--
  757. XREF, FORMAT, INDENT, CAPITAL, and EXPAND.  Each  of these  commands accepts
  758. three settings--ON,  OFF and SUSPEND.  The ON and OFF commands are effective
  759. until SNAP! sees another directive, while  SUSPEND is  in effect  only until
  760. the end  of the  current program  or procedure.   For example, if you insert
  761. this line in your code:
  762.    *# SNAP XREF OFF
  763. no tokens will be cross-referenced until this line is encountered:
  764.    *# SNAP XREF ON
  765. On the other hand, 
  766.    *# SNAP XREF SUSPEND 
  767.  
  768.                                     12
  769.  
  770.  
  771.  
  772.  
  773.  
  774. suspends cross-referencing only for the current  file.   It starts  up again
  775. when the next program or procedure is documented.
  776.  
  777. I suspend  cross-referencing for  commonly-used subroutines in my code.  For
  778. example, since Clipper does  not have  a BROWSE  command, I  often include a
  779. public-domain BROWSE  program in  my systems.   This  is a standalone module
  780. that really has nothing to do with the rest of my system,  and I  don't want
  781. its variables cluttering up my cross-reference report.  So, I say: SNAP XREF
  782. SUSPEND at the top of the file and SNAP! leaves it alone. 
  783.  
  784. SNAP FORMAT works in the same way.    If  format  is  off,  no  indenting or
  785. capitalization will  be done.   When  SNAP! sees a SNAP FORMAT statement, it
  786. affects the internal codes that determine  whether indenting, capitalization
  787. and  key  word  expansion  (or  contraction) take place.  The three commands
  788. (INDENT, CAPITAL and EXPAND) turn specific  features on  or off.   Thus, the
  789. following sequence  suspends indenting  and capitalization,  but enables key
  790. word expansion:
  791.    *# SNAP FORMAT SUSPEND
  792.    *# SNAP CAPITAL ON
  793. Thus, FORMAT is a shorthand way of referring  to CAPITAL,  INDENT and EXPAND
  794. all at once.
  795.  
  796. If *#  is an inconvenient sequence for you (e.g, it may cause confusion with
  797. the British pound sign), you can change it with the /T switch on the command
  798. line.   For example,  if you invoke SNAP! with the switch "/T*$", SNAP! will
  799. use *$ to designate  SNAPMACRO, SNAPCODE  and other  SNAP! directives.   You
  800. must  start  this  sequence  with  an  asterisk (so that dBASE knows it is a
  801. comment) and it cannot be more than three characters long.
  802.  
  803.  
  804.  
  805.  
  806.  
  807.  
  808.  
  809.  
  810.  
  811.  
  812.  
  813.  
  814.  
  815.  
  816.  
  817.  
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824.  
  825.  
  826.  
  827.                                     13
  828.  
  829.  
  830.  
  831.  
  832.  
  833.                       Source Code Formatting Options
  834.  
  835.  
  836. File Headings
  837.  
  838. One of the most useful SNAP! features is a heading  written to  each file in
  839. the system.  Each heading indicates:
  840.  
  841.     Program name
  842.     System name
  843.     Copyright notice
  844.     Author
  845.     Procedures defined within this file
  846.     Which programs this program calls
  847.     Which programs call this program
  848.     Databases, index  files, report forms, format files, label forms and    
  849.        memory files used by this program
  850.     Date and time documented.
  851.  
  852. A sample heading is included in the Appendix.   The sample heading indicates
  853. that TODOINP.PRG is called by TODOMENU, calls TIME and TESTDATE, uses a file
  854. whose name is contained in S:TDFILE with index TODO (macro  substitution was
  855. not used  for this  example), and  also uses  the TODOINP  format file.  The
  856. heading  also  indicates  the  system  name,  author,  copyright   and  date
  857. documented.   You may  want to add more information to the header, such as a
  858. brief narrative description of the program's purpose.
  859.  
  860. If you choose to write headings on your source code files (or  if you choose
  861. any other  option that  modifies the source code file), it is a good idea to
  862. send the output files to a different directory than the input files  so that
  863. your original source code remains unchanged.
  864.  
  865. If you  choose to  send output  files to  the input directory, your original
  866. source code file will  be  renamed  with  a  .BAK  extension.    If  you use
  867. extensions  to  distinguish  between  program  files,  some of your original
  868. source code files could be destroyed.  For example, if your system  uses the
  869. following program file names:
  870.  
  871.  
  872.     SYSTEM.INP
  873.     SYSTEM.EDT
  874.     SYSTEM.RPT
  875.     SYSTEM.DEL
  876.  
  877. and so on, the output files containing the headings will retain these names.
  878. Each of the input files, however, will have  been renamed  to a  file called
  879. SYSTEM.BAK, and  only the  last one  will still  exist when SNAP! completes.
  880. Therefore, you should always send output files to a separate subdirectory if
  881. you use this naming convention.
  882.  
  883. As always,  you should  make regular  backups, and  you should be especially
  884. careful to make a full backup of all your files before running SNAP!.
  885.  
  886.                                     14
  887.  
  888.  
  889.  
  890.  
  891.  
  892.  
  893. By default, SNAP! leaves the date and time of last update unchanged for each
  894. of your  files.   You can  instruct SNAP!  to update  the date and time last
  895. changed on  the source  code format  screen.   The headings  written to each
  896. program file show the date and time SNAP! was run.
  897.  
  898.  
  899. Indentation
  900.  
  901. SNAP!  can  also  help  format  your  source code to make it easier to read.
  902. SNAP!  can  recognize  dBASE  control  structures  and  indent  the  program
  903. statements underneath  them.  By default, indentation is three spaces.  (The
  904. author, who has long  argued  the  superior  virtue  of  tab  characters for
  905. indenting code,  has caved  in to  overwhelming user pressure on this point.
  906. He still uses tabs in his code and believes you should too.  But the default
  907. is now  three spaces.)  In addition, should you choose to use SNAP!'s source
  908. code printing routines, you can select the number  of spaces  to be inserted
  909. for each tab as the code prints.
  910.   
  911. However, if  you would  like to  use spaces  rather than  tab characters for
  912. indenting, you can select this option from the  Format options  screen.  For
  913. example, you  can instruct  SNAP! to  use three  spaces for each indentation
  914. level.  This option  has no  effect if  you do  not choose  to indent source
  915. code.   It is different from the option in the source code printing facility
  916. that also allows you to expand tabs.  If you choose to use spaces  to indent
  917. your source code files, the source code will not contain tabs, so the source
  918. code printing tab-expansion feature will have no effect.
  919.  
  920. If you choose to indent source  code or  create action  diagrams, SNAP! will
  921. also  scan  your  code  for  mismatched  control structure terminators.  For
  922. example, if your code has the following sequence:
  923.  
  924.    DO WHILE T      statements
  925.           .
  926.           .
  927.           .
  928.       IF X = Y
  929.           .
  930.           .
  931.       ENDIF
  932.    ENDIF      <---- incorrect
  933.  
  934.  
  935. SNAP! will detect that the final statement should have been an ENDDO instead
  936. of  an  ENDIF  and  will  display  an appropriate error message.  SNAP! will
  937. accept 'END' as a valid abbreviation of ENDDO, ENDIF or ENDCASE. 
  938.  
  939.  
  940. Capitalization
  941.  
  942. SNAP! will also capitalize dBASE key words found in your  source code.   Key
  943. words  are  stored  in  a  file  called  DBxWORDS.SNP  where x is a 2 or a 3
  944.  
  945.                                     15
  946.  
  947.  
  948.  
  949.  
  950.  
  951. depending on the version of  dBASE  you  are  using  (you  can  also specify
  952. another file).  SNAP! does not attempt to parse code statements to determine
  953. how a word is used, so if you use key words as variable or field names, they
  954. will also  be capitalized.   Should  you wish not to capitalize a particular
  955. key word, you can either delete it from  the DBxWORDS.SNP  file, or "comment
  956. it out"  by putting an asterisk before it in the file (e.g., RELEASE becomes
  957. *RELEASE). 
  958.  
  959. The preceding paragraph assumes  you  prefer  "standard" capitalization--key
  960. words  are  capitalized,  functions  have  an  initial  capital  letter, and
  961. everything else is in lower case.  If not, you can change  it on  the Format
  962. screen.  You can select upper case, lower case, initial caps, or none (leave
  963. it alone) for both tokens and for key words.  Thus, if you were so inclined,
  964. you could capitalize tokens (variables, etc.) and lowercase key words. 
  965.  
  966.  
  967. Key Word Expansion and Compression
  968.  
  969. SNAP! will  allow you  to expand abbreviated key words to their full length,
  970. or to abbreviate the  key words  to four  characters.   Compilers don't care
  971. about any of this, but the dBASE interpreter runs programs slightly, usually
  972. very slightly, faster if the key words are  abbreviated to  their first four
  973. characters.    An  option  on  the  Format  screen controls how expansion or
  974. compression is done.  The  default  is  no  expansion  or compression--SNAP!
  975. leaves your  code alone.   However, you can select expansion, or compression
  976. to any number of characters between 4 and 9.
  977.  
  978. Please be careful with this option, especially if  you are  not very careful
  979. about how  you name  variables.   The only thing SNAP! knows about key words
  980. are that they are in the key words file.  If one of your variables is  a key
  981. word (or  a valid  abbreviation of a key word), SNAP! will cheerfully expand
  982. or contract it along with everything else.  SNAP! cannot tell how  whether a
  983. particular word is being used as a command or as a variable.  Normally, this
  984. will not be a big problem--if  you named  a variable  "title" and compressed
  985. key words,  it will now be called "titl".  Problems could arise, however, if
  986. two variables are valid abbreviations of  the same  key word  (e.g., "other"
  987. and "otherw",  both of  which are valid abbreviations of OTHERWISE).  If you
  988. compress key words and have such  variable  names,  both  variables  will be
  989. compressed to  OTHE, and  there is  no way to separate them again.  Also, if
  990. you are using  a  dialect  of  Dbase  that  supports  user-defined functions
  991. (UDFs), and if one of the UDFs has the same name as a key word (Tom Rettig's
  992. BLANK() function, for example),  the UDF  name will  be compressed (assuming
  993. the UDF  name was  in the key words file).  If you compress keywords in this
  994. case, nothing desirable will happen.
  995.  
  996. Because of the irrevocable changes that this option can make, SNAP! will not
  997. allow you  to exercise it if the source and output directories are the same.
  998. In other words, SNAP!  will refuse  to overwrite  your original  source code
  999. files if you select this option.  Big brother is looking out for you.
  1000.  
  1001. Key words  that are identified in the key words file as functions (they have
  1002.  
  1003.  
  1004.                                     16
  1005.  
  1006.  
  1007.  
  1008.  
  1009.  
  1010. () after their name--see below) are never affected  by key  word compression
  1011. or expansion.
  1012.  
  1013.  
  1014.  
  1015.  
  1016. Suppressing Blank Lines and Comments
  1017.  
  1018. You  can  suppress  blank  lines  and/or  comments  from the output files by
  1019. selecting the appropriate options on the Format screen.  I  do not recommend
  1020. this, but  it does  make interpreted dBASE applications run slightly faster.
  1021. Please be doubly sure to make  backups before  doing this.   SNAP!'s default
  1022. options are  to leave  both blank  lines and comments in the output file, so
  1023. you have to take special action yourself before they will be dropped.
  1024.  
  1025. As with key word expansion and compression, you cannot select this option if
  1026. the source and output subdirectories are the same.
  1027.  
  1028. If you  know how  to design an effective counterpart to this feature--how to
  1029. put the comments back  in--please contact  me about  a potentially lucrative
  1030. commercial venture.
  1031.  
  1032.  
  1033. Key Words File
  1034.  
  1035. Capitalization, cross-referencing and key word expansion and compression are
  1036. controlled by the words in the  key words  file.   The key  word file should
  1037. contain  one  key  word  per  line.  Capitalization and order do not matter,
  1038. except that if two identical key words have different flags (see below), the
  1039. last one takes precedence. 
  1040.  
  1041. By inserting  the correct  characters in  the key  word file,  you can cause
  1042. certain key words or variables to be handled  differently than  normal.  The
  1043. following  characters  have  a  special  meaning  in  the key word file when
  1044. inserted immediately before a word:
  1045.  
  1046.      *    Comments out the word.  SNAP! acts as if it  were not in
  1047.           the key word file at all.
  1048.  
  1049.      !        Capitalize,  but do no cross-reference even when the
  1050.           option to cross-reference key words is  in effect.   You
  1051.           may  want  to  use  this  character  for  often-used but
  1052.           uninteresting key words such as TO or, perhaps, SAY.
  1053.  
  1054.      @     Capitalize and  always cross-reference  this word, even
  1055.           when the  option to  cross-reference key words is not in
  1056.           effect.  You  might  want  to  use  this  for especially
  1057.           important key words such REPLACE, SAVE, or QUIT.
  1058.  
  1059.      %      Neither capitalize  nor cross-reference, regardless of
  1060.           whether the options to capitalize or cross-reference key
  1061.           words are in effect.  You may want to use this character
  1062.  
  1063.                                     17
  1064.  
  1065.  
  1066.  
  1067.  
  1068.  
  1069.           for variables that you use frequently, but that  you are
  1070.           not   interested   in   cross-referencing--perhaps  "i",
  1071.           "choice", "action", or  "lineno".  This  will  keep them
  1072.           from  cluttering  up  the  cross-reference report.  Such
  1073.           words  are  not  affected  by  key   word  expansion  or
  1074.           contraction.
  1075.  
  1076.      ()   If the *last* two characters in a key word are (), the key word
  1077.           will ordinarily have an initial capital letter in the formatted
  1078.           output.  The DB3WORDS.SNP file that comes with SNAP! uses this
  1079.           notation to designate the Tom Rettig key words (Tom Rettig is the
  1080.           author of a popular set of functions for dBASE III and Clipper).  
  1081.           Functions are never affected by key word expansion or contraction.
  1082.  
  1083.  
  1084.  
  1085. The following examples illustrate how to use these special characters:
  1086.  
  1087.     *note
  1088.     !SAY
  1089.     @REPLACE
  1090.     %CHOICE
  1091.     SOME_FUNCTION()
  1092.  
  1093.  
  1094.  
  1095.  
  1096.  
  1097.  
  1098.  
  1099.  
  1100.  
  1101.  
  1102.  
  1103.  
  1104.  
  1105.  
  1106.  
  1107.  
  1108.  
  1109.  
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122.                                     18
  1123.  
  1124.  
  1125.  
  1126.  
  1127.  
  1128.  
  1129.                             Reports and Outputs
  1130.  
  1131. SNAP! can produce any  combination  of  several  reports.    Each  report is
  1132. optional and  can be  selected or suppressed on the Options Screen. However,
  1133. some reports (e.g. Data dictionary, Index summary) require you to search the
  1134. tree rather than document a single program.
  1135.  
  1136. Normally, SNAP! tells you that it is producing a particular report, but does
  1137. not display the report on the  screen.   However, each  report other  than a
  1138. file heading, may be displayed on the screen as it is echoed to a file.  You
  1139. can enable screen  echoing  by  invoking  SNAP!  with  the  /S  command line
  1140. parameter.  I like to see the reports being generated but some people prefer
  1141. to silence the screen to improve  SNAP!'s speed.   Note  that the  /S switch
  1142. only affects  the screen  display of reports and has no effect on the status
  1143. screens that are displayed as SNAP! scans source code files.
  1144.  
  1145. The  program   contains   default   filenames   (e.g.,   XREF.DOC   for  the
  1146. cross-reference report), but you can change them if you wish.
  1147.  
  1148. System Summary
  1149.  
  1150. This report shows the following information:
  1151.    System name
  1152.    Author
  1153.    Current date and time
  1154.    Lines of code
  1155.    Number of programs, procedures, procedure files, indexes, etc.
  1156.    Names of databases, indexes, report forms, label forms and memory files
  1157.  
  1158. The system  summary would ordinarily be the first page in the documentation.
  1159. It, together with the tree diagram, provides a basic overview  of the entire
  1160. system.  See Appendix A for an example.
  1161.    
  1162.  
  1163. Tree Structure Diagram
  1164.  
  1165. If you  choose the  default option  of documenting all programs in the tree,
  1166. SNAP! will produce a chart showing which programs call which  other programs
  1167. and which  programs use which databases.  The tree diagram, like other SNAP!
  1168. reports, appears on the  screen and  is echoed  to a  file (default  name of
  1169. TREE.DOC).
  1170.  
  1171. Any procedures or databases in the tree will be designated like this:
  1172.    Gee (procedure in procedure.file)
  1173.    Whiz (database ALIAS baz)
  1174.  
  1175. SNAP! by  default includes programs, procedures, functions, format files and
  1176. databases in the tree. The Tree  Screen includes  options that  allow you to
  1177. put indexes, report forms, label forms and memory files in the tree also, or
  1178. to suppress any of the default file types except program files. 
  1179.  
  1180.  
  1181.                                     19
  1182.  
  1183.  
  1184.  
  1185.  
  1186.  
  1187. Note that the databases (and other  non-program files)  are shown underneath
  1188. the  programs  that  actually  call  them.    If a database is opened in one
  1189. program and remains open in another program, SNAP! will show the database as
  1190. called only by the first program file.
  1191.  
  1192. SNAP! has  some code  to detect  certain types  of recursion and prevent the
  1193. tree from marching off the right side of the page and eventually off the end
  1194. of the world.  SNAP! catches programs that call themselves and programs that
  1195. call another  program  that  calls  the  original  program  again.    If the
  1196. recursion  is  more  subtle  than  that,  SNAP! will eventually give up when
  1197. recursion reaches 25 levels.    You  will  have  become  bored  watching the
  1198. display by that point.
  1199.  
  1200. The tree report is illustrated in the Appendix.
  1201.  
  1202.  
  1203. File List
  1204.  
  1205. SNAP! can  write a  simple list  of all  files used in the system, including
  1206. programs, databases, index files, and so on.  This report can be  useful for
  1207. identifying which  files in  a directory are associated with an application.
  1208. The file list can also be fed into  the source  code printing  routines at a
  1209. later point,  so that the program files can be printed without going through
  1210. a time-consuming complete documentation run again.  
  1211.  
  1212.  
  1213. Data Dictionary
  1214.  
  1215. The data dictionary report contains two parts: 1) the database structure for
  1216. each database  in the  system and  a list of programs which use it; and 2) a
  1217. listing of each data field in the system and the databases that contain it.
  1218.  
  1219. SNAP! tries to figure out which  indexes, report  forms and  label forms are
  1220. associated with each database.  It tracks the following statements:
  1221.    USE dbfname
  1222.    SELECT A (or B, C, etc. up through J)
  1223.    SELECT aliasname
  1224.    CLOSE DATABASES
  1225.    CLOSE ALL
  1226.    USE
  1227. SNAP!  knows  how  to  account  for  macros  in each of these constructions,
  1228. assuming you have defined  the  macro.    For  example,  USE  &temp  will be
  1229. interpreted to mean USE abcfile if you have previously defined &temp to mean
  1230. abcfile (see section on SNAPMACRO statements for more details).
  1231.  
  1232. SNAP! is reasonably good, but certainly not perfect,  at figuring  out which
  1233. database is  active at  a particular  spot in the code.  There are, however,
  1234. some limitations you should be  aware  of.    First,  SNAP!  does  not track
  1235. databases  or  areas  across  program  files  or procedures.  Whenever SNAP!
  1236. begins documenting a file, it assumes that no databases are in use  and that
  1237. areea  A  is  active.    Also,  SNAP!  does not try to interpret conditional
  1238. structures.  For example, consider the following code:
  1239.  
  1240.                                     20
  1241.  
  1242.  
  1243.  
  1244.  
  1245.  
  1246.    IF .T.
  1247.       USE foo
  1248.    ELSE
  1249.       USE bar
  1250.    ENDIF
  1251.  
  1252. SNAP! looks at this code one line at a time.  The last USE statement it sees
  1253. is 'USE  bar'.   That statement  will never actually be executed (because of
  1254. the IF test), but SNAP! doesn't  know that.   You  may need  to use SNAPCODE
  1255. statements to  help SNAP! figure out what is happening in cases such as this
  1256. one.
  1257.  
  1258. SNAP! identifies databases in four ways: 
  1259.  
  1260.      1)   USE statements, but only those followed by a database name;
  1261.      2)   COPY TO statements, including COPY TO ...  SDF.   If the
  1262.           command  copies  to  an  SDF  file that does not have an
  1263.           explicit extension, SNAP! supplies .TXT. Otherwise SNAP!
  1264.           assumes databases to have .DBF extensions.
  1265.      3)   DELETE FILE xxx.DBF
  1266.      4)   CREATE foo FROM bar    (SNAP! picks up both foo and bar)
  1267.  
  1268. A statement that tests for the existence of a database (e.g. IF FILE("xyz"))
  1269. will not by itself be identified as a database reference.   Currently, SNAP!
  1270. imposes  an  overall  limit  of  1,024  fields in the entire system.  If you
  1271. exceed that number, SNAP! complains and does not  include the  excess fields
  1272. in the data dictionary.
  1273.  
  1274. A sample data dictionary report is included in appendix A.
  1275.  
  1276.  
  1277. Index File Summary
  1278.  
  1279. The index  file summary  lists each  index file referenced in the system and
  1280. attempts to show the  fields it  is indexed  on and  the files  that use it.
  1281. SNAP! first  checks for  an index  file with  an extension of NDX (the usual
  1282. extension of dBASE II, dBASE III index files).  If it cannot find this file,
  1283. it  tries  to  find  the  same  file  name  with an NTX extension (the usual
  1284. extension of Clipper index files).   Failing  that,  it  tries  FoxBASE+ IDX
  1285. extensions.    If  SNAP!  cannot  find  one of those either, it gives up and
  1286. reports that the NDX file could not be  found.   If, however,  it could find
  1287. the Clipper or FoxBASE+ file, it documents it appropriately.  
  1288.  
  1289. SNAP! also shows the database associated with each index, if it could figure
  1290. it out.  The  data dictionary  section of  this documentation  discusses the
  1291. assumptions that SNAP! makes about which database is active.
  1292.  
  1293. SNAP! identifies indexes in four ways: 
  1294.  
  1295.     1)   INDEX ON xyz TO indexfile
  1296.     2)   USE xyz INDEX indexfile1,indexfile2,indexfile3 ...
  1297.     3)   SET INDEX TO indexfile1,indexfile2,indexfile3 ...
  1298.  
  1299.                                     21
  1300.  
  1301.  
  1302.  
  1303.  
  1304.  
  1305.     4)   DELETE FILE xyz.NDX
  1306.  
  1307. In  cases  2  and  3,  each  index  file  will  be separately identified and
  1308. documented.  
  1309.  
  1310. A  statement  that  tests   for  the   existence  of   an  index   (e.g.  IF
  1311. FILE("xyz.NDX")) will not by itself be identified as an index reference.
  1312.  
  1313. A sample index file summary in shown in the Appendix.
  1314.  
  1315.  
  1316. Format File Summary
  1317.  
  1318. SNAP! also produces a report showing each format file used in the system and
  1319. the programs that call it.  A sample report is in the Appendix.
  1320.  
  1321. SNAP! identifies format files in two ways: 
  1322.  
  1323.     1)   SET FORMAT TO xyz
  1324.     2)   DELETE FILE xyz.FMT
  1325.  
  1326. In case 1, if this is a dBASE II system, SET FORMAT TO SCREEN and SET FORMAT
  1327. TO PRINT are not flagged as references to format files.
  1328.  
  1329. A  statement   that  tests   for  the   existence  of  an  format  (e.g.  IF
  1330. FILE("xyz.FMT")) will not by itself be identified as an format reference.
  1331.  
  1332.  
  1333. Report Form Summary
  1334.  
  1335. SNAP! also produces a report showing  each report  form used  in the system,
  1336. the report parameters, and the programs that call it.  SNAP! shows a mock-up
  1337. of each report and the expressions  that  go  into  each  column.    It also
  1338. indicates which database is associated with the report form.
  1339.  
  1340. A sample report is in the Appendix.
  1341.  
  1342. SNAP! identifies report forms in two ways: 
  1343.  
  1344.     1)   REPORT FORM xyz ...
  1345.     2)   DELETE FILE xyz.FRM
  1346.  
  1347. A   statement   that   tests   for   the  existence  of  an  form  (e.g.  IF
  1348. FILE("xyz.FRM"))  will  not  by  itself  be  identified  as  an  report form
  1349. reference.
  1350.  
  1351.  
  1352. Label Form Summary
  1353.  
  1354. The  label  form  summary  shows  the  parameters  of each label form in the
  1355. system.  It also indicates which  database  is  associated  with  each label
  1356. form.  A sample report is in the Appendix.
  1357.  
  1358.                                     22
  1359.  
  1360.  
  1361.  
  1362.  
  1363.  
  1364.  
  1365.  
  1366. Procedure File Summary
  1367.  
  1368. SNAP! allows  you to prepare a summary of files that contain procedures (see
  1369. example in appendix A).  This summary shows the procedures in each procedure
  1370. file and  the programs  and procedures that each one calls and is called by.
  1371. Note that this report covers both procedure files and ordinary program files
  1372. that also contain procedures (as Clipper allows).
  1373.  
  1374.  
  1375. Variable Cross-Reference Report
  1376.  
  1377. Another useful  report available through SNAP! is a variable cross-reference
  1378. listing, showing line numbers for each program that  references a particular
  1379. variable.   'Variable' in  this context includes field names, file names and
  1380. anything else that isn't a key word, numeric  constant, punctuation  mark or
  1381. quoted string. 
  1382.  
  1383. If you  elect to  display the variable cross-reference report (by responding
  1384. 'Y' to the question on the options menu),  you can  view the Cross-reference
  1385. Options  Screen  (press  F4  from  the  options  menu).  The Cross-reference
  1386. Options Screen allows you to select the type of "things"  that will included
  1387. on the  cross-reference report.   You  will have  the option to include only
  1388. PUBLIC variables (this option has no meaning if this is a dBASE  II system).
  1389. You also get the following choices:
  1390.  
  1391.     Include other variables and tokens
  1392.     Include key words
  1393.     Include numeric constants
  1394.  
  1395. Your responses  to these  prompts (and your use of special characters in the
  1396. key  words  file--see  below)  determine  which  words  will  appear  on the
  1397. cross-reference report.
  1398.  
  1399. The cross-reference  report adds  certain codes  to the end of a line number
  1400. reference when the reference is particularly  interesting.   SNAP! looks for
  1401. the following  statements to  tell if  a variable  or field name (assume its
  1402. name is 'abc') is interesting:
  1403.  
  1404.    Reference Type                                     Report Flag
  1405.  
  1406.    abc = 4                                                *
  1407.    STORE 4 TO abc                                         *   
  1408.    WAIT to abc                                            *   
  1409.    @ 1,1 GET abc PICTURE "blah, blah"                     G    
  1410.    ACCEPT "something" TO abc                              G
  1411.    INPUT abc                                              G
  1412.    REPLACE abc WITH something                             R
  1413.    RELEASE abc                                            x
  1414.    PUBLIC abc                                             P
  1415.    PRIVATE abc                                            V
  1416.  
  1417.                                     23
  1418.  
  1419.  
  1420.  
  1421.  
  1422.  
  1423.    ? &abc                                                 &
  1424.    DECLARE abc[100]                                       A
  1425.    DIMENSION abc(100,200)                                 A
  1426.    USE abc [INDEX ...] [ALIAS ...]                        U
  1427.    DO foo WITH @abc                                       @
  1428.  
  1429. As the following sample excerpt from the cross reference report illustrates,
  1430. you can tell at a glance what is happening to the variables you are using:
  1431.  
  1432. ABC
  1433.       TODO.PRG         30P   41    42    43G   44    45*   46G   47G   72x
  1434.       TDINPUT.PRG     123V  234*  235   237
  1435.       SETFILT.PRG      16    24    28    32
  1436.       TDEDIT.PRG      107*  133   134   135   136   138x
  1437.  
  1438. This  report  shows  that  variable  'abc'  was used in four programs (TODO,
  1439. TDINPUT, SETFILT and  TDEDIT).    Within  TODO,  it  was  declared  a PUBLIC
  1440. variable on line 30; referenced but not changed on lines 41, 42 and 44; used
  1441. in a GET statement on lines 43, 46 and 47; modified in line 45; and released
  1442. on line  72.   TDINPUT declared  it to  be PRIVATE (line 123), assigned it a
  1443. value in line 234, then referred to it in lines 235 and 237.  
  1444.  
  1445. A legend  to  explain  all  these  flags  is  printed  at  the  top  of each
  1446. cross-reference report, so you do not need to remember what they all mean.
  1447.  
  1448. SNAP! will  not flag  a 'RELEASE  ALL' statement as a reference, nor will it
  1449. figure out that a 'RESTORE  FROM  xyz.mem'  may  overwrite  other variables.
  1450. Neither of  these statements will generate a cross-reference listing for any
  1451. variables (though xyz.mem will be referenced).    Of  course,  you  can have
  1452. SNAP! cross-reference the RELEASE and RESTORE statements themselves.
  1453.  
  1454. By default, references to a database field prefaced by the alias
  1455. (e.g., foo->bar) will be shown as one token in the cross reference file.  If
  1456. you do not like this convention, the /C command line option turns it off, so
  1457. that foo and bar will be referenced separately.
  1458.  
  1459. At the  bottom of  the report,  SNAP! produces a list of public variables, a
  1460. list of macros and  a list  of arrays.   The  macro list  is subdivided into
  1461. macros that  you defined  to SNAP!  and those your didn't.  If you defined a
  1462. macro, its definition is also shown.
  1463.  
  1464. The  cross-reference  report  interacts  closely  with  the  key  word file.
  1465. Specifically, the key word file is how SNAP! can tell what is a key word and
  1466. what is not.  Additionally, by inserting the  correct characters  in the key
  1467. word  file,  you  can  cause  certain  key  words or variables to be handled
  1468. differently than usual.  The following characters have a special  meaning in
  1469. the key word file when inserted immediately before a word:
  1470.  
  1471.     *     Comments out the word.  SNAP! acts as if it were not in the key   
  1472.          word file at all.
  1473.  
  1474.  
  1475.  
  1476.                                     24
  1477.  
  1478.  
  1479.  
  1480.  
  1481.  
  1482.     !    Capitalize, but do no cross-reference even when the option to      
  1483.          cross-reference key  words is in effect.  You may want to use this 
  1484.          character for often-used but uninteresting key words such as TO    
  1485.          or, perhaps, SAY.
  1486.  
  1487.     @     Capitalize and always cross-reference this word, even when the    
  1488.          option to cross-reference key words is not in effect.  You might   
  1489.          want to  use this for especially important key words such REPLACE, 
  1490.          SAVE, or QUIT.
  1491.  
  1492.     %    Neither capitalize nor cross-reference, regardless of  whether the 
  1493.          options to  capitalize or cross-reference key words are in         
  1494.          effect.  You may want to use this character to designate           
  1495.          variables that  you use frequently, but that you are not           
  1496.          interested in cross-referencing--perhaps "i",  "choice", "action", 
  1497.          or "lineno".
  1498.  
  1499.      ()  If the *last* two characters in a key word are (), the key word
  1500.          will ordinarily have an initial capital letter in the formatted
  1501.          output.  The DB3WORDS.SNP file that comes with SNAP! uses this
  1502.          notation to designate the Tom Rettig key words (Tom Rettig is the
  1503.          author of a popular set of functions for dBASE III and Clipper).
  1504.  
  1505. The following examples illustrate how to use these special characters:
  1506.  
  1507.     *note           -- this word will be ignored.
  1508.     !SAY            -- capitalize, but do not cross-reference, SAY
  1509.     @REPLACE        -- include REPLACE in the cross-reference report
  1510.     %CHOICE         -- do not capitalize or cross-reference this word
  1511.     alltrim()        -- This word is a function.  The first letter will be  
  1512.                        capitalized
  1513.  
  1514. If  this  is  a  dBASE  III  system,  SNAP!  allows  you   to  restrict  the
  1515. cross-referencing to  PUBLIC variables.   If  you select  this option, SNAP!
  1516. only puts public variables on the report.  However, SNAP! does not  look for
  1517. PRIVATE statements  that redefine the variable, so if a variable is declared
  1518. PUBLIC anywhere in the system, SNAP! documents all subsequent occurrences of
  1519. it.    Note  that  SNAP!  does  not  "backtrack"  to see if the variable was
  1520. referenced before it was defined as PUBLIC.
  1521.  
  1522. I have done my best  to  identify  key  words  used  in  dBASE,  FoxBASE and
  1523. Clipper, but  I may have missed some.  Fortunately, the DBxWORDS.SNP file is
  1524. a standard ASCII file that you can edit with most any word processor. So, if
  1525. I have  omitted one of your favorite key words, it is a simple matter to add
  1526. it to the file.  Function names from  the Tom  Rettig library  are included,
  1527. but you may also want to add function names from other development tools.
  1528.  
  1529. A sample cross-reference report is included in the Appendix.
  1530.  
  1531.  
  1532.  
  1533.  
  1534.  
  1535.                                     25
  1536.  
  1537.  
  1538.  
  1539.  
  1540.  
  1541. LNK and MAKE files
  1542.  
  1543. These  options  will  be  useful  only  to  developers  of  Clipper-compiled
  1544. applications.  If you are using interpretive dBASE III, you  can ignore this
  1545. section.  
  1546.  
  1547. Link Files.   SNAP!  can produce  a link  file for PLINK86 (which comes with
  1548. Clipper), TLINK (part of  the Borland  Turbo C  package), and  the Microsoft
  1549. LINK utility.   If  you are  a serious  Clipper programmer, the TLINK linker
  1550. justifies the cost of the Turbo C package (less than $100)--it is that fast.
  1551. I have  seen some  informal benchmarks  that show it linking applications as
  1552. much as eight times faster than PLINK86.
  1553.  
  1554. PLINK86 will accept  "commands"  from  a  LNK  file.    This  file typically
  1555. contains a series of commands for the linker, telling the linker such things
  1556. as which libraries to search and in what  order.   SNAP! will  produce a LNK
  1557. file if  you select  the appropriate  option.   This LNK file will contain a
  1558. list of all the files in your system.  
  1559.  
  1560. If you have a file named LINK.SNP in your source  directory, SNAP!  will put
  1561. it  at  the  top  of  the  LNK  file.   For example, you might put a list of
  1562. libraries in this file.  You can also  use a  name other  than 'LINK.SNP' by
  1563. specifying /Lfilename on the command line.  
  1564.  
  1565. Make  Files.    SNAP!  can  produce  the  files for the Clipper MAKE utility
  1566. (Summer 87 version only) and for the Shareware NDMAKE program.
  1567.  
  1568. MAKE is a standard  UNIX  (tm)  utility,  versions  of  which  are  now also
  1569. available for  MS-DOS.   MAKE allows  you to  define which files "depend" on
  1570. other files and only compile files  that have  changed.   For example,  in a
  1571. Clipper application  using MAKE,  you would  typically have one OBJ file for
  1572. each PRG file.  Each OBJ file "depends" on the corresponding PRG  file since
  1573. the OBJ  file needs to be remade when the PRG file changes.  In other words,
  1574. when a change is made to a program file, it needs to be recompiled to create
  1575. a new  object file.   Similarly, the EXE file "depends" on all of the object
  1576. files that are linked together to create it.  
  1577.  
  1578. MAKE allows  you  to  specify  these  dependencies  and  perform  the fewest
  1579. recompiles to  completely update your system for all program changes. It can
  1580. save an enormous amount  of time  on the  edit-compile-link-run cycle  for a
  1581. large system development.
  1582.  
  1583. NDMAKE  use  three  files--the  MAKE.EXE  file  itself, a MAKE.INI file that
  1584. specifies certain defaults, and a  file  named  MAKEFILE  that  contains the
  1585. dependencies for  your system.   SNAP! can create the MAKEFILE.  It is up to
  1586. you to deal with MAKE.INI.  In particular,  you will  need to  add a default
  1587. rule to  your MAKE.INI  file to  tell MAKE how to compile a PRG file into an
  1588. OBJ file.  Its syntax is: 
  1589.  
  1590. # To produce a `.obj' file from a `.prg' file using Clipper.
  1591.    .prg.obj:; clipper $< -m
  1592.  
  1593.  
  1594.                                     26
  1595.  
  1596.  
  1597.  
  1598.  
  1599.  
  1600. This definition should work with most  versions  of  MAKE.    If  you  use a
  1601. different MAKE  utility, you may need to use slightly different syntax here.
  1602. Check your documentation to be sure.
  1603.  
  1604. The SNAP! MAKE option works hand-in-hand with the  LNK option.   If  you ask
  1605. SNAP! to create a LNK file, SNAP! will use the same file name when it create
  1606. MAKEFILE.
  1607.  
  1608. The net effect of all of this is that you can issue the command:
  1609.  
  1610.    MAKE filename        (where filename is the name of your TopFile)
  1611.  
  1612. and MAKE will figure out what needs to  be recompiled  and linked  to create
  1613. your system. 
  1614.  
  1615. Sample LNK and MAKEFILE listings are included in appendix A.
  1616.  
  1617.  
  1618. Batch Files
  1619.  
  1620. SNAP! also  produces DOS  batch files  to do useful things.  One file, named
  1621. UPDATE.BAT, will copy all program files from the  SNAP! output  directory to
  1622. the  original  source  directory.    You  could  use  it  to  copy  the  new
  1623. (documented) versions of your source files over the  original (undocumented)
  1624. source files.  The syntax for UPDATE is:
  1625.  
  1626.    UPDATE d:
  1627.  
  1628. where d:  is a  drive or  directory name.   If  it is  omitted, the original
  1629. source directory is assumed.  Be careful with this file  since it overwrites
  1630. the original  source code  files.  You should backup your original files and
  1631. review the new output files before executing UPDATE.  No  kidding.   This is
  1632. important.
  1633.  
  1634. BACKPRG backs up the programs, format files and report forms in your system.
  1635. Its syntax is:
  1636.  
  1637.    BACKPRG d:
  1638.  
  1639. d: is a drive or directory name and is required.   If  you do  not specify a
  1640. target drive or directory, the batch file will complain and stop.
  1641.  
  1642. BACKDBF backs up the databases, index files and memory files in your system.
  1643. Its syntax is:
  1644.  
  1645.    BACKDBF d:
  1646.  
  1647. d: is a drive or directory name and is required.   If  you do  not specify a
  1648. target drive or directory, the batch file will complain and stop.
  1649.  
  1650. Macros are suppressed from this file.
  1651.  
  1652.  
  1653.                                     27
  1654.  
  1655.  
  1656.  
  1657.  
  1658.  
  1659. Also, SNAP!  creates the  PRINTDOC.BAT file  to send all documentation files
  1660. (not including source code or  action  diagrams)  to  the  printer. PRINTDOC
  1661. calls the  DOS PRINT  utility for  background printing.  Thus, PRINT must be
  1662. available somewhere on the path.
  1663.  
  1664.  
  1665.  
  1666. Action Diagrams
  1667.  
  1668. An action diagram documents the structure  of a  program by  using graphical
  1669. symbols to  group related  statements together.   By default, SNAP! uses the
  1670. IBM extended ASCII characters in the action diagrams it prepares.
  1671.  
  1672. A portion of a sample action diagram follows:
  1673.  
  1674.   IF s_clipper .AND. s0_filt = 7
  1675.      DO WHILE .NOT. s0_userfilt
  1676.         SKIP
  1677.         IF EOF()
  1678.            GOTO TOP
  1679.            DO WHILE .NOT. &s0_userfilt
  1680.               SKIP
  1681.               IF EOF()
  1682.                  SET FILTER TO
  1683.                  s0_userfilt = "1=1"
  1684.                  GOTO TOP
  1685.          ^       LOOP
  1686.                  IF Dusty Day In The Lake
  1687.                     ? "Yell and Scream"
  1688. <                   RETURN
  1689.                  ENDIF
  1690.               ENDIF
  1691.            ENDDO
  1692.            DO CASE
  1693.            CASE lastkey() = 4
  1694.               choice = "F"
  1695.            CASE lastkey() = 19
  1696.               choice ="B"
  1697.            ENDCASE
  1698.         ENDIF
  1699.      ENDDO
  1700.      FOR i = 1 TO 25
  1701.         DO sample1
  1702.      NEXT
  1703.   ENDIF
  1704.  
  1705. As this example shows,  different  extended  ASCII  characters  are  used to
  1706. differentiate different control structures.  Loops (DO WHILE, FOR, SCAN) use
  1707. the double-line vertical bar, while conditional statements (IF, DO CASE) use
  1708. a  single  vertical  bar.    The structures are distinguished further by the
  1709. horizontal symbol used to connect the  control structure  key word  with the
  1710. vertical bar.
  1711.  
  1712.                                     28
  1713.  
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719. Note also  that these  diagrams allow  you to  identify "unusual" loop exits
  1720. such as  LOOP  and  RETURN  very  easily.    I  can  often  identify subtle,
  1721. difficult-to-locate bugs by studying the action diagram for the program.
  1722.  
  1723. SNAP! will  identify certain syntax errors (such as a LOOP statement that is
  1724. not within a DO WHILE loop) only if you choose  to prepare  action diagrams.
  1725. Certain error checking is only performed within this module.
  1726.  
  1727. The Format  screen allows  you to choose whether to write action diagrams or
  1728. not.  It also allows you to specify the extension that action  diagram files
  1729. will have.   Action  diagrams always  have the same main file name (i.e, the
  1730. first eight characters) as the source code file from which it is  drawn, but
  1731. the extension  can be  anything you  specify except '.PRG'.  You can use the
  1732. '?' character as a  wildcard to  match the  corresponding characters  in the
  1733. original file  extension.  Therefore, if you choose an action file extension
  1734. of'??T', and your original source file was named FOO.BAR, the action diagram
  1735. file will  be named FOO.BAT (the BA is drawn from the original filename, and
  1736. the T comes from the action diagram file mask).
  1737.  
  1738. Action diagram  files are  very much  like program  files and  have the same
  1739. capitalization  as  the  output  program  files do.  However, action diagram
  1740. files are not directly  executable or  compilable because  of the additional
  1741. line-drawing characters they contain.
  1742.  
  1743. Some  printers  (most  Epson  models,  for  example)  do not support the IBM
  1744. graphics characters very well.  If  you want  to print  action diagrams, you
  1745. may want  to use  other characters  for the  connections.  You can choose to
  1746. prepare action diagrams using  only  ASCII  symbols  by  choosing  the ASCII
  1747. symbol option on the source code and action diagram options screen.  
  1748.  
  1749.  
  1750.  
  1751.  
  1752.  
  1753.  
  1754.  
  1755.  
  1756.  
  1757.  
  1758.  
  1759.  
  1760.  
  1761.  
  1762.  
  1763.  
  1764.  
  1765.  
  1766.  
  1767.  
  1768.  
  1769.  
  1770.  
  1771.                                     29
  1772.  
  1773.  
  1774.  
  1775.  
  1776.  
  1777. You can  also choose  your own action diagram symbols on the 'SourceCode and
  1778. Action Diagram Options' screen.  The following chart shows how  to customize
  1779. the symbols:
  1780.  
  1781.    Default symbols:          ^v         < 
  1782.  
  1783.           Position: 0000000001111111111222                                  
  1784.                     1234567890123456789012
  1785.  
  1786.   Position                              Symbol
  1787.   --------  ------------------------------------------------------------    
  1788.       1      Horizontal symbol used for IF/ELSE/ENDIF structures
  1789.       2      Vertical symbol used for IF/ELSE/ENDIF structures
  1790.       3      Corner for IF and BEGIN SEQUENCE (Clipper only)
  1791.       4      Corner for ENDIF and END (Clipper only)
  1792.       5      Join symbol for ELSE
  1793.       6      Horizontal symbol used for DO WHILE/ENDDO structures
  1794.       7      Vertical symbol used for DO WHILE/ENDDO structures
  1795.       8      Corner for DO WHILE
  1796.       9      Corner for ENDDO
  1797.      10      Symbol for LOOP
  1798.      11      Symbol for EXIT and BREAK (Clipper only)
  1799.      12      Horizontal symbol used for DO CASE/OTHERWISE/ENDCASE structures
  1800.      13      Vertical symbol used for DO CASE/OTHERWISE/ENDCASE structures
  1801.      14      Corner for DO CASE
  1802.      15      Corner for ENDCASE
  1803.      16      Join symbol for CASE and OTHERWISE
  1804.      17      Horizontal symbol used for FOR/NEXT structures
  1805.      18      Vertical symbol used for FOR/NEXT structures
  1806.      19      Corner for FOR
  1807.      20      Corner for NEXT
  1808.      21      Arrow symbol for RETURN/CANCEL/QUIT
  1809.      22      Horizontal symbol used for RETURN/CANCEL/QUIT/LOOP/EXIT
  1810.  
  1811.  
  1812. You can  replace any  of these  symbols with others of your choosing. If you
  1813. want to restore the default set, simply select 'G' for  graphics characters,
  1814. move to another input screen, then come back again (in simpler terms, select
  1815. 'G', press F4 then F3).  These symbols are reset  when the  'Source Code and
  1816. Action Diagrams  Options' screen  is presented.  One consequence is that you
  1817. must answer 'O' (for Other Symbols) to be able to change the  action diagram
  1818. symbols. If  you answer  'G', then  change the symbols, the changes will not
  1819. take effect.  Like all other input fields, any user-defined  symbols will be
  1820. saved in  the configuration  file so  you do  not have to enter them at each
  1821. invocation of SNAP!
  1822.  
  1823. The SCAN/ENDSCAN control structure  is documented  with the  same symbols as
  1824. the  DO  WHILE  loop.    The  BEGIN  SEQUENCE/BREAK/END control structure in
  1825. Clipper is diagrammed with the same symbols as an IF/ENDIF structure.
  1826.  
  1827.  
  1828.  
  1829.  
  1830.                                     30
  1831.  
  1832.  
  1833.  
  1834.  
  1835.  
  1836.  
  1837. Source Code Printout
  1838.  
  1839. When you have completed your program,  you will  probably want  a listing of
  1840. the source code to accompany the rest of your documentation.  SNAP! provides
  1841. a facility for formatting and printing dBASE source code files and/or action
  1842. diagrams, and  gives you  a great  deal of  control over source code format.
  1843. You can set the following parameters:
  1844.  
  1845.     Line width
  1846.     Page length
  1847.     Left and right margins
  1848.     Top and bottom margins
  1849.     Spaces per tab
  1850.     Include or suppress line numbers
  1851.     Printer setup string
  1852.  
  1853. For example, you can set these values to  leave plenty  of room  on the left
  1854. side of the page so that your code will fit in a 3-ring binder.  
  1855.  
  1856. If a line of code exceeds the line width minus left and right margins, SNAP!
  1857. will wrap it on the printout without messing up the page breaks.  SNAP! also
  1858. appropriately counts  the wrapped line as one source code line, so that your
  1859. cross-reference report still matches the printout.
  1860.  
  1861. Each page of the printout contains a header showing the program name, system
  1862. name, copyright notice, page number and date/time printed.  The programs are
  1863. printed in alphabetical order.  
  1864.  
  1865. Line numbers are never added to  an action  diagram at  print time.   If you
  1866. would  like  action  diagrams  to  be  printed with line numbers, choose the
  1867. option on the format screen to add the line numbers  directly to  the action
  1868. diagram file.   This  is the  default choice,  so you  ordinarily get action
  1869. diagrams (and printouts) with line numbers.  The restriction on  adding line
  1870. numbers at print time prevents duplicate line numbers from being printed. 
  1871.  
  1872. The print  section of SNAP! deals harshly with nonsense. For example, if the
  1873. sum of your left and right margins exceeds your line  width, SNAP!  will set
  1874. the line  width and  the margins  to their default values.  Similarly, SNAP!
  1875. will reject top  and  bottom  margins  greater  than  page  length, negative
  1876. values, tab expansions greater than 12 spaces, and so on.
  1877.  
  1878. SNAP!  prints  a  three-line  heading  on each page of the printout, showing
  1879. program name, system name,  copyright holder,  date, time,  and page number.
  1880. The  heading  begins  on  the  line immediately following the top margin you
  1881. specify.  Accordingly, if you use a top margin of 8 and  a bottom  margin of
  1882. 8, with  66-line paper  only 47  lines of  code will be printed on each page
  1883. (66 lines - 8 top margin - 8 bottom margin - 3 heading).
  1884.  
  1885.  
  1886.  
  1887.  
  1888.  
  1889.                                     31
  1890.  
  1891.  
  1892.  
  1893.  
  1894.  
  1895. For those of you with HP LaserJet II printers, try the following parameters:
  1896.    Line width: 132              Page length: 80
  1897.    Top margin:   4            Bottom margin:  4
  1898.   Left margin:   8             Right margin:  1
  1899.  
  1900. Setup string: \027E\027&l0o8D\027(10U\027(s16.6H
  1901.  
  1902. The \027E at the beginning of the string resets the printer.
  1903.  
  1904.  
  1905. Printing Without Documenting
  1906.  
  1907. You can use the source  code  printing  facilities  of  SNAP!  without going
  1908. through the  full time-consuming documentation process.  If you press the F9
  1909. key while viewing the  Print screen,  SNAP! will  prompt you  for a filename
  1910. containing the  names of  files to  print.  SNAP! searches the file you name
  1911. and prints the contents of the files listed therein.  SNAP! will not print a
  1912. file with  an extension  of MEM,  FRM, DBF, NDX, NTX, IDX, MDX, EXE, COM and
  1913. other common non-ASCII Dbase names.  Also, SNAP!  tries to  figure out  if a
  1914. particular file is not an ASCII file and warn you about it before printing.
  1915.  
  1916. SNAP! will not try to print from anything that isn't a filename, so the file
  1917. you specify can contain all sorts of garbage without causing a problem.  The
  1918. main effect  of all this is that you can give the Print routines the name of
  1919. a SNAP! FILELIST.DOC file and it will  print  all  the  source  code  in the
  1920. system without going through the full SNAP! documentation process again.  Of
  1921. course, you can create  your own  file containing  filenames to  print also.
  1922. You can  also use  this feature  to print  documentation files  in a nicely-
  1923. formatted way.
  1924.  
  1925.  
  1926.  
  1927.  
  1928.  
  1929.  
  1930.  
  1931.  
  1932.  
  1933.  
  1934.  
  1935.  
  1936.  
  1937.  
  1938.  
  1939.  
  1940.  
  1941.  
  1942.  
  1943.  
  1944.  
  1945.  
  1946.  
  1947.  
  1948.                                     32
  1949.  
  1950.  
  1951.  
  1952.  
  1953.  
  1954.  
  1955.                      Using SNAP! in a Batch Environment
  1956.  
  1957. If you have several systems to document, you may wish to set up a batch file
  1958. to invoke  SNAP! with the appropriate parameters for each system so that you
  1959. can come back in a week  or  two  and  find  all  your  programs beautifully
  1960. documented.   SNAP! supports  Immediate Mode for batch documentation through
  1961. the /X  switch  on  the  command  line.    Used  in  conjunction  with named
  1962. configuration and  macro files,  you can  sequentially document  a series of
  1963. dBASE systems.  SNAP! will take its input  from the  configuration files (or
  1964. from CONFIG.SNP if no configuration file is named) and begin documenting the
  1965. system immediately.  Note that you  have  to  have  your  configuration file
  1966. ready before  you invoke  the system.  If you do not specify a configuration
  1967. file, SNAP! tries to use CONFIG.SNP in the current directory.
  1968.  
  1969. For example, to document three dBASE systems without pausing for user input,
  1970. set up a batch file with these lines:
  1971.  
  1972.       SNAP /x /fsystem1.snp
  1973.       SNAP /x /fsystem2.snp
  1974.       SNAP /x 
  1975.  
  1976. SNAP! will  document the  first system  and take  input from the SYSTEM1.SNP
  1977. configuration file.   Then,  without prompting  for further  user action, it
  1978. will read  SYSTEM2.SNP and  begin documenting  the second system.  Input for
  1979. the third system is in the CONFIG.SNP (default name) file.   When  the batch
  1980. file is  invoked, SNAP!  will begin  documenting and will not pause for user
  1981. input at any point in the process.
  1982.  
  1983. If an error occurs anywhere during  the processing  of these  three systems,
  1984. SNAP! will  display an  error message  and stop  documenting the system that
  1985. experienced the error.  The batch file, however,  will continue  running and
  1986. will move on to the next system to be documented.
  1987.  
  1988.  
  1989.  
  1990.  
  1991.  
  1992.  
  1993.  
  1994.  
  1995.  
  1996.  
  1997.  
  1998.  
  1999.  
  2000.  
  2001.  
  2002.  
  2003.  
  2004.  
  2005.  
  2006.  
  2007.                                     33
  2008.  
  2009.  
  2010.  
  2011.  
  2012.  
  2013.                                Random Notes
  2014.  
  2015. These are some other thoughts that don't seem to fit anywhere else.
  2016.  
  2017. If you  have a  file named  HELP.PRG in the program directory, SNAP! assumes
  2018. this must be a Clipper system, where 'HELP'  is a  magic name  and documents
  2019. the  program  accordingly.    SNAP!  treats  HELP.PRG  as  if it were called
  2020. directly from TopFile.
  2021.  
  2022.  
  2023.  
  2024.  
  2025.  
  2026.  
  2027.  
  2028.  
  2029.  
  2030.  
  2031.  
  2032.  
  2033.  
  2034.  
  2035.  
  2036.  
  2037.  
  2038.  
  2039.  
  2040.  
  2041.  
  2042.  
  2043.  
  2044.  
  2045.  
  2046.  
  2047.  
  2048.  
  2049.  
  2050.  
  2051.  
  2052.  
  2053.  
  2054.  
  2055.  
  2056.  
  2057.  
  2058.  
  2059.  
  2060.  
  2061.  
  2062.  
  2063.  
  2064.  
  2065.  
  2066.                                     34
  2067.  
  2068.  
  2069.  
  2070.  
  2071.  
  2072.  
  2073.                            Program Limitations
  2074.                        and Things To Watch Out For
  2075.  
  2076. SNAP! had the  following  design  limitations  when  this  documentation was
  2077. written:
  2078.  
  2079.               Maximum program files:  512 programs, procedures and functions
  2080.                 Maximum other files:  128 of each type (e.g. databases)
  2081.                   Maximum variables: 2000 throughout the system
  2082.                   Maximum key words: 1000 words
  2083.          Maximum length of key word:   15 characters
  2084.           Maximum length of a token:   20 characters
  2085.   Maximum levels of program nesting:   20 levels 
  2086.   Maximum number of database fields: 1024 throughout the system
  2087.          Maximum length of filename:   67 characters (including path)
  2088.  
  2089. These limitations were current when this documentation was written.  You can
  2090. verify them (it would  be a  good idea)  by viewing  the program limitations
  2091. screen (Press F1 three times from the greeting screen).
  2092.  
  2093. SNAP! uses about 225K of memory as "overhead."  This much is used as soon as
  2094. the program is invoked.  It also allocates additional memory  dynamically as
  2095. it is  needed.   It is  a memory hog and will probably not be of much use if
  2096. you don't have at least 512K.  Look at it this way: memory boards  cost less
  2097. than commercial  programs that  compete with  SNAP!.  Don't look at SNAP! as
  2098. free software--look at it as an excuse to buy more hardware.
  2099.  
  2100.  
  2101. Legal Coding that is Prohibited by SNAP!
  2102.  
  2103. I make no promises about what will happen if you run SNAP!  against nonvalid
  2104. Dbase syntax,  but predict  that the results will not be satisfying.  On the
  2105. other hand, there are some "legal"  coding techniques  for Dbase  that cause
  2106. problems with  SNAP!.  I have tried to keep these to a minimum, but some yet
  2107. remain.
  2108.  
  2109. You cannot use the word "END" as a  variable in  an assignment  statement of
  2110. the form:
  2111.    END = foo.
  2112. SNAP!  sees  the  'END'  (which  is  a valid control structure terminator in
  2113. Clipper), treats anything  else  on  the  line  as  a  comment,  and becomes
  2114. powerfully confused.  Using "END" in a:
  2115.    STORE foo TO end 
  2116. statement is  acceptable.   You also  cannot use PROCEDURE or FUNCTION (or a
  2117. valid abbreviation of either) as a variable name.
  2118.  
  2119.  
  2120. Hyphens in Filenames
  2121.  
  2122. SNAP! uses treats a hyphen as a delimiter  when it  is scanning  your source
  2123. code to  prepare the  cross-reference report, since the hyphen usually means
  2124.  
  2125.                                     35
  2126.  
  2127.  
  2128.  
  2129.  
  2130.  
  2131. "subtract."  Thus,  foo  =  bar-baz  will  correctly  generate  three cross-
  2132. references--one for  "foo", one for "bar" and one for "baz".  This technique
  2133. breaks down when SNAP!  sees "DO  foo-bar."   In this  case, both  "foo" and
  2134. "bar" will  be cross-referenced.   Note  that SNAP! will find the right file
  2135. and continue documenting--it is  only  the  cross-reference  report  that is
  2136. misleading.  
  2137.  
  2138.  
  2139. Continuation Lines
  2140.  
  2141. Continuation lines  may be  a problem in some circumstances.  SNAP! actually
  2142. reads each source file  twice--once to  check for  files and  once to handle
  2143. formatting (indentation, capitalization, etc.) and cross-referencing.  SNAP!
  2144. tries to  deal with  continuation lines  during the  first scan  and so will
  2145. properly parse statements such as:
  2146.  
  2147.    SET INDEX TO brlfq, foo, bar, ;
  2148.          baz, plugh
  2149.  
  2150. and 
  2151.  
  2152.    SUM hatsize ;
  2153.       FOR level = "MANAGEMENT"
  2154.  
  2155. (This  latter   statement  led  to  particularly  insidious  effects  before
  2156. continuation lines were parsed--SNAP!  treated  it  as  the  beginning  of a
  2157. FOR-NEXT control structure.  This made for interesting action diagrams.)
  2158.  
  2159. However, SNAP! cannot tell that:
  2160.  
  2161.    abracadabra = ;
  2162.        opensesame
  2163.  
  2164. is an  assignment statement.   Accordingly,  the cross-reference report will
  2165. not  contain  the  correct  flag  for   an  assignment   statement.    While
  2166. "abracadabra"  and  "opensesame"  will  properly  appear  on the report, the
  2167. proper cross-reference marker will not be present.
  2168.  
  2169. Total line length, counting the length of continuation lines but not leading
  2170. and trailing  white space,  is limited  to 255  characters.  SNAP! warns you
  2171. when it sees a  longer line.   This  is not  a limitation  on dBASE systems,
  2172. since dBASE  II and  III impose  the same  limit.   Some compilers, however,
  2173. allow lines to exceed the 255-character limit.
  2174.  
  2175. There may be other anomalies related to continuation  lines that  I have not
  2176. thought of.
  2177.  
  2178.  
  2179. Multiple Procedure Files
  2180.  
  2181. If you use multiple procedure files and if they contain procedures that have
  2182. the same name, SNAP! may  document  your  system  incorrectly.  For example,
  2183.  
  2184.                                     36
  2185.  
  2186.  
  2187.  
  2188.  
  2189.  
  2190. assume you  have two procedure files that are SET at different points in the
  2191. system.  Both files contain a procedure called FOO, but FOO is  not the same
  2192. in each  file.   When SNAP! searches for procedures, it will always find the
  2193. first FOO and assume it is the one being called.  SNAP! does not track which
  2194. procedure  file   is  currently   active  and   cannot  distinguish  between
  2195. identically-named procedures in different procedure files.   This limitation
  2196. has no  effect on  systems that  use only  one procedure file, or on systems
  2197. that  have  multiple   procedure   files   each   containing  uniquely-named
  2198. procedures.
  2199.  
  2200. Giving different  things the  same name  is a  bad programming  habit to get
  2201. into.  It is a good idea to use unique  names for  each procedure, function,
  2202. procedure file and program.
  2203.  
  2204.  
  2205. Suppressing Color
  2206.  
  2207. If you do not like the colors I selected, or if they do not display properly
  2208. on your monitor, putting the "/BW" switch on  the command  line will disable
  2209. color.
  2210.  
  2211.  
  2212.  
  2213.  
  2214.  
  2215.  
  2216.  
  2217.  
  2218.  
  2219.  
  2220.  
  2221.  
  2222.  
  2223.  
  2224.  
  2225.  
  2226.  
  2227.  
  2228.  
  2229.  
  2230.  
  2231.  
  2232.  
  2233.  
  2234.  
  2235.  
  2236.  
  2237.  
  2238.  
  2239.  
  2240.  
  2241.  
  2242.  
  2243.                                     37
  2244.  
  2245.  
  2246.  
  2247.  
  2248.  
  2249.                               Change History
  2250.  
  2251. SNAP! has  undergone several  major changes since version 2.0 ('2.0' in this
  2252. context means all versions beginning with the number 2).  The following list
  2253. is not all-inclusive, but does hit the high points.
  2254.  
  2255.  
  2256. Speed
  2257.  
  2258. Version 3.0  should be  approximately 2.5 times as fast as version 2.0.  The
  2259. more procedures you use, the faster it will be.  SNAP! 2.0  was particularly
  2260. inefficient in documenting procedures.
  2261.  
  2262.  
  2263. Source Code Printing
  2264.  
  2265. You can  now use the source code printing routines without going through the
  2266. entire documentation process.   When you  press the  right function  key, it
  2267. asks for a filename.  SNAP! searches this file for other filenames, which it
  2268. then prints.
  2269.  
  2270.  
  2271. User Interface
  2272.  
  2273. The user interface has gotten  an  interface-lift  <guffaw>  since  the last
  2274. version.   The number  of option  screens grew  too large to be conveniently
  2275. browsed with the facilities in version 2.  Version 3  now organizes  all the
  2276. screens underneath a main menu.  You can also select menu items with Alt-key
  2277. combinations, without having to deal with the menu itself. 
  2278.  
  2279.  
  2280. Memory Usage
  2281.  
  2282. SNAP! 3.0 uses some  additional dynamic  data structures  to minimize wasted
  2283. space.  Under normal circumstances, it should roughly triple the size of the
  2284. application that can be accommodated by the system.  In  addition, after the
  2285. conversion to  Turbo Pascal  4.0, the  size of  the program itself shrank by
  2286. about 20%.
  2287.  
  2288.  
  2289. New Reports
  2290.  
  2291. A system summary is now available to show:
  2292.    Lines of code
  2293.    Database and index names
  2294.    Number of program files
  2295.    Number of procedures
  2296. and lots of other summary information.
  2297.  
  2298. Arrays are  recognized in  the cross-reference  report and  are denoted with
  2299. brackets (for  Clipper) or  parentheses (for FoxBASE), as appropriate (e.g.,
  2300.  
  2301.  
  2302.                                     38
  2303.  
  2304.  
  2305.  
  2306.  
  2307.  
  2308. FOO[100] or FOO(100,50)  ),  with  the  declared  size  shown.    The cross-
  2309. reference report also lists public variables, macros and arrays separately.
  2310.  
  2311. The report form documentation has been revised extensively (dBASE III only).
  2312. It now shows each of the fields in the report, displays the  report heading,
  2313. etc.   Similar documentation  is now  available for  label forms, which were
  2314. ignored entirely by SNAP! version 2.0.)
  2315.  
  2316. The database summary now includes start  and  end  columns  for  each field.
  2317. Alias names  are now  usually shown  with the  appropriate physical database
  2318. file in the data dictionary, file heading, tree, etc.
  2319.  
  2320. Link files can now be created for PLINK86, Turbo C  TLINK, or  the Microsoft
  2321. LINK program.   Make  files continue  to support NDMAKE and now also support
  2322. the Clipper MAKE utility.
  2323.  
  2324. File headings and may other reports show the date and  time of  last change,
  2325. based on the file date/time stamp.
  2326.  
  2327.  
  2328. Additional Options
  2329.  
  2330. Here are some of the new things you can control:
  2331.      Suppression of blank lines in output file
  2332.      Suppression of comments in output file
  2333.      Optional extra indent under DO CASE statement
  2334.      Inclusion of DBF, NDX, MEM, FRM and LBL files in the tree
  2335.      Capitalization of key words
  2336.      Capitalization of tokens
  2337.      Temporary suspension of cross-referencing and formatting
  2338.      Leave the file date/time stamp unchanged
  2339.      Separate directories for programs and databases
  2340.  
  2341.  
  2342. Changes Since SNAP! Version 1.0
  2343.  
  2344. Practically everything.
  2345.  
  2346.  
  2347.  
  2348.  
  2349.  
  2350.  
  2351.  
  2352.  
  2353.  
  2354.  
  2355.  
  2356.  
  2357.  
  2358.  
  2359.  
  2360.  
  2361.                                     39
  2362.  
  2363.  
  2364.  
  2365.  
  2366.  
  2367.  
  2368.                       Some Administrative Matters
  2369.  
  2370. Version Numbers
  2371.  
  2372. In the  past, I  have sometimes  been criticized  for releasing  one or more
  2373. "maintenance" versions shortly after a  major  update.    I  am  guilty, but
  2374. unrepentant.   In an  attempt to  be responsive  to user suggestions and bug
  2375. reports, I will continue to add features and fix bugs as they  are reported.
  2376. When  the  resulting  minor  changes  are  uploaded,  the SNAP! version will
  2377. include a letter (e.g., SNAP! version 3.00 will change to  3.00a).   In this
  2378. example, if  you have  version 3.00,  don't worry  about downloading another
  2379. version before 3.1 unless you need the specific features in  the intervening
  2380. versions.  
  2381.  
  2382.  
  2383. Updates and New Versions
  2384.  
  2385. Rather than  download the  large SNAP!  files, you  may prefer  to send me a
  2386. blank, formatted diskette (either 3.5 or  5.25 inch,  but 3.5  takes longer)
  2387. and a  postage-paid diskette  mailer, and  I will  send you the most current
  2388. version.  My address is:
  2389.  
  2390.       Walter J. Kennamer
  2391.       1801 E. 12th St., Apt. 1118
  2392.       Cleveland, Ohio   44114
  2393.  
  2394.  
  2395. How to Get Support
  2396.  
  2397. My CIS ID is 74025,514.  I log on every day, except when I am traveling.   I
  2398. am easiest to reach through EasyPlex, but I also check in on the Ashton-Tate
  2399. SIG, the IBM Software SIG, and Programmer's Forum periodically.  If you have
  2400. any suggestions about how to improve SNAP! or if you have encountered a bug,
  2401. please let me know. 
  2402.  
  2403. My job requires me to travel frequently, and I am  usually hard  to reach by
  2404. telephone.    You  will  probably  have  better  success reaching me through
  2405. Compuserve or by mail.
  2406.  
  2407.  
  2408.  
  2409.                             Acknowledgements
  2410.  
  2411. Special thanks to  Andy  Walsh  for  writing  several  string  procedures in
  2412. assembly language  for me.  Thanks to Peter Petto, Paul Ferrara and everyone
  2413. else who helped me  develop  and  debug  SNAP!    Thanks  to  the Compuserve
  2414. Ashton-Tate  and  Programmers  SIG  for  all the help their members gave me.
  2415. Thanks to Fred Fachet, Glen Harness and Jack  Lohman for  beta testing above
  2416. and beyond the call of duty.  Thanks to Dave Heindel for helping me speed it
  2417. up.  Thanks to Pat Adams for public relations.
  2418.  
  2419.  
  2420.                                     40
  2421.  
  2422.  
  2423.  
  2424.  
  2425.  
  2426.  
  2427.                       Appendix A -- Sample Reports
  2428.  
  2429. The following sample reports  illustrate the  formats of  some SNAP! output.
  2430. Since  the  documentation  for  a  full  system  is voluminous, only limited
  2431. portions of the documentation are presented  here.   This saves  much space,
  2432. but has  the disadvantage  of making  some reports "out of sync."  Thus, the
  2433. internal consistency of a complete package of documentation is missing here.
  2434. For example,  if you  try to trace the entries in the tree back to TODO.PRG,
  2435. you will discover that they don't track since I trimmed out much of TODO.PRG
  2436. so as  to reduce  the bulk of the documentation file.  Similarly, the system
  2437. summary shows a lot of databases that aren't in the DATADICT.DOC file.
  2438.  
  2439. Of course, the best way to see sample SNAP! reports is to run it  on some of
  2440. your own programs.
  2441.  
  2442.  
  2443.  
  2444.  
  2445.  
  2446.  
  2447.  
  2448.  
  2449.  
  2450.  
  2451.  
  2452.  
  2453.  
  2454.  
  2455.  
  2456.  
  2457.  
  2458.  
  2459.  
  2460.  
  2461.  
  2462.  
  2463.  
  2464.  
  2465.  
  2466.  
  2467.  
  2468.  
  2469.  
  2470.  
  2471.  
  2472.  
  2473.  
  2474.  
  2475.  
  2476.  
  2477.  
  2478.  
  2479.                                     41
  2480.  
  2481.  
  2482.  
  2483.  
  2484.  
  2485.  
  2486. *:*********************************************************************
  2487. *:
  2488. *:        Program: TODO.PRG
  2489. *:
  2490. *:         System: ToDo -- To Do Management System
  2491. *:         Author: Walter J. Kennamer
  2492. *:      Copyright (c) 1988, Walter J. Kennamer
  2493. *:  Last modified: 02/26/88     23:00
  2494. *:
  2495. *:          Calls: HELP.PRG
  2496. *:               : F2_HANDLR        (procedure in TODOPRC.PRG)
  2497. *:               : HELPEDIT         (procedure in TODOPRC.PRG)
  2498. *:               : TDDEFLT.PRG
  2499. *:               : ERRORMSG         (procedure in TODOPRC.PRG)
  2500. *:               : SETDATE.PRG
  2501. *:               : TDLOGO.PRG
  2502. *:               : TDSETUP.PRG
  2503. *:               : TDINPUT.PRG
  2504. *:
  2505. *:   Memory Files: ACCESSES.MEM
  2506. *:               : DEFAULT.MEM
  2507. *:
  2508. *:     Documented: 03/02/88 at 18:39                 SNAP! version 3.00
  2509. *:*********************************************************************
  2510. PARAMETERS c_line               && command line 
  2511. *# SNAPMACRO s_tdfile   todo
  2512. *# SNAPMACRO s_ddndx    tododd
  2513. *# SNAPMACRO s0_adfname address
  2514. external subject
  2515. PUBLIC clipper,s_cmdline
  2516. IF pcount() > 0
  2517.    s_cmdline = Alltrim(UPPER(c_line))
  2518. ELSE
  2519.    s_cmdline = ""
  2520. ENDIF
  2521.    .
  2522.    .
  2523.    .
  2524. * read defaults
  2525. USE
  2526. IF FILE("default.mem")
  2527.    REST FROM  DEFAULT ADDITIVE
  2528.    IF s0_bw 
  2529.       s0_montype = "M"
  2530.    ELSE
  2531.       s0_montype = "C"
  2532.    ENDIF
  2533. ELSE
  2534.    DO tddeflt
  2535. ENDIF
  2536.  
  2537.  
  2538.                                        42
  2539.  
  2540.  
  2541.  
  2542.  
  2543.  
  2544. DO tdinput
  2545. *: EOF: TODO.PRG
  2546.  
  2547.  
  2548.  
  2549.  
  2550.  
  2551.  
  2552.  
  2553.  
  2554.  
  2555.  
  2556.  
  2557.  
  2558.  
  2559.  
  2560.  
  2561.  
  2562.  
  2563.  
  2564.  
  2565.  
  2566.  
  2567.  
  2568.  
  2569.  
  2570.  
  2571.  
  2572.  
  2573.  
  2574.  
  2575.  
  2576.  
  2577.  
  2578.  
  2579.  
  2580.  
  2581.  
  2582.  
  2583.  
  2584.  
  2585.  
  2586.  
  2587.  
  2588.  
  2589.  
  2590.  
  2591.  
  2592.  
  2593.  
  2594.  
  2595.  
  2596.  
  2597.                                        43
  2598.  
  2599.  
  2600.  
  2601.  
  2602.  
  2603.  
  2604. System Summary
  2605.  
  2606. System: ToDo -- To Do Management System
  2607. Author: Walter J. Kennamer
  2608. 03/02/88   18:56:29
  2609. System Summary
  2610.  
  2611. -------------------------------------------------------------------------------
  2612.  
  2613.  
  2614. This system has:
  2615.   8636 lines of code
  2616.     46 program files
  2617.      2 procedure files
  2618.     84 procedures and functions
  2619.     18 databases
  2620.      8 index files
  2621.      3 report forms
  2622.      0 format files
  2623.      0 label forms
  2624.      5 memory variable files
  2625.    622 cross-referenced tokens
  2626.  
  2627.  
  2628. See the tree diagram for programs, procedures, functions and format files
  2629.  
  2630.  
  2631.                    Index          Report         Label          Memory
  2632.   Databases        Files          Forms          Forms          Files
  2633. -------------- -------------- -------------- -------------- --------------
  2634.  
  2635. HELP.DBF       HELPKEY.NTX    SUBREPT.FRM                   ACCESSES.MEM   
  2636. TODO.SKL       SUBJECT.NTX    TDSUMIN.FRM                   DEFAULT.MEM    
  2637. TODO.DBF       TODODD.NTX     TDDETIN.FRM                   LASTFILE.MEM   
  2638. SUBJECT.DBF    &NTXNAME                                     PRINTER.MEM    
  2639. ADDRESS.DBF    HISTDD.NTX                                   CLIP.MEM       
  2640. &B_FILE.DBF    PRIORITY.NDX                                                
  2641. NOTEPAD.DBF    DATEDUE.NDX                                                 
  2642. PRTCODES.DBF   DATEDUE.NTX                                                 
  2643. &FILE                                                                      
  2644. HIST.DBF                                                                   
  2645. TEMP.DBF                                                                   
  2646. &FNAME                                                                     
  2647. &BAK_NAME.DBF                                                              
  2648. &FNAME.DBF                                                                 
  2649. AREACODE.DBF                                                               
  2650. DATEDUE.DBF                                                                
  2651. PRM.SKL                                                                    
  2652. ADDRESS.ASC                                                                
  2653.  
  2654. ------------------------------------------------------------------------------
  2655.  
  2656.                                        44
  2657.  
  2658.  
  2659.  
  2660.  
  2661.  
  2662. SNAP! created the following documentation files: 
  2663.          C:\SCRATCH\STATS.DOC
  2664.          C:\SCRATCH\TREE.DOC    
  2665.          C:\SCRATCH\FILELIST.DOC
  2666.          C:\SCRATCH\NDXSUMRY.DOC
  2667.          C:\SCRATCH\DATADICT.DOC
  2668.          C:\SCRATCH\FRMSUMRY.DOC
  2669.          C:\SCRATCH\PRCSUMRY.DOC
  2670.          C:\SCRATCH\XREF.DOC    
  2671.          C:\SCRATCH\TODO.LNK    
  2672.          C:\SCRATCH\TODO.TLK    
  2673.          C:\SCRATCH\TODO.MLK    
  2674.          C:\SCRATCH\MAKEFILE    
  2675.          C:\SCRATCH\ERROR.DOC
  2676.          Action diagram files
  2677.          UPDATE.BAT   to update program source files in C:\TODO
  2678.          BACKDBF.BAT  to backup databases, indexes and memory files
  2679.          BACKPRG.BAT  to backup program files, report forms and format files
  2680.          PRINTDOC.BAT to print documentation files
  2681.  
  2682.  
  2683.  
  2684.  
  2685.  
  2686.  
  2687.  
  2688.  
  2689.  
  2690.  
  2691.  
  2692.  
  2693.  
  2694.  
  2695.  
  2696.  
  2697.  
  2698.  
  2699.  
  2700.  
  2701.  
  2702.  
  2703.  
  2704.  
  2705.  
  2706.  
  2707.  
  2708.  
  2709.  
  2710.  
  2711.  
  2712.  
  2713.  
  2714.  
  2715.                                        45
  2716.  
  2717.  
  2718.  
  2719.  
  2720.  
  2721. System: ToDo -- To Do Management System
  2722. Author: Walter J. Kennamer
  2723. 03/02/88   18:56:09
  2724. Tree Diagram
  2725.  
  2726. -------------------------------------------------------------------------------
  2727.  
  2728. TODO.PRG
  2729.      HELP.PRG
  2730.           HELP.DBF (database)
  2731.           SHOW_HELP (procedure in HELP.PRG)
  2732.                SETCOLOR (procedure in TODOPRC.PRG)
  2733.                CENTER (procedure in TODOPRC.PRG)
  2734.           SETCOLOR (procedure in TODOPRC.PRG)
  2735.           CENTER (procedure in TODOPRC.PRG)
  2736.      F2_HANDLR (procedure in TODOPRC.PRG)
  2737.           ADDRLIST.PRG
  2738.                SETCOLOR (procedure in TODOPRC.PRG)
  2739.           NUMLIST.PRG
  2740.                SETCOLOR (procedure in TODOPRC.PRG)
  2741.      HELPEDIT (procedure in TODOPRC.PRG)
  2742.      TDDEFLT.PRG
  2743.           SETCOLOR (procedure in TODOPRC.PRG)
  2744.           SCRHEAD (procedure in TODOPRC.PRG)
  2745.                SETCOLOR (procedure in TODOPRC.PRG)
  2746.           TDSETUP.PRG
  2747.                TODO.SKL (database)
  2748.                TODO.DBF (database)
  2749.                SUBJECT.DBF (database)
  2750.                ADDRESS.DBF (database)
  2751.           CENTER (procedure in TODOPRC.PRG)
  2752.           SETDATE.PRG
  2753.           SETPRT.PRG
  2754.                PRTCODES.DBF (database)
  2755.                SCRHEAD (procedure in TODOPRC.PRG)
  2756.                     SETCOLOR (procedure in TODOPRC.PRG)
  2757.                ERRORMSG (procedure in TODOPRC.PRG)
  2758.                     SETCOLOR (procedure in TODOPRC.PRG)
  2759.                     CENTER (procedure in TODOPRC.PRG)
  2760.           F2_HANDLR (procedure in TODOPRC.PRG)
  2761.                ADDRLIST.PRG
  2762.                     SETCOLOR (procedure in TODOPRC.PRG)
  2763.                NUMLIST.PRG
  2764.                     SETCOLOR (procedure in TODOPRC.PRG)
  2765.           F3_HANDLR (procedure in TODOPRC.PRG)
  2766.  
  2767. and so forth
  2768.  
  2769.  
  2770.  
  2771.  
  2772.  
  2773.  
  2774.                                        46
  2775.  
  2776.  
  2777.  
  2778.  
  2779.  
  2780. System: ToDo -- To Do Management System
  2781. Author: Walter J. Kennamer
  2782. 03/02/88   18:55:52
  2783. Procedure and Function Summary
  2784.  
  2785. -------------------------------------------------------------------------------
  2786.  
  2787. 2 procedure files in the system
  2788.    SUBJECT.PRG
  2789.    TODOPRC.PRG
  2790. -------------------------------------------------------------------------------
  2791.  
  2792. SUBJECT.PRG -- Last updated:  12/30/87 at   8:47
  2793.  
  2794.    Contains: SUBOK()
  2795.           Calls: SETCOLOR          (procedure in TODOPRC.PRG)
  2796.           Calls: CENTER            (procedure in TODOPRC.PRG)
  2797.           Calls: PUTSUB            (procedure in TODOPRC.PRG)
  2798.    Contains: SUBLOOK()
  2799.           Calls: SETCOLOR          (procedure in TODOPRC.PRG)
  2800.             .
  2801.             .
  2802.             .
  2803.    Contains: SUBEDIT
  2804.       Called by: ED()              (function in SUBJECT.PRG)
  2805.           Calls: SETCOLOR          (procedure in TODOPRC.PRG)
  2806.  
  2807.  
  2808. -------------------------------------------------------------------------------
  2809. TODOPRC.PRG -- Last updated:  12/28/87 at  14:20
  2810.  
  2811.  
  2812.    Contains: F2_HANDLR
  2813.       Called by: TODO.PRG       
  2814.       Called by: TDDEFLT.PRG    
  2815.           Calls: ADDRLIST.PRG   
  2816.           Calls: NUMLIST.PRG    
  2817.    Contains: F3_HANDLR
  2818.       Called by: TODO.PRG       
  2819.       Called by: TDDEFLT.PRG    
  2820.           Calls: SETCOLOR          (procedure in TODOPRC.PRG)
  2821.    Contains: F4_HANDLR
  2822.       Called by: TODO.PRG       
  2823.       Called by: TDDEFLT.PRG    
  2824.             .
  2825.             .
  2826.             . 
  2827.    Contains: ISCTRL()
  2828.    Contains: SCREEN_ON
  2829.       Called by: ROLODEX.PRG    
  2830.    Contains: PRINT_ON
  2831.       Called by: ROLODEX.PRG    
  2832.  
  2833.                                        47
  2834.  
  2835.  
  2836.  
  2837.  
  2838.  
  2839. System: ToDo -- To Do Management System
  2840. Author: Walter J. Kennamer
  2841. 03/02/88   18:55:42
  2842. Database Structure Summary
  2843.  
  2844. -------------------------------------------------------------------------------
  2845.  
  2846. 3 databases in the system
  2847.    HELP.DBF
  2848.    TODO.DBF
  2849.    SUBJECT.DBF
  2850. -------------------------------------------------------------------------------
  2851.  
  2852. Structure for database : HELP.DBF
  2853. Number of data records :      37
  2854.           Last updated :  09/09/87 at  11:06
  2855. Field  Field name  Type        Width    Dec    Start      End
  2856.     1  HCALLPRG    Character       8               1        8
  2857.     2  HINPUTVAR   Character      12               9       20
  2858.     3  HSCRNNUM    Character       4              21       24
  2859.     4  HELPMSG     Memo           10              25       34
  2860. ** Total **                       35
  2861.  
  2862.  
  2863. This database is associated with the memo file: HELP.DBT
  2864.  
  2865. This database appears to be associated with index file(s): 
  2866.        : HELPKEY.NTX  (UPPER(hcallprg+hscrnnum+hinputvar))
  2867.  
  2868. SNAP! did not find any associated report forms
  2869.  
  2870. Used by: HELP.PRG    
  2871.        : TDFIX.PRG   
  2872.        : TDREINDX.PRG
  2873.        : TDREPAIR       (procedure in TDFIX.PRG)
  2874.  
  2875. -------------------------------------------------------------------------------
  2876.  
  2877.  
  2878. Structure for database : TODO.DBF
  2879. Number of data records :     112
  2880.           Last updated :  03/01/88 at  17:35
  2881. Field  Field name  Type        Width    Dec    Start      End
  2882.     1  ITEM        Character      55               1       55
  2883.     2  PRIORITY    Character       1              56       56
  2884.     3  DATE_DUE    Date            8              57       64
  2885.     4  CALTIME     Character       5              65       69
  2886.     5  COMPLETE    Character       1              70       70
  2887.     6  ADVANCE     Numeric         3              71       73
  2888.     7  DATE_ASGN   Date            8              74       81
  2889.     8  DATE_COMP   Date            8              82       89
  2890.     9  LATE        Numeric         3              90       92
  2891.  
  2892.                                        48
  2893.  
  2894.  
  2895.  
  2896.  
  2897.  
  2898.    10  ITEMTYPE    Character       1              93       93
  2899.    11  ALARM       Character       1              94       94
  2900.    12  SUBJECT     Character      30              95      124
  2901.    13  DURATION    Numeric         8      2      125      132
  2902.    14  VERSION     Character       5             133      137
  2903. ** Total **                      138
  2904.  
  2905.  
  2906. This database appears to be associated with index file(s): 
  2907.        : TODODD.NTX  (DTOS(date_due)+priority+caltime)
  2908.        : DATEDUE.NDX  (index key not found)
  2909.  
  2910. SNAP! did not find any associated report forms
  2911.  
  2912. Used by: TDSETUP.PRG 
  2913.        : TDINPUT.PRG 
  2914.        : OPENDATA       (procedure in TDSETUP.PRG)
  2915.        : EDITEXIT.PRG
  2916.        : TDREDATE.PRG
  2917.        : TDPURGE.PRG 
  2918.        : TDFIX.PRG   
  2919.        : TDCAL.PRG   
  2920.        : TDREINDX.PRG
  2921.  
  2922. -------------------------------------------------------------------------------
  2923.  
  2924.  
  2925. Structure for database : SUBJECT.DBF
  2926. Number of data records :      41
  2927.           Last updated :  01/12/88 at   9:34
  2928. Field  Field name  Type        Width    Dec    Start      End
  2929.     1  SUBCODE     Character      20               1       20
  2930.     2  SUBJECT     Character      30              21       50
  2931. ** Total **                       51
  2932.  
  2933.  
  2934. This database appears to be associated with index file(s): 
  2935.        : SUBJECT.NTX  (UPPER(subject))
  2936.  
  2937. SNAP! did not find any associated report forms
  2938.  
  2939. Used by: TDSETUP.PRG 
  2940.        : TDINPUT.PRG 
  2941.        : OPENDATA       (procedure in TDSETUP.PRG)
  2942.        : TDREINDX.PRG
  2943.  
  2944. -------------------------------------------------------------------------------
  2945.  
  2946.  
  2947.  
  2948.  
  2949.  
  2950.  
  2951.                                        49
  2952.  
  2953.  
  2954.  
  2955.  
  2956.  
  2957. System: ToDo -- To Do Management System
  2958. Author: Walter J. Kennamer
  2959. 03/02/88   18:55:49
  2960. Data Dictionary
  2961.  
  2962. -------------------------------------------------------------------------------
  2963.  
  2964. Note: the actual system used more than 3 databases.  All but three were 
  2965. removed above to save space.  This portion of the report shows all of them.
  2966.  
  2967.  
  2968. Field Name         Type    Len   Dec     Database 
  2969. ABBREV              C       2     0     AREACODE.DBF
  2970. ADDRESS             C      53     0     ADDRESS.DBF
  2971. ADVANCE             N       3     0     TODO.SKL
  2972.                                         TODO.DBF
  2973.                                         HIST.DBF
  2974. ALARM               C       1     0     TODO.SKL
  2975.                                         TODO.DBF
  2976.                                         HIST.DBF
  2977. AREACODE            N       3     0     AREACODE.DBF
  2978. BPHONE              C      12     0     ADDRESS.DBF
  2979. CALTIME             C       5     0     TODO.SKL
  2980.                                         TODO.DBF
  2981.                                         HIST.DBF
  2982. CITIES              C      78     0     AREACODE.DBF
  2983. CITY                C      25     0     ADDRESS.DBF
  2984. COL                 N       2     0     PRTCODES.DBF
  2985. COMMENT             C      50     0     ADDRESS.DBF
  2986. COMPANY             C      53     0     ADDRESS.DBF
  2987. COMPLETE            C       1     0     TODO.SKL
  2988.                                         TODO.DBF
  2989.                                         HIST.DBF
  2990. COMPRESS            C      13     0     PRTCODES.DBF
  2991. COUNTRY             C      20     0     ADDRESS.DBF
  2992. DATE_ASGN           D       8     0     TODO.SKL
  2993.                                         TODO.DBF
  2994.                                         HIST.DBF
  2995. DATE_COMP           D       8     0     TODO.SKL
  2996.                                         TODO.DBF
  2997.                                         HIST.DBF
  2998. DATE_DUE            D       8     0     TODO.SKL
  2999.                                         TODO.DBF
  3000.                                         HIST.DBF
  3001. DURATION            N       8     2     TODO.SKL
  3002.                                         TODO.DBF
  3003. ELITE               C      13     0     PRTCODES.DBF
  3004. FORMFEED            C      13     0     PRTCODES.DBF
  3005. HCALLPRG            C       8     0     HELP.DBF
  3006. HELPMSG             M      10     0     HELP.DBF
  3007. HINPUTVAR           C      12     0     HELP.DBF
  3008. HSCRNNUM            C       4     0     HELP.DBF
  3009.  
  3010.                                        50
  3011.  
  3012.  
  3013.  
  3014.  
  3015.  
  3016. ITEM                C      55     0     TODO.SKL
  3017.                                         TODO.DBF
  3018.                                         HIST.DBF
  3019. ITEMTYPE            C       1     0     TODO.SKL
  3020.                                         TODO.DBF
  3021.                                         HIST.DBF
  3022. LATE                N       3     0     TODO.SKL
  3023.                                         TODO.DBF
  3024.                                         HIST.DBF
  3025. LINE                C      78     0     TEMP.DBF
  3026.                                         PRM.SKL
  3027. NAME                C      30     0     ADDRESS.DBF
  3028. NAME                C      25     0     PRTCODES.DBF
  3029. NOTES               M      10     0     ADDRESS.DBF
  3030.                                         NOTEPAD.DBF
  3031. PHONE               C      12     0     ADDRESS.DBF
  3032. POSITION            C      40     0     ADDRESS.DBF
  3033. PRIORITY            C       1     0     TODO.SKL
  3034.                                         TODO.DBF
  3035.                                         HIST.DBF
  3036. PRTNUM              N       2     0     PRTCODES.DBF
  3037. RESET               C      13     0     PRTCODES.DBF
  3038. ROW                 N       2     0     PRTCODES.DBF
  3039. SECONDLINE          C      53     0     ADDRESS.DBF
  3040. STATE               C       2     0     ADDRESS.DBF
  3041. STATE               C      15     0     AREACODE.DBF
  3042. SUBCODE             C      20     0     SUBJECT.DBF
  3043. SUBJECT             C      30     0     TODO.SKL
  3044.                                         TODO.DBF
  3045.                                         SUBJECT.DBF
  3046.                                         HIST.DBF
  3047. VERSION             C       5     0     TODO.SKL
  3048.                                         TODO.DBF
  3049.                                         NOTEPAD.DBF
  3050. ZIP                 C      10     0     ADDRESS.DBF
  3051.  
  3052.  
  3053.  
  3054.  
  3055.  
  3056.  
  3057.  
  3058.  
  3059.  
  3060.  
  3061.  
  3062.  
  3063.  
  3064.  
  3065.  
  3066.  
  3067.  
  3068.  
  3069.                                        51
  3070.  
  3071.  
  3072.  
  3073.  
  3074.  
  3075. System: ToDo -- To Do Management System
  3076. Author: Walter J. Kennamer
  3077. 03/02/88   18:55:15
  3078. Index Parameter Summary
  3079.  
  3080. -------------------------------------------------------------------------------
  3081.  
  3082. 5 index files in the system
  3083.    HELPKEY.NDX
  3084.    SUBJECT.NDX
  3085.    TODODD.NDX
  3086.    &NTXNAME
  3087.    DATEDUE.NDX
  3088. -------------------------------------------------------------------------------
  3089.  
  3090. HELPKEY.NTX -- Indexed on: UPPER(hcallprg+hscrnnum+hinputvar)
  3091. Last updated:  09/09/87 at  11:06
  3092.  
  3093.  
  3094. This index file appears to be associated with database(s): 
  3095.        : HELP.DBF
  3096.  
  3097. Used by: HELP.PRG    
  3098.        : TDFIX.PRG   
  3099.        : TDREINDX.PRG
  3100.        : TDREPAIR       (procedure in TDFIX.PRG)
  3101.  
  3102. -------------------------------------------------------------------------------
  3103. SUBJECT.NTX -- Indexed on: UPPER(subject)
  3104. Last updated:  01/12/88 at   9:16
  3105.  
  3106.  
  3107. This index file appears to be associated with database(s): 
  3108.        : SUBJECT.DBF
  3109.  
  3110. Used by: SUBLOOK()      (function  in SUBJECT.PRG)
  3111.        : PART_MATCH()   (function  in SUBJECT.PRG)
  3112.        : TDSETUP.PRG 
  3113.        : TDINPUT.PRG 
  3114.        : OPENDATA       (procedure in TDSETUP.PRG)
  3115.        : TDFIX.PRG   
  3116.        : TDREINDX.PRG
  3117.        : TDREPAIR       (procedure in TDFIX.PRG)
  3118.  
  3119. -------------------------------------------------------------------------------
  3120. TODODD.NTX -- Indexed on: DTOS(date_due)+priority+caltime
  3121. Last updated:  03/01/88 at  17:35
  3122.  
  3123.  
  3124. This index file appears to be associated with database(s): 
  3125.        : TODO.DBF
  3126.  
  3127.  
  3128.                                        52
  3129.  
  3130.  
  3131.  
  3132.  
  3133.  
  3134. Used by: TDSETUP.PRG 
  3135.        : TDINPUT.PRG 
  3136.        : EDITEXIT.PRG
  3137.        : EDITSRCH.PRG
  3138.        : TDREDATE.PRG
  3139.        : TDPURGE.PRG 
  3140.        : EDITCHGE.PRG
  3141.        : TDFIX.PRG   
  3142.        : PRTUNCMP.PRG
  3143.        : TDREINDX.PRG
  3144.        : TDREPAIR       (procedure in TDFIX.PRG)
  3145.  
  3146. -------------------------------------------------------------------------------
  3147. &NTXNAME is a macro unknown to SNAP!
  3148.  
  3149. This index file appears to be associated with database(s): 
  3150.        : ADDRESS.DBF
  3151.  
  3152. Used by: TDSETUP.PRG 
  3153.        : OPENDATA       (procedure in TDSETUP.PRG)
  3154.        : ADDRESS.PRG 
  3155.        : TDFIX.PRG   
  3156.        : TDREINDX.PRG
  3157.        : TDREPAIR       (procedure in TDFIX.PRG)
  3158.        : ADDRBOOK.PRG
  3159.        : ROLODEX.PRG 
  3160.  
  3161. -------------------------------------------------------------------------------
  3162. File not found--DATEDUE.NDX
  3163.  
  3164. This index file appears to be associated with database(s): 
  3165.        : TODO.DBF
  3166.  
  3167. Used by: TDCAL.PRG   
  3168.        : TDCALDAY.PRG
  3169.  
  3170.  
  3171.  
  3172.  
  3173.  
  3174.  
  3175.  
  3176.  
  3177.  
  3178.  
  3179.  
  3180.  
  3181.  
  3182.  
  3183.  
  3184.  
  3185.  
  3186.  
  3187.                                        53
  3188.  
  3189.  
  3190.  
  3191.  
  3192.  
  3193. System: ToDo -- To Do Management System
  3194. Author: Walter J. Kennamer
  3195. 03/02/88   18:55:50
  3196. Report Form File Summary
  3197.  
  3198. -------------------------------------------------------------------------------
  3199.  
  3200. 2 report forms in the system
  3201.    SUBREPT.FRM
  3202.    TDSUMIN.FRM
  3203.  -------------------------------------------------------------------------------
  3204.  
  3205. SUBREPT.FRM                                   Last updated:  08/24/87 at  10:14
  3206.    Summary report?  No 
  3207.    Eject page before printing?  No          Eject page after printing?  Yes
  3208.    Double space report?  No                 Plain page?  No 
  3209.    Left margin:    8                        Right Margin:    0
  3210.  
  3211.    -------------------------------------------------------------------------
  3212.                                  Report Contents
  3213.    -------------------------------------------------------------------------
  3214.    No.   Field                               Length    Decimals     Totaled?
  3215.    ---   ----------------------------------  ------    --------     --------
  3216.  
  3217.      1   Subject                                 40        0            No 
  3218.      2   Subcode                                 25        0            No 
  3219.                                               -----
  3220.                                                  65
  3221.                                               =====
  3222.  
  3223.  
  3224.    -----------------------------------------------------------------------------
  3225.                                    Report Layout
  3226.    ------------------------------------------------------------------------------
  3227.  
  3228. Page No.     1
  3229. 00/00/00
  3230.                                                 
  3231.                                                 
  3232.                                                 
  3233.                                           Subject Codes
  3234.                                                                    
  3235. Subject                                  Charge Code               
  3236. 1                                        2                         
  3237.  
  3238.  
  3239.  
  3240.  
  3241.    -----------------------------------------------------------------------------
  3242.                Database and Program References
  3243.    -----------------------------------------------------------------------------
  3244.  
  3245.  
  3246.                                        54
  3247.  
  3248.  
  3249.  
  3250.  
  3251.  
  3252.    SNAP! could not find an associated database
  3253.  
  3254.    Used by: SUBREPT        (procedure in SUBJECT.PRG)
  3255.  
  3256.  
  3257.  
  3258.  
  3259.  
  3260.  
  3261.  
  3262.  
  3263.  
  3264.  
  3265.  
  3266.  
  3267.  
  3268.  
  3269.  
  3270.  
  3271.  
  3272.  
  3273.  
  3274.  
  3275.  
  3276.  
  3277.  
  3278.  
  3279.  
  3280.  
  3281.  
  3282.  
  3283.  
  3284.  
  3285.  
  3286.  
  3287.  
  3288.  
  3289.  
  3290.  
  3291.  
  3292.  
  3293.  
  3294.  
  3295.  
  3296.  
  3297.  
  3298.  
  3299.  
  3300.  
  3301.  
  3302.  
  3303.  
  3304.  
  3305.                                        55
  3306.  
  3307.  
  3308.  
  3309.  
  3310.  
  3311.  
  3312. TDSUMIN.FRM                                   Last updated:  09/01/87 at  15:17
  3313.    Summary report?  No 
  3314.    Eject page before printing?  Yes         Eject page after printing?  Yes
  3315.    Double space report?  Yes                Plain page?  No 
  3316.    Left margin:    1                        Right Margin:    0
  3317.  
  3318.    -------------------------------------------------------------------------
  3319.                                  Report Contents
  3320.    -------------------------------------------------------------------------
  3321.    No.   Field                               Length    Decimals     Totaled?
  3322.    ---   ----------------------------------  ------    --------     --------
  3323.  
  3324.      1   "______"                                 6        0            No 
  3325.      2   RECNO()                                  4        0            No 
  3326.      3   Item                                    55        0            No 
  3327.      4   " "+dtoc(date_due)                       9        0            No 
  3328.      5   Caltime                                  6        0            No 
  3329.      6   "   "+priority                           5        0            No 
  3330.                                               -----
  3331.                                                  85
  3332.                                               =====
  3333.  
  3334.  
  3335.   -----------------------------------------------------------------------------  
  3336.                                Report Layout
  3337.   -----------------------------------------------------------------------------
  3338. Page No.     1
  3339. 00/00/00
  3340.                                                 
  3341.                                                 
  3342.                                                 
  3343.                                         Uncompleted Items
  3344.  
  3345.        No.  Item                                        Due Date  Time   Pri.  
  3346.        ===  =========================================== ========= ===== =====
  3347.   1    2    3                                           4         5     6     
  3348.  
  3349.  
  3350.    -----------------------------------------------------------------------------
  3351.                Database and Program References
  3352.    -----------------------------------------------------------------------------
  3353.  
  3354.    SNAP! could not find an associated database
  3355.  
  3356.    Used by: PRTUNCMP.PRG
  3357.  
  3358.  
  3359.  
  3360.  
  3361.  
  3362.  
  3363.  
  3364.                                        56
  3365.  
  3366.  
  3367.  
  3368.  
  3369.  
  3370. System: ToDo -- To Do Management System
  3371. Author: Walter J. Kennamer
  3372. 03/02/88   18:55:58
  3373. Token Cross-Reference Report
  3374.  
  3375. -------------------------------------------------------------------------------
  3376.  
  3377. 622 tokens are included in this report.  
  3378.  
  3379.  
  3380. Legend for context symbols:
  3381.    (blank) reference does not change the variable or field value.
  3382.    = variable or field is changed in an assignment statement.
  3383.    x variable is released.
  3384.    A array is declared.
  3385.    G GET statement changes variable or field.
  3386.    P variable is declared PUBLIC.
  3387.    R field is replaced.
  3388.    U database is USEd
  3389.    V variable is declared PRIVATE.
  3390.    & variable is referenced in a macro--takes preference over all others.
  3391.    @ variable passed as a var parameter--Clipper only
  3392.    ? reference is of unknown type.
  3393.  
  3394. ABBREV
  3395.    AREACODE.PRG     90   134   178 
  3396.  
  3397. ABORT
  3398.    TDINPUT.PRG      62x   67P  306=
  3399.    EDITSRCH.PRG     35=   69=   99=
  3400.    EDITCHGE.PRG     32=
  3401.  
  3402. ACCESSES
  3403.    TODO.PRG        130 
  3404.    TDEXIT.PRG       24 
  3405.  
  3406.    .
  3407.    .
  3408.    .
  3409.  
  3410. YESNO
  3411.    ADDRESS.PRG     476=  482G  482   484   663=  664   665=  668G  668   672 
  3412.                    748=  751G  751   753 
  3413.  
  3414. YR
  3415.    TDCOPY.PRG      109=  116=  116   122   126   128   224   226   241=  248=
  3416.                    248   255   262   264   277 
  3417.  
  3418. ZIP
  3419.    ADDRESS.PRG     130   227   282   301R  336R  363 
  3420.    ADDRBOOK.PRG     85    86    88 
  3421.    ROLODEX.PRG     180   181   183 
  3422.  
  3423.                                        57
  3424.  
  3425.  
  3426.  
  3427.  
  3428.  
  3429.  
  3430. System: ToDo -- To Do Management System
  3431. Author: Walter J. Kennamer
  3432. 03/02/88   18:56:06
  3433. Public Variable Summary
  3434.  
  3435. -------------------------------------------------------------------------------
  3436.  
  3437.  
  3438. These variables were declared PUBLIC somewhere in the system.
  3439. Some may also be used as private variables in some parts of the code.
  3440.  
  3441. ABORT                                   ADDR_MROW
  3442. ANSWER                                  CARD_ROWS
  3443. CLIPPER                                 CMD_LINE
  3444. C_OFFSET                                DATE_STR
  3445.     .
  3446.     .
  3447.     .
  3448. S_TESTDATE                              S_VERSION
  3449. T_COMP                                  T_DATED
  3450. T_DUR                                   T_ITEM
  3451. T_ITEMTYPE                              T_PRIOR
  3452. T_SUBJ                                  T_TIME
  3453.  
  3454.  
  3455.  
  3456.  
  3457.  
  3458.  
  3459.  
  3460.  
  3461.  
  3462.  
  3463.  
  3464.  
  3465.  
  3466.  
  3467.  
  3468.  
  3469.  
  3470.  
  3471.  
  3472.  
  3473.  
  3474.  
  3475.  
  3476.  
  3477.  
  3478.  
  3479.  
  3480.  
  3481.  
  3482.                                        58
  3483.  
  3484.  
  3485.  
  3486.  
  3487.  
  3488.  
  3489. System: ToDo -- To Do Management System
  3490. Author: Walter J. Kennamer
  3491. 03/02/88   18:56:06
  3492. Macro Summary
  3493.  
  3494. -------------------------------------------------------------------------------
  3495.  
  3496.  
  3497.    Macros Defined to SNAP!
  3498.    ----------------------------------------------------------------------------
  3499.  
  3500.    Variable       Expansion
  3501.    -------------- ---------------------------------
  3502.  
  3503.    S_TDFILE        TODO
  3504.    S_DDNDX         TODODD
  3505.    S0_ADFNAME      ADDRESS
  3506.  
  3507.    ----------------------------------------------------------------------------
  3508.    Macros Not Defined to SNAP!
  3509.    ----------------------------------------------------------------------------
  3510.  
  3511.    &BAK_NAME                               &B_FILE
  3512.    &COLR_STR                               &FIELD1
  3513.    &FIELD2                                 &FIELD_NAME
  3514.    &FILT_STR                               &FLDNAME
  3515.    &FNAME                                  &IN_DB
  3516.    &IN_SELECT                              &IN_VAL
  3517.    &M_WORKAREA                             &NTXNAME
  3518.    &NUM                                    &PROGNAME
  3519.    &REP_FNAME                              &REV_COLR
  3520.    &S0_COLR1                               &S0_COLR2
  3521.    &S0_DATA                                &S0_PRMNAME
  3522.    &S0_PROGRAM                             &S0_USERFILT
  3523.    &SRCHFLD                                &TEMPIN
  3524.  
  3525. -------------------------------------------------------------------------------
  3526. System: ToDo -- To Do Management System
  3527. Author: Walter J. Kennamer
  3528. 03/02/88   18:56:06
  3529. Array Summary
  3530.  
  3531. -------------------------------------------------------------------------------
  3532.  
  3533.  
  3534. An array declared with a variable (e.g., DECLARE foo[bar])
  3535. will be shown as having a size of [var].
  3536.  
  3537. FIELD_LENGTH[var]
  3538. FIELD_LIST[2]
  3539.  
  3540.  
  3541.                                        59
  3542.  
  3543.  
  3544.  
  3545.  
  3546.  
  3547. System: ToDo -- To Do Management System
  3548. Author: Walter J. Kennamer
  3549. 03/02/88   18:56:29
  3550. File List
  3551.  
  3552. -------------------------------------------------------------------------------
  3553.  
  3554. Programs and procedures:
  3555.   ADDRBOOK.PRG
  3556.   ADDRESS.PRG
  3557.   ADDRFILT()        (function  in ADDRESS.PRG)
  3558.   ADDRLIST.PRG
  3559.       .
  3560.       .
  3561.       .
  3562.   TIMEFORM()        (function  in TDCALDAY.PRG)
  3563.   TODO.PRG
  3564.   UNHIGHLIGHT       (procedure in SHOWCAL.PRG)
  3565.   VERPRT.PRG
  3566.  
  3567. Procedure files:
  3568.   SUBJECT.PRG
  3569.   TODOPRC.PRG
  3570.  
  3571. Databases:
  3572.      .
  3573.      .
  3574.      .
  3575.   HELP.DBF
  3576.   HELP.DBT
  3577.   SUBJECT.DBF
  3578.   TODO.DBF
  3579.  
  3580. Index files:
  3581.   &NTXNAME
  3582.   DATEDUE.NDX
  3583.   DATEDUE.NTX
  3584.   HELPKEY.NTX
  3585.   HISTDD.NTX
  3586.   PRIORITY.NDX
  3587.   SUBJECT.NTX
  3588.   TODODD.NTX
  3589.  
  3590. Report forms:
  3591.   SUBREPT.FRM
  3592.   TDDETIN.FRM
  3593.   TDSUMIN.FRM
  3594.  
  3595. Memory files:
  3596.   ACCESSES.MEM
  3597.   CLIP.MEM
  3598.   DEFAULT.MEM
  3599.  
  3600.                                        60
  3601.  
  3602.  
  3603.  
  3604.  
  3605.  
  3606.   LASTFILE.MEM
  3607.   PRINTER.MEM
  3608.  
  3609.  
  3610.  
  3611.  
  3612.  
  3613.  
  3614.  
  3615.  
  3616.  
  3617.  
  3618.  
  3619.  
  3620.  
  3621.  
  3622.  
  3623.  
  3624.  
  3625.  
  3626.  
  3627.  
  3628.  
  3629.  
  3630.  
  3631.  
  3632.  
  3633.  
  3634.  
  3635.  
  3636.  
  3637.  
  3638.  
  3639.  
  3640.  
  3641.  
  3642.  
  3643.  
  3644.  
  3645.  
  3646.  
  3647.  
  3648.  
  3649.  
  3650.  
  3651.  
  3652.  
  3653.  
  3654.  
  3655.  
  3656.  
  3657.  
  3658.  
  3659.                                        61
  3660.  
  3661.  
  3662.  
  3663.  
  3664.  
  3665.  
  3666. Index
  3667.  
  3668.  
  3669. Abbreviations  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  7
  3670. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
  3671. Action diagrams  . . . . . . . . . . . . . . . . 3, 5, 7, 15, 28-31, 36, 45
  3672.      User-defined symbols  . . . . . . . . . . . . . . . . . . . . . . . 29
  3673. Ashton-Tate  . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1, 40
  3674. Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  5
  3675. Backup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4, 27
  3676.      Importance of . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
  3677. Batch files  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
  3678.      Backing up databases and indexes  . . . . . . . . . . . . . . . . . 27
  3679.      Backing up programs . . . . . . . . . . . . . . . . . . . . . . . . 27
  3680.      Printing SNAP! documentation files  . . . . . . . . . . . . . . . . 27
  3681.      Updating source code files  . . . . . . . . . . . . . . . . . . . . 27
  3682. Batch operation  . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
  3683. Blank lines, suppression of  . . . . . . . . . . . . . . . . . . . . . . 18
  3684. Capitalization . . . . . . . . . . . . . .  3, 7, 13, 15-17, 25, 29, 36, 39
  3685. Clipper  .  1, 3, 4, 8, 13, 18, 21, 23, 25, 26, 28, 30, 34, 35, 38, 39, 42,
  3686.                                                                      57, 58
  3687.      Index files . . . . . . . . . . . . . .  8, 21, 32, 44, 48, 49, 52, 60
  3688. Colors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
  3689. Command line switches
  3690.      /BW -- black and white  . . . . . . . . . . . . . . . . . . . . . . 37
  3691.      /F -- configuration file name . . . . . . . . . . . . . . . . . . .  6
  3692.      /L -- LINK file name  . . . . . . . . . . . . . . . . . . . . . . . 26
  3693.      /M -- macro file  . . . . . . . . . . . . . . . . . . . . . . . . . 10
  3694.      /O -- omit macros . . . . . . . . . . . . . . . . . . . . . . . . . 10
  3695.      /S -- screen suppress . . . . . . . . . . . . . . . . . . . . . . . 19
  3696.      /T -- SNAP! tag (changing *#) . . . . . . . . . . . . . . . . . . . 13
  3697.      /X -- immediate mode (batch)  . . . . . . . . . . . . . . . . . . . 33
  3698. Comments
  3699.      Putting them back in, design difficulties surrounding . . . . . . . 17
  3700.      Suppression of  . . . . . . . . . . . . . . . . . . . . . . . . . . 18
  3701. Compuserve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
  3702. CONFIG.SNP . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  6, 33
  3703. Configuration file . . . . . . . . . . . . . . . . . . . . . . .  6, 30, 33
  3704.      CONFIG.SNP  . . . . . . . . . . . . . . . . . . . . . . . . . .  6, 33
  3705.      Saving configuration settings . . . . . . . . . . . . . . . . . . .  6
  3706. Continuation lines . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
  3707. Control structure  . . . . . . . . . . . . . . . . . . . 15, 28, 30, 35, 36
  3708. Copyright holder . . . . . . . . . . . . . . . . . . . . . . . . . . . .  5
  3709. Cross-reference  . . 3, 5, 7, 12, 13, 17-19, 23-25, 31, 35, 36, 38, 39, 45,
  3710.                                                                          57
  3711.      Excluding certain variables from  . . . . . . . . . . . . . . . . . 25
  3712.      Key words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
  3713.      Legend  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
  3714.      Limitation on type flagging . . . . . . . . . . . . . . . . . . . . 24
  3715.      Limiting to PUBLIC variables  . . . . . . . . . . . . . . . . . 23, 25
  3716.      Numeric constants . . . . . . . . . . . . . . . . . . . . . . . . . 23
  3717.  
  3718.                                     62
  3719.  
  3720.  
  3721.  
  3722.  
  3723.  
  3724.      Quoted strings excluded from  . . . . . . . . . . . . . . . . . . . 23
  3725.      What is included  . . . . . . . . . . . . . . . . . . . . . . . . . 23
  3726. Data dictionary  . . . . . . . . . . . . . . . . . . . . . 3, 19-21, 39, 50
  3727. Databases  . . 3, 6-8, 11, 14, 19-22, 24, 27, 35, 38, 39, 41, 44-46, 48-50,
  3728.                                                                   52-57, 60
  3729. dBASE II . . . . . . . . . . . . . . . . . . . . . . . . 1, 4, 8, 21-23, 36
  3730. dBASE III  . . . . . . . . . . . . . . . . . 1, 4, 6, 8, 18, 21, 25, 26, 39
  3731. DBxWORDS.SNP . . . . . . . . . . . . . . . . . . . . . . . . . . 15, 16, 25
  3732.      DB2WORDS.SNP  . . . . . . . . . . . . . . . . . . . . . . . . . . .  4
  3733.      DB3WORDS.SNP  . . . . . . . . . . . . . . . . . . . . . . .  4, 18, 25
  3734. Documentation files
  3735.      Printing  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
  3736. Elapsed time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  7
  3737. Errors . . . . . . . . . . . . . . . . . . . . . . . . .  7, 15, 29, 33, 45
  3738.      ERROR.DOC . . . . . . . . . . . . . . . . . . . . . . . . . . .  7, 45
  3739. Field names  . . . . . . . . . . . . . . . . . . . . . . . .  16, 23, 48-50
  3740. File headings  . . . . . . . . . . . . . . . . . . . . . . . . . . 3, 5, 14
  3741. File names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  5
  3742. Format files . . . . . . . . . . . . . . 3, 6-8, 11, 14, 19, 22, 27, 44, 45
  3743. Format screen  . . . . . . . . . . . . . . . . . . . . . . 5, 15-17, 29, 31
  3744. FoxBASE  . . . . . . . . . . . . . . . . . . . . . . .  1, 4, 8, 21, 25, 38
  3745.      Index files . . . . . . . . . . . . . . . . . . . . . . . .  8, 21, 32
  3746. Functions
  3747.      Capitalization of . . . . . . . . . . . . . . . . . . . . . . . 18, 25
  3748. Hardware, why you should buy more  . . . . . . . . . . . . . . . . . . . 35
  3749. Help . . . . . . . . . 4, 6, 12, 15, 21, 34, 40, 42, 44, 46, 48, 50, 52, 60
  3750. Immediate mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
  3751.      Immediate source code printing  . . . . . . . . . . . . . . . . . . 32
  3752. Indentation  . . . . . . . . . . . . . . . . . . . 3, 7, 12, 13, 15, 36, 39
  3753. Index file . . . . . . . . . .  3, 8, 14, 20-22, 27, 44, 48, 49, 52, 53, 60
  3754.      NDX extensions  . . . . . . . . . . 21, 22, 32, 39, 44, 49, 52, 53, 60
  3755. Input  . . . . . . . . . . . . . . . . . . . . . .  5, 6, 8, 14, 23, 30, 33
  3756. Key words  . . . . . . . . . . . . . . . . . 4, 7, 13, 16-18, 23-25, 28, 35
  3757.      Capitalization  . . . . . . . . . . .  3, 7, 13, 15-17, 25, 29, 36, 39
  3758.      Cross-referencing of  . . . . . . . . . . . . . . . . . . . 17, 23, 25
  3759.      DBxWORDS.SNP  . . . . . . . . . . . . . . . . . . .  4, 15, 16, 18, 25
  3760.      Expansion or compression  . . . . . . . . . . . . . . . . . . . . . 16
  3761.      Perverse use of, punishment for . . . . . . . . . . . . . . . . . .  7
  3762.      Special characters in file  . . . . . . . . . . . . . . . . . . 17, 24
  3763. Label forms  . . . . . . . . . . . . . . . . . . . .  8, 14, 19, 20, 39, 44
  3764. License  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1
  3765. Limitations  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
  3766. Link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  3, 26, 39
  3767.      /L switch -- file name for standard LINK statements . . . . . . . . 26
  3768.      LINK.SNP  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
  3769.      PLINK86 . . . . . . . . . . . . . . . . . . . . . . . . . .  3, 26, 39
  3770. MACRO.SNP  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
  3771. Macros . . . . . . . . . . . . 6, 10-12, 14, 20, 24, 27, 33, 39, 53, 57, 59
  3772.      /M switch -- macro file . . . . . . . . . . . . . . . . . . . . . . 10
  3773.      /O switch -- omit macros  . . . . . . . . . . . . . . . . . . . . . 10
  3774.      Ampersand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
  3775.      MACRO.SNP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
  3776.  
  3777.                                     63
  3778.  
  3779.  
  3780.  
  3781.  
  3782.  
  3783.      Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  6
  3784.      SNAPMACRO . . . . . . . . . . . . . . . . . . . . . . . . . . . 10, 15
  3785. Make
  3786.      Make files  . . . . . . . . . . . . . .  3-5, 8, 14-17, 26, 27, 35, 39
  3787.      MAKE.INI  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
  3788.      MAKEFILE  . . . . . . . . . . . . . . . . . . . . . . . . . 26, 27, 45
  3789. Memory files . . . . . . . . . . . . .  3, 6, 8, 11, 14, 19, 27, 42, 45, 60
  3790. Memory requirements  . . . . . . . . . . . . . . . . . . . . . . . . . . 35
  3791. Nantucket  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1
  3792. Other screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  8
  3793. Output . . . . . . . . . . . . . . . . . 3-6, 14, 16-18, 25, 27, 29, 39, 41
  3794. Paths  . . . . . . . . . . . . . . . . . . . . . . . . . 4-6, 8, 11, 28, 35
  3795. PLINK86  . . . . . . . . . . . . . . . . . . . . . . . . . . . .  3, 26, 39
  3796.      LINK.SNP  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
  3797. Print screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
  3798. PRIVATE variables  . . . . . . . . . . . . . . . . . . . . .  23-25, 57, 58
  3799. Procedure files  .  3, 7, 12, 13, 19, 23, 35-37, 42, 44, 46-49, 52, 53, 55,
  3800.                                                                          60
  3801.      Unique name requirement . . . . . . . . . . . . . . . . . . . . . . 36
  3802. PUBLIC variables . . . . . . . . . . . . . .  13, 23-25, 39, 40, 42, 57, 58
  3803. Questions  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
  3804. Quicksilver  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  8
  3805. Recursion (see Recursion)  . . . . . . . . . . . . . . . . . . . . . . . 20
  3806. Registration (optional)  . . . . . . . . . . . . . . . . . . . . . . . . 40
  3807. Report forms . . . . . . 3, 6-8, 14, 19, 20, 22, 27, 44, 45, 48, 49, 54, 60
  3808. Rettig, Tom  . . . . . . . . . . . . . . . . . . . . . .  1, 13, 16, 18, 25
  3809. SNAP directives
  3810.      Changing *# . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
  3811. SNAP FORMAT  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
  3812. SNAP XREF  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12, 13
  3813. SNAP.DOC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4
  3814. SNAP.EXE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4
  3815. SNAP.HLP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4
  3816. SNAP! directives
  3817.      FORMAT  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
  3818.      SNAPCODE  . . . . . . . . . . . . . . . . . . . . . . . . .  11-13, 21
  3819.      SNAPMACRO . . . . . . . . . . . . . . . . . . . . . . .  10-13, 20, 42
  3820.      XREF  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12, 13
  3821. SNAPCODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 12
  3822. SNAPMACRO  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10, 15
  3823. Source Code Printout . . . . . . . . . . . . . . . . . . . . . . . . . . 31
  3824.      Printing documentation files  . . . . . . . . . . . . . . . . . . . 32
  3825.      Printing without documenting  . . . . . . . . . . . . . . . . . . . 32
  3826.      What files are not printed  . . . . . . . . . . . . . . . . . . . . 32
  3827. Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  7
  3828. Support, how to get  . . . . . . . . . . . . . . . . . . . . . . . . . . 40
  3829. System screen  . . . . . . . . . . . . . . . . . . . . . . . . . . 4, 7, 11
  3830. Tabs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  7, 15, 31
  3831.      Spaces instead of . . . . . . . . . . . . . . . . . . . . . . . . . 15
  3832. TLINK  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  3, 26, 39
  3833. TopFile  . . . . . . . . . . . . . . . . . . . . . . .  4, 5, 8, 11, 27, 34
  3834.      Explanation . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4
  3835.  
  3836.                                     64
  3837.  
  3838.  
  3839.  
  3840.  
  3841.  
  3842. Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
  3843. Tree screen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
  3844. Turbo Linker . . . . . . . . . . . . . . . . . . . . . . . . . .  3, 26, 39
  3845. Turbo Pascal . . . . . . . . . . . . . . . . . . . . . . . . . . . .  3, 38
  3846. Updates, how to get  . . . . . . . . . . . . . . . . . . . . . . . . . . 40
  3847. Version numbers  . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
  3848.  
  3849.  
  3850.  
  3851.  
  3852.  
  3853.  
  3854.  
  3855.  
  3856.  
  3857.  
  3858.  
  3859.  
  3860.  
  3861.  
  3862.  
  3863.  
  3864.  
  3865.  
  3866.  
  3867.  
  3868.  
  3869.  
  3870.  
  3871.  
  3872.  
  3873.  
  3874.  
  3875.  
  3876.  
  3877.  
  3878.  
  3879.  
  3880.  
  3881.  
  3882.  
  3883.  
  3884.  
  3885.  
  3886.  
  3887.  
  3888.  
  3889.  
  3890.  
  3891.  
  3892.  
  3893.  
  3894.  
  3895.                                     65
  3896.