COBOL - Sous-programmes
Le sous-programme Cobol est un programme qui peut être compilé indépendamment mais ne peut pas être exécuté indépendamment. Il existe deux types de sous-programmes:internal subroutines comme Perform déclarations et external sous-programmes comme le verbe CALL.
Verbe d'appel
Le verbe d'appel est utilisé pour transférer le contrôle d'un programme à un autre programme. Le programme qui contient le verbe CALL est leCalling Program et le programme appelé est appelé Called Program. L'exécution du programme appelant s'arrêtera jusqu'à ce que le programme appelé termine l'exécution. L'instruction Exit Program est utilisée dans le programme Called pour retransférer le contrôle.
Contraintes de programme appelées
Voici les exigences du programme appelé -
Linkage sectiondoit être défini dans le programme appelé. Il se compose d'éléments de données passés dans le programme. Les éléments de données ne doivent pas avoir de clause Value. La clause PIC doit être compatible avec les variables transmises via le programme appelant.
Procedure division using a une liste de variables transmises par le programme appelant et l'ordre doit être le même que celui mentionné dans le verbe Call.
Exit programl'instruction est utilisée dans le programme appelé pour retransférer le contrôle. Ce doit être la dernière instruction du programme appelé.
Les paramètres peuvent être passés entre les programmes de deux manières -
- Par référence
- Par contenu
Appel par référence
Si les valeurs des variables dans le programme appelé sont modifiées, alors leurs nouvelles valeurs seront reflétées dans le programme appelant. SiBY clause n'est pas spécifiée, les variables sont toujours passées par référence.
Syntaxe
Voici la syntaxe pour appeler le sous-programme par référence -
CALL sub-prog-name USING variable-1, variable-2.
Example
L'exemple suivant est le programme appelant MAIN et UTIL est le programme appelé -
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-STUDENT-ID PIC 9(4) VALUE 1000.
01 WS-STUDENT-NAME PIC A(15) VALUE 'Tim'.
PROCEDURE DIVISION.
CALL 'UTIL' USING WS-STUDENT-ID, WS-STUDENT-NAME.
DISPLAY 'Student Id : ' WS-STUDENT-ID
DISPLAY 'Student Name : ' WS-STUDENT-NAME
STOP RUN.
Programme appelé
IDENTIFICATION DIVISION.
PROGRAM-ID. UTIL.
DATA DIVISION.
LINKAGE SECTION.
01 LS-STUDENT-ID PIC 9(4).
01 LS-STUDENT-NAME PIC A(15).
PROCEDURE DIVISION USING LS-STUDENT-ID, LS-STUDENT-NAME.
DISPLAY 'In Called Program'.
MOVE 1111 TO LS-STUDENT-ID.
EXIT PROGRAM.
JCL pour exécuter le programme COBOL ci-dessus -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = MAIN
Lorsque vous compilez et exécutez le programme ci-dessus, il produit le résultat suivant -
In Called Program
Student Id : 1111
Student Name : Tim
Appel par contenu
Si les valeurs des variables du programme appelé sont modifiées, leurs nouvelles valeurs ne seront pas reflétées dans le programme appelant.
Syntaxe
Voici la syntaxe de l'appel du sous-programme par contenu -
CALL sub-prog-name USING
BY CONTENT variable-1, BY CONTENT variable-2.
Example
L'exemple suivant est le programme appelant MAIN et UTIL est le programme appelé -
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-STUDENT-ID PIC 9(4) VALUE 1000.
01 WS-STUDENT-NAME PIC A(15) VALUE 'Tim'.
PROCEDURE DIVISION.
CALL 'UTIL' USING BY CONTENT WS-STUDENT-ID, BY CONTENT WS-STUDENT-NAME.
DISPLAY 'Student Id : ' WS-STUDENT-ID
DISPLAY 'Student Name : ' WS-STUDENT-NAME
STOP RUN.
Programme appelé
IDENTIFICATION DIVISION.
PROGRAM-ID. UTIL.
DATA DIVISION.
LINKAGE SECTION.
01 LS-STUDENT-ID PIC 9(4).
01 LS-STUDENT-NAME PIC A(15).
PROCEDURE DIVISION USING LS-STUDENT-ID, LS-STUDENT-NAME.
DISPLAY 'In Called Program'.
MOVE 1111 TO LS-STUDENT-ID.
EXIT PROGRAM.
JCL pour exécuter le programme COBOL ci-dessus -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = MAIN
Lorsque vous compilez et exécutez le programme ci-dessus, il produit le résultat suivant -
In Called Program
Student Id : 1000
Student Name : Tim
Types d'appel
Il existe deux types d'appels -
Static Callse produit lorsqu'un programme est compilé avec l'option de compilateur NODYNAM. Un programme appelé statique est chargé dans le stockage au moment de la compilation.
Dynamic Callse produit lorsqu'un programme est compilé avec l'option de compilateur DYNAM et NODLL. Un programme appelé dynamique est chargé dans le stockage au moment de l'exécution.