| Setting Up the Configuration File |
|
Key Code List | |
This chapter provides answers to some questions that people unfamiliar with
Dialog System typically ask. Each answer includes a detailed description with
step-by-step instructions for solving the problem.
Also, your Dialog System software includes some screensets with sample
solutions to each question. The names of these screensets are question-number.s,
for example, q1.s, q2.s, and q3.s.
The subjects covered by the questions are:
- Displaying a validation message
- Defining a validation message panel
- Defining scrolling data groups
- Inserting and deleting fields in an array
- Checking the size of an array
- Creating a menu entry table
- Creating a highlighted menu entry line
- Extracting virtual text
- Chaining panels
Q1.:
How do I define how validation messages are
displayed when an error is found and removed when the error is corrected?
A.:
The display and removal of validation messages is
completely automatic once you make the relevant definitions. Use the following
steps:
- Define the data fields that you require for your screenset (see the
chapter Data Definition for details).
- Define an additional data field called ERR-MSG as alphanumeric and length
40.
- Define this field to be the error message field (see the chapter Data Definition for
details of error message field definition).
- Define the error messages that you are going to use.
- Define validations for the required fields (see the chapter
Data Definition for details of validation definition).
- Associate an error message with each of these validations (see the chapter
Data Definition for validation error message definition).
- Define a suitable panel (see the chapter Panels for details).
- Place the data fields for which you have defined validations on this panel
and ensure that their usage is set to INPUT (see the chapter Panel Painting
for details on positioning data fields on panels).
- Place the ERR-MSG field on this panel and ensure that its usage is set to
OUTPUT.
- Define the following global dialog: the <right-arrow>| key causes a
skip to next field; and the |<left-arrow> key causes a skip to the
previous field (see the chapter Dialog for details). You might find
this dialog table helpful:
Key Function Parameters
TAB SKNF 0001
BTAB SKPF 0001
This screenset is now ready to run (see the chapter Running the
Screenset for details on running screensets). You can compare your
screenset with the sample provided in q1.s.
Q2.:
How do I define just one panel in which all of my error messages can
appear?
A.:
This is a common requirement. The previous example
explained how to place the error message field on the relevant panel, which you
could do for every panel. However, it is also quite straightforward to create
a separate panel. This example continues on from the example in Question One.
Use the following steps:
- Define a separate panel to display error messages, and place the ERR-MSG
output field, created in the last example, on it.
- Define the following local dialog for this error message panel: Any
keystroke pops the panel; the keystroke is repeated on the panel popped to; but
the Escape key is not repeated after the POP (otherwise it causes a return to
the calling program). See the chapter Dialog
for details on defining dialog. You might find the following dialog table
helpful:
Key Function Parameters
ESC POP
ANYO RPKY
POP
- Define the following local dialog for the panel containing the data fields
for which you have defined validations: a validation error pushes the current
panel; the cursor is turned on (remember, the cursor is automatically turned
off in panels that contain no input fields); and control goes to the error
panel. The dialog table for this "error procedure" looks like this:
Key Function Parameters
ERR PUSH $NULL
CON
GOP ERROR
This screenset is now ready to run (see the chapter Running the
Screenset for details of running screensets). You can compare your
screenset with the sample in q2.s.
Q3.:
How do I define scrolling for an array of data
fields?
A.:
This is also a common requirement. Dialog System
can have up to 30 separate scrolling groups on each panel. For simplicity, the
example shows how to define just one.
- Define five data fields as follows (see the chapter Data Definition
for details on defining data):
Name FIELD1, Format X, Size 20
Name FIELD2, Format X, Size 10
Name FIELD3, Format X, Size 3
Name FIELD4, Format 9, Size 4.2
Name
FIELD5, Format 9, Size 4.2
- Define FIELD1 as a data group with 50 repeats (see the chapter
Data Definition for details on defining data groups).
- Include the remaining four fields in the group to create a group of data
items that repeat 50 times in the Data Block. Now you must define how this
group is used on the panel.
- Define a panel wide enough to contain all the fields side by side, that
is, a panel of approximately 60 characters (see the chapter
Panels for details).
- Position the fields side by side along one row of the panel (see the
chapter Panel Fields for details).
The fields are now on the panel, but there is only one occurrence of each.
If you run the screenset at this stage, you can enter data only on the first of
each of the 50 occurrences in each field.
- Define your row of fields as a panel group and call it "DATA-GRP"
(see the chapter Panel Groups for details).
- Extend the size of the group to the number of occurrences you wish to be
visible on the screen at one time. Remember that the final array will scroll,
so you do not need to have all 50 occurrences visible at once.
- Select the group-accept-exit-bar option from the Data Group menu. This
forces the cursor to move off the group after the last field in the last
occurrence of the group, rather than after the last field in the current
occurrence. It also automatically moves the selection bar.
- Define a selection bar on this group (see the chapter Panel Groups
for details on defining selection bars).
- Define the following local dialog for this panel: <up-arrow> moves
the selection bar up by one line; <down-arrow> moves the selection bar
down by one line; <right-arrow>| causes a skip to next field; and |<left-arrow>
causes a skip to the previous field (see the chapter
Dialog for details of defining dialog). You might find this dialog
table helpful:
Key Function Parameters
CURU PBUP DATA-GRP
0001
CURD PBDN DATA-GRP
0001
TAB SKNF 0001
BTAB SKPF 0001
This screenset is now ready to run (see the chapter Running the
Screenset for details on running screensets). Scrolling at the top and
bottom of the list is completely automatic. You can compare your screenset with
the sample in q3.s.
Q4.:
How do I define inserting and deleting in an array
of data fields?
A.:
You can so this easily using the following steps,
which continue on from the previous example.
- Follow the steps in Question three.
- Define the following additional local dialog for your panel group named
DATA-GRP: F3 enables a line to be inserted at the current bar position; and F4
enables a line to be deleted at the current bar position (see the chapter Dialog
for details on defining dialog). Your new dialog table looks like this:
Key Function Parameters
F3 IBP DATA-GRP
F4 DBP DATA-GRP
CURU PBUP DATA-GRP
0001
CURD PBDN DATA-GRP
0001
TAB SKNF 0001
BTAB SKPF 0001
This screenset is ready to run (see the chapter Running the Screenset
for details on running screensets). You can compare your screenset with the
sample in q4.s.
Q5.:
How can I keep track of how many items there are
in an array after inserting and deleting?
A.:
You can both control and monitor this array size.
Once you have set the array size, the Dialog System Run-time System prevents
you from moving above the first occurrence or below the final occurrence. For
example, the previous example uses an underlying array size of 50. Every use of
the DBP function reduces the internal array size by one, down to a limit of
one. Every use of the IBP function increases the array size by one, up to a
limit of 50. However, if you set the array size to five, the IBP function
applies only up to a limit of five.
The following steps explain how you can monitor the array size, using the
previous example screenset as a starting point.
- Define a new data field called ARR-SIZE, which is format 9 and size 2 (see
the chapter Data Definition for details on defining data fields). This
field will contain the current array limit.
- Place the array size field on the panel on which you have placed your
panel group, as an OUTPUT field, so that you can see what is happening to it
(see the chapter Panel Fields for details).
- Define the following additional global dialog for your panel group named
DATA-GRP: initialize the screenset, placing a value of two in the data item
ARR-SIZE (to ensure that there are only two entries accessible in the panel
group at the start). The dialog table looks like this:
Key Function Parameters
P000 MOVE 0002
ARR-SIZE
- Define the following additional local dialog for this panel: set the
internal array size to the value in the ARR-SIZE field; move the current
internal array size of DATA-GRP to the ARR-SIZE field when an item is inserted;
refresh the panel so that the revised value of ARR-SIZE can be viewed; move the
current internal array size of DATA-GRP to the ARR-SIZE field when an item is
deleted; reset the value of ARR-SIZE to two if its value becomes less than two;
and refresh the panel. The amended dialog table looks like this:
Key Function Parameters
F3 IBP DATA-GRP
MAS DATA-GRP
ARR-SIZE
RFTD
F4 DBP DATA-GRP
MAS DATA-GRP
ARR-SIZE
IF ARR-SIZE
0002
P001
RFTD
CURU PBUP DATA-GRP
0001
CURD PBDN DATA-GRP
0001
TAB SKNF 0001
BTAB SKPF 0001
P000 SAS DATA-GRP
ARR-SIZE
P001 MOVE 0002
ARR-SIZE
XP P000
This screenset is ready to run (see the chapter Running the Screenset
for details on running screensets). Watch the behavior of the group and the
value in ARR-SIZE as it runs. You can compare your screenset with the sample in
q5.s.
Q6.:
How do I define a list of menu options in the
middle of the screen, from which I can select an option either by moving up and
down the list and pressing Enter or by typing a key letter?
A.:
This is a common requirement that makes your
application much more useful. Use the following steps:
- Define a data field called "OPT-NO" with format 9 and size one
(see the chapter Data Definition for details on defining data fields).
- Define a panel and place five menu text items, such as Load, Save, Clear,
Delete and Exit, in the middle of it (see the chapter
Panel Fields for details). These are your menu entries, which can be
selected either by using the selection bar or typing in the appropriate key
letter such as L, S, C, D, X.
- Define four additional panels to go to when a menu entry is selected. Name
them LOAD, SAVE, CLEAR, and DELETE, respectively (you do not need a separate
panel for Exit, because you will use that to terminate the current screenset
rather than to go to another panel). Don't place anything in these panels at
the moment.
- Define the following local dialog for each of these panels: any keystroke
pops the panel (see the chapter Dialog for details on defining dialog).
The dialog table looks like this:
Key Function Parameters
ANYO POP
- Define your five menu entries as a fixed text group named MENU (see the
chapter Panel Groups for details).
- Define a suitable selection bar on this group (see the chapter
Panel Groups for details on defining selection bars).
- Define the following local dialog for this panel: Enter branches
to the procedure to load a menu panel; <up-arrow> and <down-arrow>
move the selection bar one line up and down, respectively, and set it on one of
the menu options; "C" sets the selection bar on menu option three and
goes to the CLEAR menu panel; "D" sets the selection bar on menu
option four and goes to the DELETE menu panel; "L" sets the selection
bar on menu option one and goes to the LOAD menu panel; "S" sets the
selection bar on menu option two and goes to the SAVE menu panel; and "X"
sets the selection bar on menu option five and returns to the calling program.
The dialog table looks like this:
Key Function Parameters
CR BPD MENU
P011
CURU PBUP MENU
0001
CURD PBDN MENU
0001
C MOVE 0003
OPT-NO
XP P001
XP P013
D MOVE 0004
OPT-NO
XP P001
XP P014
L MOVE 0001
OPT-NO
XP P001
XP P011
S MOVE 0002
OPT-NO
XP P001
XP P012
X MOVE 0005
OPT-NO
XP P001
XP P015
P000 MOVE 0000
OPT-NO
P001 SB MENU
OPT-NO
P011 PUSH $NULL
GOP LOAD
P012 PUSH $NULL
GOP SAVE
P013 PUSH $NULL
GOP CLEAR
P014 PUSH $NULL
GOP DELETE
P015 RETC
You have defined the characters C, D, L, S and X in upper case but not in
lower case. This is because by default Dialog System recognizes these as the
same character. However, if you require case sensitivity, you can turn it on.
See the section Dialog Definition Menu in the chapter Dialog
for details.
The procedures defined for the lines in a text group must occur in the same
order as the lines in the group.
This screenset is ready to run (see the chapter Running the Screenset
for details on running screensets). You can compare your screenset with the
sample in q6.s.
Q7.:
How do I define a menu line at the top of the
screen from which I can select an option either by moving along the list and
pressing, or by typing a key letter?
A.:
This uses the same principles as the previous
question. The differences are that instead of using a fixed text group for the
menu and moving a selection bar up and down it, you use a one-line virtual
attribute group and press the <left-arrow> and <right-arrow> keys
to position the virtual attribute data up and down. Use the following steps:
- Define a data field called "OPT-NO" with format 9 and size one,
the same as in the previous example (see the chapter Data Definition
for details on defining data fields).
- Define a one-line panel and place the five menu text items, Load, Save,
Clear, Delete and Exit, across it (see the chapter Panel Fields for
details).
- Define the LOAD, SAVE, CLEAR and DELETE panels to pass control to when the
relevant menu entry is selected. Do not place anything in these panels at the
moment.
- Define the following local dialog for each of these panels: any keystroke
POPs the panel (see the chapter Dialog for details on defining dialog).
The dialog table looks like this:
Key Function Parameters
ANYO POP
- Define your five menu entries as a virtual attribute group named MENU and
define the set of attributes that will move over the text items on your panel
(see the chapter Panel Groups for details).
- Define the following local dialog for this panel: Enter branches
to the procedure to load a menu panel; <left-arrow> and <right-arrow>
position the data one menu item up and down, respectively; "C" sets
the data on menu option three and goes to the CLEAR menu panel; "D"
sets the data on menu option four and goes to the DELETE menu panel; "L"
sets the data on menu option one and goes to the LOAD menu panel; "S"
sets the data on menu option two and goes to the SAVE menu panel; and "X"
sets the data on menu option five and returns to the calling program.
The dialog table for this menu panel looks like this:
Key Function Parameters
CR BPD MENU
P011
CURL PDUP MENU
0001
CURR PDDN MENU
0001
C MOVE 0003
OPT-NO
XP P001
XP P013
D MOVE 0004
OPT-NO
XP P001
XP P014
L MOVE 0001
OPT-NO
XP P001
XP P011
S MOVE 0002
OPT-NO
XP P001
XP P012
X MOVE 0005
OPT-NO
XP P001
XP P015
P000 MOVE 0001
OPT-NO
P001 SD MENU
OPT-NO
P011 PUSH $NULL
GOP LOAD
P012 PUSH $NULL
GOP SAVE
P013 PUSH $NULL
GOP CLEAR
P014 PUSH $NULL
GOP DELETE
P015 RETC
This screenset is ready to run (see the chapter Running the Screenset
for details on running screensets). You can compare your screenset with the
sample in q7.s.
Q8.:
Can I extract the contents of a virtual text item
into a data field?
A.:
Yes. Use the following steps:
- Define two data fields:
Name POSITION, Format 9, Size 2
Name TEXT, Format X, Size 30
The field "TEXT" is the field to move the required virtual text
to, and the field "POSITION" is the field to use to monitor this move
on the current screen.
- Define a panel that contains these two fields as output fields.
- Define a virtual text group called "TEXT-GRP" and define about
two to three times as much virtual text as can fit on the visible group area.
- Define a selection bar on this virtual text.
- Define the following local dialog for this panel: carriage return moves
the position of the selection bar on the TEXT-GRP group to the POSITION field,
transfers the virtual text to the TEXT field at the offset defined by POSITION,
then refreshes the information on the panel; <up-arrow> and <down-arrow>
position the selection bar one line up and down, respectively, on the virtual
text. The dialog table looks like this:
Key Function Parameters
CR MBD TEXT-GRP
POSITION
MOVEVTXT TEXT-GRP
POSITION
TEXT
RFTD
CURU PBUP TEXT-GRP
0001
CURD PBDN TEXT-GRP
0001
This screenset is ready to run (see the chapter Running the Screenset
for details on running screensets). You can compare your screenset with the
sample in q8.s.
Q9.:
How can I "chain" many panels so that <right-arrow>|
in the last field in a panel moves to next panel and |<left-arrow> in the
first field in a panel moves to the previous panel?
A.:
This is another common requirement. The solution
uses the ability to detect an exception condition when a SKNF function attempts
to execute but there are no more fields on the panel, and the similar but
opposite situation for SKPF. Use the following steps:
- Define a number of data fields.
- Paint a number of panels, for instance AAAAAAAA, BBBBBBBB, CCCCCCCC,
DDDDDDDD and EEEEEEEE.
- Place the data fields you defined onto these panels.
- Define the following local dialog for the first panel, AAAAAAAA: when SKNF
causes an exception, it performs a PUSH and Goes to Panel BBBBBBBB. The dialog
table looks like this:
Key Function Parameters
TAB BPE P001
SKNF 0001
BTAB SKPF 0001
P001 PUSH $NULL
GOP BBBBBBBB
- Define the following local dialog for the second panel, BBBBBBBB: when
SKNF causes an exception, it performs a PUSH and Goes to Panel CCCCCCCC, and
when SKPF causes an exception, it performs a POP. The dialog table looks like
this:
Key Function Parameters
TAB BPE P001
SKNF 0001
BTAB BPE P002
SKPF 0001
P001 PUSH $NULL
GOP CCCCCCCC
P002 POP
- Define the local dialog for the remaining three panels in the same way,
with the additional dialog for the final panel to skip to the first panel on
exception. Thus, the dialog table for the last panel looks like this:
Key Function Parameters
TAB SKNF 0001
BTAB BPE P002
SKPF 0001
P002 POP
You can chain a number of panels in this way. However, the maximum number
of panels you can PUSH is 16.
This screenset is ready to run (see the chapter Running the Screenset
for details on running screensets). You can compare your screenset with the
sample in q9.s.
Copyright © 1999 MERANT International Limited. All rights reserved.
This document and the proprietary marks and names
used herein are protected by international law.
| Setting Up the Configuration File |
|
Key Code List | |