Aller au contenu

CALLSUBR

Appeler sous-programme

En bref

La commande CALLSUBR est utilisée dans un programme CL ou une procédure CL ILE pour transférer le contrôle dans un sous-programme.

CALLSUBR se lit CALL (Appeler) + SUBR. Sur IBM i, le nom d'une commande associe presque toujours un verbe et un objet.

Syntaxe minimale

CALLSUBR SUBR(…)

Paramètres

  • SUBR Sous-programme obligatoire
  • RTNVAL Variable pour valeur retour

Astuce : dans une session 5250, tapez CALLSUBR puis F4 pour l'invite de saisie, et F1 sur un paramètre pour son aide.

Aide IBM i de la commande

Texte du F1, IBM i 7.5 en français (bibliothèque QSYS)

Où s'exécute :

  • Programme batch (*BPGM)
  • Programme interactif (*IPGM)
Compatible multitâche : Oui

La commande CALLSUBR est utilisée dans un programme CL ou une procédure CL ILE pour transférer le contrôle dans un sous-programme. Le nom de sous-programme dans la commande CALLSUBR doit correspondre au nom de sous-programme d'une commande SUBR. Vous pouvez placer la commande CALLSUBR à n'importe quel endroit de la procédure, y compris d'autres sous-programmes, à l'exception d'une commande MONMSG de niveau programme. Si le sous-programme appelé renvoie une valeur, par exemple, un code d'erreur, cette valeur peut être stockée dans une variable CL de nombre entier à 4 octets en indiquant le nom de cette dernière au paramètre RTNVAL (Variable pour valeur retour).

Chaque commande CALLSUBR exécutée place une adresse de retour dans la pile de sous-programmes. Une adresse de retour est supprimée de la pile de sous-programmes lorsqu'une commande RTNSUBR ou ENDSUBR est exécutée. La profondeur par défaut de la pile de sous-programmes est 99. La profondeur de pile de sous-programmes peut être définie pour un programme CL ou une procédure CL ILE en utilisant la commande DCLPRCOPT (Déclarer les options de traitement) et en indiquant une valeur pour le paramètre SUBRSTACK (Position dans pile sous-pgms). Si une commande CALLSUBR entraîne un dépassement de la limite de profondeur de la pile de sous-programmes, le message CPF0822 est généré et la pile de sous-programmes n'est pas modifiée.

Restrictions: Cette commande est admise uniquement dans un programme CL ou une procédure CL ILE.

Paramètres

Mot-clé Description Valeurs possibles Remarques
SUBR Sous-programme Nom simple Obligatoire, positionnel 1
RTNVAL Variable pour valeur retour CL variable name, *NONE Facultatif

Sous-programme (SUBR)

Indique le sous-programme auquel le contrôle doit être transféré lors du traitement de la commande CALLSUBR. Le sous-programme doit être défini au sein de la même procédure que la commande CALLSUBR.

Ce paramètre est obligatoire.

nom-simple
Indiquez le nom du sous-programme auquel le contrôle sera transféré. Un nom de variable CL ne peut pas être utilisé pour indiquer le nom de sous-programme.

Variable pour valeur retour (RTNVAL)

Indique la variable qui doit recevoir la valeur de retour provenant du sous-programme appelé.

*NONE
La valeur renvoyée par le sous-programme n'est pas prise en compte.
nom-variable-CL
Indiquez le nom de la variable CL devant recevoir la valeur de retour provenant du sous-programme appelé. La valeur de retour sera zéro par défaut ou la valeur indiquée au paramètre RTNVAL (Valeur renvoyée par CPP) dans la commande RTNSUBR ou ENDSUBR. La variable doit être une variable CL de nombre entier signé à 4 octets.

Exemples

Exemple 1 : CALLSUBR avec RTNVAL

DCL &INT4VAR TYPE(*INT) LEN(4)
:
CALLSUBR SUBR(SUBR1) RTNVAL(&INT4VAR)

Le sous-programme nommé SUBR1 est appelé et la valeur de retour est stockée dans la variable &INT4VAR.

Exemple 2 : CALLSUBR en tant que paramètre de commande dans la commande IF

IF  (&A *LT 30)  THEN(CALLSUBR LT30)

Le sous-programme nommé LT30 est appelé si &A est inférieur à 30.

Messages d'erreur

Messages *ESCAPE

CPF0822
Dépassement de la capacité de stockage de sous-programme à l'instruction &1.

© Copyright IBM Corp. Texte d'aide reproduit à des fins de formation.