--> RTVPFSRC (ecriture dans le membre source)

BoTTom |
       IDENTIFICATION DIVISION.
      *****-************************************************************
       PROGRAM-ID. RTVPFCBL.
       AUTHOR. AF400.
 
      *****-************************************************************
       ENVIRONMENT DIVISION.
      *****-************************************************************
 
      *****-************************
       CONFIGURATION SECTION.
      *****-************************
       SOURCE-COMPUTER. IBM-AS400.
       OBJECT-COMPUTER. IBM-AS400.
       SPECIAL-NAMES. DECIMAL-POINT IS COMMA.
 
      *****-************************
       INPUT-OUTPUT SECTION.
      *****-************************
       FILE-CONTROL.
           SELECT QADSPFFD   ASSIGN TO DATABASE-QADSPFFD
           ORGANIZATION RELATIVE.
 
           SELECT QAFDACCP   ASSIGN TO DATABASE-QAFDACCP
           ORGANIZATION RELATIVE.
 
           SELECT QDDSSRC    ASSIGN TO DATABASE-TEMPSRC
           ORGANIZATION INDEXED ACCESS DYNAMIC RECORD KEY IS SEQNBR
           WITH DUPLICATES.
 
      *****-************************************************************
       DATA DIVISION.
      *****-************************************************************
 
      *****-************************
       FILE SECTION.
      *****-************************
       FD QADSPFFD LABEL RECORD STANDARD.
       01 ENRFFD.
           COPY DDS-QWHDRFFD OF QADSPFFD.
 
       FD QAFDACCP LABEL RECORD STANDARD.
       01 ENRACC.
           COPY DDS-QWHFDACP OF QAFDACCP.


|
 
 
       FD QDDSSRC LABEL RECORD STANDARD.
       01 DATASRC.
           05 SEQNBR PIC 9(6).
           05 RESTE.
              06 DATENBR PIC 9(6).
              06 FILLER PIC X(5).
              06 A PIC X.
              06 C PIC X.
              06 FILLER PIC X(9).
              06 DATASRC2.
                 07 F PIC X.
                 07 FILLER PIC X.
                 07 NAME PIC X(10).
                 07 R PIC X.
                 07 LEN PIC X(5).
                 07 T PIC X.
                 07 D PIC X(2).
                 07 B PIC X.
                 07 FILLER PIC X(6).
                 07 FUNCTIONS PIC X(36).
 
 
 
      *****-************************
       WORKING-STORAGE SECTION.
      *****-************************
      * RESULTAT DE L'ANALYSE FORMAT DDS.
       01 TEXTE1.
          02 TEXTE11 PIC X(36).
          02 TEXTE12 PIC X(36).
 
       01 TEXTE2 REDEFINES TEXTE1.
          02 CARA OCCURS 72 PIC X.
 
      * TEXTE A ANALYSER ET A COPIER DANS LES FUNCTIONS.
       01 TEXT-ANALYSE.
          02 CARA-ANALYSE OCCURS 50 PIC X.
 
      * DOIT ON DOUBLER LES ' (O/N)
       77 DBL-COTE PIC X.
 
      * LONGUEUR DE TEXT-ANALYSE.


|
       77 LONG PIC 999.
 
      * POSITION POUR L'ANALYSE (RANG DE CARA)
       77 POS  PIC 999.
 
      * POSITION POUR CARA-ANALYSE
       77 POSANA  PIC 999.
 
      * N° DE RANG POUR LE FICHIER SOURCE
       77 NORANG  PIC 999999.
 
       PROCEDURE DIVISION.
      *****-************************************************************
       PRINCIPALE SECTION.
       DEBUT.
            OPEN INPUT QADSPFFD QAFDACCP I-O QDDSSRC.
            MOVE 1 TO POS.
            READ QDDSSRC LAST RECORD AT END
                 MOVE 0 TO SEQNBR.
            MOVE SPACES TO RESTE.
            ACCEPT DATENBR FROM DATE.
            MOVE "A" TO A.
            MOVE " " TO C.
 
      * TRAITEMENT CHEMIN D'ACCES  NIVEAU FICHIER
            READ QAFDACCP.
            IF APUNIQ = "Y" MOVE "UNIQUE" TO TEXTE1
                            PERFORM ECRITURE
                            GO TO FORMATS.
            IF APKEYO = "L" MOVE "LIFO" TO TEXTE1
                            PERFORM ECRITURE.
            IF APKEYO = "F" MOVE "FIFO" TO TEXTE1
                            PERFORM ECRITURE.
 
 
       FORMATS.
      * TRAITEMENT DU FORMAT
            READ QADSPFFD.
            MOVE "R" TO F.
            MOVE WHNAME TO NAME.
 
      * ECRITURE DU TEXTE FORMAT
            IF WHTEXT = SPACE  GO TO ECRIREF.
 


|
            MOVE "TEXT('" TO TEXTE1.
            MOVE 7 TO POS
 
            MOVE WHTEXT TO TEXT-ANALYSE.
            MOVE "O" TO DBL-COTE.
            PERFORM ANALYSE.
 
            MOVE "')" TO TEXT-ANALYSE.
            MOVE "N" TO DBL-COTE.
            PERFORM ANALYSE.
 
       ECRIREF.
            PERFORM ECRITURE.
 
 
 
 
 
      * TRAITEMENT DES ZONES
       ZONES.
            MOVE WHFLDI TO NAME.
            MOVE WHFLDT TO T.
            IF T = "A" OR T = "L" OR T = "T"
                       MOVE " " TO D ELSE MOVE WHFLDP TO D.
               IF D(1:1) = "0" MOVE SPACE TO D(1:1).
 
            IF T = "P" OR T = "B" MOVE WHFLDD TO WHFLDB.
            IF (T = "L" OR T = "T" OR T = "Z")
                    MOVE SPACES TO LEN
               ELSE MOVE WHFLDB TO LEN
 
               MOVE 1 TO POS.
               PERFORM UNTIL LEN(POS:1) GREATER THAN "0"
                 OR POS EQUAL 5
                  MOVE SPACE TO LEN(POS:1)
                  ADD 1 TO POS
               END-PERFORM
 
      * ECRITURE DU TEXTE ZONE.
            IF WHFTXT = SPACE  GO TO COLHDGZ.
 
            MOVE "TEXT('" TO TEXTE1.
            MOVE 7 TO POS
 


|
            MOVE WHFTXT TO TEXT-ANALYSE.
            MOVE "O" TO DBL-COTE.
            PERFORM ANALYSE.
 
            MOVE "')" TO TEXT-ANALYSE.
            MOVE "N" TO DBL-COTE.
            PERFORM ANALYSE.
            PERFORM ECRITURE.
 
       COLHDGZ.
      * ECRITURE DES COLHDG
            IF WHCHD1 = " " AND WHCHD2 = " " AND WHCHD3 = " "
                                              GO TO EDTCDEZ.
            MOVE "COLHDG('" TO TEXTE1.
            MOVE 9 TO POS.
 
            MOVE WHCHD1 TO TEXT-ANALYSE.
            MOVE "O" TO DBL-COTE.
            PERFORM ANALYSE.
 
            IF WHCHD2 = " " AND WHCHD3 = " "  GO TO EC-COLHDGZ.
 
            MOVE "' '" TO TEXT-ANALYSE.
            MOVE "N" TO DBL-COTE.
            PERFORM ANALYSE.
 
            MOVE WHCHD2 TO TEXT-ANALYSE.
            MOVE "O" TO DBL-COTE.
            PERFORM ANALYSE.
 
            IF WHCHD3 = " "  GO TO EC-COLHDGZ.
 
            MOVE "' '" TO TEXT-ANALYSE.
            MOVE "N" TO DBL-COTE.
            PERFORM ANALYSE.
 
            MOVE WHCHD3 TO TEXT-ANALYSE.
            MOVE "O" TO DBL-COTE.
            PERFORM ANALYSE.
 
       EC-COLHDGZ.
            MOVE "')" TO TEXT-ANALYSE.
            MOVE "N" TO DBL-COTE.
            PERFORM ANALYSE.


|
            PERFORM ECRITURE.
 
       EDTCDEZ.
            IF WHECDE = " " GO TO EDTWRDZ.
            MOVE "EDTCDE(" TO TEXTE1.
            MOVE 8 TO POS.
 
            MOVE WHECDE TO TEXT-ANALYSE.
            IF CARA-ANALYSE(2) = " "
               MOVE ")" TO CARA-ANALYSE(2)
            ELSE
               MOVE CARA-ANALYSE(2) TO CARA-ANALYSE(3)
               MOVE " " TO CARA-ANALYSE(2)
               MOVE ")" TO CARA-ANALYSE(4).
 
            MOVE "N" TO DBL-COTE.
            PERFORM ANALYSE.
            PERFORM ECRITURE.
 
       EDTWRDZ.
            IF WHEWRD = " " GO TO REFSHIFTZ.
            MOVE "EDTWRD('" TO TEXTE1.
            MOVE 9 TO POS.
 
            MOVE WHEWRD TO TEXT-ANALYSE.
            MOVE "O" TO DBL-COTE.
            PERFORM ANALYSE.
 
            MOVE "')" TO TEXT-ANALYSE.
            MOVE "N" TO DBL-COTE.
            PERFORM ANALYSE.
            PERFORM ECRITURE.
 
       REFSHIFTZ.
            IF WHSHFT = " " GO TO DATFMTZ.
            MOVE "REFSHIFT(" TO TEXTE1.
            MOVE WHSHFT TO CARA(10).
            MOVE ")" TO CARA(11).
            PERFORM ECRITURE.
 
       DATFMTZ.
            IF WHFMT = " " GO TO ECRIREZ.
            STRING  "DATFMT(" WHFMT ")" DELIMITED BY SIZE INTO TEXTE1.
            PERFORM ECRITURE.


|
            IF WHSEP > " "
              STRING  "DATSEP(" WHSEP ")" DELIMITED BY SIZE INTO TEXTE1
              PERFORM ECRITURE
            END-IF.
 
       ECRIREZ.
      * SI LA LIGNE N'A PAS  ENCORE ETE ECRITE
            IF WHFLDI = NAME  PERFORM ECRITURE.
 
 
            READ QADSPFFD AT END CONTINUE NOT AT END GO TO ZONES.
 
 
 
      *TRAITEMENT DES CLEFS.
            IF APKEYF = " " GO TO FERMETURE.
 
       CLEFS.
            MOVE "K" TO F.
            MOVE APKEYF TO NAME.
            IF APKSEQ = "D" MOVE "DESCEND" TO TEXTE1
                            PERFORM ECRITURE.
            IF APKZD  = "Z" MOVE "ZONE" TO TEXTE1
                            PERFORM ECRITURE.
            IF APKZD  = "D" MOVE "DIGIT" TO TEXTE1
                            PERFORM ECRITURE.
            IF APKSIN = "N" MOVE "UNSIGNED" TO TEXTE1
                            PERFORM ECRITURE.
            IF APKSIN = "S" MOVE "SIGNED" TO TEXTE1
                            PERFORM ECRITURE.
 
      * SI LA LIGNE N'A PAS  ENCORE ETE ECRITE
            IF NAME = APKEYF PERFORM ECRITURE.
 
            READ QAFDACCP AT END CONTINUE NOT AT END GO TO CLEFS.
 
       FERMETURE.
           CLOSE QADSPFFD QAFDACCP QDDSSRC.
           GOBACK.
 
 
 
 
       ANALYSE SECTION.


|
       DEBUT-ANALYSE.
      * TROUVE LA LONGUEUR DU TEXTE A ANALYSER.
           MOVE 50 TO LONG.
       TEST-LONG.
           IF LONG = 1 GO TO SCAN.
           IF CARA-ANALYSE(LONG) NOT = " " GO TO SCAN.
           SUBTRACT 1 FROM LONG.
           GO TO TEST-LONG.
       SCAN.
           MOVE 1 TO POSANA.
       TRANSF.
           IF POS NOT = 37  GO TO TRANSF1.
           MOVE CARA(36) TO CARA(37).
           MOVE "-" TO CARA(36).
           MOVE 38 TO POS.
       TRANSF1.
           MOVE CARA-ANALYSE(POSANA) TO CARA(POS).
           ADD 1 TO POS.
 
           IF NOT(CARA-ANALYSE(POSANA) = "'" AND DBL-COTE = "O")
                                                  GO TO TRANSF3.
           IF POS NOT = 37  GO TO TRANSF2.
           MOVE CARA(36) TO CARA(37).
           MOVE "-" TO CARA(36).
           MOVE 38 TO POS.
       TRANSF2.
           MOVE "'" TO CARA(POS).
           ADD 1 TO POS.
 
       TRANSF3.
           ADD 1 TO POSANA.
           IF POSANA NOT > LONG GO TO TRANSF.
 
 
       ECRITURE SECTION.
       DEBUT-ECRITURE.
           ADD 100 TO SEQNBR.
           MOVE TEXTE11 TO FUNCTIONS.
           IF POS NOT > 37 GO TO FIN-ECRITURE.
           WRITE DATASRC.
           MOVE SPACES TO DATASRC2.
           MOVE TEXTE12 TO FUNCTIONS.
           ADD 100 TO SEQNBR.
       FIN-ECRITURE.


|
           WRITE DATASRC.
           MOVE SPACES TO DATASRC2.
           MOVE " " TO TEXTE1.
           MOVE 1 TO POS.




©AF400