
`-------------------------------------------------------------
`--------- main (top horizontal) menu commands
`-------------------------------------------------------------


`-------------------------------------------------------------
`Help
`-------------------------------------------------------------
$mainhlp
~The Help menu gives you general help on a variety of subjects.
~
~Also, each option within every menu has its own context-sensitive
help.


`-------------------------------------------------------------
`Files
`-------------------------------------------------------------
$mainfil
~The Files menu contains all the UI commands to get your designs
to and from disk, as well as commands to view the contents of UI
design (.WW) files, to load selected objects from .WW files, to
import and export in various ways, and so on.~
 
~Each command within this menu has its own help; to get it, move the
bounce bar to the command you want help with and press F1.



`-------------------------------------------------------------
`Edit
`-------------------------------------------------------------
$mained
~The Edit menu contains various UI editing commands that don't
operate on specific objects -- these can be found in the menus for
those objects.~

~The commands found in the editing menu include facilities for
moving, copying and erasing arbitrary rectangular sections of a
design; painting colors in various ways; viewing forms from
different perspectives; and others.~

~Each command within this menu has its own help; to get it, move the
bounce bar to the command you want help with and press F1.



`-------------------------------------------------------------
`Var
`-------------------------------------------------------------
$mainvar
~The Var menu contains commands for loading, defining, and editing
fields and memory variables in the editor.~

~In this release of UI, all field and data file definitions are
stored within data dictionaries. This means, before you can
actually load a field definition into the editor, you must first
specify a data dictionary.~

~Each command within this menu has its own help; to get it, move the
bar to the command you want help with and press F1.


`-------------------------------------------------------------
`Data
`-------------------------------------------------------------
$maindd
~The Data menu contains the commands for attaching and modifying Data
Dictionaries used by forms you design in UI.
~
~If your form uses fields, general and default information about those
fields and the DBFs they come from are stored in a data dictionary
attached to the form. Locally (within each form that uses the dictionary),
each field and DBF element has a separate definition that may override
global defaults, and select particular elements from the dictionary.
~
~The Data menu provides the commands to edit the definitions in
an attached dictionary, to switch attached dictionaries, and to modify
the local definitions for DBFs used in the form. (The command to modify
local definitions of fields is found in the F4:Var menu.)
~
~Note: UI will collect field information into a data dictionary
automatically if you wish. As you add fields to a form using the
'Add field' commands in the F4:Vars menu, UI will add definitions
to the attached dictionary automatically if you tell it to. You
don't need to access the dictionary directly unless you want to.
~
~Each command within this menu has its own help; to get it, move the
bounce bar to the command you want help with and press F1.




`-------------------------------------------------------------
`Boxes
`-------------------------------------------------------------
$mainbox
~The Boxes menu contains commands for creating and editing Box
objects.~

~Each command within this menu has its own help; to get it, move the
bar to the command you want help with and press F1.




`-------------------------------------------------------------
`Menus
`-------------------------------------------------------------
$mainmen
~The Menus menu contains commands that may be used during the
design of menu forms. Since Option objects are a kind of Box
object, commands from the Box menu are also used heavily in the
design of menus.~

~Each command within this menu has its own help; to get it, move the
bounce bar to the command you want help with and press F1.



`-------------------------------------------------------------
`Other
`-------------------------------------------------------------
$mainoth
~The Other menu is made up entirely of commands you can call with
"Control" or "Alt" keys.~

~Once you've worked with UI for awhile, you will probably never
access this menu again except for reference, maybe. Perhaps.~

~Each command within this menu has its own help; to get it, move the
bounce bar to the command you want help with and press F1.


`-------------------------------------------------------------
`Gen
`-------------------------------------------------------------
$maingen
~The Generation menu contains commands for generating code and
compiling templates and template libraries.~

~Each command within this menu has its own help; to get it, move the
bounce bar to the command you want help with and press F1.


`-------------------------------------------------------------
`Config
`-------------------------------------------------------------
$maincfg
~The Configuration menu contains commands that deal with
configuring the UI working environment.~

~Each command within this menu has its own help; to get it, move the
bounce bar to the command you want help with and press F1.





`-------------------------------------------------------------
`--------- F1:Help commands
`-------------------------------------------------------------

` (all topics from this menu are above, except for More help,
`  which is kinda cheezy.)

$mainmore
~Each option in a UI menu has it's own, context-sensitive help.
Each item in the Box and Var definition windows also have their own
help. This help is always accessible via the F1 key.





`-------------------------------------------------------------
`--------- F2:File commands
`-------------------------------------------------------------



`-------------------------------------------------------------
`Load form
`-------------------------------------------------------------
$filldf
~The load command loads a UI design (.WW) file from disk.
~
~UI will give you a menu of all the .WW files in the directory
you've specified as the home for your .WW files.
~
~(You can specify this directory in the 'Config' menu (F10), or
in a CONFIG.UI file. If you haven't specified a directory, UI will
look in the current one.
~
~When you pick the file you want to load, UI will clear the editor
and load the .WW file you've selected.
~
~(For a non-destructive load, use the Overlay command.)



`-------------------------------------------------------------
`Overlay form
`-------------------------------------------------------------
$filolf
~This command loads a UI design (.WW) file from disk, without
destroying the current contents of the design editor. The .WW file
will be loaded 'on top of' whatever was in the editor
before the overlay.
~
~UI will give you a menu of all the .WW files in the directory
you've specified as the home for your .WW files.
~
~(You can specify this directory in the 'Config' menu (F10), or
in a CONFIG.UI file. If you haven't specified a directory, UI will
look in the current one.
~
~Once you've selected a file, UI will overlay it into the editor.



`-------------------------------------------------------------
`Pick to load
`-------------------------------------------------------------
$filpck
~This command lets you load only the objects you want from a
selected UI design (.WW) file.~

~When you pick a .WW file from the file selection menu, UI will
show a list of the objects (boxes, popboxes and options) in that
file, along with some characteristics for each (its name, location,
colors, outline type, and so on).
~
~To see what an object in this list actually looks like, move the
bounce-bar to the object you want to see and press Control-PgDn.
UI will show you the object, then put back the list after another
keypress.
~
~To pick an object from this list to load into the editor, move the
bounce bar to the object you want and press the space bar. An arrow
() will appear to the left of the object's entry in the list. Tag
all of the objects you want to load, then hit return. (It doesn't
matter which object you hit return on.) The objects you picked will
be loaded into the editor.
~
~Note: Like the Overlay command this command does NOT clear the editor
before loading.



`-------------------------------------------------------------
`Save
`-------------------------------------------------------------
$filsav
~This command saves the contents of the design editor to a .WW
file.
~
~Note: any hidden objects will NOT be saved. To save hidden, as
well as visible, objects, use the 'save +Hidden' command.



`-------------------------------------------------------------
`save +Hidden
`-------------------------------------------------------------
$filsva
~This command saves ALL contents of the design editor to a
.WW file, including objects that are currently hidden.~

~To save only visible objects, use the plain 'Save' command.
~
~Note: the commands for hiding and showing (un-hiding) objects
are found in the Edit menu.



`-------------------------------------------------------------
`save Chosen
`-------------------------------------------------------------
$filsch
~This command lets you choose objects from the current contents of the
design editor, and save what you've chosen to a .WW file.
~
~UI will show you a list of the objects (boxes, popboxes and
options) currently in the editor, along with some characteristics
for each (name, location, colors, outline type, and so on).
~
~To see what an object in this list actually looks like, move the
bounce-bar to the object you want to see and press Control-PgDn.
UI will show you the object, then re-display the list after another
keypress.
~
~To pick an object from this list, move the bounce bar to the
object you want and press the space bar.
~
~An arrow () will appear to the left of the object's entry in
the list. Tag all of the objects you want to save, then hit
return. (It doesn't matter which object you hit return on.)~
~
The objects you picked will be saved to the .WW file you specify.



`-------------------------------------------------------------
`Dbase import
`-------------------------------------------------------------
$fildbi
~This command lets you to import the screen display portions of a
Dbase program into UI's editor.~

~This command doesn't actually do a whole lot; mostly it recognizes
statements of the form
~
~  @ <row>,<col> SAY "<string>"
~
~and places <string> appropriately.



`-------------------------------------------------------------
`Ascii import
`-------------------------------------------------------------
$filasi
~This command lets you load the contents of an ASCII file (that is,
a simple text file) into UI's editor.
~
~The file can actually be of any kind; UI simply eats it and places
whatever portion of the file fits into the editor.



`-------------------------------------------------------------
`eXport ascii
`-------------------------------------------------------------
$filasx
~This command saves a flat image of what's currently in UI's design
editor into a text file.



`-------------------------------------------------------------
`export Video
`-------------------------------------------------------------
$filvdx
~This option saves a flat video-map of the screen into a file.
~
~This command has no specific use within the UI environment; it is
provided for use in situations where you wish to export a form designed
in UI in video-memory format.







`-------------------------------------------------------------
`--------- F3:Edit commands
`-------------------------------------------------------------



`-------------------------------------------------------------
`Move area
`-------------------------------------------------------------
$edmva
~This command lets you 'paint' a rectangular area of the screen,
then move it elsewhere.
~
~The region you move can contain anything: boxes, variables, text
and graphics characters. Simply size the rectangle to include
everything you want to move, then do it!
~
~Note: if you simply want to move a box or variable, the Move
commands in the 'Boxes' and 'Vars' menus, respectively, are less
tedious.



`-------------------------------------------------------------
`Copy area
`-------------------------------------------------------------
$edcpa
~This command lets you 'paint' a rectangular area of the screen and
copy everything enclosed by the rectangle. This includes boxes and
variables, as well as simple text.
~
~As with the Move area command, copying a single box or variable
is more easily accomplished using the Copy command in the 'Boxes'
or 'Vars' menus.



`-------------------------------------------------------------
`Erase area
`-------------------------------------------------------------
$edkla
~This command lets you 'paint' a rectangle on the screen, and
erase everything enclosed by the rectangle.
~
~As with the other area commands, erasing a single box or variable
is more easily accomplished using the Erase command in the 'Boxes'
or 'Vars' menus, respectively.



`-------------------------------------------------------------
`Hide object
`-------------------------------------------------------------
$edhid
~This command lets you hide objects you choose from the design
editor. These can be restored at any time with the Show objects
option.
~
~Note that the Save command from the Files menu does NOT save
hidden objects! Use the Save +Hidden command to do so.



`-------------------------------------------------------------
`Show object
`-------------------------------------------------------------
$edsho
~This command lets you restore previously hidden objects to
visibility.



`-------------------------------------------------------------
`Remove object
`-------------------------------------------------------------
$edrem
~This command lets you destroy both hidden and visible objects.
~
~Once Removed, these objects cannot be resurrected.




`-------------------------------------------------------------
`Depth-o-scope
`-------------------------------------------------------------
$eddos
~This option allows you to view your design sideways.
~
~Good for digging around in big, dusty piles of boxes. Gosh, look --
there's my High School yearbook! God, I haven't seen this in a
dog's age. Hey, honey...remember the prom?



`-------------------------------------------------------------
`Paint-o-matic
`-------------------------------------------------------------
$edpom
~This command lets you select a color and paint indiscriminately
all over everything.~

~Not recommended for persons with anything less than impeccable
taste.



`-------------------------------------------------------------
`Paint area
`-------------------------------------------------------------
$edpta
~The paint area command lets you cover an arbitrary rectangular
portion of your form with paint -- you choose the color.




`-------------------------------------------------------------
`Background color
`-------------------------------------------------------------
$edbgc
~This command lets you to select the color for your form's background.




`-------------------------------------------------------------
`Zap
`-------------------------------------------------------------
$edzap
~This command annihilates everything in the editor.
~
~If modifications have been made to the form after the last save, you
will be prompted to guard against the inadvertant erasure of countless
hours of backbreaking design, and the inevitable subsequent crisis of
Biblical proportions.










`-------------------------------------------------------------
`--------- F4:Var commands
`
`NOTE var def stuff later in file
`
`-------------------------------------------------------------



`-------------------------------------------------------------
`Add field
`-------------------------------------------------------------

$varadf
~This command lets you add a field to your form at the current location
of the cursor.


`-------------------------------------------------------------
`Add a bunch of fields
`-------------------------------------------------------------
$varadb
~This command lets you add one or more fields to the form; you may
to position each one individually, or dump them all at once.



`-------------------------------------------------------------
`define New memvar
`-------------------------------------------------------------
$varnew
~This command lets you define a new memory variable (memvar); it is added
to the form at the location of the cursor.
~
~Additional help is available in the variable definition window, which
is where definition of the new memvar takes place.


`-------------------------------------------------------------
`revise definition
`-------------------------------------------------------------
$varrev
~This command invokes the variable definition window on the variable
nearest or underneath the cursor. Additional help is available
there.
~
~If the variable is a field, the definition will begin as a copy of
the definition for that field found in the data dictionary attached
to the form.
~
~A field's vital characteristics -- the name, type, length, and
decimal count -- are not modifiable locally: you must modify those
characteristics from the data dictionary editor, accessible through
the F5:Data menu. All other characteristics (picture clause, valid
clause, initial value, and so on) are locally modifiable, and the
form will carry these characteristics permanently as overrides of the
dictionary definition of the field. (Of course, they may be changed
back to the dictionary defaults at any time.)
~
~If the variable is a Memvar, there is no dictionary definition, and
all characteristics of the definition are modifiable.
~
~Note that the variable definition window is also accessible at any
time within the editor by positioning the cursor on top of the variable
whose definition you wish to edit, and pressing Control-PgDn.



`-------------------------------------------------------------
`Move
`-------------------------------------------------------------
$varmov
~This command moves the variable nearest or under the cursor. Use
your arrow keys to move it where you want it and hit <Return>.



`-------------------------------------------------------------
`Copy
`-------------------------------------------------------------
$varcpy
~This command copies the variable nearest or under the cursor, and
then lets you move it to a new location in the form. Use
the arrow keys to move the copy where you want it and hit <Return>.



`-------------------------------------------------------------
`Erase
`-------------------------------------------------------------
$varkil
~The erase command erases the variable under the cursor.



`-------------------------------------------------------------
`Picture/Name (whatever)
`-------------------------------------------------------------
$varpn
~This command toggles the UI form display to either show the
name of each variable at its location in the form, or the picture
defined for that variable.



`-------------------------------------------------------------
`set say/get order
`-------------------------------------------------------------
$varseq
~This command lets you define an explicit input/display
sequence for all variables in the form.
~
~This sequence is observed in generated code which does input or
display of variables defined in the form.


`-------------------------------------------------------------
`Display color
`-------------------------------------------------------------
$varclr
This command sets the display color for all variables in the form.




`-------------------------------------------------------------
`- help for exception handler menus from Add field and
`- add Bunch of fields
`-------------------------------------------------------------


`-------------------------------------------------------------
`sleazedic menu: comes up on add/add bunch when no data dic is
`attached.
`-------------------------------------------------------------


`-------------------------------------------------------------
`attach existing dictionary
`-------------------------------------------------------------
$slddat
~This command lets you attach an existing dictionary to your form.
~
~If you've already created a dictionary which contains definitions
of the DBFs this form uses, then this is the wise choice.
~
~If you don't have such a dictionary already available, select
the 'Begin new dictionary' option, in this menu.
~
~For more information on UI data dictionaries, select the 'What's
a data dictionary?' option, in this menu.



`-------------------------------------------------------------
`begin new dictionary
`-------------------------------------------------------------
$sldbnd
~This command lets you begin a new, empty dictionary now.
~
~This allows you to define fields from the editor, and place
their definitions in the dictionary as you go, rather than forcing you
to define them in the dictionary first.
~
~If you're just designing a form, and you want to add fields 'on the
fly', pick this option.
~
~For more information on UI data dictionaries, select the 'What's
a data dictionary?' option, in this menu.


`-------------------------------------------------------------
`What's a data dictionary?
`-------------------------------------------------------------
$sldwdd
~This command gives a brief explanation of the purpose a
data dictionary serves in UI.


`-------------------------------------------------------------
`this is the help text that gets shown if you select the
` what's a dic? option, above
`-------------------------------------------------------------
$dicdesc
~In UI, all information about the fields used in a form, and the
DBFs the fields live in, is stored in a data dictionary that is
'attached' to the form.
~
~If you're using UI to design many forms in a single system, the
data dictionary is a convenient, robust way of providing a complete
data definition for the system in one place, where all forms can
access it.
~
~If you're simply using UI to design a single form, the data dictionary
will for the most part stay out of your way.
~
~Here's the general rule to follow:
~
~1: If you want to define the fields and DBFs for this form 'on the fly',
without creating an entire data dictionary first, select the 'Begin new
dictionary' command from this menu. This will allow to define new DBFs
and fields as you go. The definitions you create will be stored to
the new dictionary automatically.
~
~2: If you've already created a data dictionary which defines the fields
and DBFs you wish to use in this form, select the 'Attach existing
dictionary' command from this menu. This lets you pick an existing
data dictionary to attach to this form, and all the fields and DBFs
defined in that dictionary will then be available to you.
~
~3: If you want to define all the fields and DBFs you'll be using
before you begin designing forms, go to the F5:Data menu and select
the 'attach New dictionary' command. Then select the 'Modify attached
dictionary command'. This will place you in the Data Dictionary editor,
where you may create new DBF definitions, import DBF definitions from
disk, edit, and so on.


`-------------------------------------------------------------
`Forget it
`-------------------------------------------------------------
$sldq
~This command cancels the request to add a field or fields to the form.





`-------------------------------------------------------------
`sleazetab menu: comes up on add/add bunch when no DBFs are defined
`in attached dictionary.
`-------------------------------------------------------------


`-------------------------------------------------------------
`Import DBF structure
`-------------------------------------------------------------
$sltimp
~This command lets you import the structure of an existing DBF
into the currently attached dictionary.
~
~If a DBF already exists which defines the field or fields you want
to add to this form, then select this option.
~
~If, on the other hand, you want to define your fields as you go,
select the 'Begin new (empty) DBF' option. You can then add
new field definitions to the new DBF as you need them.



`-------------------------------------------------------------
`Begin new (empty) DBF
`-------------------------------------------------------------
$sltnew
~This command begins a new DBF definition in the currently attached
dictionary. If you select this option, you'll then be able to add
field definitions to the DBF as you define them for the form.
~
~If a DBF already exists which defines the field or fields you want
to add to this form, however, use the 'Import DBF structure' command
instead.


`-------------------------------------------------------------
`Forget it
`-------------------------------------------------------------
$sltq
~This command cancels the request to add a new field or fields
to the form.





`-------------------------------------------------------------
`--------- F5:Data commands
`-------------------------------------------------------------



`-------------------------------------------------------------
`Modify attached dictionary
`
`NB data dictionary editor commands found near EOF
`
`-------------------------------------------------------------
$ddmod
~This command places you in the UI data dictionary editor.
There, you can modify the DBF definitions within the dictionary
currently attached to your form.
~
~UI ensures data integrity between a dictionary and all forms that
use it. So, for instance, if you make changes to definitions used by
the form (say, changing the length of a field that appears in the form),
UI will warn you on exit from the dictionary editor, and prompt you
to resolve the conflict.
~
~The same checking occurs when you load a
form that uses a dictionary -- if, for instance, you make a change in
the dictionary to a field definition used by another form, UI will
perform the same checks next time you load that form into the
editor.
~
~Detailed help is available in the dictionary editor itself.




`-------------------------------------------------------------
`Attach existing dictionary
`-------------------------------------------------------------
$ddatt
~This command lets you attach an existing dictionary to your form.
~
~If you're beginning a new form, and
you've already created a dictionary which defines all the data
you use (or expect to use) in this form, then pick this option, and
select the dictionary from the menu of existing dictionaries.
~
~If you haven't already defined a dictionary to attach, select the
'attach New (empty) dictionary' option, on this menu. After doing
that, you may either select 'Modify existing dictionary' to add
definitions to the new dictionary immediately; or add definitions
as you create them in the form, from the 'Add field' command.
~
~If a data dictionary is already attached to this form and you wish
to attach a different one, UI will
first ask you if you really want to attach a different dictionary.
~
~When you confirm, UI will attach the new dictionary. If there are
any conflicts between definitions of fields and DBFs in this form
and definitions in the new dictionary, or if fields and DBFs used
in this form are not found in the new dictionary, UI will prompt you
to resolve any conflicts.




`-------------------------------------------------------------
`attach New (empty) dictionary
`-------------------------------------------------------------
$ddcre
~This command attaches a new, empty dictionary to your form.
~
~If you're beginning a new form, this command is the appropriate one
to use in either of two situations:
~
~- if you don't want to define an entire dictionary before designing
your form, use this command to begin a new dictionary, then add field
and DBF definitions 'as you go' -- the 'Add field' command lets you
add fields to the dictionary as you define them for the form.
~
~- if you do wish to define the entire dictionary before you begin
designing your form, use this command, the use the 'Modify attached
dictionary' command to enter the data dictionary editor.
~
~If a data dictionary is already attached to this form, UI will
first ask you if you really want to attach a different dictionary.
When you confirm, UI will open an empty dictionary.
~
~If there are fields and DBFs present in the form when you do this,
UI will prompt you for some conflict-resolving action as it finds that
each DBF and field is not present in the new, empty dictionary.
Typically, you'll be able to either delete the fields and DBFs from
the form, or add them to the dictionary.
~
~In this way, you may create a dictionary that contains nothing but
definitions of fields and DBFs used by this form.



`-------------------------------------------------------------
`Local data definitions
`
`NB help for local data def items found at EOF
`
`-------------------------------------------------------------
$ddloc
~This command lets you add some local information to the definitions
of the DBFs used in this form.
~
~The complete definition of each DBF
is stored in the dictionary attached to this form, but you'll probably
want to specify some things about the way each DBF behaves in this form,
in addition to the dictionary information.
~
~For instance, each DBF may have several indexes defined for it in
the data dictionary. You will want to specify which index (or indexes)
is active within this form. This is the kind of information the local
data definition of a DBF contains.









`-------------------------------------------------------------
`--------- F6:Box commands
`
`NOTE boxdef stuff later on in the file
`
`-------------------------------------------------------------




`-------------------------------------------------------------
`New border box
`-------------------------------------------------------------
$boxnbb
~This option allows you to create a new box with an outline.~

~Position your cursor where you want the upper left
corner of the box and select this command. Then, choose a border
type and the colors for the inside and outline of the box. Use your
cursor movement keys to size the box and hit <Return>.~

~Note: For drawing boxes around text and/or fields that already
exist on screen, you first have to draw the box "on top" of them
and then use the F:Fill from below command.
~
~A box's shape, location, colors and so on may be modified at any
time using the commands in the menu, 'Revise box definition' command,
or by placing the cursor on the box and pressing Control-PgDn.



`-------------------------------------------------------------
`New no-border box
`-------------------------------------------------------------
$boxnnb
~This command allows you to create a new box with no outline.~ 

~Position your cursor where you want the upper left corner of the
box and select this command.~ 

~Once you've made your color choices,
use your cursor movement keys to size the box and hit <Return>.
~
~A box's shape, location, colors and so on may be modified at any
time using the commands in the menu, 'Revise box definition' command,
or by placing the cursor on the box and pressing Control-PgDn.




`-------------------------------------------------------------
`Adjust
`-------------------------------------------------------------
$boxadj
~This command allows you to change the shape of box nearest or
under the cursor.
~
~When you select this command, the cursor will move to the lower
right corner of the box.
~ 
~Use your cursor movement keys to "drag" this corner of the box to
a new location on screen.




`-------------------------------------------------------------
`Move
`-------------------------------------------------------------
$boxmov
~This option moves box nearest or under cursor.~

~Use your cursor control keys to move the box around the screen.~

~Note: Since the screen is three-dimensional, you can have boxes
at different "depths" on screen. The arrow keys won't change the
depth of a box; they'll just move the box horizontally and
vertically, at the box's current depth.~ 

~The <PgUp> and <PgDn> keys change the 'depth' of the box.





`-------------------------------------------------------------
`Copy
`-------------------------------------------------------------
$boxcpy
~Lets you copy the box nearest or under the cursor.~

~This command not only copies the box, but also everything it.
Once a copy has been made, you may move it to whatever location
desired, as with the Move command.



`-------------------------------------------------------------
`Erase
`-------------------------------------------------------------
$boxkil
~Lets you erase the box under the cursor.~

~This command not only erases the box, but also everything in it.




`-------------------------------------------------------------
`Unbox
`-------------------------------------------------------------
$boxunb
~Lets you erase the box under the cursor, dropping any contents of
the box onto whatever's below it.



`-------------------------------------------------------------
`Fill
`-------------------------------------------------------------
$boxfil
~This command takes any variables or text currently below
(underneath) the box, and pulls them into the box.
~
~This is the command to use if you've drawn a new box, and it's
floating 'above' the text and/or variables you want to appear
within the box. Simply place the cursor on the box and select
this option.



`-------------------------------------------------------------
`Outline color
`-------------------------------------------------------------
$boxotc
~Allows you to set the outline color for the box nearest or under
the cursor.
~
~This can also be done from within the box definition window,
available from this menu or via the Control-PgDn key.


`-------------------------------------------------------------
`Contents color
`-------------------------------------------------------------
$boxinc
~Allows you to set the inside (contents) color for the box nearest
or under the cursor.
~
~This can also be done from within the box definition window,
available from this menu or via the Control-PgDn key.



`-------------------------------------------------------------
`Revise box def
`-------------------------------------------------------------
$boxrbd
~This command invokes the box definition editor on the box nearest
or under the cursor. (Additional help available there.)
~
~The box definition window is also available by placing the cursor on
the box and pressing the Control-PgDn key.



`-------------------------------------------------------------
`Tag as Popup
`-------------------------------------------------------------
$boxtag
~This command sets/resets the popup flag of the box nearest or
under the cursor.~

~This setting is only important if a template says it is; otherwise
don't worry about it.



`-------------------------------------------------------------
`Hide box
`-------------------------------------------------------------
$boxhid
~This command hides the box nearest or under cursor.~

~The effect is the same as picking the box from within the 'Hide
objects' option in the Edit menu.



`-------------------------------------------------------------
`Hide pile
`-------------------------------------------------------------
$boxhdp
~This command hides the box nearest or under cursor, along with all
boxes visually above and enclosed by that box.







`-------------------------------------------------------------
`--------- F7:Menu commands
`
`-------------------------------------------------------------



`-------------------------------------------------------------
`New option box
`-------------------------------------------------------------
$mencno
~Lets you define a new menu option box which is almost just like
creating a regular box except that you must also define the
following:~

~Trigger character: The character which will select this option
in the generated menu. This can be any typeable character besides
<^W> and <Escape> and doesn't necessarily have to have anything to
do with the text in the option box.~ 

~Conventionally, the trigger character is the first letter of the
option prompt. The trigger is not affected by changes you make to
the text in the option box; to change the trigger, you must revise
the option definition using the R:Revise option definition
command.~

~Action code: This is any code that gets executed when this menu
option is selected in the generated menu.~

~Message string: You can define a message that appears when the
menu option is selected in the generated code.




`-------------------------------------------------------------
`Attach option def
`-------------------------------------------------------------
$menaod
~This command allows you to turn an existing box into a menu option
with the addition of the
following definitions:~

~Trigger Character: The character which will select this option
in the generated menu. This can be any typeable character besides
<^W> and <Escape> and doesn't necessarily have to have anything to 
do with the text in the option box.~

~Conventionally, the trigger character is the first letter of the
option prompt. The trigger is not affected by changes you make to
the text in the option box; to change the trigger, you must revise
the option definition using the R:Revise option definition
command.~

~Action Code: This is any code that gets executed when this menu
option is selected in the generated menu.~

~Message String: You can define a message that appears when the
menu option is selected in the generated code.




`-------------------------------------------------------------
`revise option def
`-------------------------------------------------------------
$menrod
~Allows you to revise the definition of the menu option box nearest
or under the cursor.




`-------------------------------------------------------------
`delete option def
`-------------------------------------------------------------
$mendod
~Allows you to delete the option definition of the box nearest or
under the cursor. Once you do this, the box is no longer an
'option box', but a plain, ordinary box, subject to all statutes
and restrictions which apply to that class of object. (Void
where prohibited by law.)



`-------------------------------------------------------------
`Unselected option color
`-------------------------------------------------------------
$menuoc
~This command lets you define the color of all
unselected menu option boxes on screen.~

~In normal UI display, all option boxes are displayed as they will
be when they're selected (highlighted). There are several
reasons for this:~

~First of all, in a traditional bounce-bar menu, the option prompts
share the color of the surrounding screen when they're unselected.~

~Because of this, UI option boxes for a traditional bounce-bar menu
would be indistinguishable from their surroundings if they were
displayed in the unselected color.

~Also, each option box can have different selected colors, but all
option boxes share the same unselected color.




`-------------------------------------------------------------
`menumatic
`-------------------------------------------------------------
$menmat
~Demonstrates what the menu on screen will look and feel like in
a generated program.




`-------------------------------------------------------------
`option sequence
`-------------------------------------------------------------
$menseq
~Allows you to set the order in which the menu options get selected
(highlighted), similar to the F4:Vars/Set say/get order command.







`-------------------------------------------------------------
`--------- F8:Other commands
`
`-------------------------------------------------------------




`-------------------------------------------------------------
`Dos vacation
`-------------------------------------------------------------
$othdos
~Exits to DOS without terminating UI.~

~Go out, look through some directories, get some sun. When you're
ready to come back, type EXIT. UI will be waiting.




`-------------------------------------------------------------
`single lines
`-------------------------------------------------------------
$othdsl
~<^S>; allows you to draw single lines on the screen, starting at
the current cursor position and ending where you hit <Escape>.~

~If AutoJoin is on, all line intersections will be joined (see
F8:AutoJoin).



`-------------------------------------------------------------
`double lines
`-------------------------------------------------------------
$othddl
~<^D>; allows you to draw double lines the screen, starting at the
current cursor position and ending where you hit <Escape>.~

~If AutoJoin is on, all line intersections will be joined (see
F8:AutoJoin).




`-------------------------------------------------------------
`blanx
`-------------------------------------------------------------
$othdbl
<^B>; allows you to draw blank lines on the screen, starting at the
current cursor position and ending where you hit <Escape>.~

~(Actually functions like a multi-directional spacebar.)




`-------------------------------------------------------------
`any character
`-------------------------------------------------------------
$othdac
~<^A>; allows you to draw any character on screen, starting at the
current cursor position and ending where you hit (Escape>.



`-------------------------------------------------------------
`join at cursor
`-------------------------------------------------------------
$othjac
~<^J>; joins a line juncture at the current cursor position.~

~Note that this is not the way you should draw boxes. Boxes
created this way are not BOX objects but just a collection of
random characters in the editor (see F6:Boxes menu for more
information.) 




`-------------------------------------------------------------
`join evathang
`-------------------------------------------------------------
$othjal
~<^E>; joins all the line junctures on the screen at once.~

~Have some fun, try it!




`-------------------------------------------------------------
`toggle autojoin
`-------------------------------------------------------------
$othtaj
~<^T>; joins line junctures automatically as the cursor passes over
them. Toggles on and off.




`-------------------------------------------------------------
`center
`-------------------------------------------------------------
$othctr
~ <^C>; centers any text under the cursor.~

~Note: where the text gets centered depends on the dimensions of
the screen.



`-------------------------------------------------------------
`zoom
`-------------------------------------------------------------
$othzm
~<^PgDn>; allows you to zoom in on the definition of the box or
variable under the cursor.~ 

~This is a shortcut you can use instead of the F4:Vars or F6:Boxes 
'Revise definition' commands.



`-------------------------------------------------------------
`info area
`-------------------------------------------------------------
$othinf
~<alt S>; displays/hides the information area on the upper right
corner of the screen.~

~The info area is where the editor displays various useful
information about itself, including:~

~1) Available system memory, denoted by
~   'M:<memory in K>'
~2) Insert/Overwrite mode, denoted by
~   'Ins' or "Ovw'
~3) The location of the cursor, denoted
~   by '@<row>,<col>'
~4) Whether or not Auto-join has
~   been toggled on
~5) If Paint-O-Matic is in use
~6) If Draw mode is active
~7) If Move mode is active
~8) If Adjust mode is active~

~If you want to have an unrestricted view of the entire screen, you
can turn the info area off, either by changing the default in the
F10:Config menu or by toggling <alt S>.



`-------------------------------------------------------------
`license plate
`-------------------------------------------------------------
$othlpl
~<alt L>; lets you view registration information at a glance.




`-------------------------------------------------------------
`--------- F9:gen help
`
`-------------------------------------------------------------



`-------------------------------------------------------------
`generate
`-------------------------------------------------------------
$gengen
~This is the command for generating code; it pops up a list of
templates available in the directory you specified in the
F10:Config menu.
~
~Within this menu, you may view the currently hilighted template
by pressing Control-PgDn: if you've defined an external view
editor in the F10:Config menu, UI will invoke it with the
template. If you haven't specified a view editor, UI will invoke
a built-in viewer in which you can browse (but not edit) the
template.
~
~Also, pressing F1 within this menu will cause UI to look for a file
called <template name>.DOC, and, if found, will let you browse
that file (which contains documentation on the template) in the
built-in viewer. Templates supplied by WallSoft come with .DOC
files; others may or may not.
~
~Use your arrow keys and hit <Return> to select the one you want.~

~Once UI is done generating code, it puts you back into the editor.



`-------------------------------------------------------------
`compile template
`-------------------------------------------------------------
$genctm
~This command is for compiling templates.~

~This command looks a lot like the Generate command; it pops up a
list of templates and prompts you to make a selection using your
arrow and <Return> keys. All hot keys (Control-PgDn, F1) active
in the Generate menu of templates are also active here.
~
~NOTE: The Generate will compile files and save them to disk as
a side effect, if compilation is needed.



`-------------------------------------------------------------
`compile TLB
`-------------------------------------------------------------
$genctl
~This is the command for compiling template libraries.~

~This command works in a similar fashion to the other commands in
the F9:Generate menu except that a list of template libraries gets
popped-up (rather than templates), prompting you to make a
selection.







`-------------------------------------------------------------
`--------- F10:config help
`
`-------------------------------------------------------------


`-------------------------------------------------------------
`editor
`-------------------------------------------------------------
$suedi
~All configuration options that affect the forms editor.


`-------------------------------------------------------------
`Files
`-------------------------------------------------------------
$sufil
~All configurable settings that concern files: directories in
which to find files; default extensions, etc.


`-------------------------------------------------------------
`Generation
`-------------------------------------------------------------
$sugen
~All settings which affect generation.



`-------------------------------------------------------------
`read config
`-------------------------------------------------------------
$sucfr
~Lets you load a particular config file which contains
specific config settings.
~
~NOTE: a current setting will only be overriden if a different setting
is found in the CONFIG file being loaded. Any settings not specified
in the new config file will be unchanged.



`-------------------------------------------------------------
`Write config
`-------------------------------------------------------------
$sucfw
~Allows you to save the current config settings to a specified file.






`-------------------------------------------------------------
`--------- help for indiv. config settings
`
`-------------------------------------------------------------






`-------------------------------------------------------------
`edit config
`-------------------------------------------------------------


`-------------------------------------------------------------
`info line
`-------------------------------------------------------------
$cfginf
~This option sets default to display info line on startup or not.
(Can be toggled with alt-S.)
~
~The info area is where the editor displays various useful
information about itself, including:~

~1) Available system memory, denoted by
~   'M:<memory in K>'
~2) Insert/Overwrite mode, denoted by
~   'Ins' or "Ovw'
~3) The location of the cursor, denoted
~   by '@<row>,<col>'
~4) Whether or not Auto-join has
~   been toggled on
~5) If Paint-O-Matic is in use
~6) If Draw mode is active
~7) If Move mode is active
~8) If Adjust mode is active~




`-------------------------------------------------------------
`UI menu lolite color
`-------------------------------------------------------------
$cfgmlc
~This is where you change the colors for the unselected menu
options in the editor (NOT the generated menu option colors which
are covered in F7:Menus/Unselected option color).



`-------------------------------------------------------------
`UI menu hilite color
`-------------------------------------------------------------
$cfgmhc
~This is where you change the colors for UI's selected menu options
in the editor.



`-------------------------------------------------------------
`editor height
`-------------------------------------------------------------
$cfgehi
~Changes the height of the editor area.~

~Range of settings:  25-100 rows high.



`-------------------------------------------------------------
`editor width
`-------------------------------------------------------------
$cfgewi
~To change the width of the editor area.~

~Range of settings: 80-255 columns wide.




`-------------------------------------------------------------
`view editor
`-------------------------------------------------------------
$cfgvue
~Here you may specify an external editor to be used to view/edit
template and TLB files.
~
~In the template and TLB file menus provided by the commands in the
F9:Gen menu, you can view a particular template or TLB by pressing
Control-PgDn.
~
~If you specify an editor here, UI will invoke that editor to view
the template or TLB. If you don't, UI will invoke a built-in viewer
that lets you browse (but not edit) the file.
~
~.EXE, .COM and .BAT files may be specified here; any extension but
.EXE should be given explicitly.
~
~If the program (or file) you specify requires other command line
arguments, these may also be specified. UI will send the name of
the template or TLB file after any other arguments on the command line.



`-------------------------------------------------------------
`keyboard speed
`-------------------------------------------------------------
$cfgkbd
~Lets you specify your keyboard typematic rate, between 1 (slowest)
and 10 (fastest).
~
~NOTE: This setting ONLY works on AT-class machines and above.
 





`-------------------------------------------------------------
`file config
`-------------------------------------------------------------


`-------------------------------------------------------------
`ww dir
`-------------------------------------------------------------
$cfgwwd
~Specifies the directory where you want the editor to load and
store your design forms (.WW files).



`-------------------------------------------------------------
`dictionary dir
`-------------------------------------------------------------
$cfgddd
~Specifies the directory where the editor can find the data dictionaries
(.DIC files) associated with your forms.



`-------------------------------------------------------------
`template dir
`-------------------------------------------------------------
$cfgtmd
~Specifies the directory where you want the editor to load and
store your templates.




`-------------------------------------------------------------
`TLB dir
`-------------------------------------------------------------
$cfgtld
~Specifies the directory where you want the editor to load and
store your TLB (template library) files.



`-------------------------------------------------------------
`DBF dir
`-------------------------------------------------------------
$cfgdbd
~Specifies the directory where UI can find .DBF files you intend
to use.


`-------------------------------------------------------------
`index dir
`-------------------------------------------------------------
$cfgndd
~Specifies the directory where you want the editor to load and
store your index files.


`-------------------------------------------------------------
`output dir
`-------------------------------------------------------------
$cfgopd
~Specifies the directory where you want the generated output files to go.


`-------------------------------------------------------------
`index tag
`-------------------------------------------------------------
$cfgndt
~Changes the default index extension used when searching for index
files in the F5:Data menu.~

~Toggles between .IDX, .NDX and .NTX (for dBASE, Clipper and Fox,
respectively.)



`-------------------------------------------------------------
`generated file tag
`-------------------------------------------------------------
$cfggft
~Gives the default tag (extension) to give to generated files.
~
~Defaults (surprise!) to .PRG



`-------------------------------------------------------------
`help file
`-------------------------------------------------------------
$cfghlp
~Lets you specify what help file to use. Default is UI.HLP; this
should only be changed if a template system comes with its own
custom help file.






`-------------------------------------------------------------
`gen config
`-------------------------------------------------------------




`-------------------------------------------------------------
`flavor
`-------------------------------------------------------------
$cfgflv
~Pops up a list of choices for generated code flavor, including
Clipper Autumn '86; Summer '87; dBASE III+; dBASE IV; FoxBASE 1.x;
FoxBASE 2.1; Quicksilver and dBXL.
~
~You may also specify a different flavor manually; however, template
behavior may be erratic if you do this.

 

`-------------------------------------------------------------
`multi-user
`-------------------------------------------------------------
$cfgmlt
~This is where you specify whether you want to generate multi-user
code.



`-------------------------------------------------------------
`gentime window
`-------------------------------------------------------------
$cfggds
~Allows you to display code as it's being generated.
~
~Toggles between options.





`-------------------------------------------------------------
`flavs
`-------------------------------------------------------------
$flvc86
Clipper Autumn 86

$flvc87
Clipper Summer 87

$flvd3p
dBASE III PLUS

$flvd4
dBASE IV

$flvfx1
FoxBASE+ 1.x

$flvfx2
FoxBASE+ 2.x

$flvqs
QuickSilver





`----------------------------------------------------------------
`box def stuff
`----------------------------------------------------------------



`----------------------------------------------------------------
`box name
`----------------------------------------------------------------
$bdnam
~A box's name may be up to 255 characters.
~
~Typically a template will
want boxes with specific names for some purpose, for example REPSIMPL.TEM
needs a box named 'HEADER' and a box named 'DETAIL'. Consult the
documentation for templates you intend to use for the needs of
a particular template.



`----------------------------------------------------------------
`box location
`----------------------------------------------------------------
$bdloc
~Lets you change the location of a box, in exactly the
same way as the 'Move' command in the F5:Boxes menu.



`----------------------------------------------------------------
`box Dimensions
`----------------------------------------------------------------
$bddim
~Lets you change the dimensions (shape) of a box, in the same
way as the 'Adjust' command found in the F5:Boxes menu.



`----------------------------------------------------------------
`box Outline
`----------------------------------------------------------------
$bdotl
~Lets you change the outline characters used by this box.



`----------------------------------------------------------------
`box Outline color
`----------------------------------------------------------------
$bdolc
~Lets you change the box's outline color, in the same way as the
'Outline color' command found in the F5:Boxes menu.


`----------------------------------------------------------------
`box inside color
`----------------------------------------------------------------
$bdinc
~Lets you change the box's inside (contents) color, in the same way as the
command found in the F5:Boxes menu.



`----------------------------------------------------------------
`box slot 1
`----------------------------------------------------------------
$bdsl1
~This is a template-specific characteristic. Unless a template makes
specific use of a slot (and the documentation for a template will tell
you if that's the case), you don't need to worry about what goes in
here -- and in fact, it will be ignored by any template that doesn't
use it specifically.



`----------------------------------------------------------------
`box slot 2
`----------------------------------------------------------------
$bdsl2
~This is a template-specific characteristic. Unless a template makes
specific use of a slot (and the documentation for a template will tell
you if that's the case), you don't need to worry about what goes in
here -- and in fact, it will be ignored by any template that doesn't
use it specifically.


`----------------------------------------------------------------
`box slot 3
`----------------------------------------------------------------
$bdsl3
~This is a template-specific characteristic. Unless a template makes
specific use of a slot (and the documentation for a template will tell
you if that's the case), you don't need to worry about what goes in
here -- and in fact, it will be ignored by any template that doesn't
use it specifically.





`----------------------------------------------------------------
`box popup?
`----------------------------------------------------------------
$bdpop
~Lets you set/reset the popup flag of the box nearest or
under the cursor.~

~This setting is only important if a template says it is; otherwise
don't worry about it.




`----------------------------------------------------------------
`box descrip
`----------------------------------------------------------------
$bddes
~The box description can be any text up to 255 characters.








`----------------------------------------------------------------
`Var def stuff
`
`NOTE: field name, type, len, dec are not modifiable. If f1 is
`hit within the var definition window, it means that the thing's
`a memvar.
`----------------------------------------------------------------


`----------------------------------------------------------------
`Var name
`----------------------------------------------------------------
$vdnam
~Up to 10 characters.


`----------------------------------------------------------------
`Var type
`----------------------------------------------------------------
$vdtyp
~Type options are: (C)haracter; (N)umeric; (L)ogical;
(D)ate; or (M)emo.




`----------------------------------------------------------------
`Var len
`----------------------------------------------------------------
$vdlen
~Legal variable length varies for different field types:
~
~  Character - UI allows up to 999; target evironment limits vary
~
~  Numeric - UI allows up to 999; target environment limits vary
~
~  Logical - always 1 long
~
~  Date - always 8 long
~
~  Memo - always 10 long



`----------------------------------------------------------------
`Var decimal
`----------------------------------------------------------------
$vddec
~For numeric variables, this may be from 0 to (var length - 1)
long. Other types are always 0 decimal.



`----------------------------------------------------------------
`Var origin (field/memvar) -- currently never modifiable
`----------------------------------------------------------------
$vdori
var Origin



`----------------------------------------------------------------
`Var source (parent DBF) -- currently never modifiable
`----------------------------------------------------------------
$vdsrc
var Source .DBF file



`----------------------------------------------------------------
`Var display/input
`----------------------------------------------------------------
$vdinp
~This is where you specify whether this variable should be
used for display or input in generated code.




`----------------------------------------------------------------
`Var display formula
`----------------------------------------------------------------
$vddsf
~Lets you specify a formula to use when generating display code that's
too complex for a picture statement.
~
~Templates that generate display code will typically use a display formula,
if one is specified, like this. Instead of:
~
~   @ <row>, <column> SAY <var name>
~
~      they will generate
~
~   @ <row>, <column> SAY <var display formula>
~
~So, for example, if the variable IS_PAID had the following display formula:
~
~   iif(IS_PAID, "Yes", "No")
~
~then a template would generate the following display code:
~
~   @ <row>, <column> SAY iif(IS_PAID,"Yes","No")
~
~      instead of the usual
~
~   @ <row>, <column> SAY IS_PAID [PICTURE <picture>]
~
~
~NOTE: If the variable is a field (rather than a memvar) and the
data dictionary definition of the field has a display formula
specified, it will come up here as a default. However, you may
provide a different one here without affecting the dictionary
definition.
~
~Also, you may restore the dictionary default by deleting the
local display formula.




`----------------------------------------------------------------
`Var picture
`----------------------------------------------------------------
$vdpic
~If you want generated display/input code to include a Dbase
picture clause, specify the picture clause here.
~
~NOTE: If the variable is a field (rather than a memvar) and the
data dictionary definition of the field has a picture clause
specified, it will come up here as a default. However, you may
provide a different one here without affecting the dictionary
definition.
~
~Also, you may restore the dictionary default by deleting the
local picture clause.



`----------------------------------------------------------------
`Var valid
`----------------------------------------------------------------
$vdval
~If you want generated input code to include a valid clause
(as found in Clipper and other flavors of Dbase), specify the valid
clause here.
~
~NOTE: If the variable is a field (rather than a memvar) and the
data dictionary definition of the field has a valid clause
specified, it will come up here as a default. However, you may
provide a different one here without affecting the dictionary
definition.
~
~Also, you may restore the dictionary default by deleting the
local valid clause.



`----------------------------------------------------------------
`Var range
`----------------------------------------------------------------
$vdrng
~If you want generated input code to include a Dbase range clause,
specify that clause here.
~
~NOTE: If the variable is a field (rather than a memvar) and the
data dictionary definition of the field has a range clause
specified, it will come up here as a default. However, you may
provide a different one here without affecting the dictionary
definition.
~
~Also, you may restore the dictionary default by deleting the
local range clause.




`----------------------------------------------------------------
`Var initial value
`----------------------------------------------------------------
$vdinv
~If you want generated code to give this field an initial value,
specify that value here.
~
~NOTE: If the variable is a field (rather than a memvar) and the
data dictionary definition of the field has a initial value
specified, it will come up here as a default. However, you may
provide a different one here without affecting the dictionary
definition.
~
~Also, you may restore the dictionary default by deleting the
local initial value.



`----------------------------------------------------------------
`Var calc formula
`----------------------------------------------------------------
$vdclc
~This option allows you to set up a field that derives its value
from calculations performed on other variables.
~
~NOTE: If the variable is a field (rather than a memvar) and the
data dictionary definition of the field has a calc. formula
specified, it will come up here as a default. However, you may
provide a different one here without affecting the dictionary
definition.
~
~Also, you may restore the dictionary default by deleting the
local calculation formula.



`----------------------------------------------------------------
`Var slot 1
`----------------------------------------------------------------
$vdsl1
~This is a template-specific characteristic. Unless a template makes
specific use of a slot (and the documentation for a template will tell
you if that's the case), you don't need to worry about what goes in
here -- and in fact, it will be ignored by any template that doesn't
use it specifically.



`----------------------------------------------------------------
`Var slot 2
`----------------------------------------------------------------
$vdsl2
~This is a template-specific characteristic. Unless a template makes
specific use of a slot (and the documentation for a template will tell
you if that's the case), you don't need to worry about what goes in
here -- and in fact, it will be ignored by any template that doesn't
use it specifically.



`----------------------------------------------------------------
`Var slot 3
`----------------------------------------------------------------
$vdsl3
~This is a template-specific characteristic. Unless a template makes
specific use of a slot (and the documentation for a template will tell
you if that's the case), you don't need to worry about what goes in
here -- and in fact, it will be ignored by any template that doesn't
use it specifically.


`----------------------------------------------------------------
`var descrip
`----------------------------------------------------------------
$vddes
~The field description can be any text up to 255 characters.
~
~NOTE: If the variable is a field (rather than a memvar) and the
data dictionary definition of the field has a calc. formula
specified, it will come up here as a default. However, you may
provide a different one here without affecting the dictionary
definition.
~
~Also, you may restore the dictionary default by deleting the
local calculation formula.




`----------------------------------------------------------------
`Debug menu help
`----------------------------------------------------------------



`----------------------------------------------------------------
`step
`----------------------------------------------------------------
$dbstp
~This command allows you to single-step through the execution of
a template. At each step, this menu will appear, and the other
commands within it will be available.
~
~To stop single-stepping, select the 'Go' option from this menu.



`----------------------------------------------------------------
`Go
`----------------------------------------------------------------
$dbgo
~This command returns to normal template execution, cancelling Step
or Walk mode if active.



`----------------------------------------------------------------
`Walk
`----------------------------------------------------------------
$dbwlk
~Walk mode continues template execution at slow speed, displaying
each line of template/TLB code as it is executed.
~
~When in walk mode, the Up and Down arrow keys control the walking
speed. (Up is faster, Down is slower).
~
~To stop walking and re-invoke this menu, use the Escape key.



`----------------------------------------------------------------
`Inspect
`----------------------------------------------------------------
$dbins
~Inspect lets you view the variables active in the generator environment,
and (to some extent) the values they contain. It does not currently
let you view the contents of object variables (big deficiency), or
change the values of any variables (smaller deficiency).




`----------------------------------------------------------------
`Halt
`----------------------------------------------------------------
$dbhlt
~This command stops template execution (almost) immediately, and
brings you back to the forms editor.
~
~Note: after severe errors, this command has been known to hang.
If you encounter a fatal error at compile or run time, there is
no need to select this option -- the thing's going to halt anyway.
~
~Note [2]: selecting this option from within a heavy debugging
session has been known to hang the machine. This (one hopes)
will change.





`----------------------------------------------------------------
`data dictionary editor help
`----------------------------------------------------------------




`----------------------------------------------------------------
`modify DBF
`----------------------------------------------------------------
$tabmod
~This command allows you to modify the definition of any DBF
in the dictionary. This includes modifying the field, index and
relation definitions for this DBF.




`----------------------------------------------------------------
`create DBF
`----------------------------------------------------------------
$tabcre
~This command allows you to create an all-new DBF definition for this
dictionary. Once created, a DBF definition can be exported to disk
using this 'Export DBF' command, in this menu.
~
~NOTE that you may also import an existing DBF definition, using the
'Import DBF' command in this menu, rather than creating the definition
from scratch.




`----------------------------------------------------------------
`delete DBF
`----------------------------------------------------------------
$tabdel
~This command lets you delete a DBF definition from the dictionary.
~
~NOTE: if a form is currently loaded in the forms editor that uses fields
from a DBF you delete using this command, UI will prompt you to resolve
field/DBF-not-found conflicts when you exit the data dictionary editor.
~
~Also, if other forms that use this dictionary do likewise, you will
be prompted to resolve those conflicts the next time you load those
form into UI.




`----------------------------------------------------------------
`add DBFs from dic
`----------------------------------------------------------------
$dicmrg
~This command lets you take selected DBF definitions from another
data dictionary, and install them in this dictionary.
~
~Once you select a dictionary from the menu of dictionaries on
disk, you'll get a tag menu of all the DBF definitions in that
dictionary.
~
~Press the space bar on any DBFs you want to add to the current
dictionary.



`----------------------------------------------------------------
`import DBF
`----------------------------------------------------------------
$tabimp
~This command lets you import the structure of an existing DBF into
the data dictionary.
~
~NOTE: a dictionary may not contain DBFs of the same name. If what you
want to do is replace a DBF definition currently in the dictionary with
an imported version of the same DBF, you must use delete the current
definition first, using the 'Delete DBF' command in this menu.




`----------------------------------------------------------------
`export DBF
`----------------------------------------------------------------
$tabexp
This command will export the definition of a DBF in the dictionary
as an empty .DBF file on disk.
~
~NOTE: if a DBF already exists on disk, this command will prompt you
before overwriting it. Bear in mind that this command does NOT transfer
data from an existing DBF file on disk into the new one. If it did,
we'd sell this whole thing as another dbase clone. So there.




`----------------------------------------------------------------
`Save & quit
`----------------------------------------------------------------
$dicsav
~This command (or ^W) will save your changes and exit the data
dictionary editor, leaving you in the forms editor.
~



`----------------------------------------------------------------
`Quit
`----------------------------------------------------------------
$dictrs
~This command (or Escape) will exit from the dictionary editor, abandoning
any changes you have made.
~
~NOTE: when this command is given, UI usually must re-load the old
version of the data dictionary to 'roll back' changes you've made
during editing. You will be asked to confirm this action.





`----------------------------------------------------------------
`basic dictionary DBF def stuff
`----------------------------------------------------------------



`----------------------------------------------------------------
`name
`----------------------------------------------------------------
$tdnam
~DBF name: 8 characters allowed.



`----------------------------------------------------------------
`Alias
`----------------------------------------------------------------
$tdali
~DBF Alias -- used for Dbase code like:
~
~   USE <name> ALIAS <alias>
~
~You may specify this characteristic locally (in any form that
uses this DBF) as well as here.


`----------------------------------------------------------------
`Work area
`----------------------------------------------------------------
$tdare
~The work area Dbase uses as a 'home' for this DBF -- used in code
like:
~
~  SELECT <work area>
~  USE <name> ...
~
~You may specify this characteristic locally (in any form that
uses this DBF) as well as here.



`----------------------------------------------------------------
`Description
`----------------------------------------------------------------
$tddes
~Any descriptive text, up to 255 characters long.
~
~If a template uses this characteristic, it is usually to generate
some documentary info about the DBF.
~
~You may specify this characteristic locally (in any form that
uses this DBF) as well as here.



`----------------------------------------------------------------
`slot 1
`----------------------------------------------------------------
$tdsl1
~This is a template-specific characteristic. Unless a template makes
specific use of a slot (and the documentation for a template will tell
you if that's the case), you don't need to worry about what goes in
here -- and in fact, it will be ignored by any template that doesn't
use it specifically.



`----------------------------------------------------------------
`slot 2
`----------------------------------------------------------------
$tdsl2
~This is a template-specific characteristic. Unless a template makes
specific use of a slot (and the documentation for a template will tell
you if that's the case), you don't need to worry about what goes in
here -- and in fact, it will be ignored by any template that doesn't
use it specifically.


`----------------------------------------------------------------
`slot 3
`----------------------------------------------------------------
$tdsl3
~This is a template-specific characteristic. Unless a template makes
specific use of a slot (and the documentation for a template will tell
you if that's the case), you don't need to worry about what goes in
here -- and in fact, it will be ignored by any template that doesn't
use it specifically.












`----------------------------------------------------------------
`dictionary field def stuff
`----------------------------------------------------------------


`----------------------------------------------------------------
`field name
`----------------------------------------------------------------
$fdnam
~UI recognizes field names up to 8 characters.



`----------------------------------------------------------------
`field type
`----------------------------------------------------------------
$fdtyp
~Field type options are: (C)haracter; (N)umeric; (L)ogical;
(D)ate; or (M)emo.



`----------------------------------------------------------------
`field length
`----------------------------------------------------------------
$fdlen
~Legal field length varies for different field types:
~
~  Character - UI allows up to 999; target evironment limits vary
~
~  Numeric - UI allows up to 999; target environment limits vary
~
~  Logical - always 1 long
~
~  Date - always 8 long
~
~  Memo - always 10 long
~


`----------------------------------------------------------------
`field decimal
`----------------------------------------------------------------
$fddec
~For numeric fields, this may be from 0 to (field length - 1)
long. Other types are always 0 decimal.
 

`----------------------------------------------------------------
`field description
`----------------------------------------------------------------
$fddes
~The field description can be any text up to 255 characters.
~
~You may specify a different description locally (in any form that
uses this field) as well as a default description here.



`----------------------------------------------------------------
`field display formula
`----------------------------------------------------------------
$fddsf
~Lets you specify a formula to use when generating display code that's
too complex for a picture statement.
~
~Templates that generate display code will typically use a display formula,
if one is specified, like this. Instead of:
~
~   @ <row>, <column> SAY <field name>
~
~      they will generate
~
~   @ <row>, <column> SAY <field display formula>
~
~So, for example, if the field LASTNAME had the following display formula:
~
~   upper(substr(LASTNAME, 1, 20)))
~
~then most templates would generate the following display code:
~
~   @ <row>, <column> SAY upper(substr(LASTNAME,1,20)))
~
~      instead of the usual
~
~   @ <row>, <column> SAY LASTNAME [PICTURE <picture>]
~
~
~NOTE: you may specify a different display formula locally (in any form that
uses this field) as well as a default display formula here.




`----------------------------------------------------------------
`field picture
`----------------------------------------------------------------
$fdpic
~If you want generated display/input code to include a Dbase
picture clause, specify the picture clause here.
~
~NOTE: you may specify a different picture clause locally (in any form that
uses this field) as well as a default picture clause here.



`----------------------------------------------------------------
`field valid
`----------------------------------------------------------------
$fdval
~If you want generated input code to include a valid clause
(as found in Clipper and other flavors of Dbase), specify the valid
clause here.
~
~NOTE: you may specify a different valid clause locally (in any form that
uses this field) as well as a default valid clause here.



`----------------------------------------------------------------
`field range
`----------------------------------------------------------------
$fdran
~If you want generated input code to include a Dbase range clause,
specify that clause here.
~
~NOTE: you may specify a different range clause locally (in any form that
uses this field) as well as a default range clause here.



`----------------------------------------------------------------
`field initial value
`----------------------------------------------------------------
$fdini
~If you want generated code to give this field an initial value,
specify that value here.
~
~NOTE: you may specify a different initial value locally (in any form that
uses this field) as well as a default initial value here.



`----------------------------------------------------------------
`field calculation formula
`----------------------------------------------------------------
$fdcal
~This option allows you to set up a field that derives its value
from calculations performed on other variables.
~
~NOTE: you may specify a different calculation formula value locally
(in any form that uses this field) as well as a default
calculation formula here.


`----------------------------------------------------------------
`field slot 1
`----------------------------------------------------------------
$fdsl1
~This is a template-specific characteristic. Unless a template makes
specific use of a slot (and the documentation for a template will tell
you if that's the case), you don't need to worry about what goes in
here -- and in fact, it will be ignored by any template that doesn't
use it specifically.


`----------------------------------------------------------------
`field slot 1
`----------------------------------------------------------------
$fdsl2
~This is a template-specific characteristic. Unless a template makes
specific use of a slot (and the documentation for a template will tell
you if that's the case), you don't need to worry about what goes in
here -- and in fact, it will be ignored by any template that doesn't
use it specifically.


`----------------------------------------------------------------
`field slot 1
`----------------------------------------------------------------
$fdsl3
~This is a template-specific characteristic. Unless a template makes
specific use of a slot (and the documentation for a template will tell
you if that's the case), you don't need to worry about what goes in
here -- and in fact, it will be ignored by any template that doesn't
use it specifically.


$character

$numeric

$logical

$date

$memo




`----------------------------------------------------------------
`dictionary index/rel def stuff (NB uses same menu thus same
`help. sorry
`----------------------------------------------------------------



`----------------------------------------------------------------
`name
`----------------------------------------------------------------
$xdnam
~UI recognizes names up to 8 characters.
~
~A menu of indexes on disk is available via the ^PgDn key.
~
~Relation names must be selected from the set of DBFs defined
in this data dictionary.




`----------------------------------------------------------------
`expression
`----------------------------------------------------------------
$xdxpr
~For indexes, this is where you define the key expression used by the
index. If the index exists on disk, the expression will be extracted
from the file and placed in this field when the index name is
specified. Otherwise, it's up to you.
~
~A relation expression is always defined by hand.
~
~Currently (UI 2.0), no automatic validation is done on
either index or relation expressions.



`----------------------------------------------------------------
`description
`----------------------------------------------------------------
$xddes
~Any text; up to 255 characters.



`----------------------------------------------------------------
`slot1
`----------------------------------------------------------------
$xdsl1
~This is a template-specific characteristic. Unless a template makes
specific use of a slot (and the documentation for a template will tell
you if that's the case), you don't need to worry about what goes in
here -- and in fact, it will be ignored by any template that doesn't
use it specifically.


`----------------------------------------------------------------
`slot2
`----------------------------------------------------------------
$xdsl2
~This is a template-specific characteristic. Unless a template makes
specific use of a slot (and the documentation for a template will tell
you if that's the case), you don't need to worry about what goes in
here -- and in fact, it will be ignored by any template that doesn't
use it specifically.


`----------------------------------------------------------------
`slot3
`----------------------------------------------------------------
$xdsl3
~This is a template-specific characteristic. Unless a template makes
specific use of a slot (and the documentation for a template will tell
you if that's the case), you don't need to worry about what goes in
here -- and in fact, it will be ignored by any template that doesn't
use it specifically.





`----------------------------------------------------------------
`Local data def help
`----------------------------------------------------------------



`----------------------------------------------------------------
`alias
`----------------------------------------------------------------
$ldali
~The DBF's alias (as used in 'SELECT <name> ALIAS <alias>).
~
~In the local definition of a DBF, this defaults to the alias defined
for the DBF in the data dictionary. However, it may be changed here
without affecting the definition found in the data dictionary.
~
~You can restore the dictionary default at any time by deleting the
local alias: the dictionary default alias (if one has been defined)
will then reappear.




`----------------------------------------------------------------
`work area
`----------------------------------------------------------------
$ldwa
~The DBF's work area, as used in the initialization sequence:
~
~   SELECT <work area>
~   USE <name> [ALIAS <alias>]  etc.
~
~In the local definition of a DBF, this defaults to the work area
specified for the DBF in the data dictionary. However, it may be changed
here without affecting the definition found in the data dictionary.



`----------------------------------------------------------------
`description
`----------------------------------------------------------------
$lddes
~A brief description of the DBF.
~
~This is used by some templates to generate documentary information,
and is also useful to have when editing a form. The description may
be up to 255 characters long.
~
~In the local definition of a DBF, this defaults to the description
given for the DBF in the data dictionary. However, it may be changed
here without affecting the definition found in the data dictionary.
~
~You can restore the dictionary default at any time by deleting the
local alias: the dictionary default alias (if one has been defined)
will then reappear.




`----------------------------------------------------------------
`Primary?
`----------------------------------------------------------------
$ldpri
~This characteristic designates whether the DBF is used locally (within
this form) as the Primary database.
~
~If only one DBF is used in the form, specifying a primary database
isn't necessary. However, if more than one DBF is used, most templates
will expect a primary DBF to be specified. (If none is found, most
templates will default to the one with the lowest work area.)
~
~Only one DBF can be Primary at a time -- if you specify a DBF as primary,
any other DBF with the Primary characteristic specified will be
automatically reset to non-primary.

 

`----------------------------------------------------------------
`Active indexes
`----------------------------------------------------------------
$ldai
~This is where you specify which indexes defined for this DBF in the
data dictionary are actually used in this form.
~
~You may specify as many active indexes as you want, but obviously the
number of active indexes that are meaningful depend on both the templates
you use to generate code for this form, and the limits of the target
environment for the generated code. (Each template should tell you what
it actually does with more than one active index.)
~
~REMEMBER: templates look at active indexes when they generate code like:
~
~   USE <name> INDEX <index>[,<index>...]
~
~If you don't specify any active index(es), most templates will not
generate index code, whether indexes have been specified in the data
dictionary definition for this DBF or not.




`----------------------------------------------------------------
`active relations
`----------------------------------------------------------------
$ldar
~This is where you specify which relations defined for this DBF in the
data dictionary are actually used in this form.
~
~You may specify as many active relations as you want, but the
number of active relations that are meaningful depend on both the templates
you use to generate code for this form, and the limits of the target
environment for the generated code. (Each template should tell you what
it actually does with more than one active relation.)
~
~REMEMBER: templates look at active relation when they generate code like:
~
~   SET RELATION TO <expression> INTO <dbf>
~
~If you don't specify any active relation(s), most templates will not
generate relational code, whether relations have been specified in the data
dictionary definition for this DBF or not.




`----------------------------------------------------------------
`Slot 1
`----------------------------------------------------------------
$ldsl1
~This is a template-specific characteristic. Unless a template makes
specific use of a slot (and the documentation for a template will tell
you if that's the case), you don't need to worry about what goes in
here -- and in fact, it will be ignored by any template that doesn't
use it specifically.


`----------------------------------------------------------------
`Slot 2
`----------------------------------------------------------------
$ldsl2
~This is a template-specific characteristic. Unless a template makes
specific use of a slot (and the documentation for a template will tell
you if that's the case), you don't need to worry about what goes in
here -- and in fact, it will be ignored by any template that doesn't
use it specifically.



`----------------------------------------------------------------
`Slot 3
`----------------------------------------------------------------
$ldsl3
~This is a template-specific characteristic. Unless a template makes
specific use of a slot (and the documentation for a template will tell
you if that's the case), you don't need to worry about what goes in
here -- and in fact, it will be ignored by any template that doesn't
use it specifically.





`----------------------------------------------------------------
`active index menu
`----------------------------------------------------------------



`----------------------------------------------------------------
`Add active index
`----------------------------------------------------------------
$unadd
~This command lets you add an active index from the set of indexes
defined for this DBF in the attached data dictionary.



`----------------------------------------------------------------
`Delete active index
`----------------------------------------------------------------
$undel
~This command lets you remove an index from the list of (one or more)
active indexes specified in the local definition of this DBF.



`----------------------------------------------------------------
`add Index to DBF in dictionary
`----------------------------------------------------------------
$unadi
~This command lets you add an index to the definition of this DBF in
the attached data dictionary without entering the data dictionary
editor, and at the same time specify it as active.
~
~If you want to add an index to the permanent definition of this DBF,
use this command.





`----------------------------------------------------------------
`active relations menu
`----------------------------------------------------------------



`----------------------------------------------------------------
`Add active relation
`----------------------------------------------------------------
$uradd
~This command lets you add an active relation from the set of relations
defined for this DBF in the attached data dictionary.



`----------------------------------------------------------------
`Delete active relations
`----------------------------------------------------------------
$urdel
~This command lets you remove a relation from the list of (one or more)
active relations specified in the local definition of this DBF.



`----------------------------------------------------------------
`add Relation to DBF in dictionary
`----------------------------------------------------------------
$uradi
~This command lets you add a relation to the definition of this DBF in
the attached data dictionary without entering the data dictionary
editor, and at the same time specify it as active.
~
~If you want to add a relation to the permanent definition of this DBF,
use this command.





`----------------------------------------------------------------
`Index not found exception handler
`----------------------------------------------------------------



`----------------------------------------------------------------
`Remove index from local def
`----------------------------------------------------------------
$xnfrmv
~UI has found an index specified as active in the local definition for
this DBF, but the index is not defined in the dictionary's definition
for this DBF.
~
~This command will remove the specification of this index from the local
definition of the DBF.



`----------------------------------------------------------------
`Add index to dictionary DBF def
`----------------------------------------------------------------
$xnfadd
~UI has found an index specified as active in the local definition for
this DBF, but the index is not defined in the dictionary's definition
for this DBF.
~
~This command will add the index to the dictionary definition of the
DBF.
~
~NOTE: an index's Expression is not stored locally,
and thus cannot be added to the dictionary definition.
~
~If you select this option, you should at some later point use the
data dictionary editor to add an index expression to the dictionary's
definition of this index.




`----------------------------------------------------------------
`Relation not found exception handler
`----------------------------------------------------------------



`----------------------------------------------------------------
`Remove relation from local def
`----------------------------------------------------------------
$rnfrmv
~UI has found an relation specified as active in the local definition for
this DBF, but the relation is not defined in the dictionary's definition
for this DBF.
~
~This command will remove the specification of this relation from the local
definition of the DBF.



`----------------------------------------------------------------
`Add relation to dictionary DBF def
`----------------------------------------------------------------
$rnfadd
~UI has found an relation specified as active in the local definition for
this DBF, but the relation is not defined in the dictionary's definition
for this DBF.
~
~This command will add the relation to the dictionary definition of the
DBF.
~
~NOTE: a relation's Expression is not stored locally,
and thus cannot be added to the dictionary definition.
~
~If you select this option, you should at some later point use the
data dictionary editor to add a relation expression to the dictionary's
definition of this index.






`----------------------------------------------------------------
`DBF not found exception handler
`----------------------------------------------------------------




`----------------------------------------------------------------
`Remove DBF's fields from form
`----------------------------------------------------------------
$dtermv
~This command will remove all fields from the form that say they
come from the DBF that's missing from the data dictionary.
~
~Use the 'Collect DBF definition' option, in this menu, to build
a DBF definition in the dictionary containing the fields from the
missing DBF that live in the form.



`----------------------------------------------------------------
`Collect DBF def
`----------------------------------------------------------------
$dtecol
~This command builds a DBF definition, in the data dictionary, from
the fields within the form that say they come from the missing DBF.
~
~Note that this DBF definition may not be complete -- if there are
fields in the DBF that don't occur in the form, they will not be
included in the dictionary's definition of the DBF.
~
~To import the complete DBF definition, at some later point enter
the data dictionary editor, delete the definition of the DBF collected
here, and import the DBF from disk.




`----------------------------------------------------------------
`Field not found exception handler
`----------------------------------------------------------------



`----------------------------------------------------------------
`remove field from form
`----------------------------------------------------------------
$fnfrmv
~This command will remove the field from the form.



`----------------------------------------------------------------
`add field to DBF definition
`----------------------------------------------------------------
$fnfadd
~This command will add the form's definition of this field to the
dictionary definition of the DBF it says it comes from.



`----------------------------------------------------------------
`make it a memvar
`----------------------------------------------------------------
$fnfmmv
~This command will simply change this field to a memvar (i.e., not
living in any DBF).








`----------------------------------------------------------------
`Field def conflict exception handler
`----------------------------------------------------------------



`----------------------------------------------------------------
`remove field from form
`----------------------------------------------------------------
$fdcrmv
~This command will remove the field from the form.
~
~(Of course, it may be re-added at any time.)




`----------------------------------------------------------------
`Adjust field to match dictionary
`----------------------------------------------------------------
$fdcadj
~This command will adjust the form's definition of the field's name,
type, length and decimal count to match the dictionary's definition.
~
~NOTE: If the field's length is in conflict, adjusting the form's
definition may change the field's appearance and position in the
form.



`----------------------------------------------------------------
`Adjust dictionary to match form
`----------------------------------------------------------------
$fdcdad
~This command will adjust the dictionary's definition of the field's
name, type, length and decimal count to match the form's definition
of the field
~
~NOTE: If other forms use the attached dictionary and refer to this
field, UI will prompt you to resolve this same conflict the next time
you load one of those forms.
