ILE : liage de modules et de *SRVPGM

BoTTom |    Changer de couleur
 
 Une des particularités d'ILE est la notion de liage :
 
 Rappel :
        il s'agit de :      - a/ dupliquer (lier) le code d'une procédure.
                       soit
                            - b/ mémoriser la localisation d'une procédure
                                  stockée dans un programme de service.
 
 Un pgm est alors constitué de procédures liées entre elles.
 
  L'une de ces procédures est déclarée procédure d'entrée.
 
    UEP = User Entry Procedure.
 
  Il s'agit du paramètre ENTMOD de la commande CRTPGM
  (pour un module écrit en C, c'est la procédure main() qui est UEP.)
  (pour un module RPG ou COBOL, il n'y a qu'une seule procédure en V3R10.)
 
  PLUS une procédure particulière générée automatiquement par le
  compilateur, appellée PEP (Program Entry Procedure), que l'on voit
  apparaître dans la liste d'invocation.


|    Changer de couleur
                                 Liste d'appel 
                                                            Système:   S44B0164 
 Travail:   PCAF4S1        Util:   AF400CM        Numéro:   067509 
 
 Indiquez vos options, puis appuyez sur ENTREE. 
   5=Afficher détails 
 
      Niveau   Pgm ou 
 Opt  demande  procédure        Bibliothèque  Spécification       Instruction 
          4    QUIMGFLW          QSYS                                0486 
          5    QUICMD            QSYS                                03E5 
               QUOCPP            QPDA                                0591 
               QUOMAIN           QPDA                                00DF 
          6    QUOCMD            QSYS                                015E 
  5 PEP -->    _QRNP_PEP_  ...   AF4TEMP                                  
      UEP -->  CHXOBJG           AF4TEMP       0000000105                 
               _QRNX_WS_E  ...   QSYS          0000000055                 
               QWSGET            QSYS                                056B 
               QT3REQIO          QSYS                                017F 
 
 F3=Exit   F10=Mettre à jour liste   F11=Groupe d'activation   F12=Annuler 
 F16=Menu travail   F17=Début        F18=Fin 


|    Changer de couleur
                          Détails de la liste d'appel 
                                                            Système:   S44B0164 
 Travail:   PCAF4S1        Util:   AF400CM        Numéro:   067509 
 
 Niveau de demande  . . . . . . . . :       
 Programme  . . . . . . . . . . . . :   CHXOBJG    
   Bibliothèque . . . . . . . . . . :     AF4TEMP    
 Module ILE . . . . . . . . . . . . :   CHXOBJG    
   Bibliothèque . . . . . . . . . . :     QTEMP      
 Procédure  . . . . . . . . . . . . :   _QRNP_PEP_CHXOBJG
 
 
                                                         
 Groupe d'activation  . . . . . . . :   0000000002  *DFTACTGRP 
 Spécification  . . . . . . . . . . :                                      
 Frontière de contrôle  . . . . . . :   Oui        
 
 
                                                                            Fin 
 Appuyez sur ENTREE pour continuer. 
 
 F3=Exit   F12=Annuler   F16=Menu travail 


|    Changer de couleur
 Cette procédure ajoutée par le compilateur est importante :
 
       -c'est elle qui prend à sa charge le lien avec le pgm appelant
          (le résultat du CALL, comme avec les pgms OPM), notamment
          les paramètres reçus.
 
       -c'est elle qui active la procédure UEP et retransmet les paramètres.
 
       - et enfin, occupant une place dans la liste d'invocation, il faudra
          en tenir compte lors des envois de messages.
 
        [(*PRV *) n'est plus le pgm appelant, mais la PEP, par exemple.]
 
 MODA                                       .............
   .........     CRTPGM PGM(ESSAI)          : _________ :   ESSAI *PGM
   : proc1 :            MODULE(MODA +       : | PEP   | :
   :.......:                   MODB)        : |_______| :
 MODB                   ENTMOD(MODA)        : | proc1 | :
   .........                                : |_______| :
   : proc2 :                                : | proc2 | :
   :.......:                                : |_______| :
                                            :...........:


|    Changer de couleur
 Le passage d'une procédure à l'autre (proc1 à proc2) se fera par :
 
                  CALLB          (en rpg)
                  CALL PROCEDURE (en cobol)
                  CALLPRC        (en CL)
 
    avec les règles du passage de paramètres traditionnel.
 
 Une alternative au passage de paramètres est la déclaration de variables
  globales. (non supportées par le CL)
 
proc1 :
     DVAR1             S             10    EXPORT
proc2:
     DVAR1             S             10    IMPORT
 
 la variable VAR1 est globale (accessible par l'ensemble des procédures)
 
 MAIS : l'espace de stockage est alloué par proc1.
 
        il ne faut donc pas utiliser VAR1 si la procédure proc1 n'a pas
         été initialisée (appelée).


|    Changer de couleur
 
 En ce qui concerne les programmes de service, la mise en oeuvre peut
  être un peu plus complexe.
 
 avec EXPORT(*ALL) : toutes les procédures, toutes les avriables globales
                       sont accessibles (publiques)
 MODA
 ..................                          ...............................
 : proca          :    CRTSRVPGM             : procédure ! variables   ! P :
 :  VAR1  IMPORT  :                          :-----------!-------------! u :
 :  VAR2  EXPORT  :       SRVPGM(essaisrv)   : proca     ! VAR2        ! b :
 :................:                          : procb     ! VAR1        ! l :
 MODB                     MODULE(MODA +      : procz     !             ! i :
 ..................              MODB +      :-------------------------! c :
 : procb          :              MODC)       : ______________________  ! - :
 :  VAR1  EXPORT  :                          : | proca VAR1 IMPORT  |  ! P :
 :................:       EXPORT(*ALL)       : |_______VAR2 EXPORT__|  ! r :
 MODC                                        : | procb VAR1 EXPORT  |  ! i :
 ..................                          : |____________________|  ! v :
 : procz          :                          : | procz  callb procb |  ! é :
 :   CALLB procb  :                          : |____________________|  !   :
 :................:                          :.............................:


|    Changer de couleur
 
 Vous pouvez faire en sorte que :
                   -procb soit une procédure interne (un "sous-programme"),
                     uniquement accessible par proca et procz.
                   -VAR1 soit une variable réservée à la communication entre
                     les procédures du programme de service.
 MODA
 ..................                          ...............................
 : proca          :    CRTSRVPGM             : procédure ! variables   ! P :
 :  VAR1  IMPORT  :                          :-----------!-------------! u :
 :  VAR2  EXPORT  :       SRVPGM(essaisrv)   : proca     ! VAR2        ! b :
 :................:                          : procz     !             ! l :
 MODB                     MODULE(MODA +      :           !             ! i :
 ..................              MODB +      :------------------------ ! c :
 : procb          :              MODC)       : ______________________  ! - :
 :  VAR1  EXPORT  :                          : | proca VAR1 IMPORT  |  ! P :
 :................:       EXPORT(*SRCFILE)   : |_______VAR2 EXPORT__|  ! r :
 MODC                                        : | procb VAR1 EXPORT  |  ! i :
 ..................       SRCFILE(QSRVSRC)   : |____________________|  ! v :
 : procz          :       SRCMBR(*SRVPGM)    : | procz  callb procb |  ! é :
 :   CALLB procb  :                          : |____________________|  !   :
 :................:                          :.............................:


|    Changer de couleur
Il existe donc un langage de liage (langage interprété, type de source BND)
 Constitué de trois commandes à la syntaxe CL (F4 possible)
 
 STRPGMEXP
 EXPORT        <-- répétée x fois.
 ENDPGMEXP
 
 et ce sont les coordonnées du membre source contenant ce langage que l'on
  indique sur la commande CRTSRVPGM (paramètre SRCFILE, SRCMBR).
 
 Exemple :   (pour rendre privées procb et VAR1)
 
         commande                      | QSRVSRC mbr :ESSAISRSV       
         CRTSRVPGM SRVPGM(ESSAISRV)    |  STRPGMEXP
                   MODULE(MODA MODB +  |  EXPORT     SYMBOL('proca')
                           MODC)       |  EXPORT     SYMBOL('procz')
                   EXPORT(*SRCFILE)    |  EXPORT     SYMBOL(VAR2)
                   SRCFILE(QSRVSRC)    |  ENDPGMEXP
                   SRCMBR(*SRCMBR)     |
 
  SYMBOL représente soit le nom d'une procédure, soit le nom d'une variable
  Tout ce qui n'est pas indiqué par EXPORT est privé.


|    Changer de couleur
 STRPGMEXP (détail)
                    PGMLVL     *CURRENT                  *CURRENT,*PRV
                    LVLCHK     *YES                      *YES,*NO
                    SIGNATURE  *GEN                      *GEN,valeur-alpha
 
  le système génère une signature identifiant le programme de service,
   assez identique dans le principe au contrôle de niveau exercé sur
   les fichiers.
 
  Tout programme utilisant une procédure d'un programme de service, mémorise
   la signature du *SRVPGM, et effectue un contrôle lors de l'utilisation.
 
  Le paramètre SIGNATURE permet d'imposer une signature particulière
   (pour avoir toujours la même en cas de recompliation)
 
  Le paramètre LVLCHK(*NO) demande au système de générer une signature
   nulle indiquant que les programmes utilisant une des procédures ne
   doivent pas contrôler lors de l'appel.
 
 Le paramètre PGMLVL(*PRV) permet le support des signatures précédentes, en
  cas de nouvelle version du programme de service :
 


|    Changer de couleur
 Si vous ajoutez une procédure (procd) au programme de service, il faut :
 
  a/ compiler la nouvelle procédure (= nouveau module)
  b/ re-lier le programme de service
 
 Le but est d'éviter de re-lier tous les programmes utilisant ce *SRVPGM
  (ce qui serait obligatoire si nous laissons les valeurs par défaut)
 
 Solution: générer une nouvelle signature, tout en conservant l'ancienne.
 
             STRPGMEXP
             EXPORT     SYMBOL('proca')
             EXPORT     SYMBOL('procz')
             EXPORT     SYMBOL(VAR2)
             EXPORT     SYMBOL('procd')
             ENDPGMEXP
 /* génération d'une signature identique à la précédente */
             STRPGMEXP  PGMLVL(*PRV)
             EXPORT     SYMBOL('proca')
             EXPORT     SYMBOL('procz')
             EXPORT     SYMBOL(VAR2)
             ENDPGMEXP


|    Changer de couleur
 Pour terminer, n'oubliez pas qu'une procédure d'un programme de service
  peut utiliser une procédure d'un autre programme de service.
 
 CRTSRVPGM      SRVPGM( -- )
                MODULE( -- )
                BNDSRVPGM( -- )  <- autres *SRVPGM liés.
 
 et que si vous utilisez souvent les mêmes modules, les mêmes *SRVPGM
  vous avez intérêt à créer une BINDING DIRECTORY.
 
 CRTBNDDIR  BNDDIR(TOTO)
 ADDBNDDIRE BNDDIR(TOTO) OBJ(MODB *MODULE)
 ADDBNDDIRE BNDDIR(TOTO) OBJ(MONSRV *SRVPGM)
 
 CRTSRVPGM SRVPGM(ESSAISRV) MODULE(MODA MODC) BNDDIR(TOTO)
 
 Toute référence non résolue lors du liage sera recherchée dans la Binding
  Directory indiquée sur la commande CRTPGM,CRTSRVPGM (paramètre BNDDIR),
  ce qui évite de lister à chaque fois tous les *SRVPGM utilisés.
 
 Le système utilise toujours un répertoire QUSAPIBD qui référence toutes
  les APIs ILE(inutile donc de lister les *SRVPGM pour ces APIs)


|    Changer de couleur
 
 
 
 
      Mise en évidence de tous ces concepts à travers la commande
 
 
           DSPSRVPGM
 
 
           (DSPPGM fournit des informations analogues)
 
 
 
 
 
 
 
 
 
                                                                A suivre...
 


|    Changer de couleur
 DSPSRVPGM QLEAWI   Informations sur un programme de service 
                                                            Ecran 1 sur 10 
 Programme de service . . . . . . . . . . :   QLEAWI     
   Bibliothèque . . . . . . . . . . . . . :     QSYS       
 Propriétaire . . . . . . . . . . . . . . :   QSECOFR    
 Attribut du programme de service . . . . :              
 Détail . . . . . . . . . . . . . . . . . :   *BASIC     
 
 Informations sur la création du programme de service: 
   Date et heure de création du programme de service:   04/11/94  13:16:39 
   Fichier source d'exportation . . . . . . . . . . :   QSRVSRC    
     Bibliothèque . . . . . . . . . . . . . . . . . :     QBUILDSS1  
   Membre d'exportation . . . . . . . . . . . . . . :   QLEAWI     
   Attribut du groupe d'activation  . . . . . . . . :   *CALLER    
   Groupe d'activation partagé  . . . . . . . . . . :   *NO   
   Signature d'exportation en cours . . . . . . . . :   44F70FABA08585397BDF0CF1
95F82EC1 
   Profil utilisateur . . . . . . . . . . . . . . . :   *USER  
                                     ############################## A suivre... 
 Appuyez sur ENTREE pour continuer.  #      Signature générée.    # 
                                     ############################## 
 F3=Exit   F11=Signature alphanumérique   F12=Annuler 


|    Changer de couleur
                    Informations sur un programme de service 
                                                            Ecran 2 sur 10 
 Programme de service . . . . . . . . . . :   QLEAWI     
   Bibliothèque . . . . . . . . . . . . . :     QSYS       
 Propriétaire . . . . . . . . . . . . . . :   QSECOFR    
 Attribut du programme de service . . . . :              
 Détail . . . . . . . . . . . . . . . . . :   *SIZE      
 
 Taille du programme de service (décomprimé) et maxima: 
   Taille totale du programme de service (ko): 
     En cours . . . . . . . . . . . . . . . . . . . :   323         
     Maximale . . . . . . . . . . . . . . . . . . . :   26214400    
   Nombre de modules:                                                       
     En cours . . . . . . . . . . . . . . . . . . . :   21 <- modules liés  
     Maximal  . . . . . . . . . . . . . . . . . . . :   16381               
   Nombre de programmes de service: 
     En cours . . . . . . . . . . . . . . . . . . . :   5  <- autres *SRVPGM
     Maximal  . . . . . . . . . . . . . . . . . . . :   32766     utilisés 
                                                                            ... 
 Appuyez sur ENTREE pour continuer. 
 
 F3=Exit   F12=Annuler 


|    Changer de couleur
                    Informations sur un programme de service 
                                                            Ecran 3 sur 10 
 Programme de service . . . . . . . . . . :   QLEAWI     ################ 
   Bibliothèque . . . . . . . . . . . . . :     QSYS     #              # 
 Propriétaire . . . . . . . . . . . . . . :   QSECOFR    #  détail      # 
 Attribut du programme de service . . . . :              #   des        # 
 Détail . . . . . . . . . . . . . . . . . :   *MODULE    #   modules    # 
                                                         #   liés.      # 
 Indiquez vos options, puis appuyez sur ENTREE.          #              # 
   5=Afficher description   6=Imprimer description       ################ 
 
                                            Date de      Niveau     Données de 
 Opt  Module      Bibliothèque  Attribut    création  optimisation  débogage 
      QLEDEH       QBUILDSS1    CLE         04/08/94  *FULL         *NO        
      QLETOOL      QBUILDSS1    CLE         04/08/94  *FULL         *NO        
      QLEPM        QBUILDSS1    CLE         04/08/94  *FULL         *NO        
      QLETREC      QBUILDSS1    CLE         04/08/94  *FULL         *NO        
      QLESCAW      QBUILDSS1    CLE         04/08/94  *FULL         *NO        
      QLESC        QBUILDSS1    CLE         04/08/94  *FULL         *NO        
      QLERTX       QBUILDSS1    CLE         04/08/94  *FULL         *NO        
                                                                    A suivre... 
 F3=Exit   F12=Annuler   F17=Début   F18=Fin 


|    Changer de couleur
                    Informations sur un programme de service 
                                                            Ecran 4 sur 10 
 Programme de service . . . . . . . . . . :   QLEAWI    ################### 
   Bibliothèque . . . . . . . . . . . . . :     QSYS    # Détail des      # 
 Propriétaire . . . . . . . . . . . . . . :   QSECOFR   # *SRVPGM         # 
 Attribut du programme de service . . . . :             # --------------- # 
 Détail . . . . . . . . . . . . . . . . . :   *SRVPGM   # notamment leurs # 
                                                        # signatures      # 
 Indiquez vos options, puis appuyez sur ENTREE.         # au moment       # 
   5=Afficher                                           # du liage avec   # 
                                                        #  QLEAWI.        # 
      Programme                                         #                 # 
 Opt  de service  Bibliothèque  Signature               ################### 
      QLETPS       QSYS         D8D3C5E3D7E240404040404040404040 
      QLECWI       QSYS         FFB714CFF747ECD0DB3DFAFB271C4C8E 
      QLESSNFP     QSYS         D8D3C5E2E2D5C6D74040404040404040 
      QC2UTIL1     QSYS         CB1F803582C31AC25B4DCBDD1B6D0948 
      QC2UTIL2     QSYS         A11653CED63C16950B06C44C1F6E95C2 
 
 
                                                                            Fin 
 F3=Exit   F4=Invite   F11=Signature alphanumérique   F12=Annuler   F17=Début 


|    Changer de couleur
                    Informations sur un programme de service 
                                                            Ecran 5 sur 10 
 Programme de service . . . . . . . . . . :   QLEAWI     
   Bibliothèque . . . . . . . . . . . . . :     QSYS       
 Propriétaire . . . . . . . . . . . . . . :   QSECOFR    
 Attribut du programme de service . . . . :              
 Détail . . . . . . . . . . . . . . . . . :   *PROCEXP   
 
                          Exportations de procédure : 
 
 Q LE leDefaultEh                                                               
 CEEMRCR                      ###############################                   
 CEEMGET                      #                             #                   
 CEEMOUT                      #  Liste des procédures       #                   
 CEEMSG                       #        publiques.           #                   
 CEENCOD                      #                             #                   
 CEEDCOD                      ###############################                   
 Q LE leBdyCh                                                                   
 Q LE leBdyEpilog                                                               
 CEE4FCB                                                                        
                                                                    A suivre... 
 F3=Exit   F12=Annuler   F17=Début   F18=Fin 


|    Changer de couleur
                    Informations sur un programme de service 
                                                            Ecran 6 sur 10 
 Programme de service . . . . . . . . . . :   QLEAWI     
   Bibliothèque . . . . . . . . . . . . . :     QSYS       
 Propriétaire . . . . . . . . . . . . . . :   QSECOFR    
 Attribut du programme de service . . . . :              
 Détail . . . . . . . . . . . . . . . . . :   *DTAEXP    
 
                           Exportations de données : 
 
 Q LE AG_user_rc              ###############################                   
 Q LE AG_prod_rc              #                             #                   
                              #  Liste des variables        # 
                              #   globales publiques.       # 
                              #                             # 
                              ############################### 
 
 
 
 
                                                                            Fin 
 F3=Exit   F12=Annuler   F17=Début   F18=Fin 


|    Changer de couleur
 
 Il est possible de ne modifier qu'une seule procédure (phase de liage)
    avec UPDPGM, UPDSRVPGM.
 
 Si vous modifiez le code de proca
 
    a/ modif du source, recompilation
                        (l'ancien module est placé dans QRPLOBJ)
 
    b/ UPDSRVPGM   SRVPGM(ESSAISRV)
                   MODULE(MODA)
                   EXPORT(*CURRENT)
 
 
        = liage de la nouvelle version du module MODA dans le *SRVPGM
 
          (avec EXPORT(*CURRENT), la signature est inchangée)
 
 
   UPDPGM fonctionne de la même manière, sans le paramètre EXPORT
      (les programmes ILE n'ayant pas de signature)
 


|    Changer de couleur
 
 DSPPGMREF qui fournissait déja la liste des programmes utilisés (par CALL)
     fournit maintenant la liste des *SRVPGM utilisés.
     si vous renseignez le paramètre OBJTYPE à *ALL (*PGM par défaut).
 
     Voir la variable WHOTYP de QADSPPGM (10 alpha)
 
          contenant le type d'objet en clair (*SRVPGM, *PGM, *FILE ...)
 
 L'API QBNLPGMI renvoie des infos concernant un pgm ILE, dans un *USRSPC.
 
       format PGML0100 = liste des modules liés
              PGML0200 = liste des *SRVPGM utilisés.
 
 L'API QBNLSPGM renvoie des infos concernant un *SRVPGM, dans un *USRSPC.
 
       format SPGL0100 = liste des modules liés
              SPGL0200 = liste des *SRVPGM utilisés
              SPGL0600 = liste des procédures publiques
              SPGL0700 = liste des variables globales publiques
              SPGL0800 = liste des signatures
 


|    Changer de couleur
 
V3R60 :
 
 Nouvelle commande RTVBNDSRC permettant de retrouver le source (BND)
  ayant servi à la création d'un programme de service.
 
 Nouvelle option COPYRIGHT() sur la spécif H en RPG-IV
 
 Les noms de procédures passent à 4096 caractères !!!!
 
 Il est alors admis de noter le nom de la procédure avec des caractères
  de remplacement dans le source BND:
 
  exemple : "ex>>>"    = la procédure commencant par 'ex'
 
            "<<<ex>>>" = la procédure contenant 'ex'
 
 Si plusieurs procédures correspondent à votre écriture, le lieur
  signale une erreur et le programme de service n'est pas créé.
 
 Si vous modifiez la racine ("exemp>>>" à la place de "ex>>>")
  le lieur génère une NOUVELLE SIGNATURE !





©AF400