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