                            ^1VERSAFORM XL Version 4.0
                            ^1--------- -- ------- ---

                          Reviewed by:  Joel Ellis Rea

                    Product by:  Applied Software Technology
                                 1350 Dell Avenue, Suite 206
                                 Campbell, California  95008
                                 (480) 370-2662

   VersaForm XL (VFXL) is an easy-to-use, programmable, forms-oriented database 
program with an integrated report generator and a mailing-label printer as well 
as the ability to print on pre-printed forms.  It began as QBase, a simple 
database for the Apple ///, and became VersaForm (VF) for the Apple ///, later 
converted for the Apple // family and the IBM-PC.  VFXL added the VAL program-
ming language and associated multi-file capability.  VF for the IBM-PC used to 
retail for $379 and VFXL for $429.  A while back, Applied Software Technology 
joined the then new trend towards powerful, inexpensive applications software 
by greatly enhancing VFXL Version 3.12 into Version 3.24 (the version that was 
being marketed as this was being written), and simultaneously lowered the price 
to $99 (and the price of regular non-programmable, single-file IBM-PC VersaForm 
to $69).  By the time you read this, Version 4.0 will have been released.  I 
have been privileged to Beta-test and review Version 4.0 for the past few 
months.  This new version is significantly faster and for the first time allows 
form designs to be larger than the physical screen size.  The price has been 
raised to $159.  

   VFXL comes on two floppy disks.  One contains the system itself, while the
other contains several sample forms, programs and applications.  VFXL is com-
pletely unprotected and you may easily install it on your hard disk.  VFXL
doesn't REQUIRE a hard disk, but I STRONGLY recommend one.  I also suggest at
least 512K of RAM, although it can most likely run in as little as 384K.

   Whether from a floppy or a hard disk, you start VFXL by typing "VF" at the
MS-DOS prompt.  In less than a minute on a floppy, or in a few seconds from a
hard disk, the following main menu appears:

  ^I                                                                           ^N
  ^I               Copyright 1986 by Applied Software Technology               ^N
  ^I                                                                           ^N
  ^I             VersaForm XL Business Form Database - Release 4.0             ^N
  ^I                                                                           ^N
  ^I                      Enter the number of the function                     ^N
  ^I                      you wish to use:                                     ^N
  ^I                                                                           ^N
  ^I                      1.  Form Design                                      ^N
  ^I                      2.  Filing                                           ^N
  ^I                      3.  Report                                           ^N
  ^I                      4.  Design a Print Format                            ^N
  ^I                      5.  Copy or Print Forms                              ^N
  ^I                      6.  Mailing Label Printer                            ^N
  ^I                      7.  VersaForm Utilities                              ^N
  ^I                      8.  Enter or Change a Procedure                      ^N
  ^I                      9.  Exit                                             ^N
  ^I                                                                           ^N
  ^I                      Enter your choice:                                   ^N
  ^I                                                                           ^N

   The basic unit of information in VFXL is the "form."  Since nearly all man-
ual methods of running a business involve forms, this provides a natural meta-
phor for the business user.  Instead of having to adapt the way you currently
do business to the computer, VFXL adapts the computer to the way you currently
do business.  You can design VFXL's forms to look like the ones you actually
use.  Each file has one "form design," which contains such information as how
many fields each form has, how long each field is, which field (or two fields)
forms the "key," etc.  Each field may also have optional "checking and filling" 
information, which describes what kind of information is allowed in the field, 
and whether any information will be automatically entered if the field is left 
blank and where it will come from.  Although to the user it looks like each 
individual form (or record) repeats the form design information, such informa-
tion is actually stored only once, and only the actual data is stored for each 
individual form.

   Previous versions of VF and VFXL limited the form designs to the physical 
size of the monitor screen, but VFXL 4.0 form designs can be up to 160 charac-
ters across by up to 60 lines down, forming a "virtual screen".  

   Forms are stored sorted by the "key."  This key may be numeric or alphanu-
meric, and may be from three to 20 characters long.  One or two fields may make 
up the key, but there can be only one key per form design.  The key must be 
designed so that it is impossible for any two forms in the file to have 
identical keys.  This is a severe limitation on VFXL, which keeps it from being 
as powerful as the likes of dBASE III or RBase System V or Revelation, etc.  
But then, it is far easier to use and far less expensive than any of those.  
Non-key fields can be up to 80 characters long, and field names can be up to 20 
characters long.  Special fields form a group of optional "Column Lines."
These might be, say, the item lines in an "invoice" form.  Each field in the 
column area may have multiple values, one per column line.  

   Once a form has been defined, the form definition can be changed at any time
so long as no data has actually been saved.  Once data has been saved, the only
way to change the form design is to copy the form design to a new file, change
it there, then copy the data from the old file to the new one, and optionally
to delete the old file.  The VFXL Form Design sub-menu looks like this:

  ^I                                                                           ^N
  ^I                       Form Design Menu                                    ^N
  ^I                                                                           ^N
  ^I                1. Design a new form                                       ^N
  ^I                2. Change an existing form design                          ^N
  ^I                3. Copy an existing form design                            ^N
  ^I                4. Add or change checking and automatic filling            ^N
  ^I                5. Print the form definition                               ^N
  ^I                6. Return to main menu                                     ^N
  ^I                                                                           ^N
  ^I                                                                           ^N
  ^I                Enter the number you choose:                               ^N
  ^I                                                                           ^N

   The heart of VFXL is the Filing system.  When "Filing" is selected from the
main menu, the current form design appears on the screen.  The user can move
the cursor around the screen at will, and type any characters into any fields
as they see fit.  Pressing the ^I TAB ^N key will advance from one field to the
next, while the ^I RETURN ^N key advances to the beginning of the next line.  At
the bottom of the screen is a prompt line showing the definitions of some of
the Function Keys.  Pressing ^I ESC ^N turns it into a Command Line, where you can
enter commands by typing abbreviations of their keywords.  Any Filing command
can be entered in this manner, or by pressing a Function or Cursor-Pad key
either alone or in conjunction with the ^I ALT ^N or ^I CTRL ^N keys.  Typing the com-
mand "?" or pressing ^I F10 ^N will bring up a Help Screen showing the commands
associated with each key and key combination.

   The "Validate" ("V") command or the ^I F1 ^N key checks entries against the 
Checking and Filling options of each field.  The user is alerted and the vali-
dation stopped if an entry violates a Checking option.  For example, the user 
may be told that they didn't enter anything into a Mandatory field, or that the 
"Social Security #" they entered didn't match the Format of a Social Security 
Number, or that a "Price" must be Numeric or a "State" abbreviation wasn't in 
the List of legal state abbreviations, etc.  If all checking succeeds, the form 
is considered validated.  Then, any automatic filling takes place.  Today's 
date, for example, may be substituted in a "Date" field if the user entered 
nothing there, or a "Price" may be entered by Lookup from a "Part #", or a 
"Total" may be Calculated from a "Subtotal" and a "Sales Tax", the "Subtotal" 
itself having been computed as a Column Total from the "Price" column, etc.  

   The user can "Save" this new form, or an old one which has been changed.
Save automatically Validates if needed.  Browsing through the forms in the file
is performed with the "First," "Last," "Back (to previous form)" and "Next"
commands.  A particular form can be quickly found by entering the Key and per-
forming a "Get" command.  If the Key is unknown, the file can be "Searched" by
specifying other data, but this takes longer.  An "Index" can be displayed of
the Keys in sorted order, from which one can be selected, which will then act
as if the "Get" command had been used.  Column lines can be "INserted" or "DE-
leted."  The form can be "CLeared" to a blank form, or any unvalidated data can
be "Erased," restoring the form to the state it was in when last Validated.
Doing a "Get" without entering a new Key restores the form to the state it was
in when last Saved.  A User Procedure (VAL program) can be "EXecuted," a "CAl-
culator" can be summoned, the form can be "PRinted" or "Removed."  If you re-
move a form, you are given THREE chances to back out before the removal becomes 
irrevocable, barring restoration from a backup (which you should always do reg-
ularly and religiously for ANY database!)  You can Page through the Column 
Lines and thus have many more than could otherwise fit in the form design.  You 
can now scroll the form around, seeing a screenful at a time from the "virtual 
screen," and it will also scroll automatically as needed when you advance from 
one field to another or otherwise attempt to move the cursor off the screen.

   The "Report" section allows you to create and run reports quickly and easi-
ly.  A report can print as many fields as you wish.  It automatically formats
the report to fit your paper size.  If there are too many fields to fit across
the paper, each record will print on multiple lines -- as many as needed.  You
can select forms that match any of up to nine Selection Conditions, each of
which may have up to three selection Tests, all of which must succeed for a
Selection Condition to succeed.  A form gets selected if any Selection Condi-
tion succeeds, or if there are no Selection Conditions.  You can test the data
in any form, testing it against the value of any other form or against a value
entered when the form is designed, or when the form is run.  The test can be to 
see if the two values are EQual or Not Equal to each other; or if one is Less 
Than, Less than or Equal to, Greater Than, or Greater than or Equal to the 
other; or if one value COntains or EXcludes (does not contain) the other.  You 
can Sort by up to three fields, each of which may be sorted in Ascending or 
Descending order.  You can specify Totals for up to eight numeric fields, and 
have Line or Page breaks with Subtotals for the Totaled fields, each time up to 
three fields change.  For example if you sort by "State," you can get Subtotals 
for each state.  You can Export the report to disk, either as a standard report 
or in any of four Export formats.  You can specify a Title when designing the 
Report, or allow a Title to be entered each time you Run the Report.  
Unfortunately, you cannot Sort or Break by any field you aren't printing, nor 
can you create new fields for the Report which are calculated from existing 
fields, nor can you create esoteric Sorts in this version.  A future version 
may allow VAL Procedures to be specified for a Report, allowing all of these 
features and many others.  You CAN have many Reports per file, and one Report 
can even stretch across multiple files, so long as they have the same Form 
Design.  For example, if you do not have a hard disk and your floppies cannot 
hold your entire mailing list, you may have ZIP codes under 50000-0000 on one 
disk and the remainder on the other, and a Report could be generated from both 
disks as if they were a single file.  

   You can also have many Print Formats per file.  While a Report takes infor-
mation from many Forms and consolidates them, a Print Format specifies a way to
Print each form.  You can Print the displayed Form from Filing, or you can use
the Copy/Print menu to "batch-print" many forms.  However you choose to do it,
if you do NOT specify a Print Format, the form will be printed like it looks on
the screen, with the exception that there is more room for the Column Lines,
and separate pages will be printed if there are too many Column Lines to fit on
a single printed page.  With a Print Format, however, you can print on those
nice Pre-Printed Forms you can get from Print Shops and Computer Supply Stores.
For example, you can have your Payroll or Payables checks print on actual trac-
tor feed computer checks.  You specify how big the Printed Form is, where each
field prints, where the Column Lines go and how many can be on one Printed
Form.  You can also specify "comments", which are items not from the Forms
themselves but which are to appear on each Form.  For example, you may label
the specific Deductions your Payroll uses.  You can also have comments whose
values are entered each time the Print runs, such as Pay Period Ending.  You
can also specify "&DATE" as a comment, which will cause the current date to
print.  The Pre-Printed Form mechanism is very powerful indeed.

   The Copy/Print section not only allows you to Batch Print forms, but also to
Batch Copy forms between files with similar Form Designs.  You can also copy
"Control Forms" between files.  These include Report Definitions, Pre-Printed
Form Layouts, VAL Procedures, and even Copy/Print selection instructions them-
selves!  Selection instructions work the same as for Reports.

   The Mailing Label printer is almost not worth having.  This is the single
worst aspect of VFXL.  It is quite powerful, able to print up to nine-up la-
bels, with up to nine lines per label, etc., but it is difficult to use.  You
must first design and run a Report to generate the Label information, Exporting
it to disk in Label format.  Then you run the Mailing Label Printer and specify
the file, then describe your physical labels and how you want each label prin-
ted.  While all this is still easier than doing it manually, this section of
VFXL needs much improvement.

   The Utilities include Copy by Name, which allows you to Copy forms to a file
whose Design is too different to use the Copy/Print.  It copies data by match-
ing the field names.  Any data in fields with no counterparts does not get
copied.  This is mainly used to transfer data to a new File whose design has
been Copied from the current file and then Changed.  System Configuration is
also here, where you specify such things as how you want VFXL to look on your
monitor, how big your printer is, how the dates look in your country, which
drives or subdirectories to default to for different types of files, etc.  Sev-
eral other utilities are here as well.

   Last, but FAR from least, is "Enter or Change a Procedure", the main differ-
ence between VF and VFXL.  This lets you enter Procedures, which are programs
in a language called "VAL" for VersaForm Application Language.  These extend
the Filing capabilities enormously.  For instance, you can extend the Checking 
and Filing functions to do such things as making sure a ZIP code is legal for a 
particular State, or convert a name entered in "Last, First Middle" format into 
"First Middle Last" format and assign it to a new cell.  You can even reference 
data in other files.  An "Invoice" can perform lookups from and post to an 
"Inventory" and a "Customer Ledger," for example.  VAL looks like Pascal (not 
surprising, since VFXL is written in Pascal) but with extensions which make 
database operations easy.  For example, each Filing command exists as a VAL 
Procedure.  Fields can be used as if they were variables, Column fields as if 
they were arrays.  Automatic Lookup simplifies program design by automatically 
opening the secondary file and calling up the required form before your pro-
gram even starts!  For example, a VAL *CHECKING (runs on Validation after the 
Checking but before the Automatic Filling) to take a "Part #" and look up price 
("Each") and "Description" from the appropriate Inventory file might be: 

   ^I                                                                           ^N
   ^I   Procedure Name ^N*CHECKING                           ^I                     ^N
   ^I   Secondary File ^NC:FORMS\INVENTRY.FIL                                ^I     ^N
   ^I   Key-From1 ^NPart#               ^I  Key-From2: ^N                    ^I         ^N
   ^I   L# ..........................Procedure...............................   ^N
   ^I     1^NA.Description := B.Description;                                   ^I   ^N
   ^I     2^NEach := List;                                                     ^I   ^N
   ^I                                                                           ^N

It's that simple.  "A." and "B." allow the same field name to appear on both
the Primary (A.) and Secondary (B.) forms.  VAL includes built-in PROCEDURES
and FUNCTIONS for string manipulation, screen and printer I/O, text file I/O,
Procedure Chaining, etc.   Procedures can be named to run at the *START of
filing, on Validation after *CHECKING or after *FILLING, in place of *SAVE, or
when the user Quits filing (*STOP).  Or a Procedure can be a User Procedure
with any other name, in which case it can be EXecuted by the user or Chained to
by another Procedure.

   VFXL with VAL allows a reasonably good programmer to quickly design custom-
ized applications with a minimum of programming.  Other features of VFXL that
facilitate this include the ability to define custom menus and help screens
that replace the normal menus and help screens.  The Main Menu can be custom-
ized so that the user need not enter file names, and to keep the end user out
of the Form Design, Design a Print Format, VersaForm Utilities, Enter or Change
a Procedure or any other section of VFXL that he may not need.  VFXL applica-
tions can be distributed with no royalties, though the Applied Software Copy-
right must remain at the top of the Main Menu, and the end user must have his
own legally-purchased copy of VFXL with which to run the application.

   In summary, VFXL is a very handy application tool, very powerful for the
price.  The new version is nearly six times faster than previous versions for 
processor-bound operations such as compiling a Procedure, and about twice as 
fast for pure disk-bound operations.  For most purposes, it is about four to 
five times faster than before.  Its power and speed coupled with its relatively 
low price make it an invaluable tool for anyone interested in earning money by 
developing custom business software.  It is also useful for end users, although 
if they don't need some of the features of VFXL they may want to save some 
money and get VF or another simple filer like "pfs" instead.  On a scale of 1 
to 10, I'd give VFXL an overall rating of 8.25.  If future versions extend the 
Reporting and ESPECIALLY the Mailing Label Printing facilities, I'll rate it 
much higher.  I do recommend this product, since it has the best price/perfor-
mance ratio among the application-generation programmable databases I have yet 
seen.  
 
