1       *  ZLIB.INC - Interface to the general purpose compression library
   2       *
   3       *  ILE RPG400 version by Patrick Monnerat, DATASPHERE.
   4       *  Version 1.2.8
   5       *
   6       *
   7       *  WARNING:
   8       *     Procedures inflateInit(), inflateInit2(), deflateInit(),
   9       *         deflateInit2() and inflateBackInit() need to be called with
  10       *         two additional arguments:
  11       *         the package version string and the stream control structure.
  12       *         size. This is needed because RPG lacks some macro feature.
  13       *         Call these procedures as:
  14       *             inflateInit(...: ZLIB_VERSION: %size(z_stream))
  15       *
  16       /if not defined(ZLIB_H_)
  17       /define ZLIB_H_
  18       *
  19       **************************************************************************
  20       *                               Constants
  21       **************************************************************************
  22       *
  23       *  Versioning information.
  24       *
  25      D ZLIB_VERSION    C                   '1.2.8'
  26      D ZLIB_VERNUM     C                   X'1280'
  27      D ZLIB_VER_MAJOR  C                   1
  28      D ZLIB_VER_MINOR  C                   2
  29      D ZLIB_VER_REVISION...
  30      D                 C                   8
  31      D ZLIB_VER_SUBREVISION...
  32      D                 C                   0
  33       *
  34       *  Other equates.
  35       *
  36      D Z_NO_FLUSH      C                   0
  37      D Z_PARTIAL_FLUSH...
  38      D                 C                   1
  39      D Z_SYNC_FLUSH    C                   2
  40      D Z_FULL_FLUSH    C                   3
  41      D Z_FINISH        C                   4
  42      D Z_BLOCK         C                   5
  43      D Z_TREES         C                   6
  44       *
  45      D Z_OK            C                   0
  46      D Z_STREAM_END    C                   1
  47      D Z_NEED_DICT     C                   2
  48      D Z_ERRNO         C                   -1
  49      D Z_STREAM_ERROR  C                   -2
  50      D Z_DATA_ERROR    C                   -3
  51      D Z_MEM_ERROR     C                   -4
  52      D Z_BUF_ERROR     C                   -5
  53      DZ_VERSION_ERROR  C                   -6
  54       *
  55      D Z_NO_COMPRESSION...
  56      D                 C                   0
  57      D Z_BEST_SPEED    C                   1
  58      D Z_BEST_COMPRESSION...
  59      D                 C                   9
  60      D Z_DEFAULT_COMPRESSION...
  61      D                 C                   -1
  62       *
  63      D Z_FILTERED      C                   1
  64      D Z_HUFFMAN_ONLY  C                   2
  65      D Z_RLE           C                   3
  66      D Z_DEFAULT_STRATEGY...
  67      D                 C                   0
  68       *
  69      D Z_BINARY        C                   0
  70      D Z_ASCII         C                   1
  71      D Z_UNKNOWN       C                   2
  72       *
  73      D Z_DEFLATED      C                   8
  74       *
  75      D Z_NULL          C                   0
  76       *
  77       **************************************************************************
  78       *                                 Types
  79       **************************************************************************
  80       *
  81      D z_streamp       S               *                                        Stream struct ptr
  82      D gzFile          S               *                                        File pointer
  83      D z_off_t         S             10i 0                                      Stream offsets
  84      D z_off64_t       S             20i 0                                      Stream offsets
  85       *
  86       **************************************************************************
  87       *                               Structures
  88       **************************************************************************
  89       *
  90       *  The GZIP encode/decode stream support structure.
  91       *
  92      D z_stream        DS                  align based(z_streamp)
  93      D  zs_next_in                     *                                        Next input byte
  94      D  zs_avail_in                  10U 0                                      Byte cnt at next_in
  95      D  zs_total_in                  10U 0                                      Total bytes read
  96      D  zs_next_out                    *                                        Output buffer ptr
  97      D  zs_avail_out                 10U 0                                      Room left @ next_out
  98      D  zs_total_out                 10U 0                                      Total bytes written
  99      D  zs_msg                         *                                        Last errmsg or null
 100      D  zs_state                       *                                        Internal state
 101      D  zs_zalloc                      *   procptr                              Int. state allocator
 102      D  zs_free                        *   procptr                              Int. state dealloc.
 103      D  zs_opaque                      *                                        Private alloc. data
 104      D  zs_data_type                 10i 0                                      ASC/BIN best guess
 105      D  zs_adler                     10u 0                                      Uncompr. adler32 val
 106      D                               10U 0                                      Reserved
 107      D                               10U 0                                      Ptr. alignment
 108       *
 109       **************************************************************************
 110       *                     Utility function prototypes
 111       **************************************************************************
 112       *
 113      D compress        PR            10I 0 extproc('compress')
 114      D  dest                      65535    options(*varsize)                    Destination buffer
 115      D  destLen                      10U 0                                      Destination length
 116      D  source                    65535    const options(*varsize)              Source buffer
 117      D  sourceLen                    10u 0 value                                Source length
 118       *
 119      D compress2       PR            10I 0 extproc('compress2')
 120      D  dest                      65535    options(*varsize)                    Destination buffer
 121      D  destLen                      10U 0                                      Destination length
 122      D  source                    65535    const options(*varsize)              Source buffer
 123      D  sourceLen                    10U 0 value                                Source length
 124      D  level                        10I 0 value                                Compression level
 125       *
 126      D compressBound   PR            10U 0 extproc('compressBound')
 127      D  sourceLen                    10U 0 value
 128       *
 129      D uncompress      PR            10I 0 extproc('uncompress')
 130      D  dest                      65535    options(*varsize)                    Destination buffer
 131      D  destLen                      10U 0                                      Destination length
 132      D  source                    65535    const options(*varsize)              Source buffer
 133      D  sourceLen                    10U 0 value                                Source length
 134       *
 135       /if not defined(LARGE_FILES)
 136      D gzopen          PR                  extproc('gzopen')
 137      D                                     like(gzFile)
 138      D  path                           *   value options(*string)               File pathname
 139      D  mode                           *   value options(*string)               Open mode
 140       /else
 141      D gzopen          PR                  extproc('gzopen64')
 142      D                                     like(gzFile)
 143      D  path                           *   value options(*string)               File pathname
 144      D  mode                           *   value options(*string)               Open mode
 145       *
 146      D gzopen64        PR                  extproc('gzopen64')
 147      D                                     like(gzFile)
 148      D  path                           *   value options(*string)               File pathname
 149      D  mode                           *   value options(*string)               Open mode
 150       /endif
 151       *
 152      D gzdopen         PR                  extproc('gzdopen')
 153      D                                     like(gzFile)
 154      D  fd                           10I 0 value                                File descriptor
 155      D  mode                           *   value options(*string)               Open mode
 156       *
 157      D gzbuffer        PR            10I 0 extproc('gzbuffer')
 158      D  file                               value like(gzFile)                   File pointer
 159      D  size                         10U 0 value
 160       *
 161      D gzsetparams     PR            10I 0 extproc('gzsetparams')
 162      D  file                               value like(gzFile)                   File pointer
 163      D  level                        10I 0 value
 164      D  strategy                     10I 0 value
 165       *
 166      D gzread          PR            10I 0 extproc('gzread')
 167      D  file                               value like(gzFile)                   File pointer
 168      D  buf                       65535    options(*varsize)                    Buffer
 169      D  len                          10u 0 value                                Buffer length
 170       *
 171      D gzwrite         PR            10I 0 extproc('gzwrite')
 172      D  file                               value like(gzFile)                   File pointer
 173      D  buf                       65535    const options(*varsize)              Buffer
 174      D  len                          10u 0 value                                Buffer length
 175       *
 176      D gzputs          PR            10I 0 extproc('gzputs')
 177      D  file                               value like(gzFile)                   File pointer
 178      D  s                              *   value options(*string)               String to output
 179       *
 180      D gzgets          PR              *   extproc('gzgets')
 181      D  file                               value like(gzFile)                   File pointer
 182      D  buf                       65535    options(*varsize)                    Read buffer
 183      D  len                          10i 0 value                                Buffer length
 184       *
 185      D gzputc          PR            10i 0 extproc('gzputc')
 186      D  file                               value like(gzFile)                   File pointer
 187      D  c                            10I 0 value                                Character to write
 188       *
 189      D gzgetc          PR            10i 0 extproc('gzgetc')
 190      D  file                               value like(gzFile)                   File pointer
 191       *
 192      D gzgetc_         PR            10i 0 extproc('gzgetc_')
 193      D  file                               value like(gzFile)                   File pointer
 194       *
 195      D gzungetc        PR            10i 0 extproc('gzungetc')
 196      D  c                            10I 0 value                                Character to push
 197      D  file                               value like(gzFile)                   File pointer
 198       *
 199      D gzflush         PR            10i 0 extproc('gzflush')
 200      D  file                               value like(gzFile)                   File pointer
 201      D  flush                        10I 0 value                                Type of flush
 202       *
 203       /if not defined(LARGE_FILES)
 204      D gzseek          PR                  extproc('gzseek')
 205      D                                     like(z_off_t)
 206      D  file                               value like(gzFile)                   File pointer
 207      D  offset                             value like(z_off_t)                  Offset
 208      D  whence                       10i 0 value                                Origin
 209       /else
 210      D gzseek          PR                  extproc('gzseek64')
 211      D                                     like(z_off_t)
 212      D  file                               value like(gzFile)                   File pointer
 213      D  offset                             value like(z_off_t)                  Offset
 214      D  whence                       10i 0 value                                Origin
 215       *
 216      D gzseek64        PR                  extproc('gzseek64')
 217      D                                     like(z_off64_t)
 218      D  file                               value like(gzFile)                   File pointer
 219      D  offset                             value like(z_off64_t)                Offset
 220      D  whence                       10i 0 value                                Origin
 221       /endif
 222       *
 223      D gzrewind        PR            10i 0 extproc('gzrewind')
 224      D  file                               value like(gzFile)                   File pointer
 225       *
 226       /if not defined(LARGE_FILES)
 227      D gztell          PR                  extproc('gztell')
 228      D                                     like(z_off_t)
 229      D  file                               value like(gzFile)                   File pointer
 230       /else
 231      D gztell          PR                  extproc('gztell64')
 232      D                                     like(z_off_t)
 233      D  file                               value like(gzFile)                   File pointer
 234       *
 235      D gztell64        PR                  extproc('gztell64')
 236      D                                     like(z_off64_t)
 237      D  file                               value like(gzFile)                   File pointer
 238       /endif
 239       *
 240       /if not defined(LARGE_FILES)
 241      D gzoffset        PR                  extproc('gzoffset')
 242      D                                     like(z_off_t)
 243      D  file                               value like(gzFile)                   File pointer
 244       /else
 245      D gzoffset        PR                  extproc('gzoffset64')
 246      D                                     like(z_off_t)
 247      D  file                               value like(gzFile)                   File pointer
 248       *
 249      D gzoffset64      PR                  extproc('gzoffset64')
 250      D                                     like(z_off64_t)
 251      D  file                               value like(gzFile)                   File pointer
 252       /endif
 253       *
 254      D gzeof           PR            10i 0 extproc('gzeof')
 255      D  file                               value like(gzFile)                   File pointer
 256       *
 257      D gzclose_r       PR            10i 0 extproc('gzclose_r')
 258      D  file                               value like(gzFile)                   File pointer
 259       *
 260      D gzclose_w       PR            10i 0 extproc('gzclose_w')
 261      D  file                               value like(gzFile)                   File pointer
 262       *
 263      D gzclose         PR            10i 0 extproc('gzclose')
 264      D  file                               value like(gzFile)                   File pointer
 265       *
 266      D gzerror         PR              *   extproc('gzerror')                   Error string
 267      D  file                               value like(gzFile)                   File pointer
 268      D  errnum                       10I 0                                      Error code
 269       *
 270      D gzclearerr      PR                  extproc('gzclearerr')
 271      D  file                               value like(gzFile)                   File pointer
 272       *
 273       **************************************************************************
 274       *                        Basic function prototypes
 275       **************************************************************************
 276       *
 277      D zlibVersion     PR              *   extproc('zlibVersion')               Version string
 278       *
 279      D deflateInit     PR            10I 0 extproc('deflateInit_')              Init. compression
 280      D  strm                               like(z_stream)                       Compression stream
 281      D  level                        10I 0 value                                Compression level
 282      D  version                        *   value options(*string)               Version string
 283      D  stream_size                  10i 0 value                                Stream struct. size
 284       *
 285      D deflate         PR            10I 0 extproc('deflate')                   Compress data
 286      D  strm                               like(z_stream)                       Compression stream
 287      D  flush                        10I 0 value                                Flush type required
 288       *
 289      D deflateEnd      PR            10I 0 extproc('deflateEnd')                Termin. compression
 290      D  strm                               like(z_stream)                       Compression stream
 291       *
 292      D inflateInit     PR            10I 0 extproc('inflateInit_')              Init. expansion
 293      D  strm                               like(z_stream)                       Expansion stream
 294      D  version                        *   value options(*string)               Version string
 295      D  stream_size                  10i 0 value                                Stream struct. size
 296       *
 297      D inflate         PR            10I 0 extproc('inflate')                   Expand data
 298      D  strm                               like(z_stream)                       Expansion stream
 299      D  flush                        10I 0 value                                Flush type required
 300       *
 301      D inflateEnd      PR            10I 0 extproc('inflateEnd')                Termin. expansion
 302      D  strm                               like(z_stream)                       Expansion stream
 303       *
 304       **************************************************************************
 305       *                        Advanced function prototypes
 306       **************************************************************************
 307       *
 308      D deflateInit2    PR            10I 0 extproc('deflateInit2_')             Init. compression
 309      D  strm                               like(z_stream)                       Compression stream
 310      D  level                        10I 0 value                                Compression level
 311      D  method                       10I 0 value                                Compression method
 312      D  windowBits                   10I 0 value                                log2(window size)
 313      D  memLevel                     10I 0 value                                Mem/cmpress tradeoff
 314      D  strategy                     10I 0 value                                Compression stategy
 315      D  version                        *   value options(*string)               Version string
 316      D  stream_size                  10i 0 value                                Stream struct. size
 317       *
 318      D deflateSetDictionary...
 319      D                 PR            10I 0 extproc('deflateSetDictionary')      Init. dictionary
 320      D  strm                               like(z_stream)                       Compression stream
 321      D  dictionary                65535    const options(*varsize)              Dictionary bytes
 322      D  dictLength                   10U 0 value                                Dictionary length
 323       *
 324      D deflateCopy     PR            10I 0 extproc('deflateCopy')               Compress strm 2 strm
 325      D  dest                               like(z_stream)                       Destination stream
 326      D  source                             like(z_stream)                       Source stream
 327       *
 328      D deflateReset    PR            10I 0 extproc('deflateReset')              End and init. stream
 329      D  strm                               like(z_stream)                       Compression stream
 330       *
 331      D deflateParams   PR            10I 0 extproc('deflateParams')             Change level & strat
 332      D  strm                               like(z_stream)                       Compression stream
 333      D  level                        10I 0 value                                Compression level
 334      D  strategy                     10I 0 value                                Compression stategy
 335       *
 336      D deflateBound    PR            10U 0 extproc('deflateBound')              Change level & strat
 337      D  strm                               like(z_stream)                       Compression stream
 338      D  sourcelen                    10U 0 value                                Compression level
 339       *
 340      D deflatePending  PR            10I 0 extproc('deflatePending')            Change level & strat
 341      D  strm                               like(z_stream)                       Compression stream
 342      D  pending                      10U 0                                      Pending bytes
 343      D  bits                         10I 0                                      Pending bits
 344       *
 345      D deflatePrime    PR            10I 0 extproc('deflatePrime')              Change level & strat
 346      D  strm                               like(z_stream)                       Compression stream
 347      D  bits                         10I 0 value                                # of bits to insert
 348      D  value                        10I 0 value                                Bits to insert
 349       *
 350      D inflateInit2    PR            10I 0 extproc('inflateInit2_')             Init. expansion
 351      D  strm                               like(z_stream)                       Expansion stream
 352      D  windowBits                   10I 0 value                                log2(window size)
 353      D  version                        *   value options(*string)               Version string
 354      D  stream_size                  10i 0 value                                Stream struct. size
 355       *
 356      D inflateSetDictionary...
 357      D                 PR            10I 0 extproc('inflateSetDictionary')      Init. dictionary
 358      D  strm                               like(z_stream)                       Expansion stream
 359      D  dictionary                65535    const options(*varsize)              Dictionary bytes
 360      D  dictLength                   10U 0 value                                Dictionary length
 361       *
 362      D inflateGetDictionary...
 363      D                 PR            10I 0 extproc('inflateGetDictionary')      Get dictionary
 364      D  strm                               like(z_stream)                       Expansion stream
 365      D  dictionary                65535    options(*varsize)                    Dictionary bytes
 366      D  dictLength                   10U 0                                      Dictionary length
 367       *
 368      D inflateSync     PR            10I 0 extproc('inflateSync')               Sync. expansion
 369      D  strm                               like(z_stream)                       Expansion stream
 370       *
 371      D inflateCopy     PR            10I 0 extproc('inflateCopy')
 372      D  dest                               like(z_stream)                       Destination stream
 373      D  source                             like(z_stream)                       Source stream
 374       *
 375      D inflateReset    PR            10I 0 extproc('inflateReset')              End and init. stream
 376      D  strm                               like(z_stream)                       Expansion stream
 377       *
 378      D inflateReset2   PR            10I 0 extproc('inflateReset2')             End and init. stream
 379      D  strm                               like(z_stream)                       Expansion stream
 380      D  windowBits                   10I 0 value                                Log2(buffer size)
 381       *
 382      D inflatePrime    PR            10I 0 extproc('inflatePrime')              Insert bits
 383      D  strm                               like(z_stream)                       Expansion stream
 384      D  bits                         10I 0 value                                Bit count
 385      D  value                        10I 0 value                                Bits to insert
 386       *
 387      D inflateMark     PR            10I 0 extproc('inflateMark')               Get inflate info
 388      D  strm                               like(z_stream)                       Expansion stream
 389       *
 390      D inflateBackInit...
 391      D                 PR            10I 0 extproc('inflateBackInit_')
 392      D  strm                               like(z_stream)                       Expansion stream
 393      D  windowBits                   10I 0 value                                Log2(buffer size)
 394      D  window                    65535    options(*varsize)                    Buffer
 395      D  version                        *   value options(*string)               Version string
 396      D  stream_size                  10i 0 value                                Stream struct. size
 397       *
 398      D inflateBack     PR            10I 0 extproc('inflateBack')
 399      D  strm                               like(z_stream)                       Expansion stream
 400      D  in                             *   value procptr                        Input function
 401      D  in_desc                        *   value                                Input descriptor
 402      D  out                            *   value procptr                        Output function
 403      D  out_desc                       *   value                                Output descriptor
 404       *
 405      D inflateBackEnd  PR            10I 0 extproc('inflateBackEnd')
 406      D  strm                               like(z_stream)                       Expansion stream
 407       *
 408      D zlibCompileFlags...
 409      D                 PR            10U 0 extproc('zlibCompileFlags')
 410       *
 411       **************************************************************************
 412       *                        Checksum function prototypes
 413       **************************************************************************
 414       *
 415      D adler32         PR            10U 0 extproc('adler32')                   New checksum
 416      D  adler                        10U 0 value                                Old checksum
 417      D  buf                       65535    const options(*varsize)              Bytes to accumulate
 418      D  len                          10U 0 value                                Buffer length
 419       *
 420      D crc32           PR            10U 0 extproc('crc32')                     New checksum
 421      D  crc                          10U 0 value                                Old checksum
 422      D  buf                       65535    const options(*varsize)              Bytes to accumulate
 423      D  len                          10U 0 value                                Buffer length
 424       *
 425       **************************************************************************
 426       *                     Miscellaneous function prototypes
 427       **************************************************************************
 428       *
 429      D zError          PR              *   extproc('zError')                    Error string
 430      D  err                          10I 0 value                                Error code
 431       *
 432      D inflateSyncPoint...
 433      D                 PR            10I 0 extproc('inflateSyncPoint')
 434      D  strm                               like(z_stream)                       Expansion stream
 435       *
 436      D get_crc_table   PR              *   extproc('get_crc_table')             Ptr to ulongs
 437       *
 438      D inflateUndermine...
 439      D                 PR            10I 0 extproc('inflateUndermine')
 440      D  strm                               like(z_stream)                       Expansion stream
 441      D  arg                          10I 0 value                                Error code
 442       *
 443      D inflateResetKeep...
 444      D                 PR            10I 0 extproc('inflateResetKeep')          End and init. stream
 445      D  strm                               like(z_stream)                       Expansion stream
 446       *
 447      D deflateResetKeep...
 448      D                 PR            10I 0 extproc('deflateResetKeep')          End and init. stream
 449      D  strm                               like(z_stream)                       Expansion stream
 450       *
 451       /endif