COBOL/400 et fichiers écrans

BoTTom |    Changer de couleur
 
                           COBOL/400 et DSPF
 
 
 Imaginons un fichier écran : interrogation article.
 
 Titre: aucune variable (constantes).
 
 F1   : zone-clé et indicateur 03 (F3) + ERRMSG conditionné par 40.
 
 F2   : toutes les zones en sortie (entrée = retour image 1)
 
Nous devrons déclarer le fichier écran de la manière suivante
 
      **********FICHIER ECRAN*****************
           SELECT ECRAN ASSIGN TO WORKSTATION-DSPFCBL
           ORGANIZATION TRANSACTION.
      **********************************************
       DATA DIVISION.
      *--------------
       FILE SECTION.
      *______________


|    Changer de couleur
       FD  ARTICLE LABEL RECORD STANDARD.
       01  ART.
       COPY DDS-ARTICLEF1 OF ARTICLEP1.
       FD  ECRAN LABEL RECORD STANDARD.
       01  ECR PIC X(110).               <-- lg du buffer le plus long
                                             (donnée par DSPFD)
 Il est préférable de définir les formats en Working storage,    Vous pouvez demander le COPY-DDS en FILE-SECTION, le système génére alors   des REDEFINES qui font que vous perdez la saisie de l'image 1 en mettant   en place les informations de l'image 2. (même espace mémoire).       *------------------------        WORKING-STORAGE SECTION.       *------------------------       * pas de COPY-DDS pour TITRE qui ne contient aucune variable       *       * F1 contenant des variables en entrée (clé) et en sortie (40)       *  est utilisé deux fois (dans deux espaces mémoire différents)        01  F1-in.        COPY DDS-F1-I OF DSPFCBL.        01  F1-out.        COPY DDS-F1-O OF DSPFCBL.


|    Changer de couleur
      *
      * F2 ne contenant que des variables en sortie,il n'est utilisé
      *  qu'une fois.
       01  F2.
       COPY DDS-F2-O OF DSPFCBL.
 
 
      le compilateur va générer         |      utilisation
    ----------------------------------- | ---------------------------------
      01 F1-in.                         |
         05 F1-I.                       |  READ ecran INTO F1-I format "F1".
            06 codart pic s9(6).        |   (read fichier)
            06 in03 pic 1 indicator 03. |
            06 in40 pic 1 indicator 40. |
      01 F1-out.                        |  WRITE ecr FROM F1-O format "F1".
         05 F1-O.                       |   (write 01-FD)
            06 in40 pic 1 indicator 40. |
      01 F2.                            |
         05 F2-O.                       |  WRITE ecr FROM F2-O format "F2".
            06 libart pic x(25).        |
            06 qtesto pic s9(7)v9(2).   |
               ... etc ...              |


|    Changer de couleur
 
 A noter que le COPY-DDS sera puissant avec MOVE CORRESPONDING si vous
   avez des noms de zone indentiques dans vos fichiers B de D et DSPF.
 
 C'est une facilité, pas une obligation.
 
   si vous avez sur une ligne 10 zones à afficher, alors que ces zones
    sont stockées dans votre programme sous forme de table.
 
   01 tab.
 
      05 zone pic s99999 OCCURS 10.
 
   N'écrivez pas de COPY-DDS pour ce format et utilisez :
 
      WRITE ecr FROM tab FORMAT "xxx".
 
   Ce qui compte c'est que LA STRUCTURE du buffer soit cohérente avec la
    définition du format du DSPF.
 
    cela ne sera vérifié qu'à l'exécution, le nom du format pouvant être
     lui-même dans une variable.


|    Changer de couleur
 
 Les indicateurs sont générées avec la clause PIC 1 en indiquant leur
  numéro système. (le mot INxx n'est pas réservé)
 
 Ils se manipulent par MOVE b"1"(vrai) to INxx, MOVE b"0" (faux) to INxx.
 
 Il est intéressant de noter que les indicateurs appartiennent au format,
  donc à la zone de groupe générée par le COPY-DDS
 
 Si la touche F3 (indicateur 03) est déclarée dans deux formats (F1 & F2)
  nous devrons les manipuler sous la forme    in03 OF F1-I, in03 OF F2-I.
 
  Cette situation nous pousse à gérer les indicateurs dans un espace
   mémoire à part, et tant qu'à faire dans une table
  (ce n'est pas une obligation)
 
  1/ Utilisation du mot-clé INDARA dans le DSPF (niveau fichier)
 
  2/ SELECT ecran ASSIGN TO WORKSTN-DSPF-SI  (SI = Séparate indicators)
 
  3/ en W-S  01 IND PIC1 OCCURS 99 INDICATOR 01 .
 


|    Changer de couleur
 Les indicateurs sont devenus uniques
 
     Ils se manipulent sous la forme MOVE b"1" to IND(03).
 
                                 ou  MOVE 3 TO X.
                                      MOVE b"1" to IND(x).
 
 Vous devez rajouter sur vos ordres d'E/S ecran (READ, WRITE, ...)
 
   ....     INDIC IND.  (ou INDICATOR, INDICATORS, nous sommes en COBOL)
 
 
  READ ecran INTO xxxxxx-I FORMAT "xxxxxx" INDIC ind.
 
  WRITE ecr FROM xxxxxx-O FORMAT "xxxxxx" INDIC ind.
 
 
 
 
 
 
 


|    Changer de couleur
 
En ce qui concerne les sous-fichiers :
 
Vous devez déclarer la zone contenant le N° de rang lors du SELECT.
 
      **********FICHIER ECRAN*****************
           SELECT ECRAN ASSIGN TO WORKSTATION-DSPFCBL-SI
           ORGANIZATION TRANSACTION ACCESS DYNAMIC RELATIVE KEY RANG .
      *------------------------
       WORKING-STORAGE SECTION.
      *------------------------
       01  TABINDC.
           02 IND PIC 1 OCCURS 99 INDIC 01.
       77  RANG PIC 9(4) .
      *
      * PHASE DE MISE A BLANC DU SOUS-FICHIER (format de contrôle)
      *
           MOVE ZERO TO RANG.
           MOVE b"0" TO IND(30) IND(31).  (condition SFLDSP/SFLDSPCTL)
                                          (rend SFLCLR vrai [N31].)
           WRITE ECR FROM FMTCTL-O FORMAT "FMTCTL" INDIC TABINDC.

|    Changer de couleur
 
      *
      * ECRITURE d'un enregistrement dans le sous-fichier
      *               (format d'enregistrement)
      *
       perform until eof
 
           ADD 1 TO RANG.
           MOVE b"1" to IND(30)   (condition SFLDSP)
           WRITE SUBFILE ECR FROM FMTENR FORMAT "FMTENR".
 
           READ fichier AT END set eof to true END-READ
 
       end-perform.
 
      *
      *  AFFICHAGE (format de contrôle)
      *
           MOVE B"1" TO IND(31).   (condition SFLDSPCTL)
           WRITE ECR FROM FMTCTL-O FORMAT "FMTCTL" INDIC TABINDC.    
 


|    Changer de couleur
      *
      * LECTURE des enregistrements modifiés
      *               (format d'enregistrement)
      *
 
       perform until eosubf
 
           READ SUBFILE ECRAN NEXT MODIFIED INTO FMTENR FORMAT "FMTENR"
                AT END set eosubf true END-READ
 
 
           EVALUATE option
                    WHEN = '2' PERFORM modif
                    WHEN = '5' PERFORM affich
           END-EVALUATE
 
       end-perform.
 
      * Acces direct
          Move x TO RANG.
          READ SUBFILE ECRAN INTO FMTENR FORMAT "FMTENR" INVALID KEY ...
 





©AF400