1      *  ZLIB.INC - Interface to the general purpose compression library
2      *
3      *  ILE RPG400 version by Patrick Monnerat, DATASPHERE.
4      *  Version 1.2.11
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.11'
26     D ZLIB_VERNUM     C                   X'12a0'
27     D ZLIB_VER_MAJOR  C                   1
28     D ZLIB_VER_MINOR  C                   2
29     D ZLIB_VER_REVISION...
30     D                 C                   11
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     D Z_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 gz_headerp      S               *
84     D z_off_t         S             10i 0                                      Stream offsets
85     D z_off64_t       S             20i 0                                      Stream offsets
86      *
87      **************************************************************************
88      *                               Structures
89      **************************************************************************
90      *
91      *  The GZIP encode/decode stream support structure.
92      *
93     D z_stream        DS                  align based(z_streamp)
94     D  zs_next_in                     *                                        Next input byte
95     D  zs_avail_in                  10U 0                                      Byte cnt at next_in
96     D  zs_total_in                  10U 0                                      Total bytes read
97     D  zs_next_out                    *                                        Output buffer ptr
98     D  zs_avail_out                 10U 0                                      Room left @ next_out
99     D  zs_total_out                 10U 0                                      Total bytes written
100     D  zs_msg                         *                                        Last errmsg or null
101     D  zs_state                       *                                        Internal state
102     D  zs_zalloc                      *   procptr                              Int. state allocator
103     D  zs_free                        *   procptr                              Int. state dealloc.
104     D  zs_opaque                      *                                        Private alloc. data
105     D  zs_data_type                 10i 0                                      ASC/BIN best guess
106     D  zs_adler                     10u 0                                      Uncompr. adler32 val
107     D                               10U 0                                      Reserved
108     D                               10U 0                                      Ptr. alignment
109      *
110      **************************************************************************
111      *                     Utility function prototypes
112      **************************************************************************
113      *
114     D compress        PR            10I 0 extproc('compress')
115     D  dest                      65535    options(*varsize)                    Destination buffer
116     D  destLen                      10U 0                                      Destination length
117     D  source                    65535    const options(*varsize)              Source buffer
118     D  sourceLen                    10u 0 value                                Source length
119      *
120     D compress2       PR            10I 0 extproc('compress2')
121     D  dest                      65535    options(*varsize)                    Destination buffer
122     D  destLen                      10U 0                                      Destination length
123     D  source                    65535    const options(*varsize)              Source buffer
124     D  sourceLen                    10U 0 value                                Source length
125     D  level                        10I 0 value                                Compression level
126      *
127     D compressBound   PR            10U 0 extproc('compressBound')
128     D  sourceLen                    10U 0 value
129      *
130     D uncompress      PR            10I 0 extproc('uncompress')
131     D  dest                      65535    options(*varsize)                    Destination buffer
132     D  destLen                      10U 0                                      Destination length
133     D  source                    65535    const options(*varsize)              Source buffer
134     D  sourceLen                    10U 0 value                                Source length
135      *
136     D uncompress2     PR            10I 0 extproc('uncompress2')
137     D  dest                      65535    options(*varsize)                    Destination buffer
138     D  destLen                      10U 0                                      Destination length
139     D  source                    65535    const options(*varsize)              Source buffer
140     D  sourceLen                    10U 0                                      Source length
141      *
142      /if not defined(LARGE_FILES)
143     D gzopen          PR                  extproc('gzopen')
144     D                                     like(gzFile)
145     D  path                           *   value options(*string)               File pathname
146     D  mode                           *   value options(*string)               Open mode
147      /else
148     D gzopen          PR                  extproc('gzopen64')
149     D                                     like(gzFile)
150     D  path                           *   value options(*string)               File pathname
151     D  mode                           *   value options(*string)               Open mode
152      *
153     D gzopen64        PR                  extproc('gzopen64')
154     D                                     like(gzFile)
155     D  path                           *   value options(*string)               File pathname
156     D  mode                           *   value options(*string)               Open mode
157      /endif
158      *
159     D gzdopen         PR                  extproc('gzdopen')
160     D                                     like(gzFile)
161     D  fd                           10I 0 value                                File descriptor
162     D  mode                           *   value options(*string)               Open mode
163      *
164     D gzbuffer        PR            10I 0 extproc('gzbuffer')
165     D  file                               value like(gzFile)                   File pointer
166     D  size                         10U 0 value
167      *
168     D gzsetparams     PR            10I 0 extproc('gzsetparams')
169     D  file                               value like(gzFile)                   File pointer
170     D  level                        10I 0 value
171     D  strategy                     10I 0 value
172      *
173     D gzread          PR            10I 0 extproc('gzread')
174     D  file                               value like(gzFile)                   File pointer
175     D  buf                       65535    options(*varsize)                    Buffer
176     D  len                          10u 0 value                                Buffer length
177      *
178     D gzfread          PR           20I 0 extproc('gzfread')
179     D  buf                       65535    options(*varsize)                    Buffer
180     D  size                         20u 0 value                                Buffer length
181     D  nitems                       20u 0 value                                Buffer length
182     D  file                               value like(gzFile)                   File pointer
183      *
184     D gzwrite         PR            10I 0 extproc('gzwrite')
185     D  file                               value like(gzFile)                   File pointer
186     D  buf                       65535    const options(*varsize)              Buffer
187     D  len                          10u 0 value                                Buffer length
188      *
189     D gzfwrite         PR           20I 0 extproc('gzfwrite')
190     D  buf                       65535    options(*varsize)                    Buffer
191     D  size                         20u 0 value                                Buffer length
192     D  nitems                       20u 0 value                                Buffer length
193     D  file                               value like(gzFile)                   File pointer
194      *
195     D gzputs          PR            10I 0 extproc('gzputs')
196     D  file                               value like(gzFile)                   File pointer
197     D  s                              *   value options(*string)               String to output
198      *
199     D gzgets          PR              *   extproc('gzgets')
200     D  file                               value like(gzFile)                   File pointer
201     D  buf                       65535    options(*varsize)                    Read buffer
202     D  len                          10i 0 value                                Buffer length
203      *
204     D gzputc          PR            10i 0 extproc('gzputc')
205     D  file                               value like(gzFile)                   File pointer
206     D  c                            10I 0 value                                Character to write
207      *
208     D gzgetc          PR            10i 0 extproc('gzgetc')
209     D  file                               value like(gzFile)                   File pointer
210      *
211     D gzgetc_         PR            10i 0 extproc('gzgetc_')
212     D  file                               value like(gzFile)                   File pointer
213      *
214     D gzungetc        PR            10i 0 extproc('gzungetc')
215     D  c                            10I 0 value                                Character to push
216     D  file                               value like(gzFile)                   File pointer
217      *
218     D gzflush         PR            10i 0 extproc('gzflush')
219     D  file                               value like(gzFile)                   File pointer
220     D  flush                        10I 0 value                                Type of flush
221      *
222      /if not defined(LARGE_FILES)
223     D gzseek          PR                  extproc('gzseek')
224     D                                     like(z_off_t)
225     D  file                               value like(gzFile)                   File pointer
226     D  offset                             value like(z_off_t)                  Offset
227     D  whence                       10i 0 value                                Origin
228      /else
229     D gzseek          PR                  extproc('gzseek64')
230     D                                     like(z_off_t)
231     D  file                               value like(gzFile)                   File pointer
232     D  offset                             value like(z_off_t)                  Offset
233     D  whence                       10i 0 value                                Origin
234      *
235     D gzseek64        PR                  extproc('gzseek64')
236     D                                     like(z_off64_t)
237     D  file                               value like(gzFile)                   File pointer
238     D  offset                             value like(z_off64_t)                Offset
239     D  whence                       10i 0 value                                Origin
240      /endif
241      *
242     D gzrewind        PR            10i 0 extproc('gzrewind')
243     D  file                               value like(gzFile)                   File pointer
244      *
245      /if not defined(LARGE_FILES)
246     D gztell          PR                  extproc('gztell')
247     D                                     like(z_off_t)
248     D  file                               value like(gzFile)                   File pointer
249      /else
250     D gztell          PR                  extproc('gztell64')
251     D                                     like(z_off_t)
252     D  file                               value like(gzFile)                   File pointer
253      *
254     D gztell64        PR                  extproc('gztell64')
255     D                                     like(z_off64_t)
256     D  file                               value like(gzFile)                   File pointer
257      /endif
258      *
259      /if not defined(LARGE_FILES)
260     D gzoffset        PR                  extproc('gzoffset')
261     D                                     like(z_off_t)
262     D  file                               value like(gzFile)                   File pointer
263      /else
264     D gzoffset        PR                  extproc('gzoffset64')
265     D                                     like(z_off_t)
266     D  file                               value like(gzFile)                   File pointer
267      *
268     D gzoffset64      PR                  extproc('gzoffset64')
269     D                                     like(z_off64_t)
270     D  file                               value like(gzFile)                   File pointer
271      /endif
272      *
273     D gzeof           PR            10i 0 extproc('gzeof')
274     D  file                               value like(gzFile)                   File pointer
275      *
276     D gzdirect        PR            10i 0 extproc('gzdirect')
277     D  file                               value like(gzFile)                   File pointer
278      *
279     D gzclose_r       PR            10i 0 extproc('gzclose_r')
280     D  file                               value like(gzFile)                   File pointer
281      *
282     D gzclose_w       PR            10i 0 extproc('gzclose_w')
283     D  file                               value like(gzFile)                   File pointer
284      *
285     D gzclose         PR            10i 0 extproc('gzclose')
286     D  file                               value like(gzFile)                   File pointer
287      *
288     D gzerror         PR              *   extproc('gzerror')                   Error string
289     D  file                               value like(gzFile)                   File pointer
290     D  errnum                       10I 0                                      Error code
291      *
292     D gzclearerr      PR                  extproc('gzclearerr')
293     D  file                               value like(gzFile)                   File pointer
294      *
295      **************************************************************************
296      *                        Basic function prototypes
297      **************************************************************************
298      *
299     D zlibVersion     PR              *   extproc('zlibVersion')               Version string
300      *
301     D deflateInit     PR            10I 0 extproc('deflateInit_')              Init. compression
302     D  strm                               like(z_stream)                       Compression stream
303     D  level                        10I 0 value                                Compression level
304     D  version                        *   value options(*string)               Version string
305     D  stream_size                  10i 0 value                                Stream struct. size
306      *
307     D deflate         PR            10I 0 extproc('deflate')                   Compress data
308     D  strm                               like(z_stream)                       Compression stream
309     D  flush                        10I 0 value                                Flush type required
310      *
311     D deflateEnd      PR            10I 0 extproc('deflateEnd')                Termin. compression
312     D  strm                               like(z_stream)                       Compression stream
313      *
314     D inflateInit     PR            10I 0 extproc('inflateInit_')              Init. expansion
315     D  strm                               like(z_stream)                       Expansion stream
316     D  version                        *   value options(*string)               Version string
317     D  stream_size                  10i 0 value                                Stream struct. size
318      *
319     D inflate         PR            10I 0 extproc('inflate')                   Expand data
320     D  strm                               like(z_stream)                       Expansion stream
321     D  flush                        10I 0 value                                Flush type required
322      *
323     D inflateEnd      PR            10I 0 extproc('inflateEnd')                Termin. expansion
324     D  strm                               like(z_stream)                       Expansion stream
325      *
326      **************************************************************************
327      *                        Advanced function prototypes
328      **************************************************************************
329      *
330     D deflateInit2    PR            10I 0 extproc('deflateInit2_')             Init. compression
331     D  strm                               like(z_stream)                       Compression stream
332     D  level                        10I 0 value                                Compression level
333     D  method                       10I 0 value                                Compression method
334     D  windowBits                   10I 0 value                                log2(window size)
335     D  memLevel                     10I 0 value                                Mem/cmpress tradeoff
336     D  strategy                     10I 0 value                                Compression strategy
337     D  version                        *   value options(*string)               Version string
338     D  stream_size                  10i 0 value                                Stream struct. size
339      *
340     D deflateSetDictionary...
341     D                 PR            10I 0 extproc('deflateSetDictionary')      Init. dictionary
342     D  strm                               like(z_stream)                       Compression stream
343     D  dictionary                65535    const options(*varsize)              Dictionary bytes
344     D  dictLength                   10U 0 value                                Dictionary length
345      *
346     D deflateCopy     PR            10I 0 extproc('deflateCopy')               Compress strm 2 strm
347     D  dest                               like(z_stream)                       Destination stream
348     D  source                             like(z_stream)                       Source stream
349      *
350     D deflateReset    PR            10I 0 extproc('deflateReset')              End and init. stream
351     D  strm                               like(z_stream)                       Compression stream
352      *
353     D deflateParams   PR            10I 0 extproc('deflateParams')             Change level & strat
354     D  strm                               like(z_stream)                       Compression stream
355     D  level                        10I 0 value                                Compression level
356     D  strategy                     10I 0 value                                Compression strategy
357      *
358     D deflateTune     PR            10I 0 extproc('deflateTune')
359     D  strm                               like(z_stream)                       Compression stream
360     D  good                         10I 0 value
361     D  lazy                         10I 0 value
362     D  nice                         10I 0 value
363     D  chain                        10I 0 value
364      *
365     D deflateBound    PR            10U 0 extproc('deflateBound')              Change level & strat
366     D  strm                               like(z_stream)                       Compression stream
367     D  sourcelen                    10U 0 value                                Compression level
368      *
369     D deflatePending  PR            10I 0 extproc('deflatePending')            Change level & strat
370     D  strm                               like(z_stream)                       Compression stream
371     D  pending                      10U 0                                      Pending bytes
372     D  bits                         10I 0                                      Pending bits
373      *
374     D deflatePrime    PR            10I 0 extproc('deflatePrime')              Change level & strat
375     D  strm                               like(z_stream)                       Compression stream
376     D  bits                         10I 0 value                                # of bits to insert
377     D  value                        10I 0 value                                Bits to insert
378      *
379     D inflateInit2    PR            10I 0 extproc('inflateInit2_')             Init. expansion
380     D  strm                               like(z_stream)                       Expansion stream
381     D  windowBits                   10I 0 value                                log2(window size)
382     D  version                        *   value options(*string)               Version string
383     D  stream_size                  10i 0 value                                Stream struct. size
384      *
385     D inflateSetDictionary...
386     D                 PR            10I 0 extproc('inflateSetDictionary')      Init. dictionary
387     D  strm                               like(z_stream)                       Expansion stream
388     D  dictionary                65535    const options(*varsize)              Dictionary bytes
389     D  dictLength                   10U 0 value                                Dictionary length
390      *
391     D inflateGetDictionary...
392     D                 PR            10I 0 extproc('inflateGetDictionary')      Get dictionary
393     D  strm                               like(z_stream)                       Expansion stream
394     D  dictionary                65535    options(*varsize)                    Dictionary bytes
395     D  dictLength                   10U 0                                      Dictionary length
396      *
397     D deflateGetDictionary...
398     D                 PR            10I 0 extproc('deflateGetDictionary')      Get dictionary
399     D  strm                               like(z_stream)                       Expansion stream
400     D  dictionary                65535    options(*varsize)                    Dictionary bytes
401     D  dictLength                   10U 0                                      Dictionary length
402      *
403     D inflateSync     PR            10I 0 extproc('inflateSync')               Sync. expansion
404     D  strm                               like(z_stream)                       Expansion stream
405      *
406     D inflateCopy     PR            10I 0 extproc('inflateCopy')
407     D  dest                               like(z_stream)                       Destination stream
408     D  source                             like(z_stream)                       Source stream
409      *
410     D inflateReset    PR            10I 0 extproc('inflateReset')              End and init. stream
411     D  strm                               like(z_stream)                       Expansion stream
412      *
413     D inflateReset2   PR            10I 0 extproc('inflateReset2')             End and init. stream
414     D  strm                               like(z_stream)                       Expansion stream
415     D  windowBits                   10I 0 value                                Log2(buffer size)
416      *
417     D inflatePrime    PR            10I 0 extproc('inflatePrime')              Insert bits
418     D  strm                               like(z_stream)                       Expansion stream
419     D  bits                         10I 0 value                                Bit count
420     D  value                        10I 0 value                                Bits to insert
421      *
422     D inflateMark     PR            10I 0 extproc('inflateMark')               Get inflate info
423     D  strm                               like(z_stream)                       Expansion stream
424      *
425     D inflateCodesUsed...
426                       PR            20U 0 extproc('inflateCodesUsed')
427     D  strm                               like(z_stream)                       Expansion stream
428      *
429     D inflateValidate...
430                       PR            20U 0 extproc('inflateValidate')
431     D  strm                               like(z_stream)                       Expansion stream
432     D  check                        10I 0 value
433      *
434     D inflateGetHeader...
435                       PR            10U 0 extproc('inflateGetHeader')
436     D  strm                               like(z_stream)                       Expansion stream
437     D  head                               like(gz_headerp)
438      *
439     D deflateSetHeader...
440                       PR            10U 0 extproc('deflateSetHeader')
441     D  strm                               like(z_stream)                       Expansion stream
442     D  head                               like(gz_headerp)
443      *
444     D inflateBackInit...
445     D                 PR            10I 0 extproc('inflateBackInit_')
446     D  strm                               like(z_stream)                       Expansion stream
447     D  windowBits                   10I 0 value                                Log2(buffer size)
448     D  window                    65535    options(*varsize)                    Buffer
449     D  version                        *   value options(*string)               Version string
450     D  stream_size                  10i 0 value                                Stream struct. size
451      *
452     D inflateBack     PR            10I 0 extproc('inflateBack')
453     D  strm                               like(z_stream)                       Expansion stream
454     D  in                             *   value procptr                        Input function
455     D  in_desc                        *   value                                Input descriptor
456     D  out                            *   value procptr                        Output function
457     D  out_desc                       *   value                                Output descriptor
458      *
459     D inflateBackEnd  PR            10I 0 extproc('inflateBackEnd')
460     D  strm                               like(z_stream)                       Expansion stream
461      *
462     D zlibCompileFlags...
463     D                 PR            10U 0 extproc('zlibCompileFlags')
464      *
465      **************************************************************************
466      *                        Checksum function prototypes
467      **************************************************************************
468      *
469     D adler32         PR            10U 0 extproc('adler32')                   New checksum
470     D  adler                        10U 0 value                                Old checksum
471     D  buf                       65535    const options(*varsize)              Bytes to accumulate
472     D  len                          10U 0 value                                Buffer length
473      *
474     D adler32_combine...
475                       PR            10U 0 extproc('adler32_combine')           New checksum
476     D  adler1                       10U 0 value                                Old checksum
477     D  adler2                       10U 0 value                                Old checksum
478     D  len2                         20U 0 value                                Buffer length
479      *
480     D adler32_z       PR            10U 0 extproc('adler32_z')                 New checksum
481     D  adler                        10U 0 value                                Old checksum
482     D  buf                       65535    const options(*varsize)              Bytes to accumulate
483     D  len                          20U 0 value                                Buffer length
484      *
485     D crc32           PR            10U 0 extproc('crc32')                     New checksum
486     D  crc                          10U 0 value                                Old checksum
487     D  buf                       65535    const options(*varsize)              Bytes to accumulate
488     D  len                          10U 0 value                                Buffer length
489      *
490     D crc32_combine...
491                       PR            10U 0 extproc('crc32_combine')             New checksum
492     D  crc1                         10U 0 value                                Old checksum
493     D  crc2                         10U 0 value                                Old checksum
494     D  len2                         20U 0 value                                Buffer length
495      *
496     D crc32_z         PR            10U 0 extproc('crc32_z')                   New checksum
497     D  crc                          10U 0 value                                Old checksum
498     D  buf                       65535    const options(*varsize)              Bytes to accumulate
499     D  len                          20U 0 value                                Buffer length
500      *
501      **************************************************************************
502      *                     Miscellaneous function prototypes
503      **************************************************************************
504      *
505     D zError          PR              *   extproc('zError')                    Error string
506     D  err                          10I 0 value                                Error code
507      *
508     D inflateSyncPoint...
509     D                 PR            10I 0 extproc('inflateSyncPoint')
510     D  strm                               like(z_stream)                       Expansion stream
511      *
512     D get_crc_table   PR              *   extproc('get_crc_table')             Ptr to ulongs
513      *
514     D inflateUndermine...
515     D                 PR            10I 0 extproc('inflateUndermine')
516     D  strm                               like(z_stream)                       Expansion stream
517     D  arg                          10I 0 value                                Error code
518      *
519     D inflateResetKeep...
520     D                 PR            10I 0 extproc('inflateResetKeep')          End and init. stream
521     D  strm                               like(z_stream)                       Expansion stream
522      *
523     D deflateResetKeep...
524     D                 PR            10I 0 extproc('deflateResetKeep')          End and init. stream
525     D  strm                               like(z_stream)                       Expansion stream
526      *
527      /endif
528