IBM Support

Example of the API QZIPUNZIP in RPG ILE

Troubleshooting


Problem

This is an ILE RPG program example that is calling the api QzipUnzip.

Resolving The Problem

Caution: This is an example only. IBM accepts no responsibility for its correctness.


This example uses a command to pass four parameters into the RPG ILE program that are used to call the QzipUnzip API. This API QzipUnzip is new to R710.

o You must create the command with CRTCMD.
o You must compile the RPG ILE program as a module using 15 in PDM or the CRTRPGMOD command.
o You must then issue the CRTPGM command to create the program. Note: You will want to bind to the service program QZIPUTIL.
o A zip file is included in this document. You must place the zip file into a directory on your system. This zip file also contains other API examples in it like the QzipZip. The zip file, ZipUnzipFile.zip, is included below:

The command is called UNZIPF.
You can use the following to create the command.
CRTCMD CMD(LIBNAME/UNZIPF) PGM(LIBNAME/UNZIP) SRCFILE(LIBNAME/QCMDSRC) SRC
MBR(*CMD)


       Cmd      Prompt( 'Unzip File' )                                          

                                                                               

                                                                               

       Parm     ARCHIVE      *Pname     5000              +                    

                Min( 1 )                                  +                    

                Expr( *YES )                              +                    

                Vary( *YES *INT2 )                        +                    

                Case( *MIXED )                            +                    

                Choice( *NONE )                           +                    

                InlPmtLen( 80 )                           +                    

                Prompt( 'Compressed file name' )                                

                                                                               

       Parm     DIR          *Pname     5000              +                    

                Min( 1 )                                  +                    

                Expr( *YES )                              +                    

                 Vary( *YES *INT2 )                        +                                  

                 Case( *MIXED )                            +                                  

                 Choice( *NONE )                           +                                  

                 InlPmtLen( 80 )                           +                                  

                 Prompt( 'Directory to place files' )                                        

                                                                                             

        Parm     VERBOSE      *Char        10              +                                  

                 Rstd( *YES )                              +                                  

                 Dft( *NONE )                              +                                  

                 SpcVal(( *NONE ) ( *VERBOSE ))            +                                  

                 Expr( *YES )                              +                

                 Prompt( 'Verbose option' )                                

                                                                           

        Parm     REPLACE      *Char        10              +                

                 Rstd( *YES )                              +                

                 Dft( *NO )                                +                

                 SpcVal(( *YES ) ( *NO ))                  +                

                 Expr( *YES )                              +                

                 Prompt( 'Replace' )    



Following is the program source called UNZIP.

You should compile it as a module using CRTRPGMOD or a 15-in PDM and then issue the CRTPGM command to create the program.

Here is the CRTPGM command. Note: Make sure you bind to the service program QZIPUTIL:

CRTPGM PGM(libnameH/UNZIP) MODULE(libname/UNZIP) BNDSRVPGM((QZIPUTIL))


H Option( *SrcStmt )                                                            

                                                                               

**-- System information:                                                        

D PgmSts         SDs                  Qualified                                

D  PgmNam           *Proc                                                      

D  CurJob                       10a   Overlay( PgmSts: 244 )                    

D  UsrPrf                       10a   Overlay( PgmSts: 254 )                    

D  JobNbr                        6a   Overlay( PgmSts: 264 )                    

D  CurUsr                       10a   Overlay( PgmSts: 358 )                    

**-- API error data structure:                                                  

D ERRC0100        Ds                  Qualified                                

D  BytPrv                       10i 0 Inz( %Size( ERRC0100 ))            

D  BytAvl                       10i 0 Inz                                

D  MsgId                         7a                                      

D                                1a                                      

D  MsgDta                      512a                                      

**-- Api error data structure - NLS support:                              

D ERRC0200        Ds                  Qualified                          

D  Key                          10i 0 Inz( -1 )                          

D  BytPro                       10i 0 Inz( %Size( ERRC0200 ))            

D  BytAvl                       10i 0                                    

D  MsgId                         7a                                      

D                                1a                                      

D  CcsId                        10i 0                                    

D  MsgDtaOfs                    10i 0                                    

D  MsgDtaLen                    10i 0                                    

D  MsgDta                     5000a                                      

                                                                         

**-- Global constants:                                                    

D NULL            c                   ''                                  

D OFS_MSGDTA      c                   16                                  

**                                                                        

D CUR_CCSID       c                   0                                    

D CUR_CTRID       c                   x'0000'                              

D CUR_LNGID       c                   x'000000'                            

D CHR_DLM1        c                   0                                    

**-- Global variables:                                                    

D rc              s             10i 0                                      

                                                                           

**-- Qlg_Path_Name_t API path:                                            

D Qlg_Path_Name_t...                                                      

D                 Ds                  Qualified  Align                    

D  CcsId                        10i 0 Inz( CUR_CCSID )                    

D  CtrId                         2a   Inz( CUR_CTRID )                    

D  LngId                         3a   Inz( CUR_LNGID )                    

D                                3a   Inz( *Allx'00' )                                  

D  PthTypI                      10i 0 Inz( CHR_DLM1 )                                  

D  PthNamLen                    10i 0                                                  

D  PthNamDlm                     2a   Inz( '/ ' )                                      

D                               10a   Inz( *Allx'00' )                                  

D  PthNam                     1024a                                                    

D  pPthNam                        *   Overlay( PthNam )                                

**                                                                                      

D ArcPath         Ds                  LikeDs( Qlg_Path_Name_t )                        

D                                     Inz( *LIKEDS )                                    

D DirPath         Ds                  LikeDs( Qlg_Path_Name_t )                        

D                                     Inz( *LIKEDS )                                    

**-- Unzip options:                                                                    

D UNZIP100        Ds                  Qualified                                        

D  Verbose                      10a                                                    

D  Replace                       6a                                                    

                                                                                       

**-- Decompress an archive file:                                                        

D ZipUnzip        Pr                  ExtProc( *CWIDEN: 'QzipUnzip' )                  

D  CompFileName                       Const  LikeDs( Qlg_Path_Name_t )              

D  DirDecompFile                      Const  LikeDs( Qlg_Path_Name_t )              

D  FmtNam                        8a   Const                                        

D  UnzipOpt                           Const  LikeDs( UNZIP100 )                    

D  Error                     32767a          Options( *VarSize )                    

**-- Send program message:                                                          

D SndPgmMsg       Pr                  ExtPgm( 'QMHSNDPM' )                          

D  MsgId                         7a   Const                                        

D  MsgFil_q                     20a   Const                                        

D  MsgDta                      128a   Const                                        

D  MsgDtaLen                    10i 0 Const                                        

D  MsgTyp                       10a   Const                                        

D  CalStkE                      10a   Const  Options( *VarSize )                    

D  CalStkCtr                    10i 0 Const                                        

D  MsgKey                        4a                                                

D  Error                     32767a          Options( *VarSize )                    

D  CalStkEntLen                 10i 0 Const  Options( *NoPass )                    

D  CalStkEntQual                20a   Const  Options( *NoPass )                    

D  DspWait                      10i 0 Const  Options( *NoPass )                    

D  CalStkEntTyp                 20a   Const  Options( *NoPass )            

D  CcsId                        10i 0 Const  Options( *NoPass )            

                                                                           

**-- Send completion message:                                              

D SndCmpMsg       Pr            10i 0                                      

D  PxMsgDta                    512a   Const  Varying                        

**-- Send escape message:                                                  

D SndEscMsg       Pr            10i 0                                      

D  PxMsgId                       7a   Const                                

D  PxMsgF                       10a   Const                                

D  PxMsgDta                    512a   Const  Varying                        

**-- Send escape message - converted:                                      

D SndEscMsgC      Pr            10i 0                                      

D  PxMsgId                       7a   Const                                

D  PxMsgF                       10a   Const                                

D  PxMsgDta                    512a   Const  Varying        

D  PxCcsId                      10i 0 Const                

                                                           

**-- Entry parameters:                                      

D UNZIP           Pr                                        

D  PxArcPath                  5000a    varying              

D  PxDirPath                  5000a    varying              

D  PxVerbose                    10a                        

D  PxReplace                    10a                        

**                                                          

D UNZIP           Pi                                        

D  PxArcPath                  5000a    varying              

D  PxDirPath                  5000a    varying              

D  PxVerbose                    10a                        

D  PxReplace                    10a                        

                                                           

 /Free                                                      

                                                           

   ArcPath.PthNam = PxArcPath;                              

   DirPath.PthNam = PxDirPath;                                          

                                                                         

   ArcPath.PthNamLen = %Len( PxArcPath );                                

   DirPath.PthNamLen = %Len( PxDirPath );                                

                                                                         

   UNZIP100.Verbose = PxVerbose;                                        

   UNZIP100.Replace = PxReplace;                                        

                                                                         

   ZipUnzip( ArcPath: DirPath: 'UNZIP100': UNZIP100: ERRC0200 );        

                                                                         

   If  ERRC0200.BytAvl > *Zero;                                          

     ExSr  EscApiErr;                                                    

                                                                         

   Else;                                                                

     SndCmpMsg( 'Archive ' + PxArcPath + ' has been decompressed.' );    

   EndIf;                                                                

                                                                         

   *InLr = *On;                                                          

   Return;                                                              

                                                     

                                                     

  BegSr  EscApiErr;                                  

                                                     

    SndEscMsgC( ERRC0200.MsgId                        

              : 'QCPFMSG'                            

              : %Subst( ERRC0200                      

                      : ERRC0200.MsgDtaOfs + 1        

                      : ERRC0200.MsgDtaLen            

                      )                              

              : ERRC0200.CcsId                        

              );                                      

                                                     

  EndSr;                                              

  /End-Free                                                        

                                                                   

 **-- Send completion message:                                      

 P SndCmpMsg       B                                                

 D                 Pi            10i 0                              

 D  PxMsgDta                    512a   Const  Varying              

 **                                                                

 D MsgKey          s              4a                                

                                                                   

  /Free                                                            

                                                                   

    SndPgmMsg( 'CPF9897'                                            

             : 'QCPFMSG   *LIBL'                                    

             : PxMsgDta                                            

             : %Len( PxMsgDta )                                    

             : '*COMP'                                              

             : '*PGMBDY'                                            

             : 1                                                    

             : MsgKey                                              

            : ERRC0100                                  

            );                                          

                                                         

   If  ERRC0100.BytAvl > *Zero;                          

     Return  -1;                                        

                                                         

Else;                                                

     Return  0;                                          

                                                         

   EndIf;                                                

                                                         

 /End-Free                                              

                                                         

P SndCmpMsg       E                                      

**-- Send escape message:                                

P SndEscMsg       B                                      

D                 Pi            10i 0                    

D  PxMsgId                       7a   Const              

D  PxMsgF                       10a   Const              

  D  PxMsgDta                    512a   Const  Varying                      

  **                                                                        

  D MsgKey          s              4a                                      

                                                                           

   /Free                                                                    

                                                                           

     SndPgmMsg( PxMsgId                                                    

              : PxMsgF + '*LIBL'                                            

              : PxMsgDta                                                    

              : %Len( PxMsgDta )                                            

              : '*ESCAPE'                                                  

              : '*PGMBDY'                                                  

              : 1                                                          

              : MsgKey                                                      

              : ERRC0100                                                    

             );                                                

                                                               

    If  ERRC0100.BytAvl > *Zero;                              

      Return  -1;                                              

                                                               

    Else;                                                      

      Return   0;                                              

    EndIf;                                                    

                                                               

  /End-Free                                                    

                                                               

 P SndEscMsg       E                                          

 **-- Send escape message - converted:                        

 P SndEscMsgC      B                                          

 D                 Pi            10i 0                        

 D  PxMsgId                       7a   Const                  

 D  PxMsgF                       10a   Const                  

 D  PxMsgDta                    512a   Const  Varying          

 D  PxCcsId                      10i 0 Const                  

 **                                                                      

 D MsgKey          s              4a                                    

                                                                         

  /Free                                                                  

                                                                         

    SndPgmMsg( PxMsgId                                                  

             : PxMsgF + '*LIBL'                                          

             : PxMsgDta                                                  

             : %Len( PxMsgDta )                                          

             : '*ESCAPE'                                                

             : '*PGMBDY'                                                

             : 1                                                        

             : MsgKey                                                    

             : ERRC0100                                                  

             : 10                                                        

             : '*NONE     *NONE'                                        

             : *Zero                                                    

             : '*CHAR'                                                  

             : PxCcsId                                                  

            );                                

                                             

   If  ERRC0100.BytAvl > *Zero;              

     Return  -1;                              

                                             

   Else;                                      

     Return   0;                              

   EndIf;                                    

                                             

 /End-Free                                    

                                             

P SndEscMsgC      E  


An example of the UNZIPF command follows:

UNZIPF ARCHIVE('/home/xxxx/ZipUnzipFile.zip') DIR('/home/xxxx') VERBOSE(*
VERBOSE) REPLACE(*YES)


After you call it, you will receive a message stating the following:

Archive /home/xxxx/ZipUnzipFile.zip has been decompressed.

ZipUnzipFile.zipZipUnzipFile.zip


You should refer to the following link for more information on this API:


//archive.iprodeveloper.com/content1?topic=apis-zip-unzip-files-71-zip-api-support-698539&catpath=rpg-programming


For the ZipUnzipFile.zip link, you should refer to the following.

//www.systeminetwork.com/content/content/698539/ZiUnzipFile.zip

Internal Use Only

IBM I (5770SS100)

[{"Product":{"code":"SGYQGH","label":"IBM i"},"Business Unit":{"code":"BU009","label":"Systems - Server"},"Component":"Programming (Languages- compilers- tools)","Platform":[{"code":"PF012","label":"IBM i"}],"Version":"7.2.0;7.1.0;7.3.0","Edition":""},{"Product":{"code":"SSC52E","label":"IBM i 7.1"},"Business Unit":{"code":"BU009","label":"Systems - Server"},"Component":" ","Platform":[{"code":"","label":""}],"Version":"","Edition":""},{"Product":{"code":"SSC5L9","label":"IBM i 7.2"},"Business Unit":{"code":"BU009","label":"Systems - Server"},"Component":" ","Platform":[{"code":"","label":null}],"Version":"","Edition":""},{"Product":{"code":"SSTS2D","label":"IBM i 7.3"},"Business Unit":{"code":"BU009","label":"Systems - Server"},"Component":" ","Platform":[{"code":"","label":null}],"Version":"","Edition":""}]

Historical Number

667757977

Document Information

Modified date:
17 June 2018

UID

nas8N1010418