V3R10 : ILE/COBOL Nouveau compilateur Cobol compatible ILE, apportant : - le support des procédures liées et des programmes de service ==> donc le support des variables externes (communes à toutes les procédures) ==> MAIS AUSSI, les fichiers EXTERNAL (accessibles par toutes les procédures) - Plusieurs procédures par source, dont des procédures imbriquées ==> gestion de l'accessibilité des programmes imbriqués ==> règles de visibilité des variables (variables globales/locales) - Diverses nouveautés comme : les pointeurs de procédures START WITH NO LOCK ACCEPT FROM DAY-OF-WEEK nouveau registre RETURN-CODE. |
support ILE: nouveau type de source CBLLE qui implique deux nouvelles commandes - CRTCBLMOD = création d'un module qui sera lié par CRTPGM - CRTBNDCBL = Création du module et lien (en une seule phase) nouvelle syntaxe : CALL LINKAGE TYPE IS ------------------------- nom-pgm. | | |--PROGRAM----| (1) | | |--PROCEDURE--| (2) (1) : Appel dynamique d'un programme externe. (2) : Appel statique d'une procédure liée, ou d'une procédure d'un programme de service. |
Cela peut être déclaré avant l'appel. Dans les SPECIAL-NAMES. |-PROGRAM---| LINKAGE TYPE IS -----------| |-- FOR nom-pgm. |-PROCEDURE-| puis en procédure division CALL "nom-pgm". ou bien dans la commande de création CRTCBLMOD ... LINKLIT(*PGM / *PRC) [même syntaxe pour la commande CRTBNDCBL] |
Autres nouveautés du CALL |
Programmes imbriqués : PROGRAM-ID.ESSAI. ESSAI ! CALL "A". CALL "B". ######################################### ! STOP RUN. # # ! PROGRAM-ID.A. # ..A.................................. # ! ! CALL "A1" # : : # ! ! EXIT PROGRAM. # : ..A1............................ : # ! ! PROGRAM-ID.A1. # : : : : # ! ! ! # : : ..A11..................... : : # ! ! ! PROGRAM-ID.A11. # : : : : : : # ! ! ! ! # : : : : : : # ! ! ! END PROGRAM A11. # : : :........................: : : # ! ! EXIT-PROGRAM. # : : : : # ! ! END PROGRAM A1. # : :..............................: : # ! END PROGRAM A. # :...................................: # ! PROGRAM-ID. B. # ...B................................. # ! ! # : : # ! ! # : : # ! ! # : : # ! END PROGRAM B. # :...................................: # END PROGRAM ESSAI. ######################################### |
ESSAI contient directement A et B indirectement A1 et A11. A et B sont contenus dans ESSAI. A1 est contenu dans A et contient directement A11, etc ... un programme n'est utilisable (par défaut) que par le programme qui le contient directement. A et B ne sont utilisables que par ESSAI (A1 et A11 ne peuvent pas appeler B) la récursivité n'étant pas admise A1 ne peut pas appeler A. Si vous spécifiez la clause COMMON sur PROGRAM-ID, le programme est utilisable par tous les programmes contenus dans celui auquel il est immédiatement rattaché. considérons le même enchainement avec tous les PROGRAM-ID COMMON. |
PROGRAM-ID.ESSAI. ESSAI ! CALL "A". CALL "B". ######################################### ! STOP RUN. # # ! PROGRAM-ID.A IS COMMON. # ..A.................................. # ! ! CALL "A1" # : : # ! ! EXIT PROGRAM. # : ..A1............................ : # ! ! PROGRAM-ID.A1 IS COMMON. # : : : : # ! ! ! # : : ..A11..................... : : # ! ! ! PROGRAM-ID.A11 IS COMMON. # : : : : : : # ! ! ! ! # : : : : : : # ! ! ! END PROGRAM A11. # : : :........................: : : # ! ! EXIT-PROGRAM. # : : : : # ! ! END PROGRAM A1. # : :..............................: : # ! END PROGRAM A. # :...................................: # ! PROGRAM-ID. B IS COMMON. # ...B................................. # ! ! # : : # ! ! # : : # ! END PROGRAM B. # :...................................: # END PROGRAM ESSAI. ######################################### ESSAI peut appeler A et B (toujours pas A1 et A11) MAIS B peut être appelé maintenant par A, A, A11. |
Syntaxe générale de PROGRAM-ID : IDENTIFICATION DIVISION.--------------------------------------------> PROGRAM-ID. nom-pgm.-------------------------------------------------> | | | | |--COMMON--| |---INITIAL--| >-AUTHOR---(etc...) INITIAL signifie qu'à chaque appel le programme est remis à l'état initial (variables réinitialisées, fichiers fermés en fin de programme, ...) Il est aussi remis à l'état initial en fin de RUN-UNIT COBOL. (il est conseillé de faire coïncider le RUN-UNIT et le groupe d'activation) ET lors d'un appel qui suit un ordre CANCEL. |
|
Exemple, soit le source suivant :
la compilation par CRTCBLMOD puis CRTSRVPGM donne ceci, seule la procédure de plus haut niveau (CALCUL) est exportable
ainsi qu'une procédure _reset permettant de "canceler" le programme, avec EXPORT(*ALL) sur CRTSRVPGM
ce source, s'il est compilé par CRTCBLMOD produit deux modules
liés par CRTSRVPGM, les deux sont accessibles
Règle de visibilité : 1/ Toute information est privée a/ déclaration de variable b/ déclaration de fichier 2/ vous pouvez partager une information entre programmes imbriqués (d'un même source, donc d'un même MODULE) -> ajoutez lors de la déclaration GLOBAL 3/ vous pouvez partager une information entre toutes les procédures d'un programme (Tous modules confondus, quelque soit le langage) -> ajoutez lors de la déclaration EXTERNAL Y compris pour les fichiers qui peuvent être ouvert par une procédure, lus par une deuxième et fermés par une troisième. |
Syntaxe de la clause FD. FD fichier --------------------------------------------------------------> | | | | |-IS EXTERNAL-| |--IS GLOBAL--| -------------------------------------------------------------------------- | | | | |-RECORD CONTAINS--x TO y -CHARACTERS-| |-LABEL RECORD----STANDARD--| |--OMITTED-| Syntaxe d'une définition de variable: XX nom-variable-----------------------------------------------------------> | | | | |--REDEFINES nom-variable2--| |-- IS EXTERNAL--| -------------------------------------------------------------------------- | | | | | | |--BLANKS WHEN ZERO-| |-- IS GLOBAL--| |-- PIC IS <image de la zone>-| |
Autres nouveautés : |
Ordre START complété avec la clause "WITH NO LOCK". (si le fichier n'est pas ouvert en I-O, cela provoque une erreur) |
|
Fonctions internes au COBOL (intrinsic) |