Afin d’obtenir un load exécutable d’un programme COBOL simple sur z/OS ou MVS, deux étapes sont nécessaires :
- la compilation
- le link-edit
L’écriture du JCL réalisant ces deux étapes est complexe et nécessitera du temps en cas de modification.
Une procédure IBM cataloguée, présente par défaut sur les machines z/OS, réalise toutes ces étapes en un minimum de lignes : c’est la procédure IGYWCL.
Utilisation basique de la procédure IGYWCL
Je vous propose ce JCL qui utilise cette procédure IGYWCL et qui nécessitera une petite adaptation de votre côté :
- renseigner le nom du programme dans les bibliothèques de source COBOL et de LOAD
- renseigner les DSN (DataSet Name) des bibliothèques
//MONJOB JOB 'COMPIL',REGION=1M,NOTIFY=&SYSUID
//*
//*=========================================================*
//* JCL DE COMPILATION *
//* *
//* A REALISER : *
//* -> REMPLACER LE NOM DU MEMBRE PAR VOTRE PROGRAMME *
//* -> ADAPTER LE CHEMIN DES BIBLIOTHEQUES *
//*=========================================================*
//*
//COMPIL EXEC IGYWCL
//COBOL.SYSIN DD DSN=VOTREUSER.CHEMIN.COBOL(VOTREPROGRAMME),DISP=SHR
//LKED.SYSLMOD DD DSN=VOTREUSER.CHEMIN.LOAD(VOTREPROGRAMME),DISP=OLD
//
Compilation avec utilisation de bibliothèques contenant des copies
Si vous souhaitez inclure une bibliothèque contenant des copies, le JCL ci-dessus évoluera légèrement en incluant une carte DD COBOL.SYSLIB :
//COMPIL EXEC IGYWCL,PARM='LIB'
//COBOL.SYSIN DD DSN=VOTREUSER.CHEMIN.COBOL(VOTREPROGRAMME),DISP=SHR
//COBOL.SYSLIB DD DSN=VOTREUSER.CHEMIN.COPY,DISP=SHR
// DD DSN=VOTREUSER.CHEMIN.AUTRESCOPY,DISP=SHR (à ajouter si besoin)
//LKED.SYSLMOD DD DSN=VOTREUSER.CHEMIN.LOAD(VOTREPROGRAMME),DISP=OLD
//
Vous pouvez ajouter autant de cartes DD complémentaires que vous le souhaitez, si besoin. Ceci est utile principalement dans le cas où les copies sont réparties dans plusieurs bibliothèques :
//COBOL.SYSLIB DD DSN=VOTREUSER.CHEMIN.COPY,DISP=SHR
// DD DSN=PRJZOE.SRC.COPY,DISP=SHR
// DD DSN=BLIB.MAC,DISP=SHR
Compilation de programmes COBOL appelant des sous-modules
Si vous effectuez une compilation d’un programme appelant des sous-modules, la carte DD LKED.SYSLIB sera à préciser. Elle permettra de préciser la ou les bibliothèques dans lesquelles chercher les LOAD des sous-modules lors de l’étape de link-edit. Si cette carte manque, vous rencontrerez l’erreur suivante dans le compte rendu de link-edit dans SDSF, remontée généralement sous l’ABEND S0706 :
IEW2456E 9207 SYMBOL MSOUSMODULE UNRESOLVED. MEMBER COULD NOT BE INCLUDED
FROM THE DESIGNATED CALL LIBRARY.
Le JCL qui permettra d’inclure les bibliothèques des loads des sous-modules lors de la compilation :
//COMPIL EXEC IGYWCL,PARM='LIB'
//COBOL.SYSIN DD DSN=VOTREUSER.CHEMIN.COBOL(VOTREPROGRAMME),DISP=SHR
//COBOL.SYSLIB DD DSN=VOTREUSER.CHEMIN.COPY,DISP=SHR
//LKED.SYSLIB DD DSN=VOTREUSER.CHEMIN.LOAD,DISP=SHR
// DD .... (à ajouter si besoin)
//LKED.SYSLMOD DD DSN=VOTREUSER.CHEMIN.LOAD(VOTREPROGRAMME),DISP=OLD
//
Pour aller plus loin
Vous pouvez préciser simultanément d’autres cartes DD attendues par la procédure si d’autres besoins spécifiques de compilation se présentent.
A venir, d’autres JCL de compilation, notamment pour des programmes COBOL utilisant DB2.
bonne approche de présentation
Bonjour,
Très bien expliqué, merci.
Je viens de COBOL IBM i (AS400), et je rencontre des difficultés à travailler avec des panels ISPF et du COBOL. En AS400 c’est beaucoup plus simple tant avec l’interactif comme avec le batch.
Pourtant avec du REXX c’est facile.
Vous n’auriez pas sous la main un exemple de JCL avec appel/link des librairies ISPPLIB, etc ?
Merci d’avance !
Bertrand D’Anjou
Merci Bertrand pour votre retour !
Je n’ai malheureusement pas sous la main de JCL qui réalise ce que vous avez demandé.
Bonne journée,
Cyril
Rebonjour,
Avec ce JCL on compile, link et run d’une seule fois. Le résultat dans SDSF. Les trois dernières lignes sont des données pour le programme PGM01. L’avantage/inconvénient de ce JCL c’est qu’il n’y a pas de création de membre objet (load), donc pas d’appels avec TSO Call ou RUN.
Si ça peut être utile !
Bertrand
//COBRUN EXEC IGYWCLG
//COBOL.SYSIN DD DSN=&SYSUID..MINE.COBOL(PGM01),DISP=SHR
//GO.SYSIN DD *
MON PREMIER
MON DEUXIEME
MON TROISIEME
Encore merci Bertrand pour ce retour complémentaire !