Apprenez les bases du COBOL et développez vos compétences en programmation legacy avec une approche moderne.
Objectif : comprendre comment une application Cobol se découpe en plusieurs programmes, puis apprendre à
échanger des données entre un programme appelant et un programme appelé via
CALL , USING et
LINKAGE SECTION .
Dans une architecture classique :
CALL … USING .
LINKAGE SECTION ,
puis annonce ses paramètres via
PROCEDURE DIVISION USING .
Exemple pédagogique : le premier programme appelle le second et lui passe un paramètre texte. L’appelé modifie ce paramètre, ce qui montre le passage “par référence”.
>>SOURCE FORMAT FREE
IDENTIFICATION DIVISION.
PROGRAM-ID. DEMO-CALLER.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NOM PIC X(20) VALUE SPACES.
PROCEDURE DIVISION.
MOVE "DURAND" TO WS-NOM
DISPLAY "Avant appel : " WS-NOM
CALL "DEMO-CALLEE" USING WS-NOM
DISPLAY "Apres appel : " WS-NOM
STOP RUN.
END PROGRAM DEMO-CALLER.
IDENTIFICATION DIVISION.
PROGRAM-ID. DEMO-CALLEE.
DATA DIVISION.
LINKAGE SECTION.
01 LK-NOM PIC X(20).
PROCEDURE DIVISION USING LK-NOM.
DISPLAY "Dans appele : " LK-NOM
MOVE "MODIFIE-PAR-SOUS-PROG" TO LK-NOM
GOBACK.
END PROGRAM DEMO-CALLEE.
cobc -x -free demo-call.cbl
PROGRAM-ID .
Les appels inter-programmes échouent souvent pour des raisons “contractuelles” : paramètres attendus, tailles, ordre.
Pour diagnostiquer, affichez dans l’appelant et dans l’appelé les paramètres entre crochets
[...] afin de voir les espaces et vérifier que les contenus correspondent.
Par défaut, beaucoup d’environnements passent “par référence” : modifier dans l’appelé modifie dans l’appelant. Cela permet de renvoyer des résultats via des paramètres, sans avoir besoin d’un “retour de fonction”.
>>SOURCE FORMAT FREE
IDENTIFICATION DIVISION.
PROGRAM-ID. EXO-CALLER.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NOM PIC X(20) VALUE SPACES.
01 WS-VILLE PIC X(20) VALUE SPACES.
01 WS-MSG PIC X(80) VALUE SPACES.
PROCEDURE DIVISION.
MOVE "DURAND" TO WS-NOM
MOVE "LILLE" TO WS-VILLE
DISPLAY "Avant appel MSG : [" WS-MSG "]"
CALL "EXO-CALLEE" USING WS-NOM WS-VILLE WS-MSG
DISPLAY "Apres appel MSG : [" WS-MSG "]"
STOP RUN.
END PROGRAM EXO-CALLER.
IDENTIFICATION DIVISION.
PROGRAM-ID. EXO-CALLEE.
DATA DIVISION.
LINKAGE SECTION.
01 LK-NOM PIC X(20).
01 LK-VILLE PIC X(20).
01 LK-MSG PIC X(80).
PROCEDURE DIVISION USING LK-NOM LK-VILLE LK-MSG.
MOVE SPACES TO LK-MSG
STRING
"Bonjour " DELIMITED BY SIZE
FUNCTION TRIM(LK-NOM) DELIMITED BY SIZE
", ville = " DELIMITED BY SIZE
FUNCTION TRIM(LK-VILLE) DELIMITED BY SIZE
"." DELIMITED BY SIZE
INTO LK-MSG
END-STRING
GOBACK.
END PROGRAM EXO-CALLEE.
LINKAGE SECTION .
Ici : 20, 20, 80.