Lecture séquentielle de tout un fichier message

BoTTom |
     h  dftactgrp(*no) actgrp('QILE') bnddir('QC2LE')
     D*****************************************************************
     D* PROTOTYPES IFS
     D*****************************************************************
     D*** open sur IFS
     Dopen             PR            10I 0 EXTPROC('open')
     D  nomfichier                     *   VALUE
     D  openflags                    10I 0 VALUE
     D  mode                         10U 0 VALUE OPTIONS(*NOPASS)
     D  codepage                     10U 0 VALUE OPTIONS(*NOPASS)
     D*** lecture IFS
     Dread             PR            10I 0 EXTPROC('read')
     D  filehandle                   10I 0 VALUE
     D  datareceived                   *   VALUE
     D  nbytes                       10U 0 VALUE
     D*** écriture IFS
     Dwrite            PR            10I 0 EXTPROC('write')
     D  filehandle                   10I 0 VALUE
     D  datatowrite                    *   VALUE
     D  nbytes                       10U 0 VALUE
     D*** fermeture IFS
     Dclose            PR            10I 0 EXTPROC('close')
     D  filehandle                   10I 0 VALUE
     D*****************************************************************
     D* IFS CONSTANTS
     D*****************************************************************
     D*** File Access Modes for open()
     D O_RDONLY        S             10I 0 INZ(1)
     D O_WRONLY        S             10I 0 INZ(2)
     D O_RDWR          S             10I 0 INZ(4)
     D*** oflag Values for open()
     D O_CREAT         S             10I 0 INZ(8)
     D O_EXCL          S             10I 0 INZ(16)
     D O_TRUNC         S             10I 0 INZ(64)
     D*** File Status Flags for open() and fcntl()
     D O_NONBLOCK      S             10I 0 INZ(128)
     D O_APPEND        S             10I 0 INZ(256)
     D*** oflag Share Mode Values for open()
     D O_SHARE_NONE    S             10I 0 INZ(2000000)
     D O_SHARE_RDONLY  S             10I 0 INZ(0200000)
     D O_SHARE_RDWR    S             10I 0 INZ(1000000)
     D O_SHARE_WRONLY  S             10I 0 INZ(0400000)
     D*** file permissions
     D S_IRUSR         S             10I 0 INZ(256)


|
     D S_IWUSR         S             10I 0 INZ(128)
     D S_IXUSR         S             10I 0 INZ(64)
     D S_IRWXU         S             10I 0 INZ(448)
     D S_IRGRP         S             10I 0 INZ(32)
     D S_IWGRP         S             10I 0 INZ(16)
     D S_IXGRP         S             10I 0 INZ(8)
     D S_IRWXG         S             10I 0 INZ(56)
     D S_IROTH         S             10I 0 INZ(4)
     D S_IWOTH         S             10I 0 INZ(2)
     D S_IXOTH         S             10I 0 INZ(1)
     D S_IRWXO         S             10I 0 INZ(7)
     D*** misc
     D O_TEXTDATA      S             10I 0 INZ(16777216)
     D O_CODEPAGE      S             10I 0 INZ(8388608)
     D*****************************************************************
     D* DEFINITIONS
     D*****************************************************************
     D*** divers
     D nomfichier      S            255A
     D lgfichier       S             10I 0
     D AsciiCodePage   S             10U 0 INZ(1252)
     D FullName        S            512A
     D ReturnInt       S             10I 0
     D***
     D File_Hdl        S             10I 0
     D Byteswrt        S             10I 0
     D EOR             S              2A   Inz(X'0D25')
     D Null            S              1A   Inz(X'00')
     D ligne           S          32767
      **********************************************************************
      * variable retour pour le format RTVM0300
     Dmessage_rt       DS         32767
     D  byte_retour                  10I 0
     D  byte_dispo                   10I 0
     D  msgid_rt                      7    overlay(message_rt : 27)
     D  msg_offset                   10I 0 overlay(message_rt : 65)
     D  msg_retour                   10I 0 overlay(message_rt : *next)
     D  msg_dispo                    10I 0 overlay(message_rt : *next)
     D  msg2_offset                  10I 0 overlay(message_rt : 77)
     D  msg2_retour                  10I 0 overlay(message_rt : *next)
     D  msg2_dispo                   10I 0 overlay(message_rt : *next)
     D  data                       9999
 
     d msg1            S            256


|
     d msg2            S           9000
 
      * divers paramètres
     Dmessage_rt_lg    S             10I 0 inz(%size(message_rt))
     Dformat           S              8    inz('RTVM0300')
     dmsgid            S              7
     dmsgf             S             20    inz('QCPFMSG   QSYS')
     dmsgdta           S              1
     dmsgdta_lg        S             10I 0 inz(0)
     dremplace_var     S             10    inz('*NO')
     dremplace_spc     S             10    inz('*NO')
 
     Derror_code       DS
     D  err_lg                       10I 0 inz(%size(error_code))
     D  err_retour                   10I 0
     D  err_filler                    1
     D  err_msgid                     7
 
     Doption           S             10    inz('*FIRST')
     Dmsg_ccsid        S             10I 0 inz(0)
     Ddta_ccsid        S             10I 0 inz(0)
 
      * prototype d'appel à l'API
     Drtvmsg           PR                  EXTPGM('QMHRTVM')
     D                             9999
     D                               10I 0
     D                                8
     d                                7
     d                               20
     d                                1
     d                               10I 0
     d                               10
     d                               10
     D                               16
     D                               10
     D                               10I 0
     D                               10I 0
      * on recoit msgf et bibliothèque en paramètre
     C     *entry        plist
     C                   parm                    p_msgf           20
     C                   parm                    p_nomfic        255
      /free
       msgf = p_msgf          ;
       nomfichier = p_nomfic  ;


|
 
       lgfichier = %Len(%Trimr(nomfichier)) ;
       // Ouverture du fichier
        FullName = %TRIMR(nomfichier) + null + null + Null;
        file_Hdl = open(%ADDR(FullName)
                      : O_CREAT + O_WRONLY + O_TRUNC + O_CODEPAGE
                      : S_IRWXU + S_IROTH
                      : AsciiCodePage);
        ReturnInt = close(file_Hdl);
        // 2ème ouverture
        file_Hdl = open(%ADDR(FullName) : O_TEXTDATA + O_RDWR);
       exsr lecture;
       option = '*NEXT';
       dow byte_dispo > 0;
 
         msg1 = %subst(message_rt : msg_offset + 1 : msg_retour);
         ligne = '"' + msgid_rt + '";"' + %trim(msg1) + '"';
 
         if msg2_offset > 0;
            msg2 = %subst(message_rt : msg2_offset + 1 : msg2_retour);
            ligne = %trimr(ligne) + ';"' + %trim(msg2) + '"';
         endif;
        //Ecriture IFS
          ligne = %Trimr(ligne) + EOR;
           byteswrt = write(file_Hdl : %ADDR(ligne)
                             : %LEN(%TRIMR(ligne))) ;
 
            // positionnement sir le message suivant
            msgid = msgid_rt;
            exsr lecture;
       enddo;
       ReturnInt = close(file_Hdl);
       *inlr = *on;
 
        // S-PGM
 
        //   appel à l'API.
       begsr lecture;
        rtvmsg(message_rt : message_rt_lg : format : msgid : msgf : msgdta :
                msgdta_lg  : remplace_var : remplace_spc : error_code :
                option     : msg_ccsid    : dta_ccsid);
       endsr;
      /end-free




©AF400