Rendre lisible les postes du jour­nal du DSPJRN

Rendre lisible les postes du jour­nal du DSPJRN

lun 4 février 2019 0 Par Ibmiiste

DSPJRN est la com­mande qui per­met de voir les postes du journal. 

Et ce que l’on aime, c’est de voir le conte­nu de l’en­re­gis­tre­ment concer­né. Mais voi­là l’en­re­gis­tre­ment est pla­cé brut dans une zone de type carac­tère, la plu­part du temps illi­sible s’il y a des champs en Deci­mal Packed. Voi­ci une petite com­mande qui per­met de le rendre lisible : DSPJRNPST

Elle se com­pose des étapes de créa­tion suivantes :

  • Créa­tion d’un membre source DDS à par­tir des carac­té­ris­tiques du fichier type1 d’une sor­tie de DSPJRN dans le der­nier champ,
  • et créa­tion du source DDS du fichier dont nous vou­lons les postes du journal,
  • Les deux membres sources consti­tués pré­cé­dem­ment sont conca­té­nés pour n’en for­mer qu’un seul,
  • Le source obte­nu est com­pi­lé pour obte­nir un fichier,
  • la com­mande DSPJRN est lan­cé et récu­père les postes insé­rés direc­te­ment en sor­tie dans le fichier consti­tué précédemment,
  • et pour finir un QUERY(obsolète, c’est une par­tie à revoir) pour voir le contenu

Le source de la com­mande DSPJRNPST :

             CMD        PROMPT('AFFICHAGE POSTE JOURNAL')
             PARM       KWD(JRN) TYPE(QJRN) MIN(1) PROMPT('JOURNAL')
 QJRN:       QUAL       TYPE(*NAME) LEN(10)
             QUAL       TYPE(*NAME) LEN(10) DFT(*CURLIB) SPCVAL((*CURLIB *CURLIB) (*LIBL)) +
                          PROMPT('BIBLIOTHÈQUE')
             PARM       KWD(FILE) TYPE(QFILE) MIN(1) PROMPT('FICHIER')
 QFILE:      QUAL       TYPE(*NAME) LEN(10)
             QUAL       TYPE(*NAME) LEN(10) DFT(*CURLIB) SPCVAL((*CURLIB *CURLIB)) +
                          PROMPT('BIBLIOTHÈQUE')
             PARM       KWD(FROMTIME) TYPE(QFROMTIME) PROMPT('DATE ET HEURE DE DÉBUT')
 QFROMTIME:  QUAL       TYPE(*NAME) LEN(10) DFT(*CURRENT) SPCVAL((*CURRENT '*CURRENT'))
             QUAL       TYPE(*NAME) LEN(8) PROMPT('HEURE DE DÉBUT')
             PARM       KWD(TOTIME) TYPE(QTOTIME) MIN(0) PROMPT('DATE ET HEURE DE FIN')
 QTOTIME:    QUAL       TYPE(*NAME) LEN(10) DFT(*NONE) SPCVAL((*NONE '*NONE'))
             QUAL       TYPE(*NAME) LEN(8) PROMPT('HEURE DE FIN')
             PARM       KWD(PGM) TYPE(QPGM) MIN(1) PROMPT('PROGRAMME')
 QPGM:       QUAL       TYPE(*NAME) LEN(10) DFT(*ALL) SPCVAL((*ALL))
             PARM       KWD(RCVRNGD) TYPE(QRCVRNG) MIN(1) PROMPT('PLAGE DE RÉCEPTEURS DE +
                          JOURNAL')
 QRCVRNG:    QUAL       TYPE(*NAME) LEN(10) DFT(*CURRENT) SPCVAL((*CURRENT *CURRENT))
             QUAL       TYPE(*NAME) LEN(10) DFT(*CURLIB) SPCVAL((*CURLIB *CURLIB) (*LIBL)) +
                          PROMPT('BIBLIOTHÈQUE')
             PARM       KWD(RCVRNGF) TYPE(QRCVRNG2)
 QRCVRNG2:   QUAL       TYPE(*NAME) LEN(10) DFT(*NONE) SPCVAL((*NONE '*NONE'))
             QUAL       TYPE(*NAME) LEN(10) SPCVAL((*CURLIB *CURLIB) (*LIBL)) +
                          PROMPT('BIBLIOTHÈQUE')
             PARM       KWD(FROMENTLRG) TYPE(*CHAR) LEN(25) DFT(*NONE) SPCVAL((*NONE '*NONE')) +
                          PROMPT('PREMIER NUM. SÉQ. MAXI')
             PARM       KWD(TOENTLRG) TYPE(*CHAR) LEN(25) DFT(*NONE) SPCVAL((*NONE '*NONE')) +
                          PROMPT('DERN. NUM. SÉQ. MAXI')
             PARM       KWD(JOB) TYPE(QJOB) MIN(1) PROMPT('TRAVAIL')
 QJOB:       QUAL       TYPE(*NAME) LEN(10) DFT(*ALL) SPCVAL((*ALL))
             QUAL       TYPE(*NAME) LEN(10) PROMPT('UTILISATEUR')
             QUAL       TYPE(*CHAR) LEN(6) RANGE(000000 999999) PROMPT('NUMÉRO')

Cette com­mande appelle le CLLE RTVJRNPST :

             PGM        PARM(&QJRN &QFILE &QFROMTIME &QTOTIME &PGM &QRCVRNG1 &QRCVRNG2 +
                          &FROMENTLRG &TOENTLRG &QJOB)
             DCL        VAR(&QJRN) TYPE(*CHAR) LEN(20)
             DCL        VAR(&JRN) TYPE(*CHAR) LEN(10)
             DCL        VAR(&BIBJRN) TYPE(*CHAR) LEN(10)
             DCL        VAR(&QFILE) TYPE(*CHAR) LEN(20)
             DCL        VAR(&FIC) TYPE(*CHAR) LEN(10)
             DCL        VAR(&FICJRN) TYPE(*CHAR) LEN(10)
             DCL        VAR(&BIBFIC) TYPE(*CHAR) LEN(10)
             DCL        VAR(&MBR) TYPE(*CHAR) LEN(10) VALUE('*FIRST')
             DCL        VAR(&BIBOBJ) TYPE(*CHAR) LEN(10)
             DCL        VAR(&OBJ) TYPE(*CHAR) LEN(10)
             DCL        VAR(&TYPOBJ) TYPE(*CHAR) LEN(7)
             DCL        VAR(&MBROBJ) TYPE(*CHAR) LEN(10)
             DCL        VAR(&OBJPATH) TYPE(*CHAR) LEN(50)
             DCL        VAR(&INCLOBJ) TYPE(*CHAR) LEN(8) VALUE('*INCLUDE')
             DCL        VAR(&SUBTREE) TYPE(*CHAR) LEN(5) VALUE('*NONE')
             DCL        VAR(&MASQUE) TYPE(*CHAR) LEN(450) VALUE('*')
             DCL        VAR(&INCMASQ) TYPE(*CHAR) LEN(8) VALUE('*INCLUDE')
             DCL        VAR(&QRCVRNG1) TYPE(*CHAR) LEN(20)
             DCL        VAR(&RCVRNG1) TYPE(*CHAR) LEN(10)
             DCL        VAR(&BIBRCV1) TYPE(*CHAR) LEN(10)
             DCL        VAR(&QRCVRNG2) TYPE(*CHAR) LEN(20)
             DCL        VAR(&RCVRNG2) TYPE(*CHAR) LEN(10)
             DCL        VAR(&BIBRCV2) TYPE(*CHAR) LEN(10)
             DCL        VAR(&FROMENTLRG) tyPE(*CHAR) LEN(25)
             DCL        VAR(&QFROMTIME) TYPE(*CHAR) LEN(20)
             DCL        VAR(&FROMTIME) TYPE(*CHAR) LEN(8)
             DCL        VAR(&FROMDATE) TYPE(*CHAR) LEN(12)
             DCL        VAR(&TOENTLRG) TYPE(*CHAR) LEN(25)
             DCL        VAR(&QTOTIME) TYPE(*CHAR) LEN(20)
             DCL        VAR(&TOTIME) TYPE(*CHAR) LEN(8)
             DCL        VAR(&TODATE) TYPE(*CHAR) LEN(12)
             DCL        VAR(&NBRENT) TYPE(*CHAR) LEN(10) value('*ALL')
             DCL        VAR(&CDJRN) TYPE(*CHAR) LEN(50)  value('*ALL')
             DCL        VAR(&ENTTYP) TYPE(*CHAR) LEN(50) value('*ALL')
             DCL        VAR(&QJOB) TYPE(*CHAR) LEN(26)
             DCL        VAR(&NUMJOB) TYPE(*CHAR) LEN(6)
             DCL        VAR(&NOMJOB) TYPE(*CHAR) LEN(10)
             DCL        VAR(&PRF) TYPE(*CHAR) LEN(10)
             DCL        VAR(&PGM) TYPE(*CHAR) LEN(10)
             DCL        VAR(&CCIDLRG) TYPE(*CHAR) LEN(24) value('*ALL')
             DCL        VAR(&DEPENT) TYPE(*CHAR) LEN(5) value('*ALL')
             DCL        VAR(&OUTFMT) TYPE(*CHAR) LEN(5) value('*CHAR')
             DCL        VAR(&JRNID) TYPE(*CHAR) LEN(5)
             DCL        VAR(&INCHIDENT) TYPE(*CHAR) LEN(4) value('*NO')
             DCL        VAR(&OUTPUT) TYPE(*CHAR) LEN(7) value('*')
             DCL        VAR(&OUTFILFMT) TYPE(*CHAR) LEN(6) value('*TYPE1')
             DCL        VAR(&BIBOUTF) TYPE(*CHAR) LEN(10) value('QTEMP')
             DCL        VAR(&OUTFILE) TYPE(*CHAR) LEN(10)
             DCL        VAR(&OUTMBR) TYPE(*CHAR) LEN(10) value('*FIRST')
             DCL        VAR(&REPLACE) TYPE(*CHAR) LEN(8) value('*REPLACE')
             DCL        VAR(&ENTDTALEN) TYPE(*CHAR) LEN(10) value('*CALC')
             DCL        VAR(&LNGENTDTA) TYPE(*CHAR) LEN(10)
             DCL        VAR(&LNGAENTDTA) TYPE(*CHAR) LEN(10)
             DCL        VAR(&NULLINDLEN) TYPE(*CHAR) LEN(10) value('*OUTFILFMT')
             DCL        VAR(&LNGNULLIND) TYPE(*CHAR) LEN(10)
             DCL        VAR(&LNGANULLIN) TYPE(*CHAR) LEN(10)
             DCL        VAR(&INCENT) TYPE(*CHAR) LEN(10) value('*CONFIRMED')
             DCL        VAR(&FROMENT) TYPE(*CHAR) LEN(16) value('*FIRST')
             DCL        VAR(&TOENT) TYPE(*CHAR) LEN(16) value('*LAST')
             DCL        VAR(&CMTCYCID) TYPE(*CHAR) LEN(16) value('*ALL')
             DCL        VAR(&ASPDEV) TYPE(*CHAR) LEN(9) value('*')
             DCL        VAR(&CMD) TYPE(*CHAR) LEN(500)
             DCL        VAR(&LNGCMD) TYPE(*DEC) LEN(15 5) VALUE(500)
             DCL        VAR(&TEXT) TYPE(*CHAR) LEN(50)
             DCL        VAR(&QUOTE) TYPE(*CHAR) LEN(3) VALUE('''')
             CHGVAR     VAR(&BIBJRN) VALUE(%SST(&qjrn 11 10))
             CHGVAR     VAR(&JRN) VALUE(%SST(&qjrn 1 10))
             CHGVAR     VAR(&BIBfic) VALUE(%SST(&qfile 11 10))
             CHGVAR     VAR(&fic) VALUE(%SST(&qfile 1 10))
             CHGVAR     VAR(&FROMDATE) VALUE(%SST(&QFROMTIME 1 10))
             CHGVAR     VAR(&FROMTIME) VALUE(%SST(&QFROMTIME 11 8))
             CHGVAR     VAR(&TODATE) VALUE(%SST(&QTOTIME 1 10))
             CHGVAR     VAR(&TOTIME) VALUE(%SST(&QTOTIME 11 8))
             CHGVAR     VAR(&RCVRNG1) VALUE(%SST(&QRCVRNG1  1 10))
             CHGVAR     VAR(&BIBRCV1) VALUE(%SST(&QRCVRNG1 11 10))
             CHGVAR     VAR(&RCVRNG2) VALUE(%SST(&QRCVRNG2  1 10))
             CHGVAR     VAR(&BIBRCV2) VALUE(%SST(&QRCVRNG2 11 10))
             CHGVAR     VAR(&NOMJOB) VALUE(%SST(&QJOB  1 10))
             CHGVAR     VAR(&PRF) VALUE(%SST(&Qjob  11 10))
             CHGVAR     VAR(&NUMJOB) VALUE(%SST(&QJOB 21 6))
             CHGVAR     VAR(&FICJRN) VALUE(%SST(&FIC 1 7) *TCAT 'JRN')
             DLTF       FILE(QTEMP/&FICJRN)
             MONMSG     MSGID(CPF0000)
             DLTF       FILE(QTEMP/QDDSSRC)
             MONMSG     MSGID(CPF0000)
             CRTSRCPF   FILE(QTEMP/QDDSSRC) RCDLEN(112)
             DLTF       FILE(QTEMP/RTVPFSRC1)
             MONMSG     MSGID(CPF0000)
 CHARGE:     DSPFD      FILE(&BIBFIC/&FIC) TYPE(*ACCPTH) OUTPUT(*OUTFILE) +
                          OUTFILE(QTEMP/RTVPFSRC1)
             DLTF       FILE(QTEMP/RTVPFSRC)
             MONMSG     MSGID(CPF0000)
             RTVMBRD    FILE(&BIBFIC/&FIC) TEXT(&TEXT)
             DSPFFD     FILE(&BIBFIC/&FIC) OUTPUT(*OUTFILE) OUTFILE(QTEMP/RTVPFSRC)
             MONMSG     MSGID(CPF0000) EXEC(DO)
                SNDUSRMSG  MSG(&BIBFIC *TCAT '/' *TCAT &FIC *BCAT 'n''existe pas')
                GOTO       CMDLBL(FIN)
             ENDDO
             ADDPFM     FILE(QTEMP/QDDSSRC) MBR(&FIC) TEXT(&TEXT) SRCTYPE(PF)
             OVRDBF     FILE(QDDSSRC) TOFILE(QTEMP/QDDSSRC) MBR(&FIC)
             CALL       PGM(RTVPFSRC)
             DLTOVR     FILE(*ALL)
             CPYF       FROMFILE(*libl/QDDSSRC) TOFILE(QTEMP/QDDSSRC) FROMMBR(ENTJRN) +
                          TOMBR(ENTJRN) MBROPT(*ADD) CRTFILE(*YES) FMTOPT(*MAP *DROP)
             CPYF       FROMFILE(QTEMP/QDDSSRC) TOFILE(QTEMP/QDDSSRC) FROMMBR(&FIC) +
                          TOMBR(ENTJRN) MBROPT(*ADD) FMTOPT(*MAP *DROP)
             CRTPF      FILE(QTEMP/&FICJRN) SRCFILE(QTEMP/QDDSSRC) SRCMBR(ENTJRN) SIZE(*NOMAX)
             CHGVAR     VAR(&CMD) VALUE('DSPJRN JRN(' *TCAT &BIBJRN *TCAT '/' *TCAT &JRN *TCAT +
                          ') FILE((' *TCAT &BIBFIC *TCAT '/' *TCAT &FIC *BCAT &MBR *TCAT ')) +
                          OUTPUT(*OUTFILE) OUTFILE(QTEMP/' *TCAT &FIC *TCAT ') +
                          ENTDTALEN(*CALC)')
             IF         COND(&NOMJOB *NE *ALL) THEN(CHGVAR VAR(&CMD) VALUE(&CMD *BCAT 'JOB(' +
                          *TCAT &NUMJOB *TCAT '/' *TCAT &PRF *TCAT '/' *TCAT &NOMJOB *TCAT +
                          ')'))
             IF         COND(&PGM *NE *ALL) THEN(CHGVAR VAR(&CMD) VALUE(&CMD *BCAT 'PGM(' +
                          *TCAT &PGM *TCAT ')'))
             IF         COND(&FROMENTLRG *NE '*NONE') THEN(CHGVAR VAR(&CMD) VALUE(&CMD *BCAT +
                          'FROMENTLRG(' *TCAT &FROMENTLRG *TCAT ')'))
             IF         COND(&TOENTLRG *NE '*NONE') THEN(CHGVAR VAR(&CMD) VALUE(&CMD *BCAT +
                          'TOENTLRG(' *TCAT &TOENTLRG *TCAT ')'))
             IF         COND(&FROMDATE *NE '*CURRENT') THEN(DO)
                CHGVAR     VAR(&CMD) VALUE(&CMD *BCAT 'FROMTIME(''' *TCAT &FROMDATE *BCAT +
                             &FROMTIME *TCAT ''')')
             ENDDO
             IF         COND(&TODATE *NE '*NONE') THEN(DO)
                CHGVAR     VAR(&CMD) VALUE(&CMD *BCAT 'TOTIME(''' *TCAT &TODATE *BCAT &TOTIME +
                             *TCAT ''')')
             ENDDO
             IF         COND(&RCVRNG1 *NE *CURRENT) THEN(do)
                CHGVAR     VAR(&CMD) VALUE(&CMD *BCAT 'RCVRNG(' *TCAT &BIBRCV1 *TCAT '/' *TCAT +
                             &RCVRNG1)
                IF         COND(&RCVRNG2 *NE '          ') THEN(CHGVAR VAR(&CMD) VALUE(&CMD +
                             *BCAT &BIBRCV2 *TCAT '/' *TCAT &RCVRNG2 ))
                CHGVAR     VAR(&CMD) VALUE(&CMD *TCAT ')')
             ENDDO
             CALL       PGM(QCMDEXC) PARM(&CMD &LNGCMD)
             CPYF       FROMFILE(QTEMP/&FIC) TOFILE(QTEMP/&FICJRN) MBROPT(*REPLACE) +
                          FMTOPT(*NOCHK) ERRLVL(*NOMAX)
             RUNQRY     QRYFILE((QTEMP/&FICJRN *FIRST)) RCDSLT(*YES)
 FIN:        ENDPGM

Le pro­gramme RTVPFSRC per­met de régé­né­rer un source à par­tir du DSPFFD d’un fichier :

     FQDDSSRC   O  A E             DISK
     F                                     RENAME(QDDSSRC:SOURCE)
     FRTVPFSRC  IP   E             DISK
     FRTVPFSRC1 IF   E             DISK
     DSRCDTA           DS
     DT                               1    DIM(80)
     DXHFLDP           DS
     DU                               1    DIM(2)
     DXHFLDB           DS
     DV                               1    DIM(5)
     DXHFLDD           DS
     DW                               1    DIM(2)
     DED1              S              1    DIM(10) CTDATA PERRCD(10)
      * format fichier
     C                   READ      RTVPFSRC1                              41
      *
     C                   MOVEA     *BLANKS       T
     C                   MOVEA     WHFLDI        T(19)
     C                   MOVEL     WHFLDP        XHFLDP
     C                   MOVEL     WHFLDB        XHFLDB
     C                   MOVEL     WHFLDD        XHFLDD
      * cadrage droite zero suppress
     C     U(1)          IFEQ      '0'
     C                   MOVE      ' '           U(1)
     C                   ENDIF
     C                   DO        4             X                 2 0
     C                   Z-ADD     1             Y                 2 0
     C     V(X)          LOOKUP    ED1(Y)                                 40
     C  N40              MOVE      ' '           V(X)
     C                   ENDDO
     C     W(1)          IFEQ      '0'
     C                   MOVE      ' '           W(1)
     C                   ENDIF
     C                   SELECT
      * zone date
     C     WHFLDT        WHENeq    'L'
     C                   MOVE      *blank        XHFLDD
     C                   MOVE      *blank        XHFLDP
     C                   MOVE      *blank        wHFLDD
     C                   MOVE      *blank        wHFLDP
      * zone horodatage
     C     WHFLDT        WHENeq    'T'
     C                   MOVE      *blank        XHFLDD
     C                   MOVE      *blank        XHFLDP
     C                   MOVE      *blank        wHFLDD
     C                   MOVE      *blank        wHFLDP
      * zone alpha
     C     WHFLDD        WHENEQ    0
     C                   MOVEA     XHFLDB        T(30)
     C                   MOVEA     '  '          T(36)
      * zone signée
     C     WHFLDD        WHENEQ    WHFLDB
     C                   MOVEA     XHFLDD        T(33)
     C                   MOVEA     XHFLDP        T(36)
      * zone packee
     C     WHFLDD        WHENNE    WHFLDB
     C                   MOVEA     XHFLDD        T(33)
     C                   MOVEA     XHFLDP        T(36)
     C                   ENDSL
     C                   MOVEA     WHFLDT        T(35)
     C                   MOVE      *BLANKS       WKA036           36
      * texte zone
     C     WHFTXT        IFNE      *BLANKS
     C     '''':' '      XLATE     WHFTXT        WHFTXT
     C     ' '           CHECKR    WHFTXT        WKN002            2 0
     C     WKN002        IFGT      28
     C                   MOVEL     WHFTXT        WKA027           27
     C                   MOVE      WHFTXT        WKA023           23
     C     'TEXT('''     CAT       WKA027:0      WKA036
     C     WKA036        CAT       '+':0         WKA036
     C                   MOVEA     WKA036        T(45)
     C                   EXSR      WTR
     C                   MOVE      *BLANKS       WKA036
     C     WKA023        CAT       ''')':0       WKA036
     C                   MOVEA     WKA036        T(45)
     C                   EXSR      WTR
     C                   ELSE
     C     'TEXT('''     CAT       WHFTXT:0      WKA036
     C     WKA036        CAT       ''')':0       WKA036
     C                   MOVEA     WKA036        T(45)
     C                   EXSR      WTR
     C                   ENDIF
     C                   ENDIF
      * colhdg
     C     WHCHD1        IFNE      *BLANKS
     C     '''':' '      XLATE     WHCHD1        WHCHD1
     C                   MOVE      *BLANKS       WKA036
     C     'COLHDG('''   CAT       WHCHD1:0      WKA036
     C     WHCHD2        IFNE      *BLANKS
     C     WKA036        CAT       ''' +':0      WKA036
     C                   ELSE
     C     WKA036        CAT       ''')':0       WKA036
     C                   ENDIF
     C                   MOVEA     WKA036        T(45)
     C                   EXSR      WTR
     C                   ENDIF
     C     WHCHD2        IFNE      *BLANKS
     C     '''':' '      XLATE     WHCHD2        WHCHD2
     C                   MOVE      *BLANKS       WKA036
     C     ''''          CAT       WHCHD2:0      WKA036
     C     WHCHD3        IFNE      *BLANKS
     C     WKA036        CAT       ''' +':0      WKA036
     C                   ELSE
     C     WKA036        CAT       ''')':0       WKA036
     C                   ENDIF
     C                   MOVEA     WKA036        T(45)
     C                   EXSR      WTR
     C                   ENDIF
     C     WHCHD3        IFNE      *BLANKS
     C     '''':' '      XLATE     WHCHD3        WHCHD3
     C                   MOVE      *BLANKS       WKA036
     C     ''''          CAT       WHCHD3:0      WKA036
     C     WKA036        CAT       ''')':0       WKA036
     C                   MOVEA     WKA036        T(45)
     C                   EXSR      WTR
     C                   ENDIF
      * Format de la date.
     C     WHFMT         IFNE      *BLANKS
     c     WHFLDT        andeq     'L'
     C                   eval      WKA036='DATFMT('+WHFMT+')'
     C                   MOVEA     WKA036        T(45)
     C                   EXSR      WTR
     C                   ENDIF
      * Format de l'heure
     C     WHFMT         IFNE      *BLANKS
     c     WHFLDT        andeq     'T'
     C                   eval      WKA036='TIMFMT('+WHFMT+')'
     C                   MOVEA     WKA036        T(45)
     C                   EXSR      WTR
     C                   ENDIF
      *
     CLR                 EXSR      ROOT
      *
     CSR   WTR           BEGSR
     C                   ADD       10            SRCSEQ
     C                   MOVEA     'A'           T(6)
     C                   WRITE     SOURCE
     C                   MOVEA     *BLANKS       T
     CSR                 ENDSR
      *
     CSR   ROOT          BEGSR
     C     REDO          TAG
     C     APKEYF        IFNE      *BLANKS
     C                   MOVEA     'K'           T(17)
     C                   MOVEA     APKEYF        T(19)
     C     APKSEQ        IFEQ      'D'
     C                   MOVEA     'DESCEND'     T(45)
     C                   ENDIF
     C                   EXSR      WTR
     C                   ENDIF
     C     *IN41         IFNE      '1'
     C                   READ      RTVPFSRC1                              41
     C  N41              GOTO      REDO
     C                   ENDIF
     CSR                 ENDSR
**
 123456789

Et pour finir la pre­mière par­tie d’un source DDS, ENTJRN, cor­res­pon­dant au fichier TYPE1 d’une sor­tie de DSPJRN.

     A          R QJORDJE
     A                                      TEXT('Journal Entries')
     A            JOENTL         5S 0       TEXT('Length of entry')
     A                                      COLHDG('ENTRY' +
     A                                      'LENGTH')
     A            JOSEQN        10S 0       TEXT('Sequence number')
     A                                      COLHDG('SEQUENCE' +
     A                                      'NUMBER')
     A            JOCODE         1A         TEXT('Journal Code')
     A                                      COLHDG('CODE')
     A            JOENTT         2A         TEXT('Entry Type')
     A                                      COLHDG('TYPE')
     A            JODATE         6A         TEXT('Date of entry: Job date for+
     A                                      mat')
     A                                      COLHDG('DATE')
     A            JOTIME         6S 0       TEXT('Time of entry: hour/minute/+
     A                                      second')
     A                                      COLHDG('TIME')
     A            JOJOB         10A         TEXT('Name of Job')
     A                                      COLHDG('JOB' +
     A                                      'NAME')
     A            JOUSER        10A         TEXT('Name of User')
     A                                      COLHDG('USER' +
     A                                      'NAME')
     A            JONBR          6S 0       TEXT('Number of Job')
     A                                      COLHDG('JOB' +
     A                                      'NUMBER')
     A            JOPGM         10A         TEXT('Name of Program')
     A                                      COLHDG('PROGRAM' +
     A                                      'NAME')
     A            JOOBJ         10A         TEXT('Name of Object')
     A                                      COLHDG('OBJECT' +
     A                                      'NAME')
     A            JOLIB         10A         TEXT('Objects Library')
     A                                      COLHDG('LIBRARY' +
     A                                      'NAME')
     A            JOMBR         10A         TEXT('Name of Member')
     A                                      COLHDG('MEMBER' +
     A                                      'NAME')
     A            JOCTRR        10S 0       TEXT('Count or relative record nu+
     A                                      mber changed')
     A                                      COLHDG('COUNT/' +
     A                                      'RRN')
     A            JOFLAG         1A         TEXT('Flag: 1 or 0')
     A                                      COLHDG('FLAG')
     A            JOCCID        10S 0       TEXT('Commit cycle identifier')
     A                                      COLHDG('COMMIT' +
     A                                      'CYCLE ID')
     A            JOINCDAT       1A         TEXT('Incomplete Data: 1 or 0')
     A                                      COLHDG('INCOMPLETE' +
     A                                      'DATA')
     A            JOMINESD       1A         TEXT('Minimized ESD: 0, 1, or 2')
     A                                      COLHDG('MINIMIZED' +
     A                                      'ESD')
     A            JORES          6A         TEXT('Not used')
     A                                      COLHDG('RESERVED')

En der­nier, le pro­gramme de com­pi­la­tion des dif­fé­rents sources. N’ou­blier pas de rem­pla­cer « USERBIB » par la ou les biblio­thèques qui cor­res­pondent à vos besoins :

PGM
DCL &FAILED TYPE(*DEC) LEN(10 0) VALUE(0)
DCL &FAILEDSTR TYPE(*CHAR) LEN(10)
CRTPF      FILE(QTEMP/BROUILLON) RCDLEN(1)
DSPFD      FILE(QTEMP/BROUILLON) TYPE(*ACCPTH) OUTPUT(*OUTFILE) OUTFILE(QTEMP/RTVPFSRC1)
DSPFFD     FILE(QTEMP/BROUILLON) OUTPUT(*OUTFILE) OUTFILE(QTEMP/RTVPFSRC)
CRTBNDRPG  PGM(USERBIB/RTVPFSRC) SRCFILE(USERBIB/QJRNPSTSRC) SRCMBR(RTVPFSRC) +
             OPTION(*EVENTF) DBGVIEW(*ALL) OPTIMIZE(*FULL) INDENT(2) +
             REPLACE(*YES)
MONMSG MSGID(CPF0000) EXEC(DO)
  CHGVAR VAR(&FAILED) VALUE(&FAILED + 1)
ENDDO
CRTBNDCL   PGM(USERBIB/RTVJRNPST) SRCFILE(USERBIB/QJRNPSTSRC) SRCMBR(RTVJRNPST) +
             OPTION(*EVENTF) REPLACE(*YES) OPTIMIZE(*FULL) DBGVIEW(*ALL)
MONMSG MSGID(CPF0000) EXEC(DO)
  CHGVAR VAR(&FAILED) VALUE(&FAILED + 1)
ENDDO
CRTCMD     SRCFILE(USERBIB/QJRNPSTSRC) SRCMBR(DSPJRNPST) REPLACE(*YES)  +
             CMD(USERBIB/DSPJRNPST) PGM(*LIBL/RTVJRNPST)
MONMSG MSGID(CPF0000) EXEC(DO)
  CHGVAR VAR(&FAILED) VALUE(&FAILED + 1)
ENDDO
CHGVAR VAR(&FAILEDSTR) VALUE(&FAILED)
ADDENVVAR ENVVAR(QRB_NUMBER_FAILED) VALUE(&FAILEDSTR) REPLACE(*YES)
ENDPGM

Reste à moder­ni­ser le tout, pas­ser en Free For­mat, trans­for­mer en archi­tec­ture ILE avec uti­li­sa­tion de pro­grammes mul­ti-modules et de pro­cé­dures, uti­li­ser du SQL à la place du QUERY, etc…