Accueil du site > Les articles > Connaître le programme appelant
Version à imprimer Enregistrer au format PDF

Connaître le programme appelant

mercredi 11 août 2004, par Grégory Jarrige Visites  1800 Première mise en ligne le jeudi 6 novembre 2003.

Certaines fois, on désire savoir quel est le nom du programme précédant.
On a pour cela 2 possibilités. La première consiste à écrire un programme MI (ce n’est pas l’objet de cette page), l’autre consiste à utiliser quelques commandes CL comme ci-dessous :


DCL &MSG *CHAR 132
DCL &SENDER *CHAR 80

/* Envoi d’un message bidon au programme précédent en récupérant l’identifiant */
SNDPGMMSG MSG(COUCOU)
RCVMSG PGMQ(*PRV) MSGTYPE(*LAST) MSG(&MSG) SENDER(&SENDER)

/* &SENDER me donne à la position 56 sur 10 de long le programme qui a reçu le message */
/* et en continuant ainsi on peut connaître aussi le programme précédant */
SNDPGMMSG MSG(COUCOU) TOPGMQ(*PRV (%SST(&SENDER 56 10)))
RCVMSG PGMQ(*PRV (%SST(&SENDER 56 10))) +
 MSGTYPE(*LAST) MSG(&MSG) SENDER(&SENDER)

Il y a un risque de bouclage dans le cas d’appel de programme récursif (problème inexistant dans le programme MI, qui donne la liste d’appel des programmes (DSPJOB Option 11).

P.-S.

Merci à Laurent Masson pour cette astuce