Template dialog boxes in GHS

(c) 2002 by Creative Systems, Inc.

I. Template Command

The TEMPLATE command creates interactive dialog boxes. Its syntax is:
    TEMplate name ["title"] [param]...
If a "title" is present, then it appears in the title bar of the dialog box when the template is executed; if not, the template name is the default title.

The TEMPLATE command is followed by a series of lines specifying the layout of the template dialog box, terminated by a "/" line.

The following optional parameters may appear on the TEMPLATE command line:
    /POS: position
Specifies the location of the dialog box relative to the parent window. Valid position choices are: MIDDLE (default), TOPLEFT, TOPRIGHT, BOTTOMLEFT, BOTTOMRIGHT (the four corners), LEFT, RIGHT (at vertical middle), TOP, BOTTOM (at horizontal middle), CENTER (center of screen), and MOUSE (centered under the current position of the mouse).
    /SIZE: size
Specifies the dialog font size. Valid size choices are: MEDIUM (default; corresponds to command area character size), SMALL (menu character size), and LARGE (maximized character size).
    /FONT: "font,..."
Specifies a list of one or more fonts used for the dialog box. If the first font is not found on the system, then any further fonts are tried in order; if none are found, then MS Sans Serif is used if the /SIZE parameter is present; otherwise the Windows System font is used as the default font.
Beeps before popping up the dialog box (useful for warning messages).

II. Template Execution

Templates are executed using the command "EXecute name" (or ".name"), where "name" is the template name. Any parameters following ".name" are substituted for "%1", "%2", etc. appearing inside the template (the same as for macros).

When a template is executed, a dialog box pops up containing the specified fields arranged neatly in rows and columns. Data can be edited in variable fields, or in the case of multiple choice variables, a label can be picked from a drop-down list to assign the variable the corresponding value.

Other fields appear as labeled buttons. Pressing a button triggers an action, after which control returns to the dialog, or the dialog exits if the button field was marked with the word "EXIT".

III. Template Format

Templates are composed of multiple lines containing one or more fields, with "|" separating multiple fields within a line. The template is terminated by a "/" line. Each field has the following general syntax:
    ["label"[:value]...]  [EXIT]  [type]  [name]  [param]...
Here are the specific formats for each valid field type:
    ["label"[:value]...]      [VARI] name
    ["label"]        [EXIT] FILE|DIR name [/EXT:"exts"] [/SHORT] [/EXIST] [/START]
    ["label"]        [EXIT]        . name [(rep)] [param]...  [/NOVERify] [/START]
    ["ok" ["cancel"]] EXIT
Blank lines in a template create blank lines in the corresponding dialog box.

IV. Template Field Types

A. Text Fields
Text fields are surrounded by quotes and appear verbatim in the dialog box. If a text field precedes a non-text field on the same line, then it appears right-justified as a tag before the non-text field.

B. Input Variable Fields
    ["label"]  [VARIable]  name
An unquoted variable name appears in the dialog box as an edit field control, initially set to the value of the variable. The user can edit this value or input a new one. The named variable is updated with the new value only when the dialog box exits or an execute button is pressed.

The variable name may optionally be preceded by the "VARIable" field type; this is only necessary if the variable has an ambiguous name such as "EXIT" or "FILE". If a "label" is present, it appears as a right-justified tag, as if "|" had been used to separate a text field followed by a variable field.

C. Multiple Choice Variable Fields
    "label"[:value]...  [VARIable]  name
If more than one "label" or value is present before the variable name, then a drop-down list control appears, which the user can click to choose any "label" from the list. The named variable is updated with the selected "label" choice when the dialog box exits or an execute button is pressed. However, if the "label" is followed by ":" and a value, then the named variable is updated with that value (either a number or a quoted string) instead of the "label" appearing in the drop-down list.

D. File and Directory Button Fields
    ["label"] [EXIT] FILE|DIR name [/EXT:"exts"] [/SHORT] [/EXIST] [/START]
FILE and DIR fields appears as push buttons which pop up file and directory selection dialog boxes. If this selection box is not canceled, the named variable is updated with the selected long pathname when the template dialog box exits or an execute button is pressed. The variable name appears on the button face, replaced by "label" if present.

If FILE or DIR is the only field in a template, then the template dialog is bypassed when executed, going directly to the file or directory dialog box.

If /EXT:"exts" is present, then only files or directories ending in the specified comma-separated list of extensions (which may contain "*" and "?" wildcards) are listed and can be selected from the dialog box. If one of these extensions is "*", then the others are the default "Files of type", with "All files" available from the "Files of type" drop-down list.

If /EXIST is present, the user is forced to select an existing file or directory from the dialog box, rather than potentially create a new one.

If /SHORT is present, the selected file or directory must reside in the starting directory, which is trimmed from the long pathname before storing the filename and extension in the named variable (or just a short filename and extension if the named variable was sized as a 12 character maximum string). If a single non-wildcard extension was given with the /EXT parameter, then just the long filename is stored in the named variable (or just the short filename for a 8 character maximum variable).

FILE and DIR dialog boxes start in any directory preset in the named variable, or the current directory if none. For the simplified DIR dialog box that appears when /SHORT is present, any preset directory is the initial selection and its parent directory is the starting directory; to specify a starting directory with no initial selection, preset a directory name ending in "\".

If EXIT is present, the template dialog box exits instead of being restored following processing of a pressed FILE or DIR button. If /START is present, the FILE or DIR button has startup focus, triggered when Enter is pressed.

E. Execute Button Fields
    ["label"] [EXIT] . name  [(rep)] [param]...  [/NOVERify] [/START]
An execute button field appears as a push button which executes the named macro or subtemplate. The original template dialog box is hidden while execution is in progress. Since any GHS command is available within a macro, execute buttons can be used to create very powerful control panel dialogs. The macro or template name appears on the button face, replaced by "label" if present.

The syntax for the execute button field corresponds closely to that of the EXECUTE command. As such, "EXecute" can be used in place of "." before the macro or subtemplate name; also, if EXIT is present, then "." is optional. A repetition factor in parentheses can be specified for macro execution. Any parameters following .name are passed to the named macro or subtemplate to substitute for "%1", "%2", etc. (Note that these parameters may not begin with "/" unless enclosed in quotes.)

If EXIT is present, the template dialog box exits instead of being restored following execution of the named macro or subtemplate. If /START is present, then the execution button has startup focus, triggered when Enter is pressed. If /NOVERify is present, any invalid variable values are discarded before execution, instead of popping up a warning box.

F. Exit Button Fields
    ["ok" ["cancel"]] EXIT
Exit buttons are added by default at the bottom of a template dialog box; normally "OK" and "Cancel" buttons are added, but if the template contains no variable, FILE, or DIR fields, then the "Cancel" button is suppressed. However, if any explicit EXIT buttons are present (including EXIT by itself), then no default "OK" or "Cancel" buttons appear.

If EXIT is preceded by a single "ok" label, this renames the "OK" button and the "Cancel" button is omitted. If EXIT includes both "ok" and "cancel" labels, then these labels rename the corresponding buttons.

V. Keyboard Shortcuts For Template Buttons

The first capitalized letter in a button field label is underlined and acts as a keyboard shortcut when not editing a variable field, or any time if used together with the Alt key. To specify a different label character as the shortcut, precede that character with an underline ("_"). To prevent any character from being an underlined shortcut, end the label with "_". A doubled underline "__" causes single non-shortcut "_" to appear in a label. "OK" and "Cancel" buttons do not have automatic underlined keyboard shortcuts unless "_" is explicitly used; note Esc is always a shortcut for "Cancel".

VI. Template Startup Focus

If an "OK" button is present in a TEMPLATE, it is highlighted as the starting button triggered when Enter is pressed; this input focus button can be moved forward or back by pressing Tab or Shift-Tab. If there is no "OK" button, the first button field is the starting button. A different starting button can be specified by including the /START parameter after a button field. If any variable fields exist, the first variable field begins with the keyboard focus for data entry, and the starting button is triggered if Enter is pressed.

VII. Template Verification

All variable, FILE, and DIR fields in a template are verified to check that they contain valid input values before storing them into their associated variables. (For example, if a variable was defined using the "VARIABLE X:2:3" command, then any value less than 2 or greater than 3 would be invalid.) If a field is invalid, then a warning box pops up explaining the problem, and the dialog box resumes with focus on the invalid field.

Verification takes places before a template dialog exits or executes a macro or subtemplate. Verification may be turned off for a particular button by including the "/NOVERify" parameter, which discards any invalid values.

VIII. Template Exit Status

The TEMPLOK system variable stores the ordinal number of the field button which was pressed to exit the most recent template dialog box, or else it stores 0 if "Cancel" or the dialog title bar close button was pressed. (For example, if a template contains a text tag, a variable field, "OK", and "Cancel", pressing "OK" would set TEMPLOK to 3.) Normally this variable would just be checked for non-zero to make sure the dialog wasn't cancelled, but when multiple EXIT buttons are present, TEMPLOK could be used to determine which EXIT button was selected by the user.

IX. Similarities Between Templates and Macros

Templates and macros share the following features:

1. TEMPLATE name [EDIT] command behaves the same as the MACRO command,
introducing a series of lines terminated by a "/" line;

2. LIST command shows templates along with macros;

3. IF EXIST also checks for template existence;

4. WRITE (MACROS) command also writes templates to the specified file;

5. GHS32 Macro menu also works with templates;

6. EXECUTE (or ".") command runs both macros and templates.

If you would like to see another bulletin created regarding a specific topic, please email Creative Systems, Inc. at
Copyright (C) 2011 Creative Systems, Inc.