| 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 | |