pgm

      dcl   &Abending      *lgl
      dcl   &JobName       *char     10
      dcl   &JobUser       *char     10
      dcl   &JobNbr        *char      6
      dcl   &MsgKey        *char      4
      dcl   &PgmName       *char     10
      dcl   &Sender        *char     80

      monmsg cpf0000 exec(goto abend)

/* Determine the name of this program. */

      sndpgmmsg   msg('Dummy message') topgmq(*same) +
                    msgtype(*info) keyvar(&msgkey)
      rcvmsg      pgmq(*same) msgtype(*info) msgkey(&MsgKey) +
                    rmv(*yes) sender(&Sender)
      chgvar      var(&PgmName) value(%sst(&Sender 27 10))

      rtvjoba     job(&JobName) user(&JobUser) nbr(&JobNbr)

/* regular processing goes here */

      cpyf fromfile(qcustcdt) tofile(qtemp/br549)
      return

/* ===========================================================*/
/* * Routine to handle unexpected errors */
Abend:
/* Don't let this program go into a loop here. */
      if &Abending then(do)
         sndpgmmsg  msgid(cpf9898) msgf(qcpfmsg) msgtype(*escape) +
                      msgdta('Program' *bcat &PgmName *bcat +
                             'ended abnormally at label Abend')
         monmsg cpf0000
         return
      enddo
      chgvar   &Abending '1'

/* Resend diagnostic & escape messages to the caller           */
/* caller as diagnostic messages.                              */
      movpgmmsg  msgtype(*diag)
      rsnescmsg

endpgm
