home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / xbase / tools / delite / dlite.doc < prev    next >
Text File  |  1991-06-01  |  110KB  |  2,831 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.                              dLITE 2.0 User's Guide
  16.  
  17.                       Copyright (c) Ward Mundy, 1988-1991.
  18.  
  19.                               All Rights Reserved.
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.                                Ward Mundy Software
  50.                                  4160 Club Drive
  51.                               Atlanta, GA 30319 USA
  52.  
  53.           Chapter 1           Preliminaries
  54.  
  55.  
  56.  
  57.           1.1  What Is dLITE Anyway?
  58.  
  59.  
  60.                dLITE is a memory resident ("pop-up") desktop utility
  61.           which gives a user access to up to 10 dBASE III-compatible
  62.           applications from within virtually any other text-based
  63.           program on a DOS-based personal computer.  All the user does
  64.           is press one of 10 "hot-keys" to pop-up a dLITE application
  65.           at any time anywhere!
  66.  
  67.                dLITE provides the most common data base functions (as
  68.           well as some fantastic new ones) from a pop-up, light bar
  69.           menu which displays on the top few lines of the screen. 
  70.           These include:
  71.  
  72.                     Adding, updating or displaying records in
  73.                     any dBASE III-compatible data base using
  74.                     up to 7 dBASE III-compatible indexes.
  75.  
  76.                     Creating a custom dBASE III-compatible
  77.                     data entry screen using a dBASE-standard
  78.                     .FMT file.
  79.  
  80.                     Creating a dLITE PASTE-IT template to
  81.                     extract any information from a dBASE III-
  82.                     compatible data base. Then you can
  83.                     instantly "paste it" into your favorite
  84.                     foreground word processing or
  85.                     spreadsheet application in seconds. Say
  86.                     goodbye to file conversion routines!
  87.  
  88.                     Creating customized lists, labels, or
  89.                     reports using selection and sort criteria
  90.                     you specify.  These, too, can be "PASTEd"
  91.                     into your favorite word processor or
  92.                     spreadsheet, if desired.  All the coding
  93.                     for output may rely upon standard dBASE
  94.                     III commands and functions.  So you can
  95.                     finally learn dBASE programming.
  96.  
  97.                     Up to 10 different dBASE-compatible
  98.                     applications can be popped up by touching
  99.                     any of 10 different dLITE "hot-keys."
  100.  
  101.                     A fantastic mailing list manager
  102.                     application worth hundreds in the
  103.                     commercial market is included!  In
  104.                     addition to the standard mailing list
  105.                     functions, you also can "PASTE" a
  106.                     complete name, address, and salutation
  107.                     from your data base into a letter in your
  108.                     word processor in seconds!
  109.  
  110.                                           1
  111.           1.2  Special Thanks!
  112.  
  113.  
  114.                Much of dLITE's magic is the result of a phenomenal
  115.           program called FrontRunner, developed by Jeff Cooper and Gary
  116.           Wisniewski of Apex Software Corporation.  The program now is
  117.           marketed by Ashton-Tate.  dLITE includes a complimentary
  118.           copy of FrontRunner's run-time module.  It provides the data
  119.           base engine for dLITE much like a BASIC interpreter provides
  120.           the engine for many BASIC programs.  So, our special thanks
  121.           goes to Apex Software Corp. for allowing us to distribute
  122.           their run-time module as part of the dLITE package.  If you
  123.           like dLITE, tell your friends about it and put in a good word
  124.           for FrontRunner while you're at it!
  125.  
  126.  
  127.           1.3  About This Manual
  128.  
  129.                This manual is organized into sections describing both
  130.           the functionality of the program from an end user's
  131.           perspective and a developer's perspective.  Before you
  132.           develop your own dLITE applications, we recommend that you
  133.           review the end-user sections of the User's Guide and
  134.           familiarize yourself with the basic operation of the
  135.           software.  The Mailing List Manager application will acquaint
  136.           you with all the basic building blocks for designing your own
  137.           custom applications.  Make sure you read the README.DOC file
  138.           on the distribution diskette for late-breaking enhancements.
  139.  
  140.  
  141.           1.4  Legal Stuff
  142.  
  143.                The world is not a simple place any more, so we have to
  144.           tell you a few things you need to know before you start using
  145.           dLITE.  First, a few disclaimers are in order.  We provide
  146.           the same, fine software warranty that all the big-boys do:
  147.           NONE!  In short, you use dLITE at your own risk.  We make no
  148.           representations regarding its fitness for any particular
  149.           purpose or its merchantability.  Nor do we provide any
  150.           warranties, express or implied, that the software will work. 
  151.           That is solely for you to decide!  The good news is the price
  152.           is definitely right!  You do not have to shell out $600 only
  153.           to find that the software doesn't meet your needs.  
  154.  
  155.                Everything mentioned above with respect to Ward Mundy
  156.           Software applies in spades to Apex Software Corporation. 
  157.           They don't make a nickel from the sale of dLITE.  Hence,
  158.           don't blame them if dLITE smokes!  It's probably the result
  159.           of our lousy programming rather than theirs.
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.                                           2
  169.           1.5  A Word About ShareWare
  170.  
  171.                This version of dLITE is marketed as ShareWare. This is
  172.           a unique marketing concept which permits you to "try before
  173.           you buy."  It doesn't mean FreeWare!  All versions of dLITE
  174.           are copyrighted works for which we retain all rights.  The
  175.           shareware version of dLITE is licensed for use up to 90 days
  176.           to give you ample time to evaluate its usefulness.  The
  177.           software is not crippled, nor is the documentation.
  178.  
  179.                This allows anyone to determine whether dLITE meets
  180.           their requirements at a very nominal cost.  If it does, then
  181.           registration to obtain a software license is required.  A
  182.           complimentary copy of the latest Developer's Version and a
  183.           soft-bound User's Guide are provided without charge (other
  184.           than the shipping and handling costs) to everyone who
  185.           registers their ShareWare copy. 
  186.  
  187.                You may pass this ShareWare version of dLITE along to
  188.           others so long as it is distributed in exactly the form
  189.           received.  The ShareWare documentation describes the required
  190.           files.  If you are a shareware distributor, you may
  191.           distribute dLITE and charge a modest copying fee not to
  192.           exceed $6 U.S. provided you first obtain written permission
  193.           from us to do so.
  194.  
  195.  
  196.           1.6  Credits
  197.  
  198.                Names of computer hardware, software, and computer
  199.           companies are used solely for the purpose of identification. 
  200.           With the exception of dLITE and WAMPUM, all remaining
  201.           references to products and companies are trademarked by their
  202.           respective companies.  dLITE and WAMPUM are trademarks of
  203.           Ward Mundy.
  204.  
  205.                IBM, IBM-PC, and PC/AT are trademarks of IBM Corp.
  206.                dBASE, dBASE III, dBASE III Plus, RunTime and
  207.                Ashton-Tate are trademarks of Ashton-Tate.
  208.                FrontRunner is a trademark of Apex Software Corp.
  209.                SideKick is a trademark of Borland International.
  210.                MS-DOS is a trademark of Microsoft Corporation.
  211.                PKXARC is a trademark of PKWare, Inc.
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.                                           3
  227.           Chapter 2           Getting Started
  228.  
  229.  
  230.           2.1  System Requirements
  231.  
  232.                dLITE is a memory resident program which runs on an
  233.           IBM-compatible PC, PC/AT, or DOS-based 386 or 486 machine. 
  234.           It requires DOS 2.1 or higher and approximately 160K of
  235.           memory; however, under 100K of memory is required if you
  236.           have at least 64K of expanded memory free which conforms to
  237.           the Lotus/Intel/Microsoft Expanded Memory Specification
  238.           (versions 3 and 4).  To "pop-up" dLITE from within your
  239.           favorite word processor typically requires a 512K or 640K
  240.           machine with few other memory resident programs.  If you
  241.           have adequate memory, dLITE can coexist with all your
  242.           favorite TSR's.
  243.  
  244.  
  245.           2.2  Installing the Software
  246.  
  247.                Insert the distribution diskette in Drive A of your
  248.           computer and type A:INSTALL for instructions on installation
  249.           of the software.  
  250.  
  251.  
  252.           2.3  Loading the Software into Memory
  253.  
  254.                dLITE can be loaded into memory by typing the following
  255.           commands at the DOS prompt:
  256.  
  257.                     CD \DLITE  <ENTER>
  258.                     DLITE  <ENTER>
  259.  
  260.                If you have at least 64K of EMS memory, type DLITE /X
  261.           to load the program and you will save about 64K of conven-
  262.           tional memory.  This means dLITE will consume only 90-95K of
  263.           conventional memory.
  264.  
  265.                If you have a color monitor, you may increase screen
  266.           performance by loading dLITE with the command: DLITE /F. If
  267.           snow appears on your screen, this option should be avoided.  
  268.  
  269.                If you will be using dLITE with a graphics mode program,
  270.           then install it with the command DLITE /G.
  271.  
  272.                Multiple switches can be used in loading dLITE.  For
  273.           example, DLITE /X /F /G is acceptable.
  274.  
  275.                The FrontRunner run-time module then will be loaded, and
  276.           dLITE will display its opening screen.  Read the screen to
  277.           ascertain which version of dLITE you have and what the terms
  278.           of your license are.  Then press any key to make dLITE
  279.           memory resident.
  280.  
  281.  
  282.  
  283.  
  284.                                           4
  285.                You now can "pop-up" dLITE at any time by pressing ALT-1
  286.           through ALT-0 regardless of your default drive or directory. 
  287.           When dLITE's menu appears, you can make it disappear at any
  288.           time by pressing the <ESC>ape key.  Please note that dLITE
  289.           does not work well with graphics mode programs.  You should
  290.           not pop-up dLITE while using a program which is in graphics
  291.           mode.  While dLITE's PASTE function will work, its menus will
  292.           not be readable.
  293.  
  294.                Because dLITE is a memory resident program, a few words
  295.           of caution are in order.  With the exception of SideKick,
  296.           dLITE should always be the last memory resident program
  297.           loaded.  This assures two things: (1) that dLITE will work
  298.           and (2) that you can remove it from memory without rebooting
  299.           your computer.
  300.  
  301.                Should you wish to change the "hot-key" settings used to
  302.           pop-up dLITE, type out the DLITE.CFG file by typing the
  303.           following command: TYPE \DLITE\DLITE.CFG.  Instructions for
  304.           changing the hot-key assignments are contained in this file.
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.                                           5
  343.           Chapter 3           End-User Functions
  344.  
  345.  
  346.           3.1  Overview of dLITE's Mailing List Manager
  347.  
  348.                All versions of dLITE are bundled with a complete
  349.           Mailing List Management application which is ready to use. 
  350.           It provides all of the major functions of the $200 commercial
  351.           mailing list managers with extra bells and whistles: pop-up
  352.           functionality and the ability to "paste" information from
  353.           your mailing list directly into your word processing or
  354.           spreadsheet applications with just a couple of keystrokes.
  355.  
  356.                This chapter walks you through every function on dLITE's
  357.           pop-up menu.  While the Mailing List Manager is certainly a
  358.           useful product, it is only the beginning for dLITE.  dLITE
  359.           has been designed to allow anyone who can read the capability
  360.           to add 9 more dBASE III-compatible, custom applications to
  361.           meet your unique requirements.  Any of these 10 applications
  362.           then can be popped up with a single keystroke.  YOU DO NOT
  363.           HAVE TO OWN dBASE III TO BUILD ANY dLITE APPLICATION!
  364.  
  365.  
  366.  
  367.           3.2  Navigation Keys for dLITE's Main Menu
  368.  
  369.                Once you have pressed one of dLITE's "hot-keys" and the
  370.           light bar menu appears, you simply highlight the option
  371.           desired by using the <LEFT> or <RIGHT> arrow keys on the
  372.           numeric keypad.  Then press <ENTER> to execute your choice. 
  373.           Pressing <ESC>ape allows you to exit from dLITE and return to
  374.           your foreground application.  Typing the first letter of the
  375.           desired choice also works.
  376.  
  377.                The <HOME> key moves the light bar to the first option
  378.           on the menu.  The <END> key moves the light bar to the last
  379.           option on the menu.  
  380.  
  381.  
  382.           3.3  EDITing records
  383.  
  384.                When dLITE is first popped up, the default choice is
  385.           EDIT if an application has been configured with a default
  386.           data base file.  To execute this choice, make sure EDIT is
  387.           highlighted.  Then press <ENTER>.
  388.  
  389.                Once the EDIT option is selected, you will be prompted
  390.           for the record to retrieve based upon the lead index then in
  391.           effect.
  392.  
  393.                The Mailing List Manager application is distributed with
  394.           one record in the data base.  The default LEAD INDEX is
  395.           FULLNAME.  To recall the sample entry in the file, type
  396.           Mundy when prompted for the FULLNAME and press <ENTER>.
  397.           To move to top of file, press <ENTER> with no entry.
  398.  
  399.  
  400.                                           6
  401.                Even with large data bases, a typical retrieval time
  402.           for indexed data bases is approximately one second.  When the
  403.           Mundy record is displayed, you can move between the various
  404.           fields by pressing the <Up> and <Down> cursor keys.  <ENTER>
  405.           also will move you to the next field.  
  406.  
  407.                SAVING an entry occurs when ANY of the following occur:
  408.  
  409.                     (1)  <ESC>ape key is pressed;
  410.  
  411.                     (2)  <PgDn> or <PgUp> key is pressed;
  412.  
  413.                     (3)  <Up> key is pressed in upper most
  414.                     field (top left);
  415.  
  416.                     (4)  <Down> key or <ENTER> is pressed in
  417.                     the lower most field (bottom right);
  418.  
  419.                     (5)  Lower most field (bottom right) is
  420.                     filled with newly typed characters.
  421.  
  422.                All of the EDITing functionality of dLITE is virtually
  423.           identical to dBASE III Plus with the exception that the <ESC>
  424.           key will SAVE an entry with any changes while dBASE III Plus
  425.           would not.  This is a limitation of the current FrontRunner
  426.           run-time package which cannot be avoided.  If you need more
  427.           error checking in the data entry process, use WAMPUM-D from
  428.           Ward Mundy Software.  Its data bases and indexes are fully
  429.           compatible with dLITE.
  430.  
  431.                dLITE also supports the CTRL-U delete toggling function
  432.           found in dBASE III.  While a record is displayed in edit
  433.           mode, you may mark the record *DELETED* in the data base by
  434.           pressing CTRL-U. You may recall a deleted record (unDELETE)
  435.           by pressing CTRL-U again.
  436.  
  437.                In case you are curious: YES, you can tailor the data
  438.           entry screens to look exactly as you desire.  More on that
  439.           later!
  440.  
  441.  
  442.           3.4  ADDing new records
  443.  
  444.                Highlighting the ADDREC option and pressing <ENTER>
  445.           causes dLITE to prompt whether to add a new record.  Type Y
  446.           to add a new blank record to the data base, and a data entry
  447.           form will appear for you to complete.
  448.  
  449.                Type in your entries using the function keys described
  450.           in the EDITing section above to maneuver.  When you have
  451.           completed all the entries (assuming you have not filled in
  452.           the last field completely), then press <PgDn> to SAVE your
  453.           data.
  454.  
  455.  
  456.  
  457.  
  458.                                           7
  459.                If you have entered <ADDREC> mode by mistake, you can
  460.           press <ESC> to exit.  The blank record is NOT deleted from
  461.           the data base; however, it is marked DELETED whether data
  462.           has been entered in the various fields or not.  The
  463.           significance of this is outlined below in the DELETing
  464.           records section of the User's Guide.
  465.  
  466.  
  467.           3.5  PASTE records
  468.  
  469.                Perhaps dLITE's most powerful and unique function is its
  470.           PASTE option.  This permits you to pop-up dLITE from within
  471.           another application, such as a letter being written in your
  472.           word processor, select a record from the data base, and then
  473.           "paste" a name, address, and salutation into the letter.
  474.  
  475.                If you would like to follow along, start up your
  476.           favorite word processor or editor and open a new document (if
  477.           required).  Now press ALT-1 to pop-up dLITE's Mailing List
  478.           Manager application.  Highlight the PASTE option and press
  479.           <ENTER>.  You will be prompted for the FULLNAME to find. 
  480.           Type Mundy and press <ENTER>.  
  481.  
  482.                The data entry screen will appear.  On the top line, you
  483.           will be asked whether to PASTE this record.  Notice the
  484.           default is N for No.  You must type Y to paste the
  485.           information into your document.  At this juncture, you can
  486.           move through the records in the file by pressing <PgDn> or
  487.           <PgUp>.  The records will be ordered alphabetically according
  488.           to the lead index.  For now, type Y to PASTE the Mundy entry
  489.           into your word processor or editor.
  490.  
  491.                At this point, you should see the following:
  492.  
  493.                     Ward Mundy
  494.                     ATTN: dLITE Support           
  495.                     4160 Club Drive               
  496.                     Atlanta, GA 30319 USA
  497.  
  498.                     Dear dLITEful one:
  499.  
  500.                As you add your own data into the Mailing List Manager
  501.           application, the true simplicity and utility of dLITE should
  502.           become apparent.
  503.  
  504.                In case you are curious: YES, you can tailor the PASTE
  505.           command to paste anything you want from your data base in
  506.           any format you desire.  More on that later!
  507.  
  508.                If you need to just write quick letters, then the
  509.           existing PASTE file specification should be perfect to meet
  510.           your needs.
  511.  
  512.  
  513.  
  514.  
  515.  
  516.                                           8
  517.           3.6  DELETE records
  518.  
  519.                For those new to the world of dBASE, you need to know
  520.           that DELETING a record really doesn't delete it.  It simply
  521.           marks it as *DELETED*.  The beauty of this approach is that
  522.           you can later change your mind and *UNDELETE* a deleted
  523.           record.
  524.  
  525.                Deleting a record does have effects.  First, deleted
  526.           records cannot be output with dLITE's OUTPUT menu option. 
  527.           Second, deleted records are permanently erased when a dBASE-
  528.           compatible data base is packed (rebuilt).  Prior to packing a
  529.           file, however, deleted records can be restored using the
  530.           *UNDEL* option on dLITE's menu.
  531.  
  532.                To DELETE a record, highlight this option and press
  533.           <ENTER>. Then enter the FULLNAME of Mundy when prompted.  The
  534.           data entry screen then will appear with the prompt DELETE
  535.           this record? on the top line.  As with pasting records, the
  536.           default answer is N for NO.  If you really do want to delete
  537.           the record, type Y.  Prior to typing Y, you can <PgDn> or
  538.           <PgUp> to move through the data base.  If the beginning or
  539.           end of the file is reached, the DELETE function is terminated
  540.           and dLITE's Main Menu reappears.
  541.  
  542.  
  543.           3.7  UNDELETE records
  544.  
  545.                dLITE's UNDELETE function permits you to RECALL records
  546.           marked deleted as active records in the data base so long as
  547.           they are undeleted BEFORE the file is packed.  Once the file
  548.           has been packed, deleted records are lost forever!
  549.  
  550.                To UnDELETE a record, highlight this option and press
  551.           <ENTER>.  Then enter the FULLNAME of Mundy when prompted. 
  552.           The data entry screen then will appear with the prompt
  553.           UnDELETE this record? on the top line.  As with deleting
  554.           records, the default answer is N for NO.  If you really do
  555.           want to undelete the record, type Y.  Prior to typing Y, you
  556.           can <PgDn> or <PgUp> to move through the data base.  If the
  557.           beginning or end of the file is reached, the UnDELETE
  558.           function is terminated and dLITE's Main Menu reappears.
  559.  
  560.                Once a record has been recalled with the UNDELETE
  561.           function, it is an active record in the data base once again. 
  562.           This means it can be output with dLITE's OUTPUT function.
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.                                           9
  575.           3.8  SELECT records
  576.  
  577.                The purpose of entering data into a data base typically
  578.           is to be able to output reports which SELECT (or narrow down)
  579.           the data to only a specific group of records based upon user-
  580.           defined criteria.  dLITE provides this functionality through
  581.           the SELECT option.  
  582.  
  583.                When SELECT is chosen, a listing of the first 98 fields
  584.           in the data base will display.  Then the user is prompted to
  585.           Enter dBASE Selection Criteria.  In dBASE lingo, this is a
  586.           filter.  This filter can be 78 characters long.  If a longer
  587.           filter is desired, it can be stored in the OUTPUT file
  588.           specification discussed below.
  589.  
  590.                For those that have forgotten college Algebra and
  591.           Boolean logic, here is a brief refresher course.  If you need
  592.           more, visit your local library or buy a dBASE III Plus
  593.           handbook.
  594.  
  595.                Typically a dBASE filter consists of three parts:
  596.  
  597.                     (1)  Field name
  598.  
  599.                     (2)  Relational operator
  600.  
  601.                     (3)  Value
  602.  
  603.                The FIELD NAME is the exact name of the field from your
  604.           data base, i.e. it is one of the field names displayed at
  605.           the top of the screen.
  606.  
  607.                The RELATIONAL OPERATOR is one of the following:
  608.  
  609.                     (1)  =         (EQUALS)
  610.  
  611.                     (2)  <>        (NOT EQUALS)
  612.  
  613.                     (3)  >         (GREATER THAN)
  614.  
  615.                     (4)  <         (LESS THAN)
  616.  
  617.                     (5)  >=        (AT LEAST)
  618.  
  619.                     (6)  <=        (AT MOST)
  620.  
  621.                     (7)  $         (CONTAINED IN)
  622.  
  623.                     (8)  .NOT. $   (NOT CONTAINED IN)
  624.  
  625.                The VALUE is just that, the value to find for the field
  626.           specified by field name.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.                                          10
  633.                Here are some examples to get you started.
  634.  
  635.  
  636.                English:   FIND ALL THE RECORDS IN ZIP CODE 30319.
  637.  
  638.                Expression:    ZIP="30319"
  639.  
  640.                Comments:  Notice that the zip code is in quotes
  641.                since ZIP is a character field.
  642.  
  643.  
  644.                English:   FIND ALL THE ENTRIES WITH AUGUST 1988
  645.                           CONTACT DATE
  646.  
  647.                Expression:    CONTACTDT >= CTOD("08/01/88") .AND. 
  648.                               CONTACTDT <= CTOD("08/31/88")
  649.  
  650.                Comments:  More than one expression can be joined
  651.                with .AND. This means BOTH expressions must be
  652.                TRUE for a record to be output.  Notice that
  653.                spacing doesn't matter.
  654.  
  655.  
  656.  
  657.                English:   FIND ALL THE CODE1'S CONTAINING THE WORD
  658.                           "CLONE"
  659.  
  660.                Expression:    "CLONE"$UPPER(CODE1)
  661.  
  662.                Comments:  Since clone could be in upper, lower, or
  663.                mixed case, we want to find them all.  By using the
  664.                dBASE function UPPER(), we can convert the CODE1
  665.                entries temporarily to upper case and then search
  666.                for entries containing the word "CLONE."  Since
  667.                CODE1 is a character field, the value must be
  668.                enclosed in quotes.
  669.  
  670.  
  671.                English:   FIND ALL THE ENTRIES WITH NO CONTACT DATE
  672.  
  673.                Expression:    DOW(CONTACTDT)=0
  674.  
  675.                Comments:  The easiest way to check for a blank
  676.                date field is to search for those where the day of
  677.                the week is 0.  In dBASE, a 0 day of the week is a
  678.                blank date.  The DOW() function returns a number
  679.                corresponding to the day of the week of a date
  680.                field.
  681.  
  682.  
  683.  
  684.  
  685.  
  686.  
  687.  
  688.  
  689.  
  690.                                          11
  691.                English:   FIND ALL ENTRIES WHERE CATEGORY
  692.                           CONTAINS THE WORD dBASE OR THE IDCODE IS
  693.                           dLITE
  694.  
  695.                Expression:    "dBASE"$CATEGORY .OR."dLITE"$IDCODE
  696.  
  697.                Comments:  Here we are looking for terms which
  698.                could have appeared anywhere within the two fields. 
  699.                Thus, the CONTAINS operator is better than EQUALS. 
  700.                Notice that when two expressions are joined with
  701.                .OR., a record will qualify for output when EITHER
  702.                expression is True.
  703.  
  704.  
  705.           3.9  OUTPUT records
  706.  
  707.                When the OUTPUT records option is chosen, the SELECT
  708.           record option will first appear if no selection criteria are
  709.           active.  You can tell whether selection criteria are active
  710.           by looking in the lower right corner of the screen after the
  711.           name of the current data file.  If selection criteria are in
  712.           effect, the word *SEL* will appear after the file name. 
  713.  
  714.                If you want to select all records, leave the selection
  715.           criteria field blank by pressing the <ESC> key.
  716.  
  717.                Once selection criteria have been entered or if all
  718.           records output has been chosen, then dLITE will process the
  719.           request and produce a listing of the active records which
  720.           meet the defined selection criteria.  If no active records
  721.           exist in the data base, an error will be displayed indicating
  722.           that the file is empty.  If no active records qualify for
  723.           output, then a blank report will be produced.
  724.  
  725.  
  726.                You can tailor the OUTPUT command to output virtually
  727.           any information you want from your data base in any format
  728.           you desire.  This may be a simple list, a more complex
  729.           report, or a paste specification to paste multiple records or
  730.           even mailing labels into a word processing document.  You
  731.           also may select printed output or write the output to an
  732.           ASCII file, if desired.
  733.  
  734.  
  735.  
  736.  
  737.  
  738.  
  739.  
  740.  
  741.  
  742.  
  743.  
  744.  
  745.  
  746.  
  747.  
  748.                                          12
  749.           3.10 UTILITY Option
  750.  
  751.                In this version of dLITE, the UTILITY option provides
  752.           the following functions:
  753.  
  754.                (1)  Changing the Lead Index
  755.  
  756.                (2)  Reindexing 
  757.  
  758.                (3)  Creating dBASE III-compatible index files
  759.  
  760.                (4)  Listing the file structure of any dBASE III data
  761.                     base
  762.  
  763.                (5)  Simulated dot prompt to enter many other dBASE
  764.                     commands
  765.  
  766.  
  767.                In addition to the functions listed above, a developer
  768.           also may create new dBASE III-compatible data bases by
  769.           specifying an asterisk (*) as the file name choice in the
  770.           FILE option of dLITE's Main Menu.  File creation is explained
  771.           in more detail in that section of the guide.
  772.  
  773.  
  774.           3.10.1    Changing Lead Index
  775.  
  776.                Changing the LEAD INDEX determines the key by which
  777.           records are retrieved in EDIT, PASTE, DELETE, and UNDELETE
  778.           modes.  It also defines the sort order for OUTPUT unless a
  779.           different index is specified in the OUTPUT file
  780.           specification.
  781.  
  782.                For example, if the LEAD INDEX is FULLNAME, then record
  783.           output is ordered alphabetically by full name (last name
  784.           first).  It also means that all or part of an existing full
  785.           name must be entered to retrieve a record in EDIT, PASTE,
  786.           DELETE, and UNDELETE modes.
  787.  
  788.                If the LEAD INDEX is ZIP, then record output is ordered
  789.           by zip code.  Retrieval of data for EDIT, PASTE, DELETE, and
  790.           UNDELETE requires that you enter all or part of the zip code
  791.           for an existing record in the data base.
  792.  
  793.  
  794.                Selecting NATURAL ORDER means that record output will
  795.           be in the same order that the records were entered into the
  796.           file.  To retrieve a record requires entry of a record number
  797.           which is automatically assigned when each new record is added
  798.           to the data base.
  799.  
  800.  
  801.  
  802.  
  803.  
  804.  
  805.  
  806.                                          13
  807.                For those unfamiliar with dBASE indexes, a word of
  808.           explanation is in order.  dBASE indexes take the place of the
  809.           sorting step which typically is used on larger computer
  810.           systems to order a file in a certain way.  The advantages of
  811.           indexes are many.  First, they are automatically updated
  812.           whenever a new record is added to a file or an existing
  813.           record is changed.  Thus, the end-user need do nothing to
  814.           assure that the data base is properly sorted.  Second,
  815.           because indexes are always current, any output can be
  816.           produced in the order of any existing index without the need
  817.           to sort the data base.  This saves a tremendous amount of
  818.           time with large data bases.  Third, indexes permit retrieval
  819.           of information in many different ways almost instantaneously.
  820.           Simply change the lead index, and enter all or part of an
  821.           existing key value.  dLITE supports up to 7 simultaneous
  822.           indexes which can be defined to meet the needs of virtually
  823.           any application.
  824.  
  825.  
  826.           3.10.2    Reindexing
  827.  
  828.                REINDEXing is a function which probably will not be
  829.           necessary unless you experience a power failure while
  830.           actively changing records in a data base.  To protect against
  831.           file damage, dLITE automatically closes ALL data bases
  832.           whenever the user returns to dLITE's Main Menu.  HINT: Return
  833.           to the Main Menu whenever you finish updating a file.  Don't
  834.           leave the computer sitting on a data entry screen!  A good
  835.           clue that reindexing is necessary is not being able to
  836.           retrieve a record which you know is in the file.
  837.  
  838.                Because dLITE is a memory resident program which is
  839.           intentionally stingy in its use of memory, it is possible
  840.           with very large data bases with complex indexes that you may
  841.           exhaust your computer's memory allocated to dLITE.  In such
  842.           cases you will get an error. These indexes can easily be
  843.           rebuilt with WAMPUM-D, an inexpensive, menu driven data base
  844.           management system which is dBASE III and dLITE-compatible. 
  845.           WAMPUM also is distributed as shareware.
  846.  
  847.  
  848.           3.10.3    Creating New Indexes
  849.  
  850.                If you want to create a new dBASE III-compatible index,
  851.           simply mark the CREATE NEW INDEX option True by inserting a Y
  852.           in the field and <PgDn>.  You will be prompted to enter a
  853.           name for the index file and an index expression.  See the
  854.           Devevloper's Section of this guide for additional information
  855.           on creating dLITE indexes.
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.                                          14
  865.           3.10.4    Listing File Structure
  866.  
  867.                To list the file structure of the current data base in
  868.           use, mark the LIST FILE STRUCTURE option True by inserting a
  869.           Y in the field and <PgDn>.  A listing of the current file
  870.           structure will be displayed one screen at a time.  These
  871.           screens can be printed using the Shift-PrtScrn keys on your
  872.           computer.
  873.  
  874.  
  875.           3.10.5    Simulated Dot Prompt
  876.  
  877.                This version of dLITE includes an option allowing the
  878.           developer to enter "dot prompt" mode.  This mode simulates
  879.           the dBASE dot prompt and permits entry of many standard dBASE
  880.           commands at a simulated dot prompt.  The commands supported
  881.           are listed in the appendix to this guide.  Simply mark the
  882.           dot prompt option Y to enter dot prompt mode.  To return to
  883.           the menu, type QUIT at the dot prompt and press <ENTER>.
  884.  
  885.           *** See the README.DOC file for late-breaking revisions of
  886.           the method for activating this option.  This is for your own
  887.           protection.
  888.  
  889.  
  890.           3.11 FILE Select Option
  891.  
  892.                dLITE allows you to work with virtually any dBASE III
  893.           data base with up to seven dBASE III-compatible indexes. 
  894.           With the exception of MEMO fields, all dBASE III field types
  895.           are supported. Before using additional data bases, you first
  896.           must create at least a data entry screen to display the
  897.           contents of the file.  The MenuMaker screen generator program
  898.           from Ward Mundy Software allows you to quickly build dBASE
  899.           III-compatible format files for use with dLITE.  
  900.  
  901.                With MenuMaker, you simply draw the screen the way it
  902.           should look, and MenuMaker writes the code for your dLITE or
  903.           WAMPUM application.  Or you may create your own format files
  904.           manually using standard dBASE @ SAY and @ GET commands.  
  905.                Consult any dBASE III reference book for detailed
  906.           instructions.  A sample format file supporting the Mailing
  907.           List Manager is included to give you something to clone. 
  908.           Simply print the file MAILLIST.FMT.  It was generated using
  909.           MenuMaker.
  910.  
  911.                In addition to selecting files, the FILE select option
  912.           allows a developer to create new dBASE III-compatible data
  913.           bases. This is explained in the Developer's Section of this
  914.           guide.
  915.  
  916.  
  917.  
  918.  
  919.  
  920.  
  921.  
  922.                                          15
  923.           3.12 CLEAR dLITE
  924.  
  925.                The CLEAR option allows you to remove dLITE from
  926.           memory.  Two prerequisites are necessary before this will
  927.           work reliably:
  928.  
  929.                (1)  dLITE must have been the last memory resident
  930.                program loaded into memory
  931.  
  932.                (2)  You must be at the DOS prompt when you select
  933.                the CLEAR option
  934.  
  935.                If dLITE cannot be cleared from memory when you select
  936.           this option, an error will report this to you with an
  937.           explanation why.  DR-DOS 5.0 does not support this option.
  938.  
  939.                Generally, you will only need to clear dLITE from
  940.           resident memory for one of the following reasons:
  941.  
  942.                (1)  You need to run an extremely large program
  943.                such as WAMPUM which needs the memory reserved by
  944.                dLITE; or
  945.  
  946.                (2)  You need to run another dBASE program or
  947.                clone which will be using the same data base used
  948.                by dLITE.
  949.  
  950.  
  951.           3.13 QUITting dLITE
  952.  
  953.                QUITting dLITE means that the program remains memory
  954.           resident but disappears from view until you need it again. 
  955.           This can be accomplished by highlighting QUIT and pressing
  956.           <ENTER>.  Or you may simply type Q when dLITE's Main Menu is
  957.           displayed.  Or you may press the <ESC>ape key.
  958.  
  959.                To pop-up the Mailing List Manager again, press the hot-
  960.           key assigned to this application, ALT-1.
  961.  
  962.                In case you are curious, ALT-2 through ALT-0 are
  963.           reserved for use by you in building your own future dLITE
  964.           applications.
  965.  
  966.  
  967.           3.14 Unexpected Errors
  968.  
  969.                Because dLITE is squeezed into a small amount of memory,
  970.           its error handling capacity is necessarily limited. 
  971.           Typically, it will report one critical error, wait for you to
  972.           acknowledge the error, and then execute a QUIT command
  973.           automatically.  It is up to you, the end-user, to fix the
  974.           error before popping up dLITE again.
  975.  
  976.  
  977.  
  978.  
  979.  
  980.                                          16
  981.                With the Mailing List Manager, an error should not occur
  982.           unless your data base becomes so large that you run out of
  983.           disk space.  The Mailing List Manager application has been
  984.           stable for nearly three years and should cause no problems.
  985.  
  986.                dLITE also provides very sophisticated error handling
  987.           for dLITE Developer-induced errors.  These typically are
  988.           syntax or typographical errors which creep into new
  989.           applications you decide to build.  The scope of this error
  990.           handling functionality is covered in more detail in the
  991.           following chapters.
  992.  
  993.                If you get an error which appears strange or confusing,
  994.           please give us a call Monday through Thursday evening between
  995.           6 and 9 p.m. EASTERN time.  The number is 404/237-9420.  
  996.  
  997.  
  998.  
  999.  
  1000.  
  1001.  
  1002.  
  1003.  
  1004.  
  1005.  
  1006.  
  1007.  
  1008.  
  1009.  
  1010.  
  1011.  
  1012.  
  1013.  
  1014.  
  1015.  
  1016.  
  1017.  
  1018.  
  1019.  
  1020.  
  1021.  
  1022.  
  1023.  
  1024.  
  1025.  
  1026.  
  1027.  
  1028.  
  1029.  
  1030.  
  1031.  
  1032.  
  1033.  
  1034.  
  1035.  
  1036.  
  1037.  
  1038.                                          17
  1039.           Chapter 4       Developing dLITE Applications
  1040.  
  1041.  
  1042.           4.1  Overview
  1043.  
  1044.                dLITE was designed to provide even novice computer users
  1045.           with a powerful application development tool.  Virtually
  1046.           everything in dLITE's rich assortment of functions can be
  1047.           customized to meet your individual needs.  A partial list of
  1048.           tailorable options follows:
  1049.  
  1050.                     (1)   Screen colors and screen sizes
  1051.  
  1052.                     (2)   Error tones to assist end-users
  1053.  
  1054.                     (3)   Up to 10 dBASE-compatible data bases (.DBF)
  1055.  
  1056.                     (4)   Up to 7 dBASE-compatible indexes per file
  1057.                           (.NDX)
  1058.  
  1059.                     (5)   dBASE-compatible data entry screens (.FMT)
  1060.  
  1061.                     (6)   Virtually complete control of dBASE-like
  1062.                           environment through SET commands
  1063.  
  1064.                     (7)   Customized PASTE file spec for each file
  1065.                           provides unlimited flexibility in extracting
  1066.                           data from .DBF files for use in other
  1067.                           applications
  1068.  
  1069.                     (8)   Customized OUTPUT file spec for each file
  1070.                           provides many options for tailoring output to
  1071.                           meet individual requirements.  This output
  1072.                           could be a list, a complex report, or a PASTE
  1073.                           file spec to extract labels from an entire 
  1074.                           data base.  Output can be displayed, printed
  1075.                           or written to an ASCII fie.
  1076.  
  1077.                     (9)   Customized data entry screen for 10
  1078.                           applications
  1079.  
  1080.  
  1081.  
  1082.  
  1083.  
  1084.  
  1085.  
  1086.  
  1087.  
  1088.  
  1089.  
  1090.  
  1091.  
  1092.  
  1093.  
  1094.  
  1095.  
  1096.                                          18
  1097.           4.2  Steps in Building a dLITE Application
  1098.  
  1099.                To create a new dLITE application involves a number of
  1100.           steps.  None are difficult, but all are required!  This
  1101.           chapter will walk you through the dLITE development process
  1102.           by describing everything you need to know about each step in
  1103.           creating a new dLITE application.  The steps shown are those
  1104.           that were used to build the Mailing List application.
  1105.  
  1106.                A few words of definition also may be in order.  A dLITE
  1107.           application typically consists of the instructions necessary
  1108.           to execute all nine of the functions outlined in section 4.1
  1109.           above.  You can execute up to 10 different applications
  1110.           within dLITE.  It should be noted that these applications may
  1111.           use 10 separate data bases or all 10 applications may use the
  1112.           same data base with 10 different data entry screens, paste
  1113.           file specs, and/or output file specs.  Which approach you
  1114.           take to dLITE application development obviously depends upon
  1115.           the data base requirements you are endeavoring to meet.
  1116.  
  1117.                The basic steps in building a dLITE application are
  1118.           listed below.  Each step then is covered in detail in a
  1119.           separate section of this chapter.  The next chapter then
  1120.           walks you through all of the steps which went into building
  1121.           the Mailing List Manager application which accompanies dLITE. 
  1122.           The steps are the following:
  1123.  
  1124.                     1.    Creating a dBASE-compatible data file
  1125.  
  1126.                     2.    Creating any necessary indexes
  1127.  
  1128.                     3.    Creating dLITE's initialization file
  1129.  
  1130.                     4.    Creating the application initialization file
  1131.  
  1132.                     5.    Creating the data base configuration file
  1133.  
  1134.                     6.    Creating the data entry screen (format file)
  1135.  
  1136.                     7.    Creating the paste file specification
  1137.  
  1138.                     8.    Creating the output file specification
  1139.  
  1140.                     9.    Creating output initialization and reset
  1141.                           files
  1142.  
  1143.  
  1144.  
  1145.  
  1146.  
  1147.  
  1148.  
  1149.  
  1150.  
  1151.  
  1152.  
  1153.  
  1154.                                          19
  1155.           4.3  Creating a dBASE-compatible data base
  1156.  
  1157.                In creating new dLITE applications, you may use existing
  1158.           dBASE III-compatible data bases or you may create new ones. 
  1159.           FoxPro no longer creates data bases which can be recognized
  1160.           by dLITE.  We recommend using dLITE or WAMPUM to create your
  1161.           data bases.
  1162.  
  1163.                The only limitation is that manipulation of MEMO fields
  1164.           from within dLITE currently is not supported.  This is a
  1165.           FrontRunner limitation.  If you need sophisticated control
  1166.           over data entry and extraction from MEMO fields, then we
  1167.           recommend WAMPUM-D (the dBASE index compatible version) from
  1168.           Ward Mundy Software.
  1169.  
  1170.                To create a new dBASE data base, start dLITE and press
  1171.           any one of the 10 "hot-keys."  When dLITE's Main Menu
  1172.           appears, move the light bar to the FILE option and press
  1173.           <ENTER>.  Then type an asterisk (*) for the file name and
  1174.           press <PgDn>.  This tells dLITE you want to create a new
  1175.           dBASE-compatible data base.
  1176.  
  1177.                You will be prompted to enter a file name for the new
  1178.           data base.  Enter a file name up to 8 characters long with no
  1179.           embedded spaces or punctuation.  Then press <ENTER> unless
  1180.           the file name was 8 characters long.
  1181.  
  1182.                dLITE now will prompt you for the file structure.  In
  1183.           dBASE lingo, this means you must describe every field (piece
  1184.           of information) to be captured in your data base.  These
  1185.           field descriptions include the following four pieces of
  1186.           information for each field:
  1187.  
  1188.  
  1189.                (1)  Field name -   Up to 10 characters long.  The
  1190.                first character must be a LETTER.  All remaining
  1191.                characters can be LETTERS, NUMBERS, or the
  1192.                UNDERSCORE character.  No other punctuation or
  1193.                spaces are allowed.
  1194.  
  1195.  
  1196.                (2)  Field type -   Choose one of the following:
  1197.  
  1198.                           C - Character  (Use this
  1199.                               except as noted below)
  1200.  
  1201.                           N - Numeric  (Use this for data on which you
  1202.                               need math)
  1203.  
  1204.                           D - Date  (Use for capturing dates)
  1205.  
  1206.                           L - Logical  (Use for Yes/No, True/False
  1207.                               fields, e.g. MARRIED)
  1208.  
  1209.  
  1210.  
  1211.  
  1212.                                          20
  1213.                (3)  Field length - Specify the maximum size of
  1214.                entries for the particular field specified.
  1215.  
  1216.                     Character -    1 to 254
  1217.  
  1218.                     Numeric   -    1 to 13  (Count the 
  1219.                                    decimal point also)
  1220.  
  1221.                     Date      -    8  
  1222.  
  1223.                     Logical   -    1
  1224.  
  1225.  
  1226.                (4)  Field decimals -    For numeric fields,
  1227.                specify the number of decimal positions to be
  1228.                captured.
  1229.  
  1230.  
  1231.                When you have completed entry of all desired fields,
  1232.           press CTRL-End to terminate the file creation process and
  1233.           build an empty dBASE-compatible data base.
  1234.  
  1235.                If you change your mind about building the new file,
  1236.           press <ESC>ape to abort the file creation process.
  1237.  
  1238.                If you decide to insert a new field between two existing
  1239.           fields, use the <Up> cursor to position to the place where
  1240.           the new field should be inserted.  Then press CTRL-N to
  1241.           insert the field.
  1242.  
  1243.  
  1244.           4.4  Creating a dBASE-compatible index
  1245.  
  1246.                In creating new dLITE applications, you may use existing
  1247.           dBASE III-compatible indexes or you may create new ones.  
  1248.  
  1249.                To create a new dBASE index, start dLITE and press any
  1250.           one of the 10 "hot-keys."  When dLITE's Main Menu appears,
  1251.           move the light bar to the FILE select option and press
  1252.           <ENTER>.  When prompted for the file name, type in the name
  1253.           of the data base for which you want to build a new index. 
  1254.           Then press <PgDn> to return to the Main Menu.  
  1255.  
  1256.                Now highlight the UTIL option and press <ENTER>.  Then
  1257.           select the CREATE NEW INDEX option by marking it Y (for
  1258.           YES). Also mark the LIST FILE STRUCTURE option Y so that you
  1259.           can write down the names of the fields in your data base you
  1260.           wish to index.
  1261.  
  1262.                You will be prompted for two pieces of information:
  1263.  
  1264.                     (1)   Index File Name
  1265.  
  1266.                     (2)   Index Expression
  1267.  
  1268.  
  1269.  
  1270.                                          21
  1271.                The Index File Name is the DOS file name for the index
  1272.           file.  It always has a file extension of .NDX.  Simply enter
  1273.           a file name to associate with this index.  Typically, it
  1274.           would be the name of the field to be indexed unless you are
  1275.           creating an index from multiple fields.  In any case, the
  1276.           file name must conform to all DOS file naming conventions,
  1277.           i.e. up to 8 characters long with no imbedded spaces.
  1278.  
  1279.                The Index Expression is the dBASE expression describing
  1280.           what is to be indexed.  For simple indexes, this would be the
  1281.           name of the field (character, numeric, or date) to be
  1282.           indexed.  For complex (multi-field) indexes, it can be any
  1283.           dBASE character expression.  Complex indexes are explained in
  1284.           more detail below.  Enter the desired index expression and
  1285.           press <ENTER> to build the new index.  
  1286.  
  1287.                Please note that dLITE is necessarily light on memory. 
  1288.           Therefore, building indexes on extremely large, existing data
  1289.           bases is not dLITE's strong suit.  It is possible to specify
  1290.           an index expression so complex with a file so large that
  1291.           dLITE lacks the memory to build it. It also is possible that
  1292.           you will run out of memory attempting to index even simple
  1293.           fields on very large data bases.  In either case, use WAMPUM-
  1294.           D to create the original index.  dLITE then can handle
  1295.           updating of very complex indexes with ease!
  1296.  
  1297.                Hundreds of pages could be written on complex indexes. 
  1298.           For those wanting to know everything, consult a good dBASE
  1299.           reference text in your public library or favorite bookstore. 
  1300.           For new dBASE enthusiasts, several examples of complex
  1301.           indexes are included below to provide you with something to
  1302.           clone to meet your needs. Find an example that is close and
  1303.           experiment. dLITE will give you a second chance if you make a
  1304.           mistake.  We've all been there!
  1305.  
  1306.  
  1307.           Problem:   Indexing multiple character fields such as
  1308.           LASTNAME and FIRSTMI to assure secondary ordering on first
  1309.           names.
  1310.  
  1311.           Solution:
  1312.  
  1313.           SUBSTR(TRIM(LASTNAME)+","+TRIM(FIRSTMI)+SPACE(30),1,30)
  1314.  
  1315.           Comments:  The trick here is to make sure every entry in the
  1316.           index is a fixed length.  This is handled by adding 30 blank
  1317.           spaces onto the trimmed character string and then using
  1318.           SUBSTRing to extract a fixed length entry (in this case the
  1319.           first 30 characters).  TRIM() is a function which strips
  1320.           spaces off the end of fields.  SUBSTR() has three parts: the
  1321.           expression, the starting point, and number of characters to
  1322.           extract.
  1323.  
  1324.  
  1325.  
  1326.  
  1327.  
  1328.                                          22
  1329.           Problem:   Indexing multiple fields of mixed types such as a
  1330.           character field LASTNAME and a date field FILINGDT.  This
  1331.           typically would be done to assure that entries are ordered
  1332.           within a given date field.
  1333.  
  1334.           Solution:  DTOC(FILINGDT)+LASTNAME
  1335.  
  1336.           Comments:  The trick is to convert every field to character
  1337.           type.  Date fields are converted using the DTOC() function. 
  1338.           Numbers are converted using the STR() function.  An example
  1339.           of a numeric conversion would be STR(COST,7,2) where COST is
  1340.           the numeric field, 7 is the total length of the string, and 2
  1341.           is number of decimals.
  1342.  
  1343.  
  1344.           Problem:   Different fields need to be indexed depending upon
  1345.           the current value of yet another field.  For example, for a
  1346.           college newsletter, you probably would want to use a maiden
  1347.           name rather than their current last name if the person were
  1348.           now married.
  1349.  
  1350.           Solution:  IIF(MARRIED,MAIDENNAME,LASTNAME)
  1351.  
  1352.           Comments:  One of the most powerful functions in the dBASE
  1353.           language is the IMMEDIATE IF function.  It has three parts:
  1354.           the condition, what to do if the condition is TRUE, and what
  1355.           to do if the condition is FALSE.  Here, we are assuming that
  1356.           MARRIED is a logical field.  Thus, the word MARRIED means
  1357.           "if MARRIED is true." The second expression says if married
  1358.           is true, index on the MAIDENNAME field otherwise index on
  1359.           LASTNAME.  NOTE: Both the MAIDENNAME and LASTNAME fields must
  1360.           be the same length or you will get a mess!  If they aren't
  1361.           the same length, use the SUBSTR() function to make sure you
  1362.           index on the same size field.
  1363.  
  1364.  
  1365.  
  1366.  
  1367.  
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383.  
  1384.  
  1385.  
  1386.                                          23
  1387.           4.5  dLITE Configuration File Overview
  1388.  
  1389.  
  1390.                The heart of the dLITE system is a unique system of
  1391.           configuration files. These are standard ASCII files which can
  1392.           be created with any editor.  The configuration files are used
  1393.           to tell dLITE exactly how you want your application to
  1394.           function.  Within any configuration file, you can enter
  1395.           virtually any dBASE command or function.  All entries in the
  1396.           file will be executed when the user selects the desired
  1397.           application or function.  There are two basic types of
  1398.           configuration files: initialization files and function files. 
  1399.  
  1400.                The two main initialization files are the following:
  1401.  
  1402.                (1)   dLITE's Main Initialization File  (DLITE.CFG)
  1403.  
  1404.                (2)   Application Initialization File  (DLITE.1
  1405.                      through DLITE.0)
  1406.  
  1407.                In addition to initialization files, dLITE relies upon
  1408.           function file specifications to generate virtually all
  1409.           options on the Main System Menu.  A brief description of each
  1410.           of these file specs, its function, and default value are
  1411.           outlined below:
  1412.  
  1413.                The FILE CONFIGURATION SPEC is the file to which dLITE
  1414.           looks for the default configuration for any data base file. 
  1415.           The default name for this file is the FILENAME entry with a
  1416.           .CFG file extension.  This file name can be modified by
  1417.           setting the CFG_SPEC within the application initialization
  1418.           file (DLITE.1 thru DLITE.0).
  1419.  
  1420.                The FORMAT FILE SPEC is the file to which dLITE looks
  1421.           for the data entry screen for an application.  The default
  1422.           value is the FILENAME entry with a .FMT file extension.  The
  1423.           default format file spec name can be changed by setting the
  1424.           FMT_SPEC variable within the APPLICATION or FILE CONFIG
  1425.           SPECs.
  1426.  
  1427.                The PASTE FILE SPEC is the file to which dLITE looks
  1428.           for the paste function commands to execute when the PASTE
  1429.           option is chosen.  The default value is the FILENAME entry
  1430.           with a .PST file extension.  The default paste file spec name
  1431.           can be changed by setting the PST_SPEC variable within the
  1432.           APPLICATION or FILE CONFIG SPECs.
  1433.  
  1434.                The OUTPUT FILE SPEC is the file to which dLITE looks
  1435.           for the output commands to perform when the OUTPUT option is
  1436.           chosen. The default value is the FILENAME entry with a .OUT
  1437.           file extension. The default output file spec name can be
  1438.           changed by setting the OUT_SPEC variable within the
  1439.           APPLICATION or FILE CONFIG SPECs.
  1440.  
  1441.  
  1442.  
  1443.  
  1444.                                          24
  1445.                The OUTPUT INITIALIZATION and RESET FILE SPEC's are the
  1446.           files which dLITE executes immediately before and after the
  1447.           OUTPUT FILE SPEC.  The default file names are the data base
  1448.           FILENAME with an .INI and .RST file extension, respectively. 
  1449.           The default names can be changed by setting the INI_SPEC and
  1450.           RST_SPEC variables within the APPLICATION or FILE CONFIG
  1451.           SPECS.
  1452.  
  1453.  
  1454.           4.6  dLITE Configuration File Execution
  1455.  
  1456.                A word about when and how configuration files are
  1457.           executed may be helpful.  As noted, there is a main
  1458.           configuration file (DLITE.CFG) which is executed only once,
  1459.           when dLITE is first started from the DOS prompt.  Commands
  1460.           in this file typically should initialize the entire dLITE
  1461.           programming environment for all 10 of your applications. 
  1462.           Commands which apply only to one or a few of your appli-
  1463.           cations should not be placed in DLITE.CFG.
  1464.  
  1465.                Each of your 10 applications also has its own
  1466.           configuration file.  These files are named DLITE.1 through
  1467.           DLITE.0.  Which file gets executed depends upon which hot-key
  1468.           is pressed to invoke dLITE.  If hot-key ALT-8 is pressed,
  1469.           DLITE.8 gets executed. The rest should be fairly obvious. 
  1470.           Commands in these files should establish the exact
  1471.           environment in which dLITE should function for the given
  1472.           application.  Typically, you would have an entry in this file
  1473.           for the name of the primary data base and the name of the
  1474.           data base configuration file to execute.
  1475.  
  1476.                Each data base also may have one or more configuration
  1477.           files which define the environment in which the actual data
  1478.           base will be used.  Typically entries in this file would
  1479.           include the names of all indexes to be used, the name of the
  1480.           lead index, and the names of the format file spec (data entry
  1481.           screen), paste file spec, and output file spec.  These are
  1482.           discussed in more detail in subsequent sections of this
  1483.           manual.  For now, the critical point to master is which
  1484.           commands should be stored in which config files.
  1485.  
  1486.                Both the application configuration file and the data
  1487.           base configuration file get executed whenever a hot-key is
  1488.           pressed to pop-up dLITE.  All configuration files must be in
  1489.           the DOS PATH or errors will result.
  1490.  
  1491.                Function file specs are executed whenever the specified
  1492.           function is performed.  For example, MAILLIST.PST is executed
  1493.           when the mailing list data base application is active and the
  1494.           PASTE option is chosen from the Main System Menu.
  1495.  
  1496.  
  1497.  
  1498.  
  1499.  
  1500.  
  1501.  
  1502.                                          25
  1503.           4.7  dLITE Configuration File Errors
  1504.  
  1505.                Whenever an error is found in a command or function
  1506.           within a configuration file, dLITE will display an error
  1507.           message highlighting the error and displaying the problem
  1508.           line of code and the name of the configuration file in which
  1509.           it was found.  When the user presses a key, the offending
  1510.           command is ignored and processing continues as if that line
  1511.           of code did not exist.
  1512.  
  1513.                The consequences of ignoring errors obviously depend
  1514.           upon the gravity of the mistake in the configuration file. 
  1515.           For example, if there is a typographical error in the name of
  1516.           the data base or in the name of the data base configuration
  1517.           file, obviously this dLITE application may not function at
  1518.           all.  
  1519.  
  1520.                The advantage of ignoring such errors is that it gives
  1521.           the first-time developer a fighting chance of identifying and
  1522.           curing mistakes.  All the developer needs to do is edit the
  1523.           offending line of code in the configuration file which was
  1524.           identified by dLITE's error trapping routine.  Because dLITE
  1525.           is a pop-up program, the developer can run an editor with the
  1526.           configuration file as the foreground task then immediately
  1527.           test the configuration file by pressing one of dLITE's hot-
  1528.           keys.  If an error occurs, simply <ESC>ape back to the
  1529.           editor, change the offending line of code, save the changes,
  1530.           and pop-up dLITE again to test it.  This process can be
  1531.           repeated until all the errors disappear.
  1532.  
  1533.  
  1534.           4.8  dLITE Commands and Functions
  1535.  
  1536.                As indicated above, virtually any FrontRunner-supported
  1537.           dBASE command or function can be included in dLITE's
  1538.           configuration files.  Obviously, to include commands and
  1539.           functions, you first need to know what they are and what they
  1540.           do.  For those familiar with dBASE syntax, IF commands and
  1541.           DO WHILE loops are not supported in configuration files. The
  1542.           appendix to this User's Guide outlines all supported commands
  1543.           and functions. Read the README.DOC file on your distribution
  1544.           diskette for any late-breaking news!
  1545.  
  1546.                Typically, dLITE takes its cue in executing certain
  1547.           internal program functions based upon the values set in the
  1548.           config files. For example, the value stored in FILENAME
  1549.           becomes the main data base file for a given application. 
  1550.           What follows is a brief description of dLITE's internal
  1551.           variables and their functions:
  1552.  
  1553.  
  1554.  
  1555.  
  1556.  
  1557.  
  1558.  
  1559.  
  1560.                                          26
  1561.           VARIABLE   PROGRAM FUNCTION                  EXAMPLE     
  1562.           --------   ------------------------------    ------------
  1563.  
  1564.           FILENAME   Stores default data base name     "MAILLIST"
  1565.           INDXNAME   Names of all index files          "IDCODE,ZIP"
  1566.           LEADINDX   Name of default lead index        "ZIP"
  1567.           OUTINDX    Name of lead index for output     "ZIP"
  1568.           WINLIN     No. lines in edit window          "21"
  1569.           WINCOL     No. columns in edit window        "80"
  1570.           TONES      Whether beeps are audible         .T. or .F.
  1571.           SPECCOLOR  Whether custom color is used      .T. or .F.
  1572.           COLORS     Custom color specification        ",, /W"
  1573.           LPTINIT    Printer initialization string     ""
  1574.           LPTRESET   Printer reset string              ""
  1575.           LPTDEVICE  Name of print or output file      "LPT1"
  1576.           CFG_SPEC   Name of file config spec          "MAILLIST.CFG"
  1577.           FMT_SPEC   Name of format file spec          "MAILLIST.FMT"
  1578.           PST_SPEC   Name of paste file spec           "MAILLIST.PST"
  1579.           INI_SPEC   Name of output init spec          "MAILLIST.INI"
  1580.           OUT_SPEC   Name of output file spec          "MAILLIST.OUT"
  1581.           RST_SPEC   Name of output reset spec         "MAILLIST.RST"
  1582.  
  1583.  
  1584.  
  1585.           4.10 Creating the Custom Data Entry Screen
  1586.  
  1587.                In addition to configuration files, every dLITE
  1588.           application also requires a custom data entry screen,
  1589.           designed to meet your own requirements.  For dBASE
  1590.           enthusiasts, this can be a standard dBASE-compatible format
  1591.           file (.FMT).  In addition, dLITE format files may contain any
  1592.           command or function which could be included in a
  1593.           configuration file.
  1594.  
  1595.                If you are new to the world of dBASE, a format file is
  1596.           simply an ASCII file with commands which tell the interpreter
  1597.           where to place prompts and data entry fields on the screen. 
  1598.           An example may assist in visualizing what we are talking
  1599.           about.  A typical format file entry would look like the
  1600.           following:
  1601.  
  1602.           @ 1,0 SAY "Applicant name:" GET FULLNAME PICTURE "XXXXXXXXX"
  1603.           @ 3,0 SAY "Enter birthday:"
  1604.           @ 3,16 GET BIRTHDAY PICTURE "99/99/99"
  1605.  
  1606.                There are four parts to any typical format file command:
  1607.  
  1608.                      1.   Screen coordinates (@ 1,0)
  1609.  
  1610.                      2.   Screen prompt      (SAY "Applicant name:")
  1611.  
  1612.                      3.   Data entry field   (GET FULLNAME)
  1613.  
  1614.                      4.   Field format       (PICTURE "XXXXXXXXX")
  1615.  
  1616.  
  1617.  
  1618.                                          27
  1619.                The screen coordinates and either a SAY or GET command
  1620.           are required.  You may have both a SAY and GET command on
  1621.           one line.  And you may have an optional picture specification
  1622.           which tells the interpreter what type of data to accept in
  1623.           the data entry field. The order of GETS in the format file
  1624.           determines the order in which the user will be prompted for
  1625.           input in ADDREC and EDIT mode.  A GET command always must
  1626.           include the actual field name of a field in your active data
  1627.           base.  Use the UTIL/LIST STRUCTURE option to get a list of
  1628.           your field names.
  1629.  
  1630.                There are a number of ways to "draw" data entry screens. 
  1631.           The easiest way is to use a screen generator program such as
  1632.           MenuMaker from Ward Mundy Software.  With this program, you
  1633.           simply type the screen the way you want it to look, and
  1634.           MenuMaker writes the code for the format file.  An
  1635.           alternative is to draw your screen out on ruled paper. Then
  1636.           use an ASCII editor to enter the commands necessary to format
  1637.           the screen the way you want it to look.
  1638.  
  1639.                The critical requirement, of course, is to make sure you
  1640.           provide a GET command for every field in your data base in
  1641.           which you want the user to be able to enter information. 
  1642.           This need not be every field in the data base.  However, if
  1643.           there is no GET for a field in the data base, obviously the
  1644.           end-user cannot enter data into that field.
  1645.  
  1646.                The default format file for any data base is the
  1647.           FILENAME specified in the application configuration file
  1648.           (DLITE.1 thru DLITE.0) plus the .FMT file extension.  If you
  1649.           specify a format file spec value (such as
  1650.           FMT_SPEC="MAILLIST.FM2") in the appli-cation or file
  1651.           configuration, then the format file will be the file name you
  1652.           specify for the memory variable FMT_SPEC.  This permits the
  1653.           developer to design multiple data entry screens for a single
  1654.           data base.  These screens then can be used to create dif-
  1655.           ferent "views" of the data base when end-users select
  1656.           different application hot-keys.
  1657.  
  1658.                The following PICTURE template characters are supported
  1659.           by dLITE.  Typically, you would type one PICTURE character
  1660.           for each character position in the data entry field.
  1661.  
  1662.                      9    Allows entry of numbers only
  1663.                      #    Allows entry of numbers, blanks, and signs
  1664.                      A    Allows entry of letters only
  1665.                      L    Allows entry of logical data only
  1666.                      Y    Allows entry of Y or N only
  1667.                      N    Allows entry of letters and digits only
  1668.                      X    Allows entry of any character
  1669.                      !    Converts any letter to upper case
  1670.  
  1671.  
  1672.  
  1673.  
  1674.  
  1675.  
  1676.                                          28
  1677.                All other picture template characters including all
  1678.           lower case letters are treated as constants.  These are
  1679.           automatically entered for the end-user and cannot be changed.
  1680.  
  1681.                dLITE also supports a number of GET FUNCTIONS within
  1682.           the picture statement.  The correct syntax is as follows:
  1683.  
  1684.                      @ 1,0 GET FIELDNAME PICTURE "@Z XXXXX"
  1685.  
  1686.                All functions begin with the @ symbol followed by one of
  1687.           the following characters:
  1688.  
  1689.                      C    Displays CR after positive numbers
  1690.                      X    Displays DB after negative numbers
  1691.                      (    Encloses negative numbers in parentheses
  1692.                      B    Left-justifies numeric data
  1693.                      Z    Displays zero value as blank field
  1694.                      D    American date format
  1695.                      E    European date format
  1696.                      A    Alphabetic characters only
  1697.                      R    Literals in template are not part of data
  1698.                      !    Upper case only
  1699.  
  1700.                dLITE also supports field-level data validation using a
  1701.           VALID clause which contains a logical expression.  If the
  1702.           data entered for such a field does not evaluate to TRUE when
  1703.           tested against the VALID expression, then the user cannot
  1704.           leave that field.  A few examples may help explain this
  1705.           functionality.
  1706.  
  1707.                @ 1,0 GET FILINGDATE VALID FILINGDATE<=DATE()
  1708.  
  1709.                This VALID clause would assure that any FILINGDATE
  1710.           entered by the end-user was a date less than or equal today's
  1711.           date.
  1712.  
  1713.                @ 1,0 GET STATE PICTURE "!!" VALID STATE$"AL GA FL CA"
  1714.  
  1715.                This VALID clause would assure that the STATE entry
  1716.           contained the correct state abbreviation for Georgia,
  1717.           Alabama, Florida, or California.  
  1718.  
  1719.  
  1720.  
  1721.  
  1722.  
  1723.  
  1724.  
  1725.  
  1726.  
  1727.  
  1728.  
  1729.  
  1730.  
  1731.  
  1732.  
  1733.  
  1734.                                          29
  1735.           4.11 Creating the Custom Paste Specification
  1736.  
  1737.                Perhaps dLITE's most unique feature is the ability to
  1738.           "cut-and-paste" information from a pop-up data base into your
  1739.           foreground application.  This forever ends the tedious
  1740.           business of exporting and importing files from one
  1741.           environment to another.
  1742.  
  1743.                This functionality is implemented with a FrontRunner
  1744.           command called "PASTE."  The PASTE command allows you
  1745.           extract one or more pieces of information from your data base
  1746.           and insert them into your foreground application.  
  1747.  
  1748.                A typical PASTE command looks like the following:
  1749.  
  1750.                PASTE LASTNAME + CHR(13)
  1751.  
  1752.                This tells dLITE to paste the LASTNAME field (from the
  1753.           selected record) and a carriage return into your foreground
  1754.           application.  
  1755.  
  1756.  
  1757.                More complex PASTE commands also are possible. For
  1758.           example,
  1759.  
  1760.                PASTE TRIM(FIRSTMI)+" "+TRIM(LASTNAME)+CHR(13)
  1761.  
  1762.                This tells dLITE to "trim off" the trailing spaces and
  1763.           paste the FIRSTMI (first name, middle initial) field, then
  1764.           paste a space, then "trim off" the trailing spaces and paste
  1765.           the LASTNAME field, and then paste a carriage return into the
  1766.           foreground application.
  1767.  
  1768.                In addition to being able to paste fields, ASCII
  1769.           characters, and string expressions, you also can paste and
  1770.           thereby simulate virtually any keystroke or combination
  1771.           keyboard entry which could be made using the PC keyboard. 
  1772.           This permits flexible pasting of information into
  1773.           spreadsheets which typically require cursor key entries
  1774.           between data elements.
  1775.  
  1776.                The proper syntax for pasting such entries requires
  1777.           knowing the "extended code" for the keystroke.  An extended
  1778.           code consists of CHR(0) + an additional ASCII code.  For
  1779.           example, to paste the HOME key, the proper command is PASTE
  1780.           CHR(0)+CHR(71).  The other extended codes are listed below.  
  1781.  
  1782.  
  1783.  
  1784.  
  1785.  
  1786.  
  1787.  
  1788.  
  1789.  
  1790.  
  1791.  
  1792.                                          30
  1793.                Code       Keyboard Key
  1794.                ------     ----------------------------------
  1795.  
  1796.                15         Backtab, Shift-Tab
  1797.                16-25      ALT-Q, W, E, R, T, Y, U, I, O, P
  1798.                30-38      ALT-A, S, D, F, G, H, J, K, L
  1799.                44-50      ALT-Z, X, C, V, B, N, M
  1800.                59-68      Function Keys F1 through F10
  1801.                71         <Home>
  1802.                72         <Up> Cursor
  1803.                73         <PgUp>
  1804.                75         <Left> Cursor
  1805.                77         <Right> Cursor
  1806.                79         <End>
  1807.                80         <Down> Cursor
  1808.                81         <PgDn>
  1809.                82         <Insert>
  1810.                83         <Delete>
  1811.                84-93      Shifted Function Keys F1 through F10
  1812.                94-103     Control Function Keys F1 through F10
  1813.                104-113    ALT Functions Keys F1 through F10
  1814.                114        Ctrl-PrtSc
  1815.                115        Ctrl-<Left> Cursor
  1816.                116        Ctrl_<Right> Cursor
  1817.                117        Ctrl-<End>
  1818.                118        Ctrl-<PgDn>
  1819.                119        Ctrl-<Home>
  1820.                120-131    ALT-1 through ALT-0, ALT-hyphen, ALT-=
  1821.                132        Ctrl-<PgUp>
  1822.  
  1823.  
  1824.  
  1825.  
  1826.  
  1827.  
  1828.  
  1829.  
  1830.  
  1831.  
  1832.  
  1833.  
  1834.  
  1835.  
  1836.  
  1837.  
  1838.  
  1839.  
  1840.  
  1841.  
  1842.  
  1843.  
  1844.  
  1845.  
  1846.  
  1847.  
  1848.  
  1849.  
  1850.                                          31
  1851.           4.12 Creating the Output File Specification
  1852.  
  1853.                dLITE's Output File Specification is the template used
  1854.           to produce file output when the end-user selects the OUTPUT
  1855.           option on the Main Menu.  If SELECTION CRITERIA (a dBASE
  1856.           filter) have been specified, then the output is generated for
  1857.           every record matching the selection criteria.  If no
  1858.           SELECTION CRITERIA have been specified, then the user is
  1859.           first prompted to enter them.  If the CRITERIA field is left
  1860.           blank or <ESC>ape is pressed, then output is produced for
  1861.           every active (not deleted) record in the data base.
  1862.  
  1863.                Three different commands may be used within the OUTPUT
  1864.           file spec: DISPLAY, PRINT, and PASTE.  Display simply lists
  1865.           the data requested by the developer.  Print functions much
  1866.           like display except that you may generate printed output or
  1867.           reroute output to a file.  Paste allows the transfer of
  1868.           information on multiple records to the foreground
  1869.           application.
  1870.  
  1871.                The DISPLAY syntax is shown in the following example:
  1872.  
  1873.              DISPLAY LASTNAME,FIRSTMI,CITY,PHONE WHILE .NOT. EOF() OFF
  1874.  
  1875.                Notice that the command DISPLAY is followed by a list of
  1876.           fields to be displayed, each separated by a comma.  The words
  1877.           "WHILE .NOT. EOF()" tell dLITE to process the DISPLAY
  1878.           command for every record meeting the selection criteria until
  1879.           end-of-file is reached.  This expression is mandatory.
  1880.  
  1881.                The "OFF" keyword is optional.  If included, dLITE will
  1882.           display the records numbers for each qualifying record on the
  1883.           left margin immediately preceding the first field in the
  1884.           field list.
  1885.  
  1886.                If the SET HEADING ON expression is included in either
  1887.           the output file spec or the output initialization file spec,
  1888.           then the field headings will be displayed at the top of the
  1889.           listing.
  1890.  
  1891.                The syntax for PRINTed output is as follows:
  1892.  
  1893.                   PRINT LASTNAME,FIRSTMI,CITY,PHONE
  1894.  
  1895.                Note that with the PRINT command the WHILE .NOT. EOF()
  1896.           condition is implicit.  Specifying it is not required
  1897.           although using it will not generate an error.
  1898.  
  1899.  
  1900.  
  1901.  
  1902.  
  1903.  
  1904.  
  1905.  
  1906.  
  1907.  
  1908.                                          32
  1909.                PRINTed OUTPUT always is routed to the device or file
  1910.           specified in the LPTDEVICE memory variable.  If the memory
  1911.           variable is not specified in your default configuration file,
  1912.           then printed output is automatically routed to PRN.  If a
  1913.           file name is specified for LPTDEVICE rather than a printer
  1914.           device name, then output will be routed to that file when the
  1915.           PRINT command is issued.
  1916.  
  1917.                The final output file spec option is PASTE.  The PASTE
  1918.           syntax to extract data from multiple records into a
  1919.           foreground application is shown in the following example:
  1920.  
  1921.                PASTE FULLNAME+CHR(13)+ADDRESS+CHR(13) WHILE .NOT. EOF()
  1922.  
  1923.                The PASTE syntax here is identical to that used in the
  1924.           PASTE file spec for single record output except the
  1925.           expression "WHILE .NOT. EOF()" is added to tell dLITE to
  1926.           process the PASTE command for every record in the file which
  1927.           meets the selection criteria until end-of-file is reached.
  1928.  
  1929.  
  1930.           4.13 Creating the Output Initialization File Specification
  1931.  
  1932.                The OUTPUT initialization file is used to set up the
  1933.           output environment before the output is generated. 
  1934.           Typically, this would include commands to set the lead index
  1935.           (which assures proper sorting of the output) and to set the
  1936.           display headings on or off for the display command.
  1937.  
  1938.                To set the lead index for output, enter a line in the
  1939.           output initialization file spec similar to the following
  1940.           where LASTNAME is the actual file name of the lead index
  1941.           desired:
  1942.  
  1943.                      OUTINDX="LASTNAME"
  1944.  
  1945.                To turn column headings on for display output, enter the
  1946.           command SET HEADING ON in the output initialization file
  1947.           spec.
  1948.  
  1949.                The default file name for the output initialization file
  1950.           spec is the name of the data base with a file extension of
  1951.           .INI.  This can be changed by including a line in the
  1952.           application file spec similar to the following where
  1953.           "MAILLIST.INI" is the desired file name:
  1954.  
  1955.                      INI_SPEC="MAILLIST.INI"
  1956.  
  1957.  
  1958.  
  1959.  
  1960.  
  1961.  
  1962.  
  1963.  
  1964.  
  1965.  
  1966.                                          33
  1967.           4.14 Creating the Output Reset File Specification
  1968.  
  1969.                The OUTPUT reset file spec is used to reset dLITE's
  1970.           operating environment after the output is generated. 
  1971.           Typically, this would include commands to reset a printer. 
  1972.           The file is optional!
  1973.  
  1974.                The default file name for the output reset file spec is
  1975.           the name of the data base with a file extension of .RST. 
  1976.           This can be changed by including a line in the application
  1977.           file spec similar to the following where "MAILLIST.RST" is
  1978.           the desired file name:
  1979.  
  1980.                      RST_SPEC="MAILLIST.RST"
  1981.  
  1982.  
  1983.  
  1984.           4.15 Setting Custom Colors for dLITE Applications
  1985.  
  1986.                For those with color monitors, you may prefer different
  1987.           color settings than the defaults provided with dLITE.  These
  1988.           can easily be set either for all applications (within
  1989.           DLITE.CFG) or for individual applications (within DLITE.1
  1990.           through DLITE.0).
  1991.  
  1992.                Two commands are necessary to set custom colors.  Edit
  1993.           the configuration file desired and change the SPECCOLOR
  1994.           logical field to True by typing SPECCOLOR=.T.  The enter your
  1995.           custom color spec using the COLORS memory variable.  The
  1996.           color spec consists of three color values separated by commas
  1997.           and enclosed in quotes.  The three values are as follows:
  1998.  
  1999.                      1.   Standard Color for all displays except GETS
  2000.  
  2001.                      2.   Enhanced Color for GETS (data entry fields)
  2002.  
  2003.                      3.   Border Color for borders
  2004.  
  2005.  
  2006.           Each of the three values consists of two parts separated by a
  2007.           slash (/): the foreground color and the background color.  A
  2008.           table of all supported colors and their alphabetic codes
  2009.           follows:
  2010.  
  2011.  
  2012.  
  2013.  
  2014.  
  2015.  
  2016.  
  2017.  
  2018.  
  2019.  
  2020.  
  2021.  
  2022.  
  2023.  
  2024.                                          34
  2025.                      Code     Color
  2026.                      -------  -------------
  2027.  
  2028.                      (space)  Black
  2029.                      (space)+ Grey
  2030.                      N        Black
  2031.                      N+       Grey
  2032.                      B        Blue
  2033.                      B+       Light Blue
  2034.                      G        Green
  2035.                      G+       Light Green
  2036.                      BG       Cyan
  2037.                      BG+      Light Cyan
  2038.                      R        Red
  2039.                      R+       Light Red
  2040.                      BR       Magenta
  2041.                      BR+      Light Magenta
  2042.                      GR       Brown
  2043.                      GR+      Yellow
  2044.                      W        White
  2045.                      W+       Bright White
  2046.                      X        Hidden
  2047.  
  2048.                As an example, the default color settings provided by
  2049.           dLITE are as follows: "W/B,B/W,W/R".  This means standard
  2050.           text is displayed in white letters on a blue background,
  2051.           enhanced text is displayed in blue letters on a white
  2052.           background, and borders are displayed in white letters on a
  2053.           red background.
  2054.  
  2055.  
  2056.  
  2057.  
  2058.  
  2059.  
  2060.  
  2061.  
  2062.  
  2063.  
  2064.  
  2065.  
  2066.  
  2067.  
  2068.  
  2069.  
  2070.  
  2071.  
  2072.  
  2073.  
  2074.  
  2075.  
  2076.  
  2077.  
  2078.  
  2079.  
  2080.  
  2081.  
  2082.                                          35
  2083.           Chapter 5  Building the Mailing List Manager Application
  2084.  
  2085.  
  2086.           5.1  Creating the MAILLIST Data Base
  2087.  
  2088.                We first must start dLITE and make it memory resident. 
  2089.           First position to the directory in which dLITE and its
  2090.           supporting files are stored by typing CD \DLITE. Then type
  2091.           dLITE at the DOS prompt. Now press the <ENTER> key when
  2092.           prompted to make dLITE memory resident.
  2093.  
  2094.                To create a new application, simply press one of dLITE's
  2095.           hot-keys which is not already in use.  Since dLITE comes
  2096.           bundled with the Mailing List Manager on hot-key ALT-1, just
  2097.           press ALT-2.  You will be warned that the DLITE.2
  2098.           configuration file does not exist. Press <ENTER> to continue.
  2099.  
  2100.                Now move to the FILE option and press <ENTER>.  Type an
  2101.           asterisk (*) for the Filename and press <PgDn>.  You will be
  2102.           prompted for the name of the new data base.  Since we
  2103.           already have a MAILLIST data base, let's call this file
  2104.           MAILLIS2 if you want to follow along.  After typing the file
  2105.           name and pressing <ENTER>, you will be prompted for the field
  2106.           names, types, and lengths for the various data elements in
  2107.           the data base.  Press <ENTER> to move to each new field. 
  2108.           Type in the following field list:
  2109.  
  2110.           NUM   FLD NAME        TYPE         FLD LEN   FLD DEC
  2111.           ---   -----------     ----         -------   -------
  2112.  
  2113.             1   LASTNAME         C                18        0
  2114.             2   FIRSTMI          C                17        0
  2115.             3   IDCODE           C                15        0
  2116.             4   CATEGORY         C                20        0
  2117.             5   SALUTATION       C                30        0
  2118.             6   COMPANY          C                30        0
  2119.             7   TITLE            C                30        0
  2120.             8   ADDRESS1         C                30        0
  2121.             9   ADDRESS2         C                30        0
  2122.            10   CITY             C                20        0
  2123.            11   STATE            C                10        0
  2124.            12   ZIP              C                10        0
  2125.            13   COUNTRY          C                20        0
  2126.            14   PHONE            C                12        0
  2127.            15   CONTACTDT        D                 8        0
  2128.            16   CODE1            C                15        0
  2129.            17   CODE2            C                15        0
  2130.            18   CODE3            C                15        0
  2131.            19   COMMENTS         C                40        0
  2132.  
  2133.                When you finish typing in all the field information,
  2134.           check your work!  Then press <CTRL-End> and type Y to save
  2135.           the file.
  2136.  
  2137.  
  2138.  
  2139.  
  2140.                                          36
  2141.           5.2  Creating the MAILLIST Supporting Indexes
  2142.  
  2143.                From dLITE's Main Menu, select the FILE option and
  2144.           press <ENTER>.  When prompted for the name of the data base,
  2145.           type in MAILLIS2 and <PgDn>.
  2146.  
  2147.                When the Main Menu reappears, choose the UTIL option
  2148.           and mark CREATE NEW INDEX true by typing Y.  Then <PgDn>. 
  2149.           The Mailing List application is distributed with three index
  2150.           files: FULLNAME, ZIP, and IDCODE.  We obviously cannot name
  2151.           our new index files with the same names although what they
  2152.           index can be identical.  Therefore, let's use FULLNAM2, ZIP2,
  2153.           and IDCODE2 for the file names.
  2154.  
  2155.                We will need to repeat the CREATE NEW INDEX process
  2156.           three times to create three indexes.  The FULLNAM2 index is
  2157.           the more complex, so let's do it first.  When prompted for
  2158.           the index file name, type FULLNAM2 and press <ENTER>.  When
  2159.           prompted for the index expression, type the following:
  2160.  
  2161.             SUBSTR(TRIM(LASTNAME)+", "+TRIM(FIRSTMI)+SPACE(30),1,30)
  2162.  
  2163.                A word of explanation seems appropriate here.  We need
  2164.           this index to be by last name, then a comma and space, then
  2165.           first name, middle initial.  Therefore, we need to "trim"
  2166.           trailing spaces off the fields so we don't end up with
  2167.           entries like MUNDY      WARD.  The SUBSTRing function is used
  2168.           to make sure every entry in the index is exactly 30
  2169.           characters long.  Since it is possible that a person may be
  2170.           named SMITH, JOE we also need to "pad" the trimmed fields
  2171.           with a bunch of spaces to assure the INDEX will always have
  2172.           at least 30 actual characters to work with.
  2173.  
  2174.                For the other indexes, enter the file names ZIP2 and
  2175.           IDCODE2.  For the index expressions enter the actual names of
  2176.           the fields to be indexed, i.e. ZIP and IDCODE.  Note, we do
  2177.           NOT enter ZIP2 for the index expression since there is no
  2178.           ZIP2 field.
  2179.  
  2180.           5.3  Creating the Main dLITE Initialization File
  2181.  
  2182.                Using any ASCII editor, you can review the contents of
  2183.           the dLITE initialization file, DLITE.CFG. The contents are as
  2184.           follows:
  2185.  
  2186.           WINLIN="21"
  2187.           WINCOL="80"
  2188.           *SET PATH TO C:\DLITE
  2189.           SET EXACT OFF
  2190.           TONES=.T.
  2191.           SPECCOLOR=.F.
  2192.           COLORS=",, /W"
  2193.           LPTINIT=""
  2194.           LPTRESET=""
  2195.  
  2196.  
  2197.  
  2198.                                          37
  2199.                Note that you do not pick a data base in the dLITE
  2200.           initialization file.  That entry belongs in the application
  2201.           configuration file discussed next.  
  2202.  
  2203.                Command lines which begin with an asterisk (*) are
  2204.           comments and are ignored by dLITE's interpreter.  If you want
  2205.           to hard-code dLITE's PATH rather than using the DOS PATH as
  2206.           dLITE's PATH, then you could remove the asterisk from that
  2207.           line, assuming you have stored all the dLITE files in
  2208.           C:\DLITE.  This would require that you move to the C:\DLITE
  2209.           directory to start dLITE at the DOS prompt if this directory
  2210.           is not also in the DOS PATH.
  2211.  
  2212.                The WINDOW specifications provide for the maximum size
  2213.           window for data entry in ADDREC and EDIT mode as well as for
  2214.           data display in DELETE and UNDELETE mode.  This should be
  2215.           left alone.  If you want to make the window smaller, do it
  2216.           within the application configuration file.  However, if you
  2217.           do it in one application, you will need to specify the WINDOW
  2218.           specs in every other application configuration file to assure
  2219.           that the WINDOW is reset to the proper size in each
  2220.           application.
  2221.  
  2222.                TONES is set to .T. which means dLITE's beautiful music
  2223.           is ON. If you want to turn it off, change this entry to .F.
  2224.  
  2225.                SET EXACT OFF means that comparisons in  finding
  2226.           matching records are evaluated up to the length of the data
  2227.           in the search field rather than the total length of the
  2228.           field.  For example, entering John as the search
  2229.           specification for LASTNAME to find would retrieve Johnson.  
  2230.  
  2231.                Custom colors are described in another section of this
  2232.           documentation.  The line printer initialization and reset
  2233.           variables allows entry of a string to be sent to the printer
  2234.           before and after print jobs.
  2235.  
  2236.                Additional SET commands could be added to this file to
  2237.           meet your individual requirements.  See the appendix for a
  2238.           complete listing of available commands.
  2239.  
  2240.  
  2241.           5.4  Creating the Application Initialization File
  2242.  
  2243.                You will need to use an ASCII editor to create this
  2244.           file.  Or you can type it from the DOS prompt by opening a
  2245.           DOS file with the following command: COPY CON DLITE.2
  2246.           <ENTER>.  When you have finished typing in the lines below,
  2247.           press CTRL-Z <ENTER> to save the file.  
  2248.  
  2249.                Which application initialization file you create
  2250.           determines which hot-key this application will reside on. 
  2251.           Since we mentioned ALT-2 previously, let's stay consistent. 
  2252.  
  2253.  
  2254.  
  2255.  
  2256.                                          38
  2257.                This means the file name will be DLITE.2.  Crank up your
  2258.           friendly editor, and enter the following commands.  Then save
  2259.           the file naming it DLITE.2.
  2260.  
  2261.           FILENAME="MAILLIS2"
  2262.           WINLIN="21"
  2263.           WINCOL="80"
  2264.           SET EXACT OFF
  2265.           TONES=.T.
  2266.  
  2267.  
  2268.           5.5  Creating the MAILLIST Configuration File
  2269.  
  2270.                The Mailing List Configuration File defaults to the
  2271.           following name: MAILLIS2.CFG.  We could have changed this by
  2272.           adding a line in the application initialization file which
  2273.           said something like CFG_SPEC="MAILLIS2.XYZ".  Using your
  2274.           favorite editor, type the following commands into the
  2275.           MAILLIS2.CFG file:
  2276.  
  2277.           INDXNAME="FULLNAM2,IDCODE2,ZIP2"
  2278.           LEADINDX="FULLNAM2"
  2279.  
  2280.                Note that we have set up the indexes here rather than in
  2281.           the application configuration file.  This is pretty much up
  2282.           to you.  It is probably more desirable to at least set the
  2283.           LEADINDX in the file configuration spec since you may have
  2284.           multiple applications using the same data base with different
  2285.           lead indexes.
  2286.  
  2287.  
  2288.  
  2289.           5.6  Creating the Data Entry Screen
  2290.  
  2291.                The data entry screen's file name defaults to
  2292.           MAILLIS2.FMT.  This, too, could have been changed by
  2293.           including the FMT_SPEC memory variable in the application
  2294.           configuration file with a file name of your choice.
  2295.  
  2296.                You may type the following information into your
  2297.           MAILLIS2.FMT file or merely copy the MAILLIST.FMT file which
  2298.           is where this data came from:
  2299.  
  2300.  
  2301.  
  2302.  
  2303.  
  2304.  
  2305.  
  2306.  
  2307.  
  2308.  
  2309.  
  2310.  
  2311.  
  2312.  
  2313.  
  2314.                                          39
  2315.           @ 0,0 SAY "Record "+LTRIM(STR(RECNO(),5))+" of"+             
  2316.                      LTRIM(STR(RECCOUNT(),5)) + IIF(DELETED(), 
  2317.                      '** DEL **','')
  2318.           @  1,0 SAY "                dLITE Mailing List Manager"
  2319.           @  3,0 SAY "     Last Name:                  First Name MI:"
  2320.           @  5,0 SAY "    ID Code(s):               Category Code(s):"
  2321.           @  7,0 SAY " Salutation                               Title"
  2322.           @  9,0 SAY "   Company:                              Phone:"
  2323.           @ 11,0 SAY " Mail Addr:"
  2324.           @ 13,0 SAY " City                   State             Zip  "
  2325.           @ 15,0 SAY " Contact Dt              Comments"
  2326.           @ 17,0 SAY "    Code1                   Code2         Code3"
  2327.           @  3,17 GET LASTNAME    PICTURE "XXXXXXXXXXXXXXXXXX"
  2328.           @  3,53 GET FIRSTMI     PICTURE "XXXXXXXXXXXXXXXXX"
  2329.           @  5,17 GET IDCODE      PICTURE "XXXXXXXXXXXXXXX"
  2330.           @  5,53 GET CATEGORY    PICTURE "XXXXXXXXXXXXXXXXXXXX"
  2331.           @  7,12 GET SALUTATION  PICTURE "XXXXXXXXXXXXXXXXXXXXXXXXXX"
  2332.           @  7,50 GET TITLE       PICTURE "XXXXXXXXXXXXXXXXXXXXXXXXXX"
  2333.           @  9,12 GET COMPANY     PICTURE "XXXXXXXXXXXXXXXXXXXXXXXXXX"
  2334.           @  9,53 GET PHONE       PICTURE "XXXXXXXXXXXX"
  2335.           @ 11,12 GET ADDRESS1    PICTURE "XXXXXXXXXXXXXXXXXXXXXXXXXX"
  2336.           @ 11,46 GET ADDRESS2    PICTURE "XXXXXXXXXXXXXXXXXXXXXXXXXX"
  2337.           @ 13, 6 GET CITY        PICTURE "XXXXXXXXXXXXXXXXXXXX"
  2338.           @ 13,34 GET STATE       PICTURE "XXXXXXXXXX"
  2339.           @ 13,50 GET ZIP         PICTURE "XXXXXXXXXX"
  2340.           @ 13,67 GET COUNTRY     PICTURE "XXXXXXXXXX"
  2341.           @ 15,12 GET CONTACTDT PICTURE "99/99/99" VALID
  2342.                                                   CONTACTDT<=DATE()
  2343.           @ 15,34 GET COMMENTS     
  2344.           @ 17,10 GET CODE1       PICTURE "XXXXXXXXXXXXXXX"
  2345.           @ 17,34 GET CODE2       PICTURE "XXXXXXXXXXXXXXX"
  2346.           @ 17,58 GET CODE3       PICTURE "XXXXXXXXXXXXXXX"
  2347.  
  2348.                A few words of explanation may help.  First, if a
  2349.           PICTURE command is nothing more than X's, then it can be
  2350.           left out since that is dLITE's default.  The screen above was
  2351.           generated using MenuMaker which automatically includes the
  2352.           PICTURE command for every field.  Second, every line must
  2353.           begin with @.  The second line is merely a continuation of
  2354.           the first line which would not fit correcly in this manual. 
  2355.           Finally, note that the GETs could have been included on the
  2356.           same line as the SAYs.  In this case, the location of the
  2357.           data entry field will be one space to the right of the last
  2358.           character of the SAY prompt.
  2359.  
  2360.  
  2361.  
  2362.  
  2363.  
  2364.  
  2365.  
  2366.  
  2367.  
  2368.  
  2369.  
  2370.  
  2371.  
  2372.                                          40
  2373.           5.7  Creating the PASTE File Specification
  2374.  
  2375.                The paste file spec file name defaults to MAILLIS2.PST. 
  2376.           This can be changed by including the PST_SPEC memory
  2377.           variable in the application configuration file with a file
  2378.           name of your choice.
  2379.  
  2380.                Type the following information into your MAILLIS2.PST
  2381.           file or merely copy the MAILLIST.PST file which is where this
  2382.           data came from:
  2383.  
  2384.           PASTE TRIM(FIRSTMI)+" "+TRIM(LASTNAME)+CHR(13)
  2385.           PASTE ADDRESS1+CHR(13)+  
  2386.           IIF(ADDRESS2<>SPACE(30),ADDRESS2+CHR(13),"")
  2387.           PASTE TRIM(CITY)+", "+TRIM(STATE)+" "+TRIM(ZIP)+" "+    
  2388.           TRIM(COUNTRY)+CHR(13)+CHR(13)
  2389.           PASTE "Dear "+TRIM(SALUTATION)+":"+CHR(13)+CHR(13)
  2390.           KEYBOARD CHR(27)
  2391.  
  2392.                Note that all lines in the PASTE file should begin with
  2393.           the word PASTE.  The continuation lines are necessary only
  2394.           for purposes of printing in this User's Guide.
  2395.  
  2396.                We already have discussed use of the TRIM() function to
  2397.           remove trailing spaces from fields.  The only new function
  2398.           used here is the immediate IF function, IIF(), which is used
  2399.           to determine whether the second line address is blank and
  2400.           whether to paste this field into the foreground
  2401.           specification.  The last line stuffs the keyboard buffer with
  2402.           an ESCape code to make dLITE disappear after the paste is
  2403.           completed.
  2404.            
  2405.  
  2406.           5.8  Creating the OUTPUT File Specification
  2407.  
  2408.                The output file spec file name defaults to MAILLIS2.OUT. 
  2409.           This can be changed by including the OUT_SPEC memory
  2410.           variable in the application configuration file with a file
  2411.           name of your choice.
  2412.  
  2413.                Type the following information into your MAILLIS2.OUT
  2414.           file or merely copy the MAILLIST.OUT file which is where this
  2415.           data came from:
  2416.  
  2417.           DISPLAY LASTNAME,FIRSTMI,CITY,PHONE WHILE .NOT. EOF() OFF
  2418.  
  2419.                Note that the selection criteria are NOT entered into
  2420.           the output file spec.  These are provided by the user at run-
  2421.           time.  dLITE itself will set the necessary filter before
  2422.           executing the output file spec.  
  2423.  
  2424.                The WHILE .NOT. EOF() instructs dLITE to process the
  2425.           DISPLAY command for every record meeting the search criteria
  2426.           until end-of-file is reached.
  2427.  
  2428.  
  2429.  
  2430.                                          41
  2431.                The OFF keyword instructs dLITE not to display record
  2432.           numbers for the records which qualify for output.  Removing
  2433.           the word "OFF" would add a display field for record numbers
  2434.           of each record which qualifies for output.
  2435.  
  2436.                Note that the OUTPUT file spec could also be used to
  2437.           PASTE information for multiple records into a foreground
  2438.           task.  In this case, the developer would substitute the word
  2439.           "PASTE" for the word "DISPLAY."  Do not use the OFF command
  2440.           with PASTE.  In addition, the WHILE .NOT. EOF() expression is
  2441.           required if multiple record output is desired.
  2442.  
  2443.  
  2444.  
  2445.           5.9  Creating OUTPUT Initialization and Reset Files
  2446.  
  2447.                The output initialization file name defaults to
  2448.           MAILLIS2.INI.  This can be changed by including the INI_SPEC
  2449.           memory variable in the application configuration file with a
  2450.           file name of your choice.
  2451.  
  2452.                Type the following information into your MAILLIS2.INI
  2453.           file or merely copy the MAILLIST.INI file which is where this
  2454.           data came from:
  2455.  
  2456.           OUTINDX="FULLNAME"
  2457.           SET EXACT OFF
  2458.           SET HEADING ON
  2459.  
  2460.                The initialization file is used to "set up" the output
  2461.           job before it is run.  The OUTINDX memory variable allows the
  2462.           developer to set the lead index for the OUTPUT job without
  2463.           disturbing the current lead index used for data entry.  If no
  2464.           OUTINDX is specified, then the current LEADINDX will be used
  2465.           to order the output.
  2466.  
  2467.                SET EXACT OFF determines the type of record matches
  2468.           which are made with the selection criteria.  SET HEADING ON
  2469.           specifies that field name headings will be displayed above
  2470.           the DISPLAY output.  If the developer specifies SET HEADING
  2471.           OFF then no field headings are displayed.
  2472.  
  2473.  
  2474.  
  2475.  
  2476.  
  2477.  
  2478.  
  2479.  
  2480.  
  2481.  
  2482.  
  2483.  
  2484.  
  2485.  
  2486.  
  2487.  
  2488.                                          42
  2489.           APPENDIX A --  Listing of dLITE-Supported Commands
  2490.  
  2491.           @ row,col SAY <expr> PICTURE <expr>
  2492.           ACCEPT <prompt> TO <memvar>
  2493.           AVERAGE <fieldlist> FOR <expr> WHILE <expr> TO <memvarlist>
  2494.           CLEAR
  2495.           CLEAR GETS
  2496.           CLOSE DATABASES
  2497.           CLOSE WINDOW <window name>
  2498.           CONTINUE
  2499.           COUNT <scope> FOR <expr> WHILE <expr> TO <memvar>
  2500.           DELETE <scope> FOR <expr> WHILE <expr>
  2501.           DIR <path><filespec>
  2502.           DISPLAY MEMORY
  2503.           DISPLAY STATUS
  2504.           DISPLAY STRUCTURE
  2505.           FIND <char string>
  2506.           GO <record number>
  2507.           GO TOP
  2508.           GO BOTTOM
  2509.           INDEX ON <expr> TO <filename>
  2510.           INPUT <prompt> TO <memvar>
  2511.           KEYBOARD <expr>
  2512.           LOCATE <scope> FOR <expr> WHILE <expr>
  2513.           PRIVATE <memvarlist>
  2514.           PUBLIC <memvarlist>
  2515.           READ
  2516.           RECALL <scope> FOR <expr> WHILE <expr>
  2517.           REINDEX
  2518.           RELEASE <memvar>
  2519.           REPLACE <scope> <field> WITH <expr> FOR <expr> WHILE <expr>
  2520.           SEEK <expr>
  2521.           SELECT <workarea/alias>
  2522.           SET <parameter> <value>  (See Appendix B)
  2523.           SKIP <numeric expr>
  2524.           SOUND <freq>,<duration>
  2525.           STORE <expr> TO <memvar>
  2526.           STORE <exprlist> TO ARRAY <memvar>
  2527.           SUM <scope> <exprlist> TO <memvarlist> FOR <expr> WHILE
  2528.           <expr>
  2529.           USE <filename> INDEX <indexname(s)> ALIAS <aliasname>
  2530.           WAIT 
  2531.           WAIT TO <memvar>
  2532.  
  2533.  
  2534.  
  2535.  
  2536.  
  2537.  
  2538.  
  2539.  
  2540.  
  2541.  
  2542.  
  2543.  
  2544.  
  2545.  
  2546.                                          43
  2547.           APPENDIX B --  Listing of dLITE-Supported SET Commands
  2548.  
  2549.           SET BELL ON/OFF
  2550.           SET CENTURY ON/OFF
  2551.           SET COLOR TO <std>,<enhanced>,<border>
  2552.           SET DECIMALS TO <numeric expr>
  2553.           SET DELETED ON/OFF
  2554.           SET EXACT ON/OFF
  2555.           SET FILTER TO <expression>
  2556.           SET FIXED ON/OFF
  2557.           SET HEADING ON/OFF
  2558.           SET INDEX TO <file list>
  2559.           SET KEY <numeric expr> TO <char expr>
  2560.           SET KEYS ON/OFF
  2561.           SET ORDER TO <numeric expr>
  2562.           SET PASTEDELAY TO <numeric expr>
  2563.           SET PATH TO <directory path list>
  2564.           SET STATUS ON/OFF
  2565.           SET WINDOW TO <char expr> POSITION <row,col> SIZE
  2566.           <hght,width>
  2567.           SET WINDOW NEXT
  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.  
  2598.  
  2599.  
  2600.  
  2601.  
  2602.  
  2603.  
  2604.                                          44
  2605.           APPENDIX C --  Listing of dLITE-Supported Functions
  2606.  
  2607.           ABS(numeric expr)
  2608.           ASC(char expr)
  2609.           AT(exprA,exprB)
  2610.           BOF()
  2611.           CDOW(date expr)
  2612.           CHR(numeric expr)
  2613.           CMONTH(date expr)
  2614.           COL()
  2615.           CTOD(char expr)
  2616.           DATE()
  2617.           DAY(date expr)
  2618.           DBF()
  2619.           DELETED()
  2620.           DOW(date expr)
  2621.           DTOC(date expr)
  2622.           EOF()
  2623.           EVAL(char expr)
  2624.           EXP(numeric expr)
  2625.           FIELD(numeric expr)
  2626.           FILE(filename)
  2627.           FOUND()
  2628.           GETENV(char expr)
  2629.           IIF(logicexpr,exprA,exprB)
  2630.           INKEY()
  2631.           INT(numeric expr)
  2632.           ISALPHA(char expr)
  2633.           ISDIGIT(char expr)
  2634.           ISLOWER(char expr)
  2635.           ISUPPER(char expr)
  2636.           KEYEXP(numeric expr)
  2637.           LASTKEY()
  2638.           LEFT(char expr,numeric expr)
  2639.           LEN(char expr)
  2640.           LOG(numeric expr)
  2641.           LOWER(char expr)
  2642.           LTRIM(char expr)
  2643.           LUPDATE()
  2644.           MAX(numexprA,numexprB)
  2645.           MEMORY()
  2646.           MIN(numexprA,numexprB)
  2647.           MOD(numexprA,numexprB)
  2648.           MONTH(date expr)
  2649.           NDX(numeric expr)
  2650.           RADIX(numeric expr,radix,width)
  2651.           RAWKEY()
  2652.           READKEY()
  2653.           RECCOUNT()
  2654.           RECNO()
  2655.           RECSIZE()
  2656.           REPLICATE(char expr,numeric expr)
  2657.           RIGHT(char expr,numeric expr)
  2658.           ROUND(numexprA,numexprB)
  2659.           ROW()
  2660.  
  2661.  
  2662.                                          45
  2663.           RTRIM(char expr)
  2664.           SPACE(numeric expr)
  2665.           SQRT(numeric expr)
  2666.           STR(numeric expr,length,decimals)
  2667.           STUFF(char expr,start,num,newdata)
  2668.           SUBSTR(char expr,start,num)
  2669.           TIME()
  2670.           TRANSFORM(expr,picture)
  2671.           TRIM(char expr)
  2672.           TYPE(char expr)
  2673.           UPPER(char expr)
  2674.           VAL(char expr)
  2675.           WCOL()
  2676.           WHEIGHT()
  2677.           WROW()
  2678.           WWIDTH()
  2679.           YEAR(date expr)
  2680.  
  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.  
  2716.  
  2717.  
  2718.  
  2719.  
  2720.                                          46
  2721.           OTHER PRODUCT OFFERINGS
  2722.  
  2723.           WAMPUM 4.2 -- The Ultimate dLITE Companion
  2724.  
  2725.                "A picture is worth a thousand words" goes the old
  2726.           adage.  Unfortunately, adding pictures to data bases always
  2727.           has been a $1000 proposition ... until now!  We are pleased
  2728.           to announce the marriage of industry-standard, dBASE-
  2729.           compatible data bases with industry-standard .PCX-compatible
  2730.           graphics.  WAMPUM 4.2 allows even novice computer users to
  2731.           incorporate pictures, signatures, or any other graphics
  2732.           images in a standard dBASE data base.  And WAMPUM can be
  2733.           loaded as a 20K TSR keeping it one keystroke away from your
  2734.           favorite text-based applications.  Single-user licenses
  2735.           remain $50 while unlimited-user network licenses are $150. 
  2736.           Registration entitles users to 90 days free technical support
  2737.           by phone, mail, or BBS plus the latest WAMPUM version of
  2738.           their choice. 
  2739.  
  2740.                Considering that WAMPUM 4.2 was developed and runs in a
  2741.           non-graphics software environment today, we hope you will
  2742.           give it a careful look.  There is no other data base product
  2743.           for under $1,000 that even comes close in terms of features
  2744.           or graphics support much less the ability to load as a 20K
  2745.           TSR.  A detailed product summary follows.
  2746.  
  2747.                One of the data base granddaddy's of the ShareWare
  2748.           revolution, WAMPUM provides the richest assortment of data
  2749.           base management functions for the lowest cost of any data
  2750.           base product in the world!  With version 4.2, WAMPUM can be
  2751.           loaded as a "pop-up" TSR occupying less than 20K of RAM while
  2752.           your other favorite programs remain active in the foreground. 
  2753.           It provides fully-relational, menu-driven data base manage-
  2754.           ment using dBASE III-compatible data bases.  Virtually all
  2755.           features of the dBASE language are supported including
  2756.           dBASE-compatible reports and labels.  Plus WAMPUM adds a host
  2757.           of features of its own including PowerBrowse (a spreadsheet-
  2758.           like data base manager), Form Letters, a Phone Dialer, and
  2759.           many other original touches too numerous to mention. And now
  2760.           WAMPUM supports creation of GRAPHICS DATA BASES with picture
  2761.           fields using .PCX-compatible graphics files.   Computer
  2762.           Shopper hailed WAMPUM as "a gift-horse you can afford to look
  2763.           in the mouth."  WAMPUM's form letter generator was rated by
  2764.           Data Based Advisor as the "only tool you'll ever need."  And
  2765.           PC World rated WAMPUM as "comparable to dBASE III in features
  2766.           and power."
  2767.  
  2768.           System requirements:  512K PC with DOS 2.1 or higher and a
  2769.           hard disk.  Automatic record and file locking network support
  2770.           is provided with 640K and DOS 3.1 or higher.  Display of
  2771.           graphics fields requires a VGA, EGA, or Hercules-compatible
  2772.           graphics card and monitor.
  2773.  
  2774.  
  2775.  
  2776.  
  2777.  
  2778.                                                  47
  2779.  
  2780.              WARD MUNDY SOFTWARE, 4160 CLUB DRIVE, ATLANTA, GA 30319
  2781.  
  2782.  
  2783.                       C U S T O M E R    I N V O I C E
  2784.  
  2785.           +----------------------------------------------------------+ 
  2786.           |Customer:                          |Order Date:           |
  2787.           |                                   |----------------------|
  2788.           |                                   |Shipped Dt:           | 
  2789.           |                                   |----------------------|
  2790.           |                                   |Invoice No:           |
  2791.           |                                   |----------------------|
  2792.           |                                   |                      |
  2793.           +----------------------------------------------------------+
  2794.                                                                        
  2795.                                                                      
  2796.           +----------------------------------------------------------+
  2797.           |QUANTITY |DESCRIPTION              |UNIT PRICE|  AMOUNT   | 
  2798.           |---------|-------------------------|----------|-----------|
  2799.           |         | dLITE License Fee perPC |  25.00   |           |
  2800.           |         |                         |          |           |
  2801.           |         | MenuMaker for dLITE     |  20.00   |           |
  2802.           |         |                         |          |           |
  2803.           |         | dLITE Developer's Vers  |          |           |
  2804.           |         | & Developer's Guide     |   N/C*   |           |
  2805.           |         |                         |          |           |
  2806.           |         | dLITE 2.0 ShareWare Disk|   5.00   |           |
  2807.           |         |                         |          |           |
  2808.           |         | WAMPUM-D Single User    |  50.00   |           |
  2809.           |         |                         |          |           |
  2810.           |         | WAMPUM-D Network Lic    | 150.00   |           |
  2811.           |         |                         |          |           |
  2812.           |         | WAMPUM Soft-Bound Manual|  20.00   |           |
  2813.           |         |                         |          |           |
  2814.           |         | WAMPUM ShareWare Disk   |   5.00   |           |
  2815.           |         |                         |          |           |
  2816.           |         | Foreign Shipping Surchg |   5.00   |           |
  2817.           |         |                         |          |           |
  2818.           |         | Shipping & Handling     |   5.00   |    5.00   |
  2819.           |         |                         |----------|-----------|
  2820.           |         |                         |  TOTAL   |           |
  2821.           +---------------------- Thank You!-------------------------+
  2822.                                                                      
  2823.           TERMS: Please make checks payable to Ward Mundy, 4160 Club
  2824.           Drive, Atlanta, GA 30319. Checks in U.S. dollars drawn on
  2825.           U.S. banks only please.  VISA/MasterCard orders must include
  2826.           card type, card number, expiration date, and signature.
  2827.  
  2828.           * Latest Developer's Version and Documentation are free with
  2829.           registration provided the correct shipping and handling fee
  2830.           accompanies order.
  2831.