Nouveautés COBOL V2R20.

BoTTom |    Changer de couleur
                      Nouveautés COBOL V2R20.
 
 Nouveau type de données   USAGE IS POINTER 
 
                           (lg 16 car. = pointeur de variable)
 
  manipulable par SET 
 
 
      SET ----variable---------------TO ----ADRESS OF variable3--------
            !                     !       !                      !
            !-ADRESS OF variable2-!       !--variable4-----------!
                                          !                      !
                                          !--NULL/NULLS----------!
 
 Exemples:  SET var1 TO ADRESS OF var2 /var1 (usage pointer) contient
                                              l'adresse de var2
 
            SET ADRESS OF var1 TO var2 /var1 DECLARé EN LINKAGE SECTION
                                              "découpe" les données situées
                                               à l'adresse contenue dans
                                               var2.


|    Changer de couleur
 
 Nouvelles constantes figuratives NULL,NULLS 
 
           reservées pour les pointeurs
 
 Exemples:  SET var1 TO NULL           /var1 (usage pointer) contient
                                         l'adresse nulle (ne pointe plus
                                         sur une structure existante).
 
 Manipulation possible avec les USER-SPACE via API QUSPTRUS
 
  WORKING-STORAGE SECTION.
  1er paramètre 01 USRSPC-QUAL.
                   05 USER-SPACE pic X(10).
                   05 USER-SPACE-LIB pic X(10).
  2eme          77 POINTEUR USAGE IS POINTER VALUE NULL.
  LINKAGE SECTION.
                01 HEADER.
  PROCEDURE DIVISION.
                   CALL "QUSPTRUS USING  USRPSC-QUAL  POINTEUR.
                   SET ADRESS OF HEADER TO POINTEUR.
 


|    Changer de couleur
 
 Nouveaux registres
 
          ADRESS OF (vu plus haut)
 
          LENGTH OF -structure-
 
            renvoi la longueur d'une strcuture (zone ou zone de groupe).
 
 Pour se déplacer dans un user space :
 
           SET ADRESS OF LIST TO ADRESS OF LIST(LENGTH OF LIST + 1 : 1)
 
 Permet aussi de manipuler une liste chainée.
 
 01 LISTE-CHAINE.
    05 INFO PIC X(10).
    05 NUM  PIC 999V99.
    05 POSTE-SUIVANT USAGE IS POINTER.
 
    SET ADRESS OF LISTE-CHAINE TO POSTE-SUIVANT.
 


|    Changer de couleur
 
 Malheureusement le COBOL n'est pas capable de cobstruire cette liste,
  n'ayant pas la possibilité d'allouer dynamiquement de la mémoire.
 
 Il faut donc faire appel à un pgm C ou PASCAL pour construire la liste
  et renvoyer au cobol l'adresse du premier poste.
 
 Sur la prochaine version, peut-etre ??
 
 
 Nouveaux passages de paramètres
 
          CALL xxxx USING BY---REFERENCE-----param1 param2 ....
                             ! CONTENT ---!
 
               BY REFERENCE = passage d'adresse (comme avant)
 
                  CONTENT   = copie de la valeur et passage de l'adresse
                               de la copie
                              ===> transparant pour l'appellé
                              ===> pas de modification possible
 


|    Changer de couleur
 
 Exemples:
 
           CALL xxx USING V1 BY CONTENT V2 V3 BY REFERENCE V4 V5
 
 
           V1 passage d'adresse (BY REFERENCE implicite)
 
           V2,V3 passage par valeur.
 
           V4,V5 passage d'adresse.
 
 Nouvelles API pour les pgms COBOL permettant :
 
  de définir un RUN-UNIT (voir plus loin)   QLRCHGCM
 
             un pgm de gestion d'erreur. 
     retrouver le pgm de gestion d'erreur en cours.
 
 
 
 


|    Changer de couleur
 
 RUN UNIT: c'est un environement d'exécution de un à x pgm COBOL.
 
          par défaut le premier programme COBOL exécuté crée le RUN UNIT
            et devient le programme principal (MAIN PROGRAM)
 
          les pgms appellés à un niveau d'invocation inférieur sont vus
            comme des sous-programmes.
 
          cela pouvait poser des problèmes pour les retours de pgm.
 
          EXIT PROGRAM n'était valide que pour un "sous-programme".
 
          il fallait employer STOP-RUN ou GOBACK pour terminer un
           programme pouvant être appelé seul ou par un MAIN PROGRAM COBOL.
          STOP RUN désactivant le pgm,avait des inconvenients lors
           d'appels succesifs.
 
          L'API QLRCHGCM (1 seul paramètre :ERROR-CODE) permet de déclarer
           que le PROCHAIN programme COBOL à exécuter créera son propre
           RUN UNIT et sera donc vu comme un MAIN PROGRAM.
 


|    Changer de couleur
 
 Pgm de gestion d'erreur = ERROR HANDLER 
 
   Pgm chargé de répondre aux messages systèmes de type question comportant
    une réponse de type (C,G,D,F).Les autres erreur restent monitorées comme
    précedement.
   Il y a UN programme de gestion d'erreur par RUN UNIT !
 
  il doit recevoir: 
  LINKAGE SECTION.
  77 COBOL-MSG-ID pic X(7).
  77 REPONSES-VALIDES pic X OCCURS 6.
  01 PGM-EN-ERREUR.
     05 PGM-NAME pic X(10).
     05 PGM-LIB  pic X(10).
  77 système-MSG-ID pic X(7).
  77 MESSAGE-TEXTE  pic X(??).
  77 MSG-TEXTE-LG   pic S9(5) COMP-4.
  77 CODE-RETOUR pic X.
 
     Il doit renvoyer dans CODE-RETOUR une réponse valide ou blanc
      (traitement par dft)


|    Changer de couleur
APIs : QLRSETCE (définir un error handler)
 
       01 ERROR-HANDLER.
          05 PGM-NAME pic X(10).
          05 PGM-LIB pic X(10).
       77 RUN-UNIT pic X. "C" = en cours
                          "P" = en attente (le prochain).
       77 PGM-RTNLIB.
       01 ERROR-HANDLER-PRECEDENT.
          05 P-PGM-NAME pic X(10).
          05 P-PGM-LIB pic X(10).
       01 ERROR-CODE.
          (standard)
 
       QLRRTVCE (retrouve le error handler)
 
       01 ERROR-HANDLER.
          05 PGM-NAME pic X(10).
          05 PGM-LIB pic X(10).
       77 RUN-UNIT pic X. "C" = en cours
                          "P" = en attente (le prochain).
       01 ERROR-CODE.


|    Changer de couleur
 
 ET ENFIN: dé-édition des zones numériques éditéé.
 
  en clair :
 
  77 PRIX pic s9(5)V99.
 
  01 LIGNE.
     05 PRIX-EDIT pic ZZZZ9,99.
 
 il était possible de faire : MOVE PRIX TO PRIX-EDIT.
 
          PRIX-EDIT contenait : "    1,23" (assimilé à du caractère).
 
 il est désormait possible de faire: MOVE PRIX-EDIT TO PRIX.
 
 
   VRAI aussi avec le MOVE CORRESPONDING.
 
 
 
 





©AF400