
           GET COMFORTABLE
  DBASE is a programming language that lets you easily manipulate 
random-access files and databases. Invented by Wayne Ratliff, was 
published by Ashton-Tate, which sold over a million copies. In 
1991, Borland bought Ashton-Tate, so now DBASE is published by 
Borland.

          Versions of DBASE
  The original version of DBASE was called DBASE 2. It ran on the 
IBM PC and also on computers using the CP/M operating system.
  Then came an improvement called DBASE 3, then DBASE 3+, then 
DBASE 4, then DBASE 4 version 1.1, then DBASE 4 version 1.5, then 
DBASE 4 version 2, then DBASE 5. Those improvements run just on 
the IBM PC (and clones). Two versions of DBASE 5 are available: 
one for DOS, the other for Windows.
  A company called Fox Software invented DBASE versions that run 
faster, contain extra features, and cost less! Microsoft bought 
Fox Software, so now Fox's versions are published by Microsoft.
  Fox's versions of DBASE are called FOXBASE (which resembles 
DBASE 3), FOXBASE+ (which resembles DBASE 3+), FOXPRO (which 
resembles DBASE 4), and FOXPRO 2 (which goes beyond DBASE 4), 
FOXPRO 2.5 (which goes even further), and FOXPRO 2.6 (which goes 
even further).
  Two versions of FOXPRO 2.6 are available: one for DOS, the 
other for Windows. A Mac version of FOXPRO 2.6 isn't available 
yet, but you can get a Mac version of FOXPRO 2.5.
  Discount dealers sell each of those versions (FOXPRO 2.6 DOS, 
FOXPRO 2.6 Windows, and FOXPRO 2.5 Mac) for about $90, though 
that temporary low price will probably rise.

       What's in this chapter
  I'll explain how to use DBASE 4 version 1.5. (Newer versions of 
DBASE are similar.)
  I'll also explain the differences in DBASE 3, DBASE 3+, DBASE 4 
version 1.1, and FOXPRO 2. (Newer versions of FOXPRO are similar 
to FOXPRO 2.)

        Hardware requirements
  Fancy versions (such as DBASE 4, FOXBASE+, FOXPRO, and FOXPRO 
2) require a hard disk. If you lack a hard disk, use DBASE 3 or 
3+.
  DBASE 4 requires 640K of RAM. FOXPRO and FOXPRO 2 require 512K. 
If you don't have so much RAM, use DBASE 3 or 3+, which require 
just 384K.
  To use FOXPRO 2's advanced commands, you need at least 1M of 
RAM and either a 386 or 486 CPU. To use FOXPRO 2 easily, you need 
a mouse.

        Copy to the hard disk
  When you buy DBASE 4 version 1.5, you get a big box that 
contains five manuals, four 1.2M floppies, and five 720K 
floppies. (If your disk drive needs 360K floppies instead, you
can get them by mailing Borland $15 extra.)
                                         Here's how to copy DBASE 
4 version 1.5 onto your hard disk. (But if you're sharing the 
computer, ask your colleagues whether they did this step 
already!)
                                         Turn on the computer 
without any floppy in drive A. When you see the C prompt, put the 
DBASE Install Disk into drive A. Type ``a:''. You'll see an A 
prompt. Type ``install''.
                                         The computer will say 
``DBASE 4 Installation''. Press ENTER twice.
                                         The computer will say 
``Software Registration''. Type your name and press ENTER. Type 
your company's name (if any) and press ENTER. Type your serial 
number, which is on the label of the 5-inch DBASE Install Disk. 
(If you remove that disk from the drive to peek at the serial 
number, put that disk back in the drive when you finish peeking.)
                                         While holding down the 
Ctrl key, press the END key.
                                         The computer will ask, 
``Do you wish to install caching?'' To keep the installation 
procedure simple, press N.
                                         When the computer tells 
you, insert the other DBASE disks, and press ENTER after each 
insertion.
                                         The computer will say, 
``DBASE 4 can be run from any directory if your AUTOEXEC.BAT file 
contains the necessary information.'' To keep your AUTOEXEC.BAT 
file simple, press the Esc key.
                                         The computer will say, 
``DBASE 4 will not run properly unless adequate file and buffer 
space is reserved.'' Press ENTER. The computer will make your 
CONFIG.SYS file says ``files=99''.
                                         The computer will say, 
``The installation of DBASE 4 is complete.'' Press ENTER.
                                         Turn off the computer so 
you can start fresh.
                                          Old versions DBASE 3 
comes on three 360K disks. The first disk is the program itself; 
the second disk is a spare copy of the program, in case the first 
disk gets damaged; the third disk contains examples and 
utilities.
                                         DBASE 3+ comes on seven 
360K disks. Two disks contain the program itself, and the other 
five disks are supplementary.
                                         Instead of copying DBASE 
3 or 3+ to the hard disk, try using the procedures described in 
the next section.
                                         DBASE 4 version 1.1 
comes on ten 360K disks, which you install by using a procedure 
similar to DBASE version 1.5.
                                          FOXPRO 2 When you buy 
FOXPRO 2, you get a big box that contains nine manuals and four 
1.2M disks.
                                         Here's how to copy 
FOXPRO 2 onto your hard disk. (I assume you have a 386 or 486, at 
least 1M of RAM, and a mouse. I assume you've practiced using 
the mouse with other software, such as Windows or Deluxe Paint.)
                                         Turn on the computer 
without any floppy in drive A. When you see the C prompt, put 
FOXPRO Disk 1 into drive A. Type ``a:install''.
                                         The computer will say, 
``Fox Software Product Installation''. Press ENTER 6 times.
                                         The computer will say, 
``Enter your FOXPRO Serial Number''. Type the Serial Number 
(which came on a sheet of paper enclosed with the disks).
                                         The computer will say, 
``Enter your FOXPRO Activation Key''. Type the hidden Activation 
Key (which is hidden on the SECOND sheet of paper enclosed with 
the disks; do NOT type the DEMONSTRATION Activation Key).
                                         The computer will say, 
``Please insert Disk #2''. Insert FOXPRO Disk 2 into drive A, and 
press ENTER.
                                         The computer will say, 
``Please insert Disk #3''. Insert FOXPRO Disk 3 into drive A, and 
press ENTER three times.
                                         The computer will say, 
``Programs To Install''. Using the mouse, click the ``Check All'' 
button, then click the ``Install'' button.
                                         The computer will say, 
``Please insert Disk #4''. Insert FOXPRO Disk 4 into drive A, and 
press ENTER.
                                         The computer will say, 
``Installation Complete''. Press ENTER.
                                         Turn off the computer so 
you can start fresh.
             Start DBASE
  To start using DBASE 4, turn on the computer without any floppy 
in drive A.
  If you've put the DO.BAT file onto your hard disk (as I 
recommended in the MS-DOS chapter), type ``do dbase''. If you 
have not put DO.BAT onto your hard disk, you must type ``cd 
dbase'' and then ``dbase''.
  (If you're using DBASE 4 version 1.0 or 1.1, the computer will 
say ``This software is licensed''. Press ENTER.)
  The computer will say ``DBASE 4 CONTROL CENTER''. Press the Esc 
key. The computer will ask, ``Are you sure?'' Press the Y key.
  At the screen's lower left corner, you'll see a period, which 
is called the dot prompt. After the dot prompt, you can type any 
DBASE command you wish.
  Press the CAPS LOCK key, so any commands you type will be 
capitalized.
   Old versions Here's how to start using DBASE 3 and 3+.
  Without putting any DBASE floppies into the drives, turn on the 
computer. Wait for a DOS prompt to appear.
  Put DBASE System Disk 1 in drive A.
  Make sure you see an A prompt. (If you're using a hard disk, do 
that by typing ``a:'' after the C prompt.)
  Peculiarity: if you're using DBASE 3+ version 1.1 and nobody's 
ever used your System Disk 1 before, you must give it an ``ID'' 
by following the instructions in the ``Getting Started'' booklet 
that came with the disk.
  Regardless of which version of DBASE 3+ you're using, your next 
step is to type ``dbase'' after the A prompt.
  If the bottom of the screen says ``Press ENTER to assent to the 
License Agreement'', press ENTER. If the computer says ``Insert 
System Disk 2'', do so and press ENTER. If the bottom right 
corner of the screen says ``Exit ___ Esc'', press the Esc key.
  At the screen's lower left corner, you'll see a period, which 
is the dot prompt. Press the CAPS LOCK key, so any commands you 
type will be capitalized.
  If you have a hard disk, type ``SET DEFAULT TO C''. If you lack 
a hard disk, put a blank formatted disk in drive B and type ``SET 
DEFAULT TO B''.
   FOXPRO 2 Here's how to start using FOXPRO 2.
  Turn on the computer without any floppy in drive A.
  When you see the C prompt, type ``cd foxpro2''. When you see 
the FOXPRO2 prompt, type ``foxprox''. (If you don't have enough 
RAM to run ``foxprox'', type ``fox'' instead.)
  In the middle of the screen, you'll see a rectangle that has 
the word ``Command'' at the top of it. That rectangle is called 
the ``Command Window''. To move that rectangle to a different 
part of the screen, use the mouse: point at the word ``Command'', 
and drag it. To change the rectangle's size, point at the dot in 
the rectangle's bottom right corner, and drag it.
  For best results, drag until the rectangle consumes most of the 
top third of the screen.
  Press the CAPS LOCK key, so any commands you type will be 
capitalized.

                                                    Arithmetic
                                         If you want the computer 
to print the answer to 5+2, say ``? 5+2'' after the dot prompt, 
so your screen looks like this:
. ? 5+2
The computer will print:
         7
                                         Notice that DBASE, like 
BASIC, uses a question mark to mean print. So ``? 5+2'' means: 
print 5+2. In DBASE, you must use the question mark; do not type 
the word PRINT.
                                         DBASE, like BASIC, uses 
the symbols +, -, *, /, ^, E, and parentheses.
                                         Unfortunately, DBASE 
gives the wrong answer to -5^2. According to mathematicians, -5^2 
means ``the negative of 5^2'', which is ``the negative of 25'', 
which is -25. DBASE mistakenly thinks that -5^2 means ``the 
square of -5'' and therefore prints 25.
                                          FOXPRO 2 You don't see 
a dot prompt. Just type:
? 5+2
Your typing will appear in the Command Window. At the end of your 
typing, when you press the ENTER key, the computer will print 
this answer at the screen's bottom:
 7

                                                      Strings
                                         DBASE, like BASIC, lets 
you use quotation marks to create strings. So if you say ___ 
. ? "I LOVE YOU"
the computer will print:
I LOVE YOU

                                               Multiple computations
                                         You can print several 
computations on the same line. For example, if you say ___ 
. ? 2+3,2-3,2*3,2/3
the computer will print:
         5         -1          6          0.67

                                                       QUIT
                                         When you finish using 
DBASE, do not turn off the computer's power. Turning off the 
power will wreck the data files you've been working on.
                                         Instead of turning off 
the power, say QUIT, so your screen looks like this:
. QUIT
                                         That QUIT command makes 
the computer put the finishing touches on all your data files. 
Then the computer will stop using DBASE, and will say:
C:\>
                                         After the ``C:\>'', you 
can give any DOS command, or turn off the power.

         CREATE A DATA FILE
  Let's create a data file about families in your neighborhood. 
Begin by saying:
. CREATE FAMILIES
That makes the computer create, on your disk, a data file named 
``FAMILIES.DBF''. (The ``.DBF'' stands for ``Data Base File''.)

         Complete the chart
  Let's store each family's NAME, annual INCOME, and POPULATION 
(number of people in the family). Suppose the longest family NAME 
is Anagnostopoulos, the highest INCOME is 125000.00, and the 
largest POPULATION is 13 (because the family includes a mother, 
father, and 11 kids).
  To prepare the computer to handle such data, feed the computer 
this chart:
Ŀ
 Num  Field Name  Field Type  Width  Dec  Index 
͵
   1  NAME        Character     15          N   
   2  INCOME      Numeric        9     2    N   
   3  POPULATION  Numeric        2     0    N   
                                                
                                                

  The second column says that for each family we're storing these 
fields: the family's NAME, INCOME, and POPULATION. The left 
column numbers those fields: 1, 2, and 3. The third column says 
that each family's NAME is a string of characters, and that each 
family's INCOME and POPULATION are numbers. The remaining columns 
say that each NAME can be up to 15 characters long (such as 
``Anagnostopoulos''), each INCOME can be up to 9 symbols long 
(such as 125000.00) and has 2 digits after the decimal point, 
each POPULATION can be up to 2 digits long (such as 13) and has 
no decimals, and No field is indexed.
  As soon as you say CREATE FAMILIES (and press the ENTER key at 
the end of that line), the computer asks you to feed it that 
chart. To help you start, the computer puts this on the screen:
Ŀ
 Num  Field Name  Field Type  Width  Dec  Index 
͵
   1              Character                 N   
                                                
                                                
                                                
                                                

Just fill in all the other entries in the chart ___ and press the 
ENTER key after each entry. Here are the details. . . . 
  Begin by typing NAME (by pressing the N key, then A, then M, 
then E). Press the ENTER key at the end of that entry.
  Since the computer's already typed the next entry for you 
(Character), press the ENTER key again.
  Type the next entry (15). Press ENTER.
  Since the computer's already typed the next entry for you (N), 
press the ENTER key again.
  Type the next entry (INCOME). Press ENTER.
  Start typing the next entry (Numeric). As soon as you type the 
N of Numeric, the computer automatically types the ``umeric'' for 
you and presses the ENTER key for you.
  Type the next entry (9); press ENTER. Type the next entry (2); 
press ENTER. Accept the N, by pressing ENTER again.
                                         Type the next entry 
(POPULATION). Since POPULATION is so long, when you finish typing 
it the computer will automatically beep (to warn you not to make 
it even longer!) and press ENTER for you.
                                         Type the next entry (N) 
and the next entry (2); press ENTER. Type the final entry (0). 
Since you've finished typing the entire table, tap the END key 
while holding down the CONTROL key.
                                          Old versions DBASE 3 
and 3+ omit the Num and Index columns. DBASE 3 says Char/text 
instead of Character. When you tap the END key wwhile holding 
down the CONTROL key, DBASE 3+ says ``Press ENTER to confirm''; 
DBASE 3 says ``Hit RETURN to confirm''; obey those versions by 
pressing the ENTER/RETURN key.
                                          FOXPRO 2 Feed the 
computer this chart:
  Name         Type    Width    Dec
Ŀ
NAME        Character   15        
INCOME      Numeric      9       2
POPULATION  Numeric      2       0
                                  
                                  

                                         Begin by typing NAME. 
Press the TAB key at the end of that entry.
                                         Since the computer's 
already typed the next entry for you (Character), press the TAB 
key again.
                                         Type the next entry 
(15). Press TAB.
                                         Type the next entry 
(INCOME). Press TAB.
                                         Start typing the next 
entry (Numeric). As soon as you type the N of Numeric, the 
computer automatically types the ``umeric'' for you and presses 
the TAB key for you.
                                         Type the next entry (9); 
press TAB. Type the next entry (2); press TAB. Type the next 
entry (POPULATION); press TAB. Type the next entry (N) and the 
next entry (2). The computer will automatically type the final 0.
                                         Using the mouse, click 
the word ``OK''.

           Input the data
  The computer will ask:
Input data records now? (Y/N)
Tap the Y key, which means Yes.
  On the screen, you'll see this:
NAME                       
INCOME            .  
POPULATION    
Notice that the NAME box is wide enough to hold 15 characters, 
the INCOME box already includes the decimal point, and the 
POPULATION box is wide enough to hold a 2-digit number.
  Fill in the boxes. Here's how.
  Type the first family's name (SMITH). As you type SMITH, you'll 
see it appear in the first box. When you finish typing SMITH, 
press ENTER.
  Type family's income (24100.19). As you type 24100.19, you'll 
see it appear in the second box. When you type the decimal point, 
the number will automatically slide toward the right edge of the 
box, so that the decimal point you typed is at the same place as 
the decimal point that was already in the box. When you finish 
typing the number, the computer will automatically beep and move 
you to the third box.
  Type the family's population (4). You'll see it appear in the 
third box.
  When you press the ENTER key afterwards, the computer will 
record what you typed. Then the boxes will become blank again, so 
that you can enter a second family's data.
  After entering the second family's data (and pressing the ENTER 
key if necessary), the screen will go blank again, so you can 
enter a third family's data.
  Enter data for as many families as you wish.
  When you've typed the data for the last family, and you're 
still looking at that data on the screen, tap the END key while 
holding down the CONTROL key.
  The computer will display the dot prompt, so that you can give 
another DBASE command.
   FOXPRO 2 When you finish typing an entry (such as SMITH), you 
can press either the ENTER key or the TAB key.
  In a numeric field (such as INCOME), you don't see the decimal 
point until you type it.
  When you finish typing the first family's data, that data does 
NOT disappear from the screen; instead, the computer lets you 
type the second family's data underneath the first family's.
  When you finish typing the last family's data, click the close 
box (which is the yellow square in the window's top left corner).


            SEE YOUR DATA
                                         After you've created a 
data file, you can say:
. LIST
That makes the computer list your file's information onto the 
screen, so the screen will look like this:
Record#  NAME               INCOME POPULATION
      1  SMITH            24100.19          4
      2  ANAGNOSTOPOULOS  65143.26          5
      3  SANCHEZ          50000.00         13
      4  JONES             9873.00          2
      5  SZCZEPANKIEWICZ 125000.00          4
      6  SANTINI          -4130.15          4
      7  WONG             15691.18          3
                                         Notice that the Sanchez 
family has a high income (50000.00) but must split it among 13 
people (mother, father, and 11 kids). The Jones family's 
population is just 2: a single mother and her baby. The Santini 
family's income is a negative number this year, because the 
family invested big money in the stock market and lost.

                                                Choose your columns
                                         You can make the 
computer omit some of the columns. If you say ___ 
. LIST NAME,POPULATION
the computer will list the NAME and POPULATION columns but not 
the INCOME column; it will list this:
Record#  NAME            POPULATION
      1  SMITH                    4
      2  ANAGNOSTOPOULOS          5
      3  SANCHEZ                 13
      4  JONES                    2
      5  SZCZEPANKIEWICZ          4
      6  SANTINI                  4
      7  WONG                     3
                                         If you say ___ 
. LIST POPULATION,NAME
the computer will list the POPULATION column before the NAME 
column, like this:
Record#  POPULATION NAME
      1           4 SMITH
      2           5 ANAGNOSTOPOULOS
      3          13 SANCHEZ
      4           2 JONES
      5           4 SZCZEPANKIEWICZ
      6           4 SANTINI
      7           3 WONG
                                         If you say ___ 
. LIST OFF POPULATION,NAME
the computer will turn off the ``Record#'' column; it will list 
just this:
POPULATION NAME
         4 SMITH
         5 ANAGNOSTOPOULOS
        13 SANCHEZ
         2 JONES
         4 SZCZEPANKIEWICZ
         4 SANTINI
         3 WONG

  For each family, let's compute the income per person. To do 
that, divide the family's income by the family's population. To 
display the income per person, and everything else, say ___ 
. LIST NAME,INCOME,POPULATION,INCOME/POPULATION
The computer will list this:
Record#  NAME               INCOME POPULATION INCOME/POPULATION
      1  SMITH            24100.19          4           6025.05
      2  ANAGNOSTOPOULOS  65143.26          5          13028.65
      3  SANCHEZ          50000.00         13           3846.15
      4  JONES             9873.00          2           4936.50
      5  SZCZEPANKIEWICZ 125000.00          4          31250.00
      6  SANTINI          -4130.15          4          -1032.54
      7  WONG             15691.18          3           5230.39

                    LIST FOR
  To list just the low-income families (earning under $10,000), 
say:
. LIST FOR INCOME<10000
The computer will list:
Record#  NAME               INCOME POPULATION
      4  JONES             9873.00          2
      6  SANTINI          -4130.15          4
  To list just the high-income families (earning at least 
$50,000), say:
. LIST FOR INCOME>=50000
That means: list for INCOME greater than or equal to $50,000.
  When you're comparing strings, an equal sign means ``begins 
with''. So to list every family whose NAME begins with ``SAN'', 
say:
. LIST FOR NAME="SAN"
The computer will list all data about SANCHEZ and SANTINI.
  To list every family whose NAME does not begin with ``SAN'', 
say ___ 
. LIST FOR NAME<>"SAN"
or, if you prefer, say:
. LIST FOR NAME#"SAN"
  To list just the ``SAN'' families whose incomes are high, say:
. LIST FOR NAME="SAN" .AND. INCOME>=50000
That makes the computer list the data for SANCHEZ (whose income 
is 50000) but not SANTINI (whose income is -4130.15). Notice you 
must put periods around the word AND.
  DBASE also understands the word OR, which you must surround 
with periods.
  If you want to change DBASE, so that an equal sign between 
strings means ``exactly equals'' instead of ``begins with'', say:
. SET EXACT ON
The SET EXACT ON command remains in effect until you say QUIT or 
SET EXACT OFF.
   FOXPRO 2 You can omit the periods around AND and OR. For 
example, you can say either ``.AND.'' or ``AND''; the computer 
doesn't care.

                 LIST STRUCTURE
  If you say ___ 
. LIST STRUCTURE
the computer will say:
Field  Field name  Type       Width    Dec    Index
    1  NAME        Character     15               N
    2  INCOME      Numeric        9      2        N
    3  POPULATION  Numeric        2               N
** Total **                      27
The computer will also say that the file contains 7 records, and 
it will say the date the file was last changed.
                                                    Compute the statistics
                                                     The computer 
can do statistics.
                                                     COUNT If you 
say ___ 
. COUNT
the computer will count how many records are in the file. It will 
say:
      7 records
                                                     SUM If you 
say ___ 
. SUM
the computer will sum all the numbers in the file. It will say:
      7 records summed
       INCOME POPULATION
    285677.48         35
                                                     That means: 
the sum of all the incomes is $285,677.48, and the sum of all the 
populations is 35. So altogether, your entire neighborhood earns 
a total of $285,677.48, and the neighborhood's total population 
is 35.
                                                     AVERAGE If 
you say ___ 
. AVERAGE
the computer will average all the numbers in the file. It will 
say:
      7 records averaged
       INCOME POPULATION
     40811.07          5
                                                     That means 
the average family INCOME is $40,811.07, and the average family 
POPULATION is 5. (The average family population would be much 
lower if the Sanchez family didn't have 13 members.)
                                                     Restrictions 
After the word COUNT, SUM, or AVERAGE, you can add restrictions.
                                                     For example, 
if you want to find the average of just the SANCHEZ and SANTINI 
families, say:
. AVERAGE FOR NAME="SAN"
The computer will say:
      2 records averaged
       INCOME    POPULATION
     22934.93          8.50
                                                     If you want 
to average just the incomes, and don't want to bother averaging 
the populations, say:
. AVERAGE INCOME FOR NAME="SAN"
                                                      Old 
versions When you say AVERAGE FOR NAME=``SAN'', the average 
population is exactly 8.5, but DBASE 3 and 3+ make the computer 
shorten the answer and say just 8.
                                                      FOXPRO 2 
When you say AVERAGE FOR NAME=``SAN'', the average population is 
exactly 8.5, but the computer rounds the answer and says 9.

           Print on paper
  To print on paper, you can use several tricks.
  The simplest is to tap the PRINT SCREEN key. (If your keyboard 
doesn't have a PRINT SCREEN key, press the PrtSc key while 
holding down the SHIFT key.) That makes the printer print a 
snapshot of what's on the screen.
  Another way is to type:
. SET PRINT ON
Afterwards, anything that will appear on the screen will also 
appear on paper simultaneously. The SET PRINT ON command remains 
in effect until you say SET PRINT OFF.
  To LIST on paper, you can say:
. SET PRINT ON
. LIST
. SET PRINT OFF
  A faster way to LIST onto paper is to say:
. LIST TO PRINT
   Old versions If you say LIST TO PRINT while using DBASE 3+, 
the last line of the listing gets temporarily lost, in a part of 
RAM called the ``buffer''. That last line won't get transferred 
to paper until afterwards, when you give your next print-to-paper 
command, or when you say SET PRINT ON.
   FOXPRO 2 If you say SET PRINT ON, anything that will appear 
on the screen's bottom line will appear on paper simultaneously. 
(Saying SET PRINT ON will NOT make the paper show what's in the 
Command Window.)

       Interrupt the computer
  If the computer is doing something you don't like, and you want 
to stop the computer, press the ESCAPE key (which says ``Esc'' on 
it). That makes the computer abort what it was doing.
  For example, suppose you say LIST, and the computer starts 
printing a long listing. If you get impatient and don't want to 
see the rest of the listing, press the ESCAPE key.
  In some situations, when you press the ESCAPE key, the computer 
asks:
Cancel  Ignore  Suspend
Confirm that you want to cancel: press the C key.
  After the computer aborts, it displays the dot prompt, so you 
can give another DBASE command.
  In DBASE, as in IBM's BASIC and PC-DOS, you can make the 
computer pause by pressing the PAUSE key. (If your keyboard 
doesn't have a PAUSE key, tap the NUM LOCK key while holding down 
the CONTROL key.) To make the computer continue where it left 
off, press the SPACE bar.
  If you say DISPLAY ALL instead of LIST, the computer will list 
the file but will automatically pause at the end of each 
screenful. At the end of each screenful, it will say, ``Press any 
key to continue''. When you press ENTER, the computer will 
continue on to the next screenful.
  Short-cut: instead of saying DISPLAY ALL FOR NAME=``SAN'', you 
can say DISPLAY FOR NAME=``SAN''. Here's the rule: before the 
word FOR, you can omit ALL.
   Old versions Instead of saying ``Cancel Ignore Suspend'', 
DBASE 3+ says ``Cancel, Ignore, or Suspend? (C, I, or S)''; DBASE 
3 says ``Terminate command file?'', to which you respond by 
tapping the Y key.

                                             Grab a particular record
                                         To list just the 3rd 
record say:
. LIST RECORD 3
The computer will say:
Record#  NAME               INCOME POPULATION
      3  SANCHEZ          50000.00         13
                                         Instead of saying LIST 
RECORD 3, you can say:
. GO 3
. DISPLAY
That makes the computer GO to record #3 and DISPLAY it. That pair 
of lines (GO 3 and DISPLAY) has exactly the same effect as saying 
LIST RECORD 3.
                                         After you've gotten the 
record, you can use that record's NAME, INCOME, and POPULATION 
for further computations. For example, if you say ___ 
. ? INCOME/20
the computer will print that record's INCOME divided by 20, which 
is:
      2500
                                         To go to record #1, 
which is the top record, you can say either GO 1 or GO TOP. If 
your file contains 7 records, and you want to go to record #7, 
which is the bottom record, you can say either GO 7 or GO BOTTOM. 
(After giving a GO command, remember to say DISPLAY.)
                                         If you're lazy, you can 
usually omit the word GO. Instead of saying ___ 
. GO 3
you can say just:
. 3
But you cannot omit the GO from ``GO TOP'' and ``GO BOTTOM''.
                                         SKIP SKIP means ``go to 
the next record''.
                                         For example, suppose 
you've been looking at record #3 (because you said GO 3 and 
DISPLAY), and you want to go to the next record, which is record 
#4. Just say:
. SKIP
. DISPLAY
                                         If you say SKIP 2, the 
computer will skip ahead 2 records. For example, if you've been 
looking at record #4 and then say SKIP 2, the computer will go to 
record #6.
                                         If you say SKIP -1, the 
computer will skip back to the previous record. For example, if 
you've been looking at record #6 and then say SKIP -1, the 
computer will go back to record #5.
                                         LOCATE If you say ___ 
. LOCATE FOR NAME="SAN"
. DISPLAY
the computer will start at the first record, and keep hunting 
until it finds a record whose NAME begins with ``SAN''. Then it 
will DISPLAY that record:
Record#  NAME               INCOME POPULATION
      3  SANCHEZ          50000.00         13
                                         To find the next 
``SAN'', say:
. CONTINUE
. DISPLAY
The computer will display:
Record#  NAME               INCOME POPULATION
      6  SANTINI          -4130.15         13

  If you say CONTINUE again, the computer will continue hunting 
for SAN's. If the computer reaches the end of the file and still 
hasn't found another SAN, it will give up, and say:
End of LOCATE scope
   Old versions DBASE 3 and 3+ say just ``End of LOCATE''; they 
omit the word ``scope''.

      Attach fancy restrictions
  If you say:
. GO 3
. DISPLAY
the computer will display just the 3rd record. If you say ___ 
. GO 3
. DISPLAY NEXT 2
the computer will display 2 records (the 3rd and the 4th). If you 
say ___ 
. GO 3
. DISPLAY NEXT 4
the computer will display 4 records (the 3rd, 4th, 5th, and 6th). 
If you say ___ 
. GO 3
. DISPLAY REST
the computer will display the 3rd record and all the records that 
come after it. For example, if the data file contains 7 records, 
the computer will display the 3rd, 4th, 5th, 6th, and 7th 
records. (If your data file is long, the computer will pause at 
the end of each screenful, and wait for you to tell it to 
continue. If you don't want such pauses, say LIST instead of 
DISPLAY.)
  If you say ___ 
. GO 3
. DISPLAY WHILE INCOME<100000
the computer will start with the 3rd record, and continue 
displaying records as long as INCOME <100000. Here are the 
details. . . . 
  The computer starts with the 3rd record, sees that its INCOME 
is less than 100000, and displays that record. Then the computer 
checks the 4th record, sees its INCOME is less than 100000, and 
displays that record. Then the computer checks the 5th record, 
sees its INCOME is not less than 100000, and refuses to display 
the 5th record. The computer stops there, and refuses to look at 
any more records. so the only records it displays are the 3rd and 
4th.
  Those four commands ___ DISPLAY and DISPLAY NEXT and DISPLAY 
REST and DISPLAY WHILE ___ are all affected by where you said to 
GO. Three different commands ___ DISPLAY ALL and DISPLAY RECORD 
and DISPLAY FOR ___ are unaffected by GO. Even if you said GO 3, 
a DISPLAY ALL will display the entire file, DISPLAY RECORD 2 will 
display record #2, and DISPLAY FOR INCOME<100000 will display all 
the records whose INCOMEs are less than 100000.
  The words NEXT, REST, WHILE, ALL, RECORD, and FOR are called 
restrictions. You can attach a restriction to any DBASE command 
that scans data records. For example, you can add a restriction 
to DISPLAY, LIST, COUNT, SUM, AVERAGE, and LOCATE.
   Old versions DBASE 3 doesn't understand the word REST.


          REVISE YOUR DATA
                                         To revise your data, you 
can say EDIT, BROWSE, REPLACE, APPEND, INSERT, DELETE, or ZAP.

                                                       EDIT
                                         To edit record #3, say 
___ 
. EDIT RECORD 3
or say ___ 
. EDIT 3
or say:
. GO 3
. EDIT
                                         The computer will 
display the 3rd record on the screen and let you edit it. While 
you edit, you can use the four arrow keys (to move around the 
screen), the BACKSPACE key (to erase the previous character), the 
DELETE key (to delete the current character), and the INSERT key 
(to switch from ``replacing'' to ``inserting'' and back to 
``replacing'' again). DBASE handles those keys the same way as 
good word processors (such as Word Perfect, Q&A's word processor, 
and DOS 5's EDIT).
                                         To erase all the data in 
a field, just move to that field (by using the arrow keys); then 
tap the Y key while holding down the CONTROL key.
                                         After editing the 3rd 
record, if you press the PAGE DOWN key, the computer will let you 
edit the 4th record. If you press the PAGE DOWN key again, the 
computer will let you edit the 5th record. (Exception: if a 
record is too long to fit on the screen, pressing the PAGE DOWN 
key will get you to the next screenful of the same record.)
                                         By pressing the PAGE UP 
key, you can return to earlier records. For example, if you've 
been editing the 5th record and then press the PAGE UP key, the 
computer will let you re-edit the 4th record.
                                         When you've finished 
editing all the records you wish, tap the END key while holding 
down the CONTROL key. Then the computer will display the dot 
prompt, so you can type another DBASE command.
                                          FOXPRO 2 While you're 
editing the 3rd record, the screen also shows the 4th and 5th 
records. When you finishing editing the 3rd record, you can move 
to the 4th record by either pressing the PAGE DOWN key once or by 
pressing the down-arrow key several times.
                                         When you finish editing 
all the records you wish, you can either press CONTROL with END 
or click the close box (the yellow square in the window's top 
left corner).

                                                      BROWSE
                                         To see several records 
on the screen simultaneously, so you can edit them all at once, 
say:
. GO 1
. BROWSE
That makes the computer LIST the first several records in your 
file. The computer will let you use the arrow keys to move 
through the list and edit your data. To hop right to the next 
field, press the TAB key; to hop left to the previous field, 
press the TAB key while holding down the SHIFT key.
                                         The computer will list 
as many records as can fit on the screen; to see the next 
screenful of records, press the PAGE DOWN key. The computer will 
list as many fields as can fit across the screen; to see other 
fields, tap the right-arrow key while holding down the CONTROL 
key.
  When you've finished editing the data, tap the END key while 
holding down the CONTROL key.
   Old versions In DBASE 3 and 3+, the TAB key doesn't work. 
Instead, hop to the next field by pressing END; hop back to the 
previous field by pressing HOME.
   FOXPRO 2 The computer will list as many fields as fit across 
the window. To see other fields, press the TAB key several times.
  The computer will list as many records as fit in the window. To 
see other records, press the PAGE DOWN key once or twice (or 
press the down-arrow key several times).
  When you've finished editing the data, click the close box (or 
press CONTROL with END).

               REPLACE
  A more literary way to edit records is to type a sentence that 
begins with the word REPLACE.
  For example, to change record #3's INCOME to $60,000, say:
. GO 3
. REPLACE INCOME WITH 60000
To increase record #5's INCOME by $700, say:
. GO 5
. REPLACE INCOME WITH INCOME+700
To increase everybody's INCOME by $700, say:
. REPLACE ALL INCOME WITH INCOME+700
To increase the INCOME of just families whose NAME begins with 
``SAN'', say:
. REPLACE FOR NAME="SAN" INCOME WITH INCOME+700

               APPEND
  To add extra records, say:
. APPEND
The computer will display a blank record on the screen, and let 
you fill it in.
  For example, if your data file contains 7 records, and you say 
APPEND, the computer will let you type record #8. When you finish 
typing it (and press the ENTER key at the end of the last field), 
the computer will let you type record #9, then record #10, etc.
  When you've finished typing all the records you want to add, 
tap the END key while holding down the CONTROL key. Then the 
computer will display the dot prompt, so you can type another 
DBASE command.
   FOXPRO 2 When you've finished typing all the records you want 
to add, click the close box (or press CONTROL with END).

               INSERT
  To insert an extra record between record #3 and record #4, say:
. GO 3
. INSERT
The computer will display a blank record on your screen, and let 
you fill it in. When you finish filling it in, tap the END key 
while holding down the CONTROL key. The new record that you typed 
will become record #4; the old record #4 will become record #5; 
the old record #5 will become record #6; etc.
  The computer will then display the dot prompt, so you can type 
another DBASE command.
   FOXPRO 2 When you finish filling in the record, click the 
close box (or press CONTROL with END).

                                                      DELETE
                                         To delete records 3, 5, 
and 6, say:
. DELETE RECORD 3
. DELETE RECORD 5
. DELETE RECORD 6
. PACK
                                         Here's why. When you 
give the DELETE commands, the computer makes notes about which 
records you want to delete. But it doesn't actually delete those 
records, until you say PACK.
                                         When you say PACK, the 
computer finally deletes those records. It also renumbers all the 
other records, to fill the gaps left by the records you deleted.
                                         Renumbering all the 
records takes a long time; so while the computer's doing a PACK, 
you should take your coffee break or lunch break. If you don't 
want to take a break yet, delay saying PACK until later. Say PACK 
at the end of the day, or when it's time to QUIT or to switch to 
a different file.
                                         DELETE without PACK If 
you say to DELETE some records, but you haven't said PACK yet, 
what happens when you try to LIST the file? The listing will show 
an asterisk next to each record you said to delete. The 
asterisked records will disappear later, when you say PACK.
                                         If you say ___ 
. SET DELETED ON
the computer hides the asterisked records, so they don't appear 
in listings and don't affect the COUNT or SUM or AVERAGE. But 
although the asterisked records are hidden, they're still in the 
file, until you say PACK.
                                         SET DELETED ON remains 
in effect until you say QUIT or SET DELETED OFF.
                                         RECALL If you say DELETE 
RECORD 3 and then change your mind, you can get the record back 
by saying RECALL RECORD 3. But RECALL works only if you haven't 
said PACK yet.
                                         Short cuts Instead of 
saying DELETE RECORD 3, you can say:
. GO 3
. DELETE
Here's another way to delete record 3: get that record onto your 
screen (by saying EDIT or BROWSE, and playing with the PAGE UP 
and PAGE DOWN keys); and while you're looking at that record, tap 
the U key while holding down the CONTROL key. (The U stands for 
Undo.)
                                         To delete everybody 
whose name begins with ``SAN'', say:
. DELETE FOR NAME="SAN"
. PACK

                                                        ZAP
                                         To delete all the 
records, instead of saying DELETE ALL and PACK, just say:
. ZAP
Then the computer asks whether you're sure; tap the Y key. Then 
the computer ZAPs the file, so that all the records are gone. But 
the computer will still remember how wide you wanted each field, 
so you can add new records without having to say CREATE.

            SWITCH FILES
  You can switch to a different file. Here's how. . . . 

                 USE
  Suppose you create a DBASE file called FAMILIES.DBF, then 
create a DBASE file called FOODS.DBF. If you say LIST, the 
computer will assume you want to list the newest file 
(FOODS.DBF). If you want to list FAMILIES.DBF instead, say:
. USE FAMILIES
. LIST
  Saying USE FAMILIES makes the computer switch its attention to 
FAMILIES.DBF, so that any future command you give (such as LIST 
or GO or DISPLAY) applies to FAMILIES.DBF. To switch to FOODS.DBF 
again, say USE FOODS.
  If you QUIT using DBASE but return to DBASE later, the computer 
forgets which file you were using. Before saying LIST, say USE 
FAMILIES or USE FOODS.

                 DIR
  To see a directory of all the files in your hard disk's DBASE 
folder, say:
. DIR *.*
  To see a special directory of just your DBASE data files (which 
end in .DBF), say just:
. DIR
That makes the computer print a special directory showing each 
data file's name, how many records it contains, how many bytes it 
contains, and the date it was last changed.

                COPY
  Suppose you're using the FAMILIES.DBF file, and want to make a 
backup copy of it.
  If you want the backup copy to be called FRED.DBF, say:
. COPY TO FRED
That makes FRED.DBF be an exact copy of the whole file.
  If you want FRED.DBF to include just the records of families 
whose names begin with ``SAN'', say:
. COPY TO FRED FOR NAME="SAN"
  If you want FRED.DBF to include every family's NAME and 
POPULATION but not the INCOME, say:
. COPY TO FRED FIELDS NAME,POPULATION
  If you want FRED.DBF to include no records at all, but just 
have the same structure (the same lengths for all the fields), 
say:
. COPY STRUCTURE TO FRED
  If you want FRED.DBF to contain all the records, but rearranged 
so that the NAMEs are in alphabetical order, say ___ 
. SORT ON NAME TO FRED
  If you want FRED.DBF to contain all the records, but rearranged 
so that the INCOMEs are in increasing order, say ___ 
. SORT ON INCOME TO FRED
  If you want FRED.DBF to contain all the records, but rearranged 
so that the INCOMEs are in decreasing order (from the largest to 
the smallest), say ___ 
. SORT ON INCOME/D TO FRED
                                                       ERASE
                                         If you ever want to 
erase FAMILIES.DBF, say:
. ERASE FAMILIES.DBF
                                          Hassle While you're in 
the middle of using FAMILIES.DBF, the computer will refuse to 
erase it. To stop using it (so you can erase it), tell the 
computer to use a different file instead (by giving a command 
such as USE FOODS), or just say ___ 
.USE
which makes the computer use no file at all. Then you can say 
ERASE FAMILIES.DBF.

                                                 MODIFY STRUCTURE
                                         When you said CREATE, 
you filled in a chart: for each field you chose a name (such as 
INCOME), type (such as Numeric), and width (such as 9).
                                         If you later want to 
modify that chart, say:
. MODIFY STRUCTURE
The screen will again show the chart that you created. By using 
the arrow keys, you can move through the chart and modify it. You 
can change a field's name, type, width, or number of decimal 
places.
                                         To delete a field 
altogether, move to that field, then tap the U key while holding 
down the CONTROL key. (The U stands for Undo.)
                                         To insert an extra 
field, move to where you want the field to be, then tap the N key 
while holding down the CONTROL key. (The N stands for iNsert 
New.)
                                         Change as many fields as 
you like.
                                         When you've finished 
modifying the chart, tap the END key while holding down the 
CONTROL key. If the computer asks ``Should data be COPIED from 
backup for all fields?'', tap the Y key.
                                         The computer will ask, 
``Are you sure you want to save these changes?'' Tap the Y key.
                                         The computer will revise 
your entire data file, so that the file matches the chart. For 
example, if you said to make a field wider, the computer will do 
so by adding extra spaces to your data; if you said to make a 
field narrower, the computer will do so by abridging your data.
                                         To see what the computer 
did to your data file, say LIST.
                                          Hassle If you make the 
computer change names of fields, the computer can't reliably 
change anything else at the same time. So to make lots of 
changes, say MODIFY STRUCTURE and change names of fields; 
afterwards say MODIFY STRUCTURE again and make all the other 
changes you wish (widths, decimal places, types, deleted fields, 
and extra fields).
                                          Old versions After 
giving the MODIFY STRUCTURE command, DBASE 3 and 3+ make your 
disk contain two versions of your data file. For example, if 
you've been dealing with FAMILIES.DBF, your disk will contain a 
file called FAMILIES.DBF (which is the new, modified version), 
and your disk will also contain a file called FAMILIES.BAK (which 
is the previous unmodified version). FAMILIES.BAK is called the 
backup: use it only if you accidentally made a mistake when 
giving the MODIFY STRUCTURE command. To use FAMILIES.BAK, say:
. USE
. ERASE FAMILIES.DBF
. RENAME FAMILIES.BAK TO FAMILIES.DBF
. USE FAMILIES
                                          FOXPRO 2 To move 
through the chart quickly, use the mouse: click the part of the 
chart that interests you. To delete a field altogether, click 
that field then click the word ``Delete''. To insert an extra 
field, click where you want the field to be then click the word 
``Insert''. When you finish modifying the chart, click the word 
``OK'' then click the word ``Yes''. Like DBASE 3 and 3+, FOXPRO 2 
creates a .BAK file; for details, read the paragraph above 
(entitled ``Old versions'').


             INDEX FILES
  Suppose you're using a file called FAMILIES.DBF. Let's play a 
trick, so that every time you say LIST or DISPLAY the NAMEs will 
appear in alphabetical order, to help you find a particular NAME 
very quickly.
  Say:
. INDEX ON NAME TO FAMNAME
That makes the computer create a file called FAMNAME.NDX, which 
is an iNDeX file that helps the computer find each family's NAME.
  Then if you say LIST, the computer will list the families in 
alphabetical order:
Record#  NAME               INCOME POPULATION
      2  ANAGNOSTOPOULOS  65143.26          5
      4  JONES             9873.00          2
      3  SANCHEZ          50000.00         13
      6  SANTINI          -4130.15          4
      1  SMITH            24100.19          4
      5  SZCZEPANKIEWICZ 125000.00          4
      7  WONG             15691.18          3
  In that file, the TOP is record #2: ANAGNOSTOPOULOS. So if you 
say ___ 
. GO TOP
. DISPLAY
the computer will display:
Record#  NAME               INCOME POPULATION
      2  ANAGNOSTOPOULOS  65143.26          5
Then if you say ___ 
. SKIP
. DISPLAY
the computer will skip the next record in the alphabetized list, 
and display:
Record#  NAME               INCOME POPULATION
      4  JONES             9873.00          2
  In that alphabetized file, saying GO TOP has a different effect 
from saying GO 1. If you say GO TOP, you're going to the TOP 
record, which is ANAGNOSTOPOULOS; if you say GO 1, you're going 
to the record #1, which is SMITH.
  If you want to add more records to the alphabetized list, say 
APPEND. As you type the extra records, the computer will 
automatically update the index file, so when you say LIST you'll 
see the entire data file ___ including even the new records ___ 
in alphabetical order.
   FOXPRO 2 When you say INDEX ON NAME TO FAMNAME, FOXPRO 2 
creates an index file called FAMNAME.IDX (instead of 
FAMNAME.NDX).

                                                    How to find
                                         To display the first 
record whose NAME begins with SAN, you can say:
. LOCATE FOR NAME="SAN"
. DISPLAY
                                         To find that record 
faster, say this instead ___ 
. SEEK "SAN"
. DISPLAY
or say:
. FIND SAN
. DISPLAY
                                         The only difference 
between SEEK and FIND is that SEEK must be followed by quotation 
marks (or a variable), whereas FIND lets you omit the quotation 
marks.
                                         SEEK and FIND tell the 
computer to find the record immediately, by using the index file.
                                         By contrast, the word 
LOCATE makes the computer locate the record slowly, by searching 
through all the records in the whole data file, from beginning to 
end. If your data file is very long, you'll have to wait a long 
time for the computer to LOCATE the record! For example, if your 
data file contains 2,000 records, the LOCATE command takes about 
25 times as long as the SEEK and FIND commands. The main reason 
for creating an index file is so that you can use the words SEEK 
and FIND.
                                         Since the index file 
makes the computer list all the names in alphabetical order, all 
the SAN names are listed near each other. So after you've found 
the first SAN (by saying FIND SAN and DISPLAY), you can display 
the next one immediately, by saying:
. SKIP
. DISPLAY

                                                      Hassles
                                         If you QUIT or switch to 
a different data file, and later try to return to FAMILIES.DBF by 
saying USE FAMILIES, you must remind the computer to look at the 
index file. Instead of saying just USE FAMILIES, say:
. USE FAMILIES INDEX FAMNAME
                                         If you accidentally 
forget to say INDEX FAMNAME, the computer will forget to look at 
the index. If you then APPEND or DELETE some records, the 
computer won't update the index, and the index will be wrong. If 
you get into that jam, get out of it by saying ___ 
. USE FAMILIES INDEX FAMNAME
. REINDEX
That makes the computer create the index all over again, 
correctly.
                                         To see the names of all 
your index files (such as FAMNAME.NDX), say:
. DIR *.NDX
                                          FOXPRO 2 To see the 
names of all your index files (such as FAMNAME.IDX), say ``DIR 
*.IDX''.


              PROGRAMS
  Let's write a program so that whenever you say DO STATS, the 
computer will automatically print the SUM and AVERAGE of all the 
numbers in your data file. Here's how.
  Begin by saying ___ 
. MODIFY COMMAND STATS
That tells the computer you want to write a program called 
STATS.PRG.
  Next, say what you want STATS to stand for. If you want STATS 
to stand for ``the SUM followed by the AVERAGE'', type:
SUM
AVERAGE
That pair of instructions (SUM and AVERAGE) is called the 
program. The computer does not put a dot prompt in front of the 
program lines.
  While you're typing the program, you can edit it by using the 
arrow keys and all the other word-processing keys (DELETE, 
INSERT, PAGE UP, and PAGE DOWN).
  To hop to the left margin, press the HOME key. To hop to the 
end of a line, press the END key.
  To delete a line, move to that line, then tap the Y key while 
holding down the CONTROL key. (The Y stands for ``Yank it out''.) 
To insert an extra line between two other lines, move to where 
you want the extra line to begin, then tap the N key while 
holding down the CONTROL key. (The N stands for ``iNsert New''.)
  When you've finished typing and editing the program, tap the 
END key while holding down the CONTROL key. That makes the 
computer put the entire program onto the disk. Then the screen 
will show a dot prompt.
  If you want the computer to DO the STATS program you typed, 
say:
. DO STATS
Then the computer will print the SUM and AVERAGE of all the 
numbers in the current data file. For example, if you've been 
using the FAMILIES data file, the computer will print the SUM of 
the INCOMEs, SUM of the POPULATIONs, AVERAGE of the INCOMEs, and 
AVERAGE of the POPULATIONs. (If you haven't been using a data 
file, the computer will ask you which file to USE. If your data 
file doesn't contain any Numeric fields, the computer will 
gripe.)
  If you ever want to revise that program, just say MODIFY 
COMMAND STATS again. The screen will show your program again and 
let you edit it. When you've finished editing it, tap the END key 
while holding down the CONTROL key. The new version of your 
program will be called STATS.PRG; the previous version of your 
program will still be on the disk but will be called STATS.BAK.
  For another example, let's program the computer so that when 
you say DO SUPERDIR, the computer will print a superdirectory. 
Let's make the superdirectory include a directory of all your 
data files, followed by a directory of all your index files, 
followed by a directory of all your program files.
  To make DO SUPERDIR accomplish all that, say:
. MODIFY COMMAND SUPERDIR
Then type this program ___ 
DIR
DIR *.NDX
DIR *.PRG
End the program by tapping the END key while holding down
the CONTROL key. From then on, whenever you say DO SUPERDIR, the 
computer will print a superdirectory.
                                         Into a program, you can 
put any DBASE commands you wish. For example, your program can 
include a USE command (to switch to a different data file), an 
APPEND command (to let the user add extra records to the file), 
and a BROWSE command (to let the user browse through the entire 
file and edit it).
                                         One of the lines in your 
program can even say DO a second program. When the computer 
encounters that line, the computer will DO the second program, 
then finish the original program.
                                         Your program's bottom 
line can even say QUIT, so that when the computer finishes the 
program it will stop using DBASE.
                                          Old versions In DBASE 
3 and 3+, here's how to hop to the left margin: tap the 
left-arrow key while holding down the CONTROL key. Here's how to 
hop to the end of the line: tap the right arrow key while holding 
down the CONTROL key.
                                          FOXPRO 2 Saying 
``MODIFY COMMAND STATS'' makes the computer create a window 
called ``STATS.PRG''. In that window, type your program, like 
this:
SUM
AVERAGE
                                         To insert an extra line, 
move to where you want the extra line to begin, then press ENTER. 
To delete a line, move to the beginning of that line, press SHIFT 
with down-arrow (so the line becomes brown), then press DELETE.
                                         When you've finished 
typing and editing the program, click the close box then click 
``Yes''.
                                         In the SUPERDIR program, 
say ``DIR *.IDX'' instead of ``DIR *.NDX''.

                                                       TEXT
                                         Let's program the 
computer so that whenever you say DO POEM, the computer will 
print this poem:
YOUR DATA FILES
ALL GIVE ME SMILES.
I FEEL SO LOW,
WHEN THEY MUST GO.
PLEASE DON'T ERASE
YOUR DATABASE!
        LOVE,
        YOUR COMPUTER
                                         Here's how:
. MODIFY COMMAND POEM
? "YOUR DATA FILES"
? "ALL GIVE ME SMILES."
? "I FEEL SO LOW,"
? "WHEN THEY MUST GO."
? "PLEASE DON'T ERASE"
? "YOUR DATABASE!"
? "        LOVE,"
? "        YOUR COMPUTER"
                                         But typing all those 
question marks and quotation marks is ridiculous! For a 
short-cut, type this instead:
. MODIFY COMMAND POEM
TEXT
YOUR DATA FILES
ALL GIVE ME SMILES.
I FEEL SO LOW,
WHEN THEY MUST GO.
PLEASE DON'T ERASE
YOUR DATABASE!
        LOVE,
        YOUR COMPUTER
ENDTEXT
The words TEXT and ENDTEXT tell the computer that everything 
between them should be printed as strings. To begin an indented 
passage (such as LOVE and YOUR COMPUTER), press the TAB key. 
Pressing the TAB key
makes the computer indent the current line and all lines 
underneath, until you tell the computer to stop indenting (by 
pressing SHIFT with TAB).
   Old versions In DBASE 3 and 3+, pressing the TAB key makes 
the computer indent just 4 spaces (instead of 8). Pressing the 
TAB key makes the computer indent just the current line (not the 
lines underneath).
   FOXPRO 2 Pressing the TAB key makes the computer indent just 
4 spaces (instead of 8). To tell the computer to stop indenting, 
press the BACKSPACE key.

            Tricky output
  Here are some commands you can put in your program, to produce 
tricky output.
  To erase the screen, say:
CLEAR
  If you say ___ 
? "FAT"
?? "HER"
the double question mark makes the computer print HER on the same 
line as FAT. The computer will print:
FATHER
  When using DBASE, the screen's top line is called line 0. Then 
come lines 1, 2, etc. In each line, the leftmost character is at 
position 0. Then come positions 1, 2, etc. To print the word 
DROWN beginning at line 3's 7th position, type this:
@3,7 SAY "DROWN"
  SET HEADING OFF When you say LIST, DISPLAY, SUM, or AVERAGE, 
the computer prints data in columns and puts a heading at the top 
of each column. If you want the computer to omit the headings, 
say:
SET HEADING OFF
That command remains in effect until you say SET HEADING ON (or 
QUIT).
  To invent your own customized heading, first get rid of the 
traditional headings (by saying SET HEADING OFF) and then print 
your own headings (by giving the ``?'' or ``@SAY'' commands).
  SET TALK OFF While running your program, the computer prints 
messages telling you which records and numbers it's manipulating.
  For example, if you say GO 3 and then SKIP 2, the computer 
prints a message saying it's skipping to record #5. If you say to 
COPY a file, the computer prints messages telling you how many 
records it's copied so far, until all the records are copied.
  Those messages help DBASE programmers but confuse business 
executives who don't understand the messages' jargon. To stop the 
computer from printing those messages, say:
SET TALK OFF
That command remains in effect until you say SET TALK ON.
  If you say SET TALK OFF, you'll have a hard time doing 
statistics: the simple COUNT, SUM, and AVERAGE commands don't 
work until you say SET TALK ON.

              Variables
  Like BASIC, DBASE lets you use variables easily. For example, 
if you say ___ 
X=7-1
? X+3
the computer will print 9.
                                         (While the computer 
performs X=7-1, the computer will also print a little message 
saying that X is 6, unless you say SET TALK OFF.)
                                         A variable's name can be 
short (such as X) or longer. It can be up to 10 characters long 
(such as POPULATION). It can include underlines and digits (such 
as LOST_IN_86). It must begin with a letter. It cannot include 
blank spaces.
                                         A variable can stand for 
either a number or a string. For example, if you say ___ 
HUSBAND="TOM"
? HUSBAND
the computer will print TOM.
                                         The computer handles two 
kinds of variables. A field variable stands for a field in a data 
file. For example, while you're using FAMILIES.DBF, you're using 
field variables called NAME, INCOME, and POPULATION. A memory 
variable is any variable that does not stand for a field. For 
example, if you say X=7-1, the X is a memory variable.
                                         Suppose you're using 
FAMILIES.DBF, so INCOME is a field variable. to change a family's 
INCOME to 20000, do not say INCOME=20000. Instead, say:
REPLACE INCOME WITH 20000
Here's the rule: to change the value of a memory variable, say 
``=''; to change the value of a field variable, say ``REPLACE''.
                                         The computer will 
remember all your variables until you say CLEAR MEMORY (which 
erases the memory variables) or say to USE a different data file 
(which affects the field variables) or say CLEAR ALL (which 
erases all the variables and also makes the computer forget which 
file you were USEing).
                                         The typical DBASE 
program begins by saying CLEAR ALL and ends by saying CLEAR ALL 
again, to make sure the variables from different programs don't 
interfere with each other.
                                         STORE Instead of saying 
X=7-1, you can say STORE 7-1 TO X. Saying ``STORE 7-1 TO X'' has 
exactly the same effect as saying ``X=7-1''.
                                         To make X, Y, and Z all 
be zero, say:
STORE 0 TO X,Y,Z
                                         Statistics To make X be 
the SUM of all the INCOMEs in your data file, say:
SUM INCOME TO X
To make X be the SUM of all the INCOMEs and also make Y be the 
sum of all the POPULATIONs, say:
SUM INCOME, POPULATION TO X,Y
Similar commands work for COUNT and AVERAGE also. They all work 
even if you SET TALK OFF.

                                                       INPUT
                                         Like BASIC, DBASE 
understands the word INPUT. If you say ___ 
INPUT "HOW OLD ARE YOU? " TO AGE
the computer will ask ___ 
HOW OLD ARE YOU?
and then wait for you to type a number. Whatever number you type 
will become the AGE.
  The INPUT statement's variable must be a memory variable, not a 
field variable. For example, if you're using FAMILIES.DBF and 
want the person to input an INCOME (which is a field variable), 
you must not say INPUT ``WHAT IS YOUR INCOME?'' TO INCOME. 
Instead, input a memory variable called MINCOME, then copy it to 
a field by saying REPLACE, like this:
INPUT "WHAT IS YOUR INCOME? " TO MINCOME
REPLACE INCOME WITH MINCOME

               ACCEPT
  To input a string instead of a number, say ACCEPT instead of 
INPUT:
ACCEPT "WHAT IS YOUR FAVORITE FOOD? " TO FOOD
  Underneath that ACCEPT statement, you might want to add this 
line:
FOOD=UPPER(FOOD)
It makes the computer convert the human's input to capital 
(upper-case) letters, in case the human forgot to press the CAPS 
LOCK key.
  Like the INPUT statement, the ACCEPT statement takes a memory 
variable but not a field variable.

                WAIT
  This example says WAIT instead of ACCEPT:
WAIT "WHAT'S YOUR MIDDLE INITIAL? " TO INITIAL
? "CONGRATULATIONS!"
? "ACCORDING TO ASTROLOGY, THE FORCES OF THE UNIVERSE"
? "SHALL CAUSE WONDROUS JOYS TO BEFALL"
? "THOSE LUCKY PERSONS WHOSE EARTH-GIVEN NAMES ARE CENTERED"
? "AROUND THE LETTER",INITIAL
  WAIT resembles ACCEPT. In that program, the first line makes 
the computer ask ``WHAT'S YOUR MIDDLE INITIAL?'' then wait for 
you to type a character. Whatever character you type will become 
the INITIAL. For example, if you type a Q, the Q will become the 
INITIAL.
  If the line had said ACCEPT, the computer would have required 
you to press the ENTER key after the Q. But since the line said 
WAIT instead of ACCEPT, you do not have to press ENTER: as soon 
as you type the Q, the computer will know Q is the INITIAL 
(without waiting for ENTER) and will make the screen show this:
WHAT'S YOUR MIDDLE INITIAL? Q
CONGRATULATIONS! ACCORDING TO ASTROLOGY, THE FORCES OF THE 
UNIVERSE
SHALL CAUSE WONDROUS JOYS TO BEFALL
THOSE LUCKY PERSONS WHOSE EARTH-GIVEN NAMES ARE CENTERED
AROUND THE LETTER Q
  WAIT is nicer than ACCEPT, because WAIT doesn't force you to 
press the ENTER key after answering the question. But alas, WAIT 
restricts you to typing just one character: you can use WAIT for 
a middle initial, but not for a whole name.

                 GET
  Suppose you live in San Francisco with most of your friends, 
but a few of your friends live elsewhere. Run this program:
CLEAR ALL
CLEAR
SET TALK OFF
CITY="SAN FRANCISCO"
STATE="CA"
@10,25 SAY "WHAT IS YOUR CITY?" GET CITY
@11,25 SAY "WHAT IS YOUR STATE?" GET STATE
READ
? "I AM GLAD TO HEAR YOU LIVE IN THE KOOKY CITY OF",CITY
? "IN THE SEDUCTIVE STATE OF",STATE
SET TALK ON
CLEAR ALL
                                         Like most DBASE 
programs, that program begins by saying CLEAR ALL (to avoid 
interference from other programs), CLEAR (to erase the screen), 
and SET TALK OFF (to avoid excessive messages).
                                         The next pair of lines 
make CITY be ``SAN FRANCISCO'' and make STATE be ``CA''.
                                         The next pair of lines 
put this message in the middle of your screen:
                         WHAT IS YOUR CITY? SAN FRANCISCO
                         WHAT IS YOUR STATE? CA
                                         The READ statement lets 
you edit the data in the boxes, by using the arrow keys, ENTER 
key, and other word-processing keys. (If you want to erase an 
entire box, move to that box, then tap the Y key while holding 
down the CONTROL key.) You can edit the boxes however you like 
___ for example, change SAN FRANCISCO to RENO, and change CA to 
NV ___ or do no editing at all, so that you still have SAN 
FRANCISCO and CA. When you've finished doing all the editing you 
wish, tap the END key while holding down the CONTROL key, or just 
move to the bottom box and tap the ENTER key.
                                         If you changed SAN 
FRANCISCO to RENO and changed CA to NV, the next two lines in the 
program will print this, at the bottom of the screen:
I AM GLAD TO HEAR YOU LIVE IN THE KOOKY CITY OF RENO
IN THE SEDUCTIVE STATE OF NV
                                         Like most DBASE 
programs, that program ends by putting the computer back to its 
normal state (SET TALK ON and CLEAR ALL).
                                         To use the word GET, you 
should put it in an @ SAY command. Underneath the @ SAY GET 
commands, say READ.
                                         If you forget to include 
the SAY ``WHAT IS YOUR CITY?'', and instead type just @10,25 GET 
CITY, the computer will omit the question but will still show the 
CITY box. If you forget to say READ, you'll still see boxes full 
of data, but you won't get a chance to edit what's in them.
                                         By using GET and READ, 
you can edit any kind of variable. The variable can be a number 
or a string; it can be a memory variable or a field variable.
                                         If it's a field 
variable, the computer automatically makes the box wide enough to 
hold the entire field; and when you edit the data in the box, the 
computer automatically updates your data file. (You do not have 
to say REPLACE.)
                                         If it's a memory 
variable instead, your program must include a statement such as 
CITY=``SAN FRANCISCO'', which tells the computer how wide to make 
the box. To make the box even wider, put extra spaces after SAN 
FRANCISCO, like this:
CITY="SAN FRANCISCO         "
If the memory variable stands for a number instead of a string, 
the computer automatically makes the box wide enough to hold 10 
digits before the decimal point ___ or even wider.

    CONTROL THE FLOW
  You can control the order in which the computer does your 
program's statements. Here's how. . . . 

           IF
  Like BASIC and PASCAL, DBASE lets you use the words IF and 
ELSE. Write the IF statement like this:
IF AGE<18
        ? "MINOR"
        ? "YOUNG"
ELSE
        ? "ADULT"
        ? "OLD"
ENDIF
  Whenever you say IF, you must also say ENDIF. To indent the 
lines in between, tap the TAB key. (The indentation is optional.)
  Here's how to say, ``If the NAME begins with SAN and the INCOME 
is at least 50000'':
IF NAME="SAN" .AND. INCOME>=50000
Remember to put periods around the word AND. For strings, the 
symbol ``='' means ``begins with'', unless you said SET EXACT ON.

        DO WHILE
  To create a loop, say DO WHILE. If you want the loop to be 
infinite, say DO WHILE .T., like this:
DO WHILE .T.
        ? "CAT"
        ? "DOG"
ENDDO
The computer will print CAT and DOG repeatedly, like this:
CAT
DOG
CAT
DOG
CAT
DOG
etc.
To abort the program, tap the Esc key (which stands for 
``Escape'') and then the C key (which stands for ``Cancel'').
  Any program that says DO WHILE must also say ENDDO. The 
computer will repeat all the lines between DO WHILE and ENDDO, to 
form a loop.
  This program makes the computer print all the numbers from 1 to 
10 and then print ``WOW'':
SET TALK OFF
X=1
DO WHILE X<=10
        ? X
        X=X+1
ENDDO
? "WOW"
SET TALK ON
The top line prevents the computer from printing excessive 
messages. The next line says X starts at 1. The lines between DO 
WHILE and ENDDO are done repeatedly, as long as X<=10. If X gets 
past 10, the computer refuses to do the loop again, and instead 
proceeds to the line underneath ENDDO, which makes the computer 
say WOW. The bottom of the program says SET TALK ON, to put the 
computer back to normal. Altogether, the computer prints:
         1
         2
         3
         4
         5
         6
         7
         8
         9
        10
WOW
                             In BASIC, you can create loops by 
giving commands such as ``GO TO 10'' and ``FOR I = 1 TO 
10...NEXT''. Unfortunately, DBASE doesn't understand how to GO TO 
line 10 or how to do a FOR...NEXT loop. In DBASE, the only way to 
create a loop is to say DO WHILE...ENDDO.
                             In the middle of a WHILE loop, you 
can put a line saying LOOP or EXIT. If the computer encounters a 
line saying LOOP, the computer loops back (by jumping back to the 
WHILE loop's top line). If the computer encounters a line saying 
EXIT, the computer exits from the loop (by jumping ahead to the 
line underneath ENDDO).

                                                RETURN
                             Instead of using the BASIC word END, 
DBASE uses the word RETURN.
                             While the computer is DOing your 
program, if the computer encounters a line that says RETURN, the 
computer will skip the rest of the program.

                                         The ULTIMATE program
                             Congratulations! Now you know enough 
about DBASE so that you're ready to create the ULTIMATE program. 
This program lets you store and retrieve any information about 
any topic! Moreover, the program is so nicely designed that even 
a novice who knows nothing about DBASE can run the program and 
use its full power.
                             How the program acts After you've 
written the program, you can start using it by just typing:
. DO ULTIMATE
Then the computer starts running the ULTIMATE program, which 
makes the computer ask:
What topic interests you? (If unsure, type a question mark. To 
end, type an x.)
                             If you type just an x or a capital 
X, the computer stops running the program and displays the dot 
prompt.
                             If you type a question mark instead, 
the computer displays a list of all the topics it was fed 
previously. For example, those topics might include SHRUB, BUSH, 
QUAIL, BIRDBRAIN, MANHATTAN, SEX, THE MEANING OF LIFE, and 
STRANGE JOKES. Then the computer says:
Pick one of those topics, or teach me a new one.

What topic interests you? (If unsure, type a question mark. To 
end, type an x.)
                             If you type anything other than an x 
or an X or a question mark, the computer searches through its 
file, to see whether it's been fed that topic. If it finds the 
topic in the file, it reveals all it knows about the topic, and 
then lets you edit that data. If it does not find the topic in 
the file, it says so, and gives you an opportunity to teach it 
about the topic.
  How to invent the program To make the computer do all that, so 
a novice can store and retrieve data easily, a professional (such 
as yourself!) must previously put three things onto the disk: the 
program itself (which is called ULTIMATE.PRG), a data file 
(called INFO.DBF), and an index file (called INFOTOP.NDX). Here's 
how. . . . 
  Data file Start by putting the data file INFO.DBF onto the 
disk. To do that, say:
. CREATE INFO
Then complete this chart:
Ŀ
 Num  Field Name  Field Type  Width  Dec  Index 
͵
   1  TOPIC       Character     25          N   
   2  DATA        Character     79          N   
                                                
                                                
                                                

That allows each TOPIC to be 25 characters long, and the DATA 
about the topic to be 79 characters long.
  After typing the chart, tap the END key while holding down the 
CONTROL key. Then tap the ENTER key. The computer will ask, 
``Input data records now?'' Tap the N key.
  Index file Next, put the index file INFOTOP.NDX onto the disk, 
by typing:
. INDEX ON TOPIC TO INFOTOP
That creates an index file called INFOTOP.NDX, which lets the 
computer find each TOPIC quickly.
  The program itself Finally, put the program ULTIMATE.PRG onto 
the disk. To do that, begin by saying:
. MODIFY COMMAND ULTIMATE
  Then type the program's introduction:
CLEAR ALL
CLEAR
SET TALK OFF
SET HEADING OFF
SET EXACT ON
SET DELETED ON
USE INFO INDEX INFOTOP
That introduction says to CLEAR ALL influences from previous 
programs, CLEAR the screen, SET the DBASE program so you have 
complete control over everything, and USE the INFO data file 
INDEXed by INFOTOP.
  Then type the program's loop:
DO WHILE .T.
        ?
        ?"What topic interests you? "
        ?? "(If unsure, type a question mark. To end, type an 
x.)"
        ACCEPT TO DESIRE
        DESIRE=UPPER(DESIRE)
        CLEAR
        DO CASE
        CASE DESIRE="X"
                EXIT
        CASE DESIRE="?"
                GO TOP
                IF EOF()
                        ? "I don't know any topics yet. My mind 
is blank. "
                        ?? "Please teach me a new topic."
                ELSE
                        ? "I know about these topics:"
                        DISPLAY ALL OFF TOPIC
                        ? "Pick one of those topics, or teach me 
a new one."
                ENDIF

        CASE DESIRE=""
        OTHERWISE
                SEEK DESIRE
                IF FOUND()
                        ? "Here's what I know about",DESIRE+":"
                        @2,0 GET DATA
                        ? "You can edit that info now."
                        ? "(If you want me to forget 
about",DESIRE
                        ?? ", tap Y while holding down the CTRL 
key.)"
                        ? "When you're done, tap the ENTER key."
                        READ
                        CLEAR
                        IF DATA=""
                                DELETE
                        ENDIF
                ELSE
                        ? "I don't know anything 
about",DESIRE+"."
                        ? "Tell me about",DESIRE+"."
                        ? "(If you don't want to tell me, type an 
x.)"
                        ACCEPT TO NEWDATA
                        IF UPPER(NEWDATA)#"X"
                                APPEND BLANK
                                REPLACE TOPIC WITH DESIRE
                                REPLACE DATA WITH NEWDATA
                        ENDIF
                ENDIF
        ENDCASE
ENDDO
  In that loop, each print statement uses small letters instead 
of capitals, so that the printing will look more sophisticated. 
(To create the small letters, just turn off the CAPS LOCK key, by 
tapping it.)
  After saying ACCEPT TO DESIRE, the next statement says 
DESIRE=UPPER(DESIRE), which converts the user's desired topic to 
capital letters. That saves the user from worrying about whether 
to type REAGAN or Reagan or reagan: whichever of those the user 
types, the computer will convert it to REAGAN.
  The DESIRE can be four kinds of things: it can be an X (which 
means the user wants to exit), a question mark (which means the 
user is confused and would like to see a list of topics), nothing 
at all (which means the user accidentally pressed the ENTER key 
an extra time), or a topic. The DO CASE statement tells the 
computer to handle those four cases: DESIRE=``X'', DESIRE=``'', 
and DESIRE=otherwise. Let's look at those four cases in more 
detail.
  In the CASE where DESIRE=``X'', the computer lets the user EXIT 
from the DO WHILE loop.
  In the CASE where DESIRE=``?'', the computer begins by checking 
whether the file contains any undeleted topics. Here's how. The 
lines GO TOP and IF EOF() tell the computer to GO to the TOP of 
the file and see if the TOP of the file is also the End Of the 
File. If the TOP of the file is also the End Of the File, the 
file doesn't contain any records yet (or all its records have 
been DELETED), so the computer will print ``I don't know any 
topics yet. My mind is blank.'' If the computer's mind is not 
blank, the computer will say ``I know about these topics'' and 
will DISPLAY ALL of the TOPICS. The computer will display the 
topics themselves but will not display their record numbers, 
since the DISPLAY statement says to turn the record numbers OFF.
  In the CASE where DESIRE=``'', the computer does nothing at 
all.
  In the case where desire is OTHERWISE, the computer will hunt 
through all the topics in the file, to SEEK the user's DESIRE.
  If the user's DESIRE is FOUND in the file, the computer is 
commanded to print ``Here's what I know about'',DESIRE+``:''. In 
that command, the word DESIRE is followed by a plus sign instead 
of a comma, to prevent the computer from leaving a blank space 
after DESIRE.
  If the user's DESIRE is not FOUND in the file, the computer is 
commanded to print ``I don't know anything about'',DESIRE+``.''. 
Then the computer asks the user to type some NEWDATA about the 
topic. If the user does indeed type some useful NEWDATA (instead 
of just an X), the computer appends the NEWDATA to the end of the 
file. To do that, the computer first APPENDs a BLANK record, then 
puts the NEWDATA into that record by using REPLACE.
  The remaining lines say ENDIF twice (to end the two IF 
statements) and ENDCASE (to end the DO CASE statement) and ENDDO 
(to end the DO WHILE statement).
                                                     At the 
bottom of the program, add these lines:
SET DELETED OFF
COUNT FOR DELETED() TO DELCOUNT
IF DELCOUNT>RECCOUNT()/4
        ? "Please wait, "
        ?? "while I compress your data."
        PACK
        ? "The compression is done."
ENDIF
SET EXACT OFF
SET HEADING ON
SET TALK ON
CLEAR ALL
The computer reaches those lines when the user chooses to EXIT 
from the DO WHILE loop (by saying the DESIRE is ``X''). Those 
lines say to SET the computer back to normal and to CLEAR ALL 
interference from later programs.
                                                     One of those 
lines says to PACK the file. But if fewer than a quarter of the 
records have been marked for deletion, the program tells the 
computer not to bother PACKing.
                                                     Here's how 
the computer figures out whether to bother PACKing. The program 
says to COUNT how many records have been marked to be DELETED, 
and call that the DELCOUNT. The program says that IF the DELCOUNT 
is greater than the RECord COUNT divided by 4, then PACK.
                                                     After you've 
typed that entire program, tap the END key while holding down the 
CONTROL key. Then you're done: you've created the ULTIMATE 
data-management program!
                                                     Consequences 
Some parts of that program were hard to invent, but the program 
is super-easy to use. Try it!
                                                     Then 
challenge yourself: think of further improvements to the ULTIMATE 
program, to make the program even easier to use and even more 
powerful!
                                                     Such 
programs would be much harder to develop, if we were using BASIC, 
LOGO, PASCAL, C, COBOL or any other major computer language. 
That's why programmers love DBASE!
                                                      Old 
versions DBASE 3 doesn't understand RECCOUNT(); instead of saying 
IF DELCOUNT>RECCOUNT()/4, say COUNT TO RECCOUNT and then IF 
DELCOUNT>RECCOUNT/4.
                                                     DBASE 3 
doesn't understand the word FOUND. DBASE 3+ version 1.0 handles 
FOUND incorrectly if you deleted some records. For those versions 
of DBASE, instead of saying IF FOUND(), say IF .NOT. EOF().
