Compiler facilement un programme COBOL avec un JCL sur z/OS

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.

Publié le
Catégorisé comme Non classé

5 commentaires

  1. 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

    1. 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

  2. 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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.