ILE Cobol

BoTTom   |    Changer de couleur
                             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.


|    Changer de couleur
 
 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.


|    Changer de couleur
 
 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]
 


|    Changer de couleur

 
 Autres nouveautés du CALL

USING <paramètre> BY REFERENCE (passage de paramètre par pointeur)

BY CONTENTS (pointeur, mais sur une copie)


BY VALUE (passage de paramètre par valeur)


GIVING/RETURNING <variable>

Ce dernier point (GIVING et RETURNING sont équivalent) permet
un appel à une fonction (par exemple dans un *SRVPGM).


LINKAGE TYPE PROCEDURE est obligatoire.


|    Changer de couleur

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


|    Changer de couleur
 
 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.


|    Changer de couleur
  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.


|    Changer de couleur
 
 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



|    Changer de couleur
 
 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.
 


|    Changer de couleur
 
 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>-|
 

|    Changer de couleur

  Autres nouveautés : 
  Support des pointeurs de procédure             USAGE IS PROCEDURE-POINTER.       puis           SET nom-ptr TO ENTRY ----------------------------------- nom-pgm.                                 |                               |                                 |                 |-PROCEDURE-| |                                 |-LINKAGE TYPE IS-            |-|                                                   |-PROGRAM-- |


nouveau registre RETURN-CODE
            renseignable par un pgm appelé             la valeur est automatiquement transférée dans le même registre            (RETURN-CODE) du pgm appelant             la variable est automatiquement déclarée globale.


|    Changer de couleur
 Ordre START complété avec la clause "WITH NO LOCK".
 
        (si le fichier n'est pas ouvert en I-O, cela provoque une erreur)
  

nouvelle Clause ACCEPT ... FROM DAY-OF-WEEK
             (1=lundi, 2=mardi, ....)     syntaxe complète de l'ordre ACCEPT pour date/heure :     ACCEPT var FROM DATE    |  77 var PIC 9(6)  [AAMMJJ]                           |   ACCEPT var FROM DAY     |  77 var PIC 9(5)  [AAJJJ date julienne]                           |   ACCEPT var FROM         |  77 var PIC 9(1)  [1=lundi,...]              DAY-OF-WEEK  |                           |   ACCEPT var FROM TIME    |  77 var PIC 9(8)  [HHMMSSCC]                           |                           


|    Changer de couleur


  Support des Dates/Heures/Timestamp       77 datwrk FORMAT OF -----DATE----- IS  'un format'.     |--TIME------|      |--TIMESTAMP-|   
cela remplace la clause PICTURE, USAGE DISPLAY par défaut
    format           '%d/%m/%y' : *DMY           '%y/%m/%d' : *YMD
'%y/%j' : *JUL
   '@Y-%m-%d' : *ISO
          '%d.%m.@Y' : *EUR                            
'%H:%M:%S' : *HMS
'%H.%M.%S' : *ISO
'%I:%M @p' : *USA



les fonctions intrinsic comme CONVERT-DATE-TIME
permettent de changer de format (voir ci-dessous)

|    Changer de couleur

Fonctions internes au COBOL (intrinsic)


ADD-DURATION (date/heure unité nombre)
ajoute un nombre d'unités à une date, une heure un horodatage

SUB-DURATION (date/heure unité nombre)
retranche un nombre d'unités à une date, une heure un horodatage

FIND-DURATION (date/heure date/heure unité)
calcul l'écart en nombre d'unités Unités : YEARS, MONTHS, DAYS
HOURS, MINUTES, SECONDS MICROSECONS, PICOSECONDS

Exemple :

MOVE FUNCTION ADD-DURATION(date1 MONTHS 3) to date2.

|    Changer de couleur

Liste des fonctions internes 
------------------------





©AF400