Example of an ISPF panel that uses a referral list

Here is the panel definition for a panel that uses a referral list.

)PANEL KEYLIST(ISRSAB,ISR)
)ATTR DEFAULT(...) FORMAT(MIX)
 0B TYPE(AB)
 04 TYPE(ABSL)
 05 TYPE(PT)
 09 TYPE(FP)
 0A TYPE(NT)
 0C TYPE(NT) SKIP(ON)
 11 TYPE(SAC)
 12 TYPE(CEF) PADC(USER)
 13 TYPE(NEF) PADC(USER)
 19 TYPE(DT)
 22 TYPE(WASL) SKIP(ON)
 08 TYPE(CH)
 10 TYPE(ET)
)ABC DESC('RefList')
 PDC DESC('Reference Data Set List')
   ACTION RUN(ISRRLIST) PARM('RL1')
 PDC DESC('Reference Library List')
   ACTION RUN(ISRRLIST) PARM('LR1')
 PDC DESC('Personal Data Set List')
   ACTION RUN(ISRRLIST) PARM('PL1')
 PDC DESC('Personal Data Set List Open')
   ACTION RUN(ISRRLIST) PARM('PL2')
 PDC DESC('Personal Library List')
   ACTION RUN(ISRRLIST) PARM('LL1')
 PDC DESC('Personal Library List Open')
   ACTION RUN(ISRRLIST) PARM('LL2')
)ABCINIT
   .ZVARS=REFLIST
)ABC DESC('RefMode')
 PDC DESC('List Execute') UNAVAIL(ZRME1)
   ACTION RUN(ISRRLIST) PARM('EEX')
 PDC DESC('List Retrieve') UNAVAIL(ZRME2)
   ACTION RUN(ISRRLIST) PARM('ERT')
)ABCINIT
   .ZVARS=LISTFILE
  VGET (ZELIST) PROFILE
  IF (&ZELIST = 'EXECUTE')
    &zrme1 = 1
    &zrme2 = 0
    &listfile = 2
  ELSE
    &zrme1 = 0
    &zrme2 = 1
    &listfile = 1
)BODY  CMD(ZCMD)
⋮
)INIT
⋮
)REINIT
   REFRESH (PRJ1,LIB1,LIB2,LIB3,LIB4,TYP1,MEM,DSN) /*refresh panel vars*/
)PROC
  /* the following is the logic for reference or personal data set list*/
 VGET (ZRDSN) SHARED            /* get data set reflist key var     */
 IF (&ZRDSN ^= ' ')             /* if reflist has set dsname var    */
   &DSN = &ZRDSN                /* set panel other dsname to zrdsn  */
   VGET (ZREFVOLM) PROFILE      /* get volume retrieve mode         */
   IF (&ZREFVOLM = 'ON')        /* if volume retrieve on            */
     &VOL = &ZRVOL              /* set panel volume to zrvol        */
   &ZRDSN = ' '                 /* blank zrdsn                      */
   &ZRVOL = ' '                 /* blank zrvol                      */
   VPUT (ZRDSN ZRVOL) SHARED    /* return blank reflist vars        */
   .CURSOR = DSN                /* set cursor to panel dsname field */
   VGET (ZELIST) PROFILE        /* get edit execute/retrieve mode   */
   IF (&ZELIST ^= 'EXECUTE')    /* determine if retrieve or execute */
     .MSG = ISRDS003            /* force redisplay if retrieve mode */
  /* End of logic for reference or personal data set list        */
  /* the following is the logic for reference or personal library list */
 VGET (DSALSEL) SHARED          /* get library reflist key var      */
 IF (&DSALSEL ^= ' ')           /* if reflist has set lib indicator */
   VGET (DSA1,DSA2,DSA3,DSA4,DSA5,DSA6,DSA7) SHARED /* get vars  */
   &PRJ1 = &DSA1                /* set panel project                */
   &LIB1 = &DSA2                /* set panel library 1              */
   &LIB2 = &DSA3                /* set panel library 2              */
   &LIB3 = &DSA4                /* set panel library 3              */
   &LIB4 = &DSA5                /* set panel library 4              */
   &TYP1 = &DSA6                /* set panel type                   */
   &MEM  = &DSA7                /* set panel member                 */
   &DSN = ' '                   /* blank panel other dsname         */
   &DSALSEL = ' '               /* blank reflist lib indicator      */
   VPUT (DSALSEL) SHARED        /* return to shared pool            */
   .CURSOR = MEM                /* set cursor to panel member field */
   VGET (ZELIST) PROFILE        /* get edit execute/retrieve ind    */
   IF (&ZELIST ^= 'EXECUTE')    /* determine if retrieve or execute */
     .MSG = ISRDS003            /* setmsg if retrieve mode          */
  /* End of logic for reference or personal library list         */
)END