Panel definition can be done outside the REXX environment; however,
panel generation and input/output is performed in a REXX exec or in
the REXX interactive environment. The REXX interactive environment
is an ideal place to test the initial panel development. To test
display the panel use the TEST panel command. This displays the panel
with no panel object file created. Also, there is no substitution
for the variables on the panel. To create the panel object use either
the GENERATE, SEND, or the CONVERSE panel commands. Use the FILE
keyword to explicitly state what directory in RFS to find the panel
source, or you can let it default to the current directory. The panel
source name must have the panel name as the file name and 'PANSRC'
as the file type. The panel object is created and filed in the same
directory as the panel source with the file name equal to the source
file name and with a file type of 'PANOBJ'. GENERATE creates the panel
object and does not display the panel. SEND creates the panel object,
displays the panel, and attempts variable substitution. CONVERSE
is similar to SEND with an implied wait and receive.
Note: There are side affects of being in a REXX interactive
environment. Several panel keywords act differently: the cursor position
on the SEND is ignored and keyboard lock is also ignored for SEND
and CONVERSE.
The characteristics of the PANEL command follow.
- All the arguments or keywords are not meaningful or valid for
all commands.
- The last panel command in a REXX exec is the END command. This
releases any storage held by previous panel commands. This command
needs no other operands.
- Only the fields with associated variables can have their attributes
changed dynamically.
- A panel object file is created for the panel that is being displayed
if one does not exist. The file name is the same as the panel source
file name and the file type will be 'PANOBJ'.
- Only the first variable in a protect/skip field is assigned the
input entered by the terminal operator when the field is changed to
an input field.
- The dynamic attribute changes effect the present panel execution
and do not last. Subsequent panel displays revert to what was defined
statically by the panel definition step unless the attributes are
again dynamically changed.
- A SEND must be performed before a RECEIVE and the panel names
must match.
- Only the attributes indicate change, the others stay as defined
statically.
- A panel sent with a position argument needs to be received with
the same position values so the operator input is assigned correctly
to the REXX variables.
- Enclose the field ID list within parenthesis, when multiple fields
are listed.
- There has to be one ATTRIBUTE argument for each different attribute
change.
Note: To change the number of ATTRIBUTE arguments dynamically,
a REXX variable needs to be used (put the literal attribute string
in REXX variable and use the variable). For example, a program needs
to change one field to blue or to change one field to blue and another
field to blinking depending on operator input. One solution is:
field_id = 'xxxx'; /* name of field needing attribute changed*/
attr_string = 'attr(' field_id 'blue )';
if operator_input = y then
attr_string = attr_string 'attr(' field_id2 'blink )'
'panel send panel_name' attr_string;
Note: REXX panel facility generates the panel object if
the object is not found or if the object is older than the source.