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