The PHONE CLIST in Figure 1 is a sample
application that invokes ISPF dialog management services to display
input and output panels. The PHONE CLIST searches the names directory
and returns the phone number for a name that the user provides on
the input panel. The input panel is shown in Figure 2.
The PHONE CLIST creates an input table and loads each phone number
request in a row. It then invokes ICQCAL00 to search the names directory
and displays the results on an output panel ( Figure 3). If more than one directory entry
matches a request, they are displayed on the list panel shown in Figure 4.
Figure 1. A Sample Application
Using ICQCAL00 — the PHONE CLIST
/**********************************************************************/
/* THIS PROGRAM SEARCHES THE NAMES DIRECTORY FOR PHONE NUMBERS OF */
/* PERSONS SPECIFIED BY THE USER ON AN INPUT PANEL. DUPLICATE */
/* RESULTS ARE RETURNED ON A SELECTION PANEL FOR THE USER TO CHOOSE */
/* FROM, AND FINAL RESULTS ARE DISPLAYED ON AN OUTPUT PANEL. */
/**********************************************************************/
PROC 0 TRACE(N)
CONTROL END(ENDO)
CONTROL NOPROMPT NOFLUSH NOMSG
IF &NRSTR(&TRACE) = Y THEN +
CONTROL LIST CONLIST SYMLIST MSG ASIS
ELSE +
CONTROL ASIS NOLIST NOCONLIST NOSYMLIST
ISPEXEC CONTROL NONDISPL ENTER
ISPEXEC DISPLAY PANEL(ICQSIECA) /* DISPLAY DEFAULT NAME VARIABLES
ISPEXEC CONTROL ERRORS RETURN
ISPEXEC TBEND INTABLE /* END TABLE, IN CASE IT EXISTS
ISPEXEC CONTROL ERRORS CANCEL
/**************************************************************/
/* CREATE INPUT TABLE OF SEARCH REQUESTS */
/**************************************************************/
ISPEXEC TBCREATE INTABLE NAMES (QAAVARS QAAUSE QAAGNRIC +
QAALIST QAARTYPE QAADIR QAAMODE QAAMXSEL +
QAAMXMSG QAAEXPGP QAAFMSG QAAPANEL QAAPANGP QAADUPSR +
QAASCNIK QAAMSGID QAARETCD &QCANVARS) NOWRITE REPLACE
SET ISPCODE = &LASTCC
IF &ISPCODE > 4 THEN +
DO
WRITE ERROR IN TBCREATE: RETURN CODE OF &ISPCODE
GOTO EXIT
ENDO
SET NAMES_ENTERED = Y
DO WHILE &NAMES;_ENTERED = Y
ISPEXEC TBVCLEAR INTABLE
ISPEXEC DISPLAY PANEL(JRT1) /* GET DESIRED INFORMATION
SET ISPCODE = &LASTCC /* SAVE RETURN CODE
IF &ISPCODE ¬= 0 THEN +
SET NAMES_ENTERED = N
SET QAAUSE = Y /* SET UP USE FLAG
SET QAASCNIK = Y /* REPEAT WITH FIRST NAME AS NICKNAME
SET QAAPANEL = &STR(JRT3) /* WANT LIST TO USE THIS PANEL
/***********************************************/
/* USE ALL OTHER DEFAULT VALUES */
/***********************************************/
IF &NRSTR(&QAALAST) ¬= THEN +
SET QAAVARS = &QAAVARS QAALAST /* USE LAST NAME IN SEARCH
IF &NRSTR(&QAAFRST) ¬= THEN +
SET QAAVARS = &QAAVARS QAAFRST /* USE FIRST NAME IN SEARCH
IF &NRSTR(&QAAMIDLE) ¬= THEN +
SET QAAVARS = &QAAVARS QAAMIDLE /* USE MIDDLE NAME IN SEARCH
IF &NRSTR(&QAAUSER) ¬= THEN +
SET QAAVARS = &QAAVARS QAAUSER /* USE USER ID IN SEARCH
ISPEXEC TBADD INTABLE /* ADD ROW TO TABLE
IF &NAMES;_ENTERED = Y THEN +
DO
/**************************************************/
/* CALL NAMES DIRECTORY PROGRAM ICQCAL00 */
/* OPTIONS: REMOVE DUPLICATE ENTRIES */
/* LEAVE DIRECTORY TABLES OPEN */
/**************************************************/
ICQCAL00 REMDUPS(Y) TBDISP(OPEN) INTABLE(INTABLE)
ISPEXEC TBTOP INTABLE /* GO TO TOP OF TABLE
ISPEXEC TBVCLEAR INTABLE
SET QAAUSE = X /* SET FOR ERROR FLAG
ISPEXEC TBSARG INTABLE
ISPEXEC TBSCAN INTABLE
IF &LASTCC = 0 THEN +
DO /* NAME FOUND
IF &QAAMSGID ¬= THEN +
ISPEXEC SETMSG MSG(&QAAMSGID) /* ID NOT BLANK, USE IT
ISPEXEC TBDISPL INTABLE PANEL(JRT2) /* DISPLAY RESULTS
ENDO
ELSE +
DO
ISPEXEC TBVCLEAR INTABLE
SET QAAUSE = N
ISPEXEC TBSARG INTABLE
ISPEXEC TBDISPL INTABLE PANEL(JRT2)
ENDO
ENDO
ISPEXEC CONTROL ERRORS RETURN
ISPEXEC TBEND INTABLE /* END TABLE, IN CASE IT EXISTS
ISPEXEC CONTROL ERRORS CANCEL
ISPEXEC TBCREATE INTABLE NAMES (QAAVARS QAAUSE QAAGNRIC +
QAALIST QAARTYPE QAADIR QAAMODE QAAMXSEL +
QAAMXMSG QAAEXPGP QAAFMSG QAAPANEL QAAPANGP QAADUPSR +
QAASCNIK &QCANVARS) NOWRITE REPLACE
SET ISPCODE = &LASTCC
IF &ISPCODE > 4 THEN +
DO
WRITE ERROR IN TBCREATE: RETURN CODE OF &ISPCODE
GOTO EXIT
ENDO
ENDO
EXIT: +
ISPEXEC VGET (QAATAB1 QAATAB2) SHARED /* GET NAMES OF OPEN DIRECTORIES */
ISPEXEC CONTROL ERRORS RETURN/* DON'T USE RETURN CODE PANELS */
ISPEXEC TBEND &QAATAB1 /* CLOSE PRIVATE DIRECTORY */
ISPEXEC TBEND &QAATAB2 /* CLOSE MASTER DIRECTORY */
ISPEXEC CONTROL ERRORS CANCEL/* ALLOW RETURN CODE PANELS */
EXIT CODE(0) /* EXIT WITH RETURN CODE */
Figure 2. PHONE CLIST
Input Panel Definition (JRT1))ATTR DEFAULT(%+_)
/* % TYPE(TEXT) INTENS(HIGH) defaults displayed for */
/* + TYPE(TEXT) INTENS(LOW) information only */
/* _ TYPE(INPUT) INTENS(HIGH) CAPS(ON) JUST(LEFT) */
@ TYPE(INPUT) INTENS(HIGH) PAD(' ') CAPS(OFF) JUST(LEFT)
! TYPE(OUTPUT) INTENS(LOW) PAD(' ') CAPS(OFF) JUST(LEFT)
)BODY
+ PHONE DIRECTORY SEARCH
%COMMAND ===>_ZCMD +
%
+Fill in the name of the person you want information about.
+To continue, press ENTER; to end, press END.
+
+ Last Name ===>@Z +
+ First Name ===>@Z +
+ Middle Name ===>@Z +
+ User Id ===>@Z +
)INIT
.ZVARS = '(QAALAST QAAFRST QAAMIDLE QAAUSER)' /* create input variables */
.CURSOR = QAALAST
)PROC
)END
Figure 3. PHONE CLIST
Output Panel Definition (JRT2))ATTR
% TYPE(TEXT) INTENS(HIGH) CAPS(OFF)
+ TYPE(TEXT) INTENS(LOW) CAPS(OFF)
_ TYPE(INPUT) INTENS(HIGH) CAPS(ON) JUST(LEFT)
$ TYPE(INPUT) INTENS(HIGH) CAPS(OFF) JUST(LEFT) PAD(_)
# TYPE(INPUT) INTENS(HIGH) CAPS(ON) JUST(LEFT) PAD(_)
! TYPE(OUTPUT) INTENS(HIGH) CAPS(OFF) JUST(LEFT)
@ TYPE(OUTPUT) INTENS(LOW) CAPS(OFF) JUST(LEFT) PAD(' ')
)BODY
+ PHONE DIRECTORY LIST OF RESULTS
%COMMAND ===>_ZCMD %SCROLL ===>_Z +
%
+The information you requested is shown below.
+Press ENTER or END to continue.
+
% TYPE LAST/GROUP NAME FIRST NAME USER ID PHONE NUMBER
)MODEL ROWS(SCAN)
@Z@Z @Z @Z @Z @Z
)INIT
.ZVARS = '(ZSCML,QAAPRIV,QAATYPE,QAALAST,+
QAAFRST,QAAUSER,QAAPHONE)' /*display variables */
IF (&ZSCML = ' ')
&ZSCML = 'PAGE'
)PROC
)END
Figure 4. PHONE CLIST
List Panel Definition (JRT3))ATTR
% TYPE(TEXT) INTENS(HIGH) CAPS(OFF)
+ TYPE(TEXT) INTENS(LOW) CAPS(OFF)
_ TYPE(INPUT) INTENS(HIGH) CAPS(ON) JUST(LEFT)
$ TYPE(INPUT) INTENS(HIGH) CAPS(OFF) JUST(LEFT) PAD(_)
# TYPE(INPUT) INTENS(HIGH) CAPS(ON) JUST(LEFT) PAD(_)
! TYPE(OUTPUT) INTENS(HIGH) CAPS(OFF) JUST(LEFT)
@ TYPE(OUTPUT) INTENS(LOW) CAPS(OFF) JUST(LEFT) PAD(' ')
)BODY
+ PHONE DIRECTORY LIST OF ENTRIES
%COMMAND ===>_ZCMD %SCROLL ===>_Z +
%
+More than one match was found, to view an entry type V next to it.
+To select one, type S.
+To save selections, press END; to cancel, type CANCEL on the COMMAND line.
+
% TYPE LAST/GROUP NAME FIRST NAME USER ID PHONE NUMBER
)MODEL ROWS(SCAN)
#Z@Z@Z @Z @Z @Z @Z
)INIT
.ZVARS = '(ZSCML,QAANSEL,QAAPRIV,QAATYPE,QAALAST,+
QAAFRST,QAAUSER,QAAPHONE)'
IF (&ZSCML = ' ')
&ZSCML = 'PAGE'
)PROC
&ICQCMD = &ZCMD /* save command for display in msg ICQGC036 */
&QAANTSEL = &QAANSEL /* save selection character for msg ICQCA700 */
&QAAVCHAR = 'V'
&QAASCHAR = 'S'
&ZCMD = TRANS(&ZCMD
' ',' '
CANCEL,CANCEL
MSG = ICQGC036) /* validate command, blank, or CANCEL only */
&QAANSEL = TRANS(&QAANSEL
&QAAVCHAR;,'V'
&QAASCHAR;,'S'
' ',' '
MSG = ICQCA700) /* validate selection char: S, V, or blank */
IF (&ZCMD = 'CANCEL')/* if CANCEL is typed */
&QACAN = 'Y'
VPUT (QACAN) SHARED /* set CANCEL flag and save it*/
)END