Les appels de pgm.

BoTTom |    Changer de couleur
 
Sur AS/400, un programme de n'importe quel langage peut appeler un pgm
 de n'importe quel langage.
 
 Ceci est particulièrement vrai pour RPG, COBOL, CLP.
 
 Le lien avec le pgm appelé est dynamique, c'est à dire :
 
         - que le programme appelant ne le connaît pas avant l'exécution.
 
         - le pgm appelé est recherché quand l'ordre CALL est rencontré.
 
           + adressage du pgm
 
           + vérification des droits
 
           + chargement en mémoire, réservation d'espace pour les variables.
 
           + seules les variables passées en tant que paramètres sont
                                                                partagées.
 
         - retour à l'instruction qui suit le CALL à la fin du pgm appelé.


|    Changer de couleur
  pgm appelant (A)
 
 
 
 
        ........................
        : mémoire              :
        : nocli : 00006        :
        : nomcli: Durant       :
        :----------------------:
        :                      :
        :  CALL PGMB           :
        :  PARM      NOCLI     :
        :                      :
        :                      :
        :                      :
        :                      :
        :                      :
        :......................:
 
 
 


|    Changer de couleur
  pgm appelant (A)
                                            Pgm B addressé (suivant *LIBL)
                                            chargé en mémoire si les droits
                                             sont corrects.
                                           ...........................
        ........................           : mémoire                 :
        : mémoire              :           :                         :
        : nocli : 00006        :           : nomcli:                 :
        : nomcli: Durant       :           : nocli.adr :             :
        :----------------------:           :-------------------------:
        :                      :           : LINKAGE SECTION         :
        :  CALL PGMB           :           :   77 NOCLI PIC 9(5)     :
        :  PARM      NOCLI     :           : (ou *ENTRY PLIST)       :
        :                      :           :                         :
        :                      :           :                         :
        :                      :           :                         :
        :                      :           :                         :
        :                      :           :                         :
        :......................:           :                         :
                                           :                         :
                                           :.........................:
                                                     pgm appelé (B)


|    Changer de couleur
  pgm appelant (A)
                                            Pgm B reçoit l'adresse
                                             du paramètre et non sa valeur.
 
                                           ...........................
        ........................           : mémoire                 :
        : mémoire              :           :                         :
 12345> : nocli : 00006        :           : nomcli:                 :
        : nomcli: Durant       :    /------> nocli.adr : x'12345'    :
        :----------------------:  /        :-------------------------:
        :                      :/          : LINKAGE SECTION         :
        :  CALL PGMB          /:           :   77 NOCLI PIC 9(5)     :
        :  PARM      NOCLI  /  :           :                         :
        :                      :           :                         :
        :                      :           :                         :
        :                      :           :                         :
        :                      :           :                         :
        :                      :           :                         :
        :......................:           :                         :
                                           :                         :
                                           :.........................:
                                                     pgm appelé (B)


|    Changer de couleur
  pgm appelant (A)
                                            Il travaille donc sur la mémoire
                                             du pgm appelant.
 
                                           ...........................
        ........................           : mémoire                 :
        : mémoire              :           :                         :
 12345> : nocli : 00001 <----\ :           : nomcli:                 :
        : nomcli: Durant       \           : nocli.adr : x'12345'    :
        :----------------------: \         :-------------------------:
        :                      :   \       : LINKAGE SECTION         :
        :  CALL PGMB           :     \     :   77 NOCLI PIC 9(5)     :
        :  PARM      NOCLI     :       \   :                         :
        :                      :         \ : PROCEDURE DIVISION      :
        :                      :           \  USING NOCLI.           :
        :                      :           : \                       :
        :                      :           :   \  MOVE 1 TO NOCLI.   :
        :                      :           :                         :
        :......................:           :                         :
                                           :                         :
                                           :.........................:
                                                     pgm appelé (B)


|    Changer de couleur
  pgm appelant (A)
                                            UNIQUEMENT pour les paramètres
                                             reçus.
 
                                           ...........................
        ........................           : mémoire                 :
        : mémoire              :           :                         :
        : nocli : 00001        :           : nomcli: Dupont' <----------|
        : nomcli: Durant       :           : nocli.adr : x'12345'    :  |
        :----------------------:           :-------------------------:  |
        :                      :           : LINKAGE SECTION         :  |
        :  CALL PGMB           :           :   77 NOCLI PIC 9(5)     :  |
        :  PARM      NOCLI     :           :                         :  |
        :                      :           : PROCEDURE DIVISION      :  |
        :                      :           :  USING NOCLI.           :  |
        :                      :           :                         :  |
        :                      :           :      MOVE 1 TO NOCLI.   :  |
        :                      :           :        MOVE 'Dupont'  -----|
        :......................:           :              to NOMCLI. :
                                           :                         :
                                           :.........................:
                                                     pgm appelé (B)


|    Changer de couleur
  pgm appelant (A)
                                            A la fin du pgm appelé,
                                             retour à l'instruction qui suit
                                             le CALL.
                                           ...........................
        ........................           : mémoire                 :
        : mémoire              :           :                         :
 nocli  : nocli : 00001        :           : nomcli: Dupont'         :
  = 1.  : nomcli: Durant       :           : nocli.adr : x'12345'    :
        :----------------------:           :-------------------------:
        :                      :           : LINKAGE SECTION         :
        :  CALL PGMB           :           :   77 NOCLI PIC 9(5)     :
        :  PARM      NOCLI     :           :                         :
        :  ....   <-------------\          : PROCEDURE DIVISION      :
        :  ....                :  \        :  USING NOCLI.           :
        :                      :    \      :                         :
        :                      :      \    :      MOVE 1 TO NOCLI.   :
        :                      :        \  :        MOVE 'Dupont'    :
        :......................:         \ :              to NOMCLI. :
                                           \ STOP RUN.               :
                                           :.........................:
                                                     pgm appelé (B)


|    Changer de couleur
 
  Le pgm appelé peut rendre la main à l'appelant sans pour autant être
   désactivé.
 
   en RPG   : RETRN/RETURN (LR OFF)
 
   en COBOL : EXIT PROGRAM.
 
              ATTENTION: ne fonctionne que si le pgm appelant est un COBOL.
 
                         GOBACK en cas de doute.
 
                         ou passer par un pgm COBOL "intermédiaire".
 
  en CL     : cela est malheureusement impossible (RETURN = ENDPGM)
 
              si cela est possible faire en sorte que ce soit le pgm CL
              qui appelle (d'entrée de jeu).
 
 
 
 


|    Changer de couleur
 
 Si le pgm n'est pas désactivé:
 
  toute la phase de chargement est inhibée.
 
  sa mémoire reste intacte (telle quelle lors du RETRN/EXIT PROGRAM)
 
  il reste positionné sur ces fichiers (lecture séquentielle)
 
  en RPG , le cycle ne passe pas par la phase d'ouverture des fichiers.
 
  en COBOL, conditionner OPEN avec un flag (puisque la mémoire est intacte)
 
 
 Pour désactiver les pgms appelés (et fermer les fichiers)
 
      utiliser le pgm suivant:    "MENAGE" (CLP)  PGM
                                                  RCLRSC LVL(*CALLER)
                                                  ENDPGM
 
  par un CALL avant la fin du programme appelant !
 


|    Changer de couleur
 
 Et ENFIN:
 
           si les deux programmes utilisent des fichiers écran (DSPF)
 
              les fichiers écrans sont suspendus et le système peut être
              "perdu" lors d'un réaffichage.
 
           Penser alors à indiquer RSTDSP(*YES) sur les commandes
 
                          CRTDSPF  ou CHGDSPF 
 
           Afin que le système sauvegarde la totalité de l'image avant
            suspension du DSPF et la restaure avant réaffichage.
 
           Cette manipulation n'est, bien entendu, pas gratuite,
            particulièrement avec des terminaux éloignés.
 
           C'est pourquoi la valeur par défaut est à *NO sur la commande
            de création.




©AF400