cannam@128: ---------------------------------------------------------------- cannam@128: -- ZLib for Ada thick binding. -- cannam@128: -- -- cannam@128: -- Copyright (C) 2002-2003 Dmitriy Anisimkov -- cannam@128: -- -- cannam@128: -- Open source license information is in the zlib.ads file. -- cannam@128: ---------------------------------------------------------------- cannam@128: cannam@128: -- $Id: zlib-thin.ads,v 1.11 2004/07/23 06:33:11 vagul Exp $ cannam@128: cannam@128: with Interfaces.C.Strings; cannam@128: cannam@128: with System; cannam@128: cannam@128: private package ZLib.Thin is cannam@128: cannam@128: -- From zconf.h cannam@128: cannam@128: MAX_MEM_LEVEL : constant := 9; -- zconf.h:105 cannam@128: -- zconf.h:105 cannam@128: MAX_WBITS : constant := 15; -- zconf.h:115 cannam@128: -- 32K LZ77 window cannam@128: -- zconf.h:115 cannam@128: SEEK_SET : constant := 8#0000#; -- zconf.h:244 cannam@128: -- Seek from beginning of file. cannam@128: -- zconf.h:244 cannam@128: SEEK_CUR : constant := 1; -- zconf.h:245 cannam@128: -- Seek from current position. cannam@128: -- zconf.h:245 cannam@128: SEEK_END : constant := 2; -- zconf.h:246 cannam@128: -- Set file pointer to EOF plus "offset" cannam@128: -- zconf.h:246 cannam@128: cannam@128: type Byte is new Interfaces.C.unsigned_char; -- 8 bits cannam@128: -- zconf.h:214 cannam@128: type UInt is new Interfaces.C.unsigned; -- 16 bits or more cannam@128: -- zconf.h:216 cannam@128: type Int is new Interfaces.C.int; cannam@128: cannam@128: type ULong is new Interfaces.C.unsigned_long; -- 32 bits or more cannam@128: -- zconf.h:217 cannam@128: subtype Chars_Ptr is Interfaces.C.Strings.chars_ptr; cannam@128: cannam@128: type ULong_Access is access ULong; cannam@128: type Int_Access is access Int; cannam@128: cannam@128: subtype Voidp is System.Address; -- zconf.h:232 cannam@128: cannam@128: subtype Byte_Access is Voidp; cannam@128: cannam@128: Nul : constant Voidp := System.Null_Address; cannam@128: -- end from zconf cannam@128: cannam@128: Z_NO_FLUSH : constant := 8#0000#; -- zlib.h:125 cannam@128: -- zlib.h:125 cannam@128: Z_PARTIAL_FLUSH : constant := 1; -- zlib.h:126 cannam@128: -- will be removed, use cannam@128: -- Z_SYNC_FLUSH instead cannam@128: -- zlib.h:126 cannam@128: Z_SYNC_FLUSH : constant := 2; -- zlib.h:127 cannam@128: -- zlib.h:127 cannam@128: Z_FULL_FLUSH : constant := 3; -- zlib.h:128 cannam@128: -- zlib.h:128 cannam@128: Z_FINISH : constant := 4; -- zlib.h:129 cannam@128: -- zlib.h:129 cannam@128: Z_OK : constant := 8#0000#; -- zlib.h:132 cannam@128: -- zlib.h:132 cannam@128: Z_STREAM_END : constant := 1; -- zlib.h:133 cannam@128: -- zlib.h:133 cannam@128: Z_NEED_DICT : constant := 2; -- zlib.h:134 cannam@128: -- zlib.h:134 cannam@128: Z_ERRNO : constant := -1; -- zlib.h:135 cannam@128: -- zlib.h:135 cannam@128: Z_STREAM_ERROR : constant := -2; -- zlib.h:136 cannam@128: -- zlib.h:136 cannam@128: Z_DATA_ERROR : constant := -3; -- zlib.h:137 cannam@128: -- zlib.h:137 cannam@128: Z_MEM_ERROR : constant := -4; -- zlib.h:138 cannam@128: -- zlib.h:138 cannam@128: Z_BUF_ERROR : constant := -5; -- zlib.h:139 cannam@128: -- zlib.h:139 cannam@128: Z_VERSION_ERROR : constant := -6; -- zlib.h:140 cannam@128: -- zlib.h:140 cannam@128: Z_NO_COMPRESSION : constant := 8#0000#; -- zlib.h:145 cannam@128: -- zlib.h:145 cannam@128: Z_BEST_SPEED : constant := 1; -- zlib.h:146 cannam@128: -- zlib.h:146 cannam@128: Z_BEST_COMPRESSION : constant := 9; -- zlib.h:147 cannam@128: -- zlib.h:147 cannam@128: Z_DEFAULT_COMPRESSION : constant := -1; -- zlib.h:148 cannam@128: -- zlib.h:148 cannam@128: Z_FILTERED : constant := 1; -- zlib.h:151 cannam@128: -- zlib.h:151 cannam@128: Z_HUFFMAN_ONLY : constant := 2; -- zlib.h:152 cannam@128: -- zlib.h:152 cannam@128: Z_DEFAULT_STRATEGY : constant := 8#0000#; -- zlib.h:153 cannam@128: -- zlib.h:153 cannam@128: Z_BINARY : constant := 8#0000#; -- zlib.h:156 cannam@128: -- zlib.h:156 cannam@128: Z_ASCII : constant := 1; -- zlib.h:157 cannam@128: -- zlib.h:157 cannam@128: Z_UNKNOWN : constant := 2; -- zlib.h:158 cannam@128: -- zlib.h:158 cannam@128: Z_DEFLATED : constant := 8; -- zlib.h:161 cannam@128: -- zlib.h:161 cannam@128: Z_NULL : constant := 8#0000#; -- zlib.h:164 cannam@128: -- for initializing zalloc, zfree, opaque cannam@128: -- zlib.h:164 cannam@128: type gzFile is new Voidp; -- zlib.h:646 cannam@128: cannam@128: type Z_Stream is private; cannam@128: cannam@128: type Z_Streamp is access all Z_Stream; -- zlib.h:89 cannam@128: cannam@128: type alloc_func is access function cannam@128: (Opaque : Voidp; cannam@128: Items : UInt; cannam@128: Size : UInt) cannam@128: return Voidp; -- zlib.h:63 cannam@128: cannam@128: type free_func is access procedure (opaque : Voidp; address : Voidp); cannam@128: cannam@128: function zlibVersion return Chars_Ptr; cannam@128: cannam@128: function Deflate (strm : Z_Streamp; flush : Int) return Int; cannam@128: cannam@128: function DeflateEnd (strm : Z_Streamp) return Int; cannam@128: cannam@128: function Inflate (strm : Z_Streamp; flush : Int) return Int; cannam@128: cannam@128: function InflateEnd (strm : Z_Streamp) return Int; cannam@128: cannam@128: function deflateSetDictionary cannam@128: (strm : Z_Streamp; cannam@128: dictionary : Byte_Access; cannam@128: dictLength : UInt) cannam@128: return Int; cannam@128: cannam@128: function deflateCopy (dest : Z_Streamp; source : Z_Streamp) return Int; cannam@128: -- zlib.h:478 cannam@128: cannam@128: function deflateReset (strm : Z_Streamp) return Int; -- zlib.h:495 cannam@128: cannam@128: function deflateParams cannam@128: (strm : Z_Streamp; cannam@128: level : Int; cannam@128: strategy : Int) cannam@128: return Int; -- zlib.h:506 cannam@128: cannam@128: function inflateSetDictionary cannam@128: (strm : Z_Streamp; cannam@128: dictionary : Byte_Access; cannam@128: dictLength : UInt) cannam@128: return Int; -- zlib.h:548 cannam@128: cannam@128: function inflateSync (strm : Z_Streamp) return Int; -- zlib.h:565 cannam@128: cannam@128: function inflateReset (strm : Z_Streamp) return Int; -- zlib.h:580 cannam@128: cannam@128: function compress cannam@128: (dest : Byte_Access; cannam@128: destLen : ULong_Access; cannam@128: source : Byte_Access; cannam@128: sourceLen : ULong) cannam@128: return Int; -- zlib.h:601 cannam@128: cannam@128: function compress2 cannam@128: (dest : Byte_Access; cannam@128: destLen : ULong_Access; cannam@128: source : Byte_Access; cannam@128: sourceLen : ULong; cannam@128: level : Int) cannam@128: return Int; -- zlib.h:615 cannam@128: cannam@128: function uncompress cannam@128: (dest : Byte_Access; cannam@128: destLen : ULong_Access; cannam@128: source : Byte_Access; cannam@128: sourceLen : ULong) cannam@128: return Int; cannam@128: cannam@128: function gzopen (path : Chars_Ptr; mode : Chars_Ptr) return gzFile; cannam@128: cannam@128: function gzdopen (fd : Int; mode : Chars_Ptr) return gzFile; cannam@128: cannam@128: function gzsetparams cannam@128: (file : gzFile; cannam@128: level : Int; cannam@128: strategy : Int) cannam@128: return Int; cannam@128: cannam@128: function gzread cannam@128: (file : gzFile; cannam@128: buf : Voidp; cannam@128: len : UInt) cannam@128: return Int; cannam@128: cannam@128: function gzwrite cannam@128: (file : in gzFile; cannam@128: buf : in Voidp; cannam@128: len : in UInt) cannam@128: return Int; cannam@128: cannam@128: function gzprintf (file : in gzFile; format : in Chars_Ptr) return Int; cannam@128: cannam@128: function gzputs (file : in gzFile; s : in Chars_Ptr) return Int; cannam@128: cannam@128: function gzgets cannam@128: (file : gzFile; cannam@128: buf : Chars_Ptr; cannam@128: len : Int) cannam@128: return Chars_Ptr; cannam@128: cannam@128: function gzputc (file : gzFile; char : Int) return Int; cannam@128: cannam@128: function gzgetc (file : gzFile) return Int; cannam@128: cannam@128: function gzflush (file : gzFile; flush : Int) return Int; cannam@128: cannam@128: function gzseek cannam@128: (file : gzFile; cannam@128: offset : Int; cannam@128: whence : Int) cannam@128: return Int; cannam@128: cannam@128: function gzrewind (file : gzFile) return Int; cannam@128: cannam@128: function gztell (file : gzFile) return Int; cannam@128: cannam@128: function gzeof (file : gzFile) return Int; cannam@128: cannam@128: function gzclose (file : gzFile) return Int; cannam@128: cannam@128: function gzerror (file : gzFile; errnum : Int_Access) return Chars_Ptr; cannam@128: cannam@128: function adler32 cannam@128: (adler : ULong; cannam@128: buf : Byte_Access; cannam@128: len : UInt) cannam@128: return ULong; cannam@128: cannam@128: function crc32 cannam@128: (crc : ULong; cannam@128: buf : Byte_Access; cannam@128: len : UInt) cannam@128: return ULong; cannam@128: cannam@128: function deflateInit cannam@128: (strm : Z_Streamp; cannam@128: level : Int; cannam@128: version : Chars_Ptr; cannam@128: stream_size : Int) cannam@128: return Int; cannam@128: cannam@128: function deflateInit2 cannam@128: (strm : Z_Streamp; cannam@128: level : Int; cannam@128: method : Int; cannam@128: windowBits : Int; cannam@128: memLevel : Int; cannam@128: strategy : Int; cannam@128: version : Chars_Ptr; cannam@128: stream_size : Int) cannam@128: return Int; cannam@128: cannam@128: function Deflate_Init cannam@128: (strm : Z_Streamp; cannam@128: level : Int; cannam@128: method : Int; cannam@128: windowBits : Int; cannam@128: memLevel : Int; cannam@128: strategy : Int) cannam@128: return Int; cannam@128: pragma Inline (Deflate_Init); cannam@128: cannam@128: function inflateInit cannam@128: (strm : Z_Streamp; cannam@128: version : Chars_Ptr; cannam@128: stream_size : Int) cannam@128: return Int; cannam@128: cannam@128: function inflateInit2 cannam@128: (strm : in Z_Streamp; cannam@128: windowBits : in Int; cannam@128: version : in Chars_Ptr; cannam@128: stream_size : in Int) cannam@128: return Int; cannam@128: cannam@128: function inflateBackInit cannam@128: (strm : in Z_Streamp; cannam@128: windowBits : in Int; cannam@128: window : in Byte_Access; cannam@128: version : in Chars_Ptr; cannam@128: stream_size : in Int) cannam@128: return Int; cannam@128: -- Size of window have to be 2**windowBits. cannam@128: cannam@128: function Inflate_Init (strm : Z_Streamp; windowBits : Int) return Int; cannam@128: pragma Inline (Inflate_Init); cannam@128: cannam@128: function zError (err : Int) return Chars_Ptr; cannam@128: cannam@128: function inflateSyncPoint (z : Z_Streamp) return Int; cannam@128: cannam@128: function get_crc_table return ULong_Access; cannam@128: cannam@128: -- Interface to the available fields of the z_stream structure. cannam@128: -- The application must update next_in and avail_in when avail_in has cannam@128: -- dropped to zero. It must update next_out and avail_out when avail_out cannam@128: -- has dropped to zero. The application must initialize zalloc, zfree and cannam@128: -- opaque before calling the init function. cannam@128: cannam@128: procedure Set_In cannam@128: (Strm : in out Z_Stream; cannam@128: Buffer : in Voidp; cannam@128: Size : in UInt); cannam@128: pragma Inline (Set_In); cannam@128: cannam@128: procedure Set_Out cannam@128: (Strm : in out Z_Stream; cannam@128: Buffer : in Voidp; cannam@128: Size : in UInt); cannam@128: pragma Inline (Set_Out); cannam@128: cannam@128: procedure Set_Mem_Func cannam@128: (Strm : in out Z_Stream; cannam@128: Opaque : in Voidp; cannam@128: Alloc : in alloc_func; cannam@128: Free : in free_func); cannam@128: pragma Inline (Set_Mem_Func); cannam@128: cannam@128: function Last_Error_Message (Strm : in Z_Stream) return String; cannam@128: pragma Inline (Last_Error_Message); cannam@128: cannam@128: function Avail_Out (Strm : in Z_Stream) return UInt; cannam@128: pragma Inline (Avail_Out); cannam@128: cannam@128: function Avail_In (Strm : in Z_Stream) return UInt; cannam@128: pragma Inline (Avail_In); cannam@128: cannam@128: function Total_In (Strm : in Z_Stream) return ULong; cannam@128: pragma Inline (Total_In); cannam@128: cannam@128: function Total_Out (Strm : in Z_Stream) return ULong; cannam@128: pragma Inline (Total_Out); cannam@128: cannam@128: function inflateCopy cannam@128: (dest : in Z_Streamp; cannam@128: Source : in Z_Streamp) cannam@128: return Int; cannam@128: cannam@128: function compressBound (Source_Len : in ULong) return ULong; cannam@128: cannam@128: function deflateBound cannam@128: (Strm : in Z_Streamp; cannam@128: Source_Len : in ULong) cannam@128: return ULong; cannam@128: cannam@128: function gzungetc (C : in Int; File : in gzFile) return Int; cannam@128: cannam@128: function zlibCompileFlags return ULong; cannam@128: cannam@128: private cannam@128: cannam@128: type Z_Stream is record -- zlib.h:68 cannam@128: Next_In : Voidp := Nul; -- next input byte cannam@128: Avail_In : UInt := 0; -- number of bytes available at next_in cannam@128: Total_In : ULong := 0; -- total nb of input bytes read so far cannam@128: Next_Out : Voidp := Nul; -- next output byte should be put there cannam@128: Avail_Out : UInt := 0; -- remaining free space at next_out cannam@128: Total_Out : ULong := 0; -- total nb of bytes output so far cannam@128: msg : Chars_Ptr; -- last error message, NULL if no error cannam@128: state : Voidp; -- not visible by applications cannam@128: zalloc : alloc_func := null; -- used to allocate the internal state cannam@128: zfree : free_func := null; -- used to free the internal state cannam@128: opaque : Voidp; -- private data object passed to cannam@128: -- zalloc and zfree cannam@128: data_type : Int; -- best guess about the data type: cannam@128: -- ascii or binary cannam@128: adler : ULong; -- adler32 value of the uncompressed cannam@128: -- data cannam@128: reserved : ULong; -- reserved for future use cannam@128: end record; cannam@128: cannam@128: pragma Convention (C, Z_Stream); cannam@128: cannam@128: pragma Import (C, zlibVersion, "zlibVersion"); cannam@128: pragma Import (C, Deflate, "deflate"); cannam@128: pragma Import (C, DeflateEnd, "deflateEnd"); cannam@128: pragma Import (C, Inflate, "inflate"); cannam@128: pragma Import (C, InflateEnd, "inflateEnd"); cannam@128: pragma Import (C, deflateSetDictionary, "deflateSetDictionary"); cannam@128: pragma Import (C, deflateCopy, "deflateCopy"); cannam@128: pragma Import (C, deflateReset, "deflateReset"); cannam@128: pragma Import (C, deflateParams, "deflateParams"); cannam@128: pragma Import (C, inflateSetDictionary, "inflateSetDictionary"); cannam@128: pragma Import (C, inflateSync, "inflateSync"); cannam@128: pragma Import (C, inflateReset, "inflateReset"); cannam@128: pragma Import (C, compress, "compress"); cannam@128: pragma Import (C, compress2, "compress2"); cannam@128: pragma Import (C, uncompress, "uncompress"); cannam@128: pragma Import (C, gzopen, "gzopen"); cannam@128: pragma Import (C, gzdopen, "gzdopen"); cannam@128: pragma Import (C, gzsetparams, "gzsetparams"); cannam@128: pragma Import (C, gzread, "gzread"); cannam@128: pragma Import (C, gzwrite, "gzwrite"); cannam@128: pragma Import (C, gzprintf, "gzprintf"); cannam@128: pragma Import (C, gzputs, "gzputs"); cannam@128: pragma Import (C, gzgets, "gzgets"); cannam@128: pragma Import (C, gzputc, "gzputc"); cannam@128: pragma Import (C, gzgetc, "gzgetc"); cannam@128: pragma Import (C, gzflush, "gzflush"); cannam@128: pragma Import (C, gzseek, "gzseek"); cannam@128: pragma Import (C, gzrewind, "gzrewind"); cannam@128: pragma Import (C, gztell, "gztell"); cannam@128: pragma Import (C, gzeof, "gzeof"); cannam@128: pragma Import (C, gzclose, "gzclose"); cannam@128: pragma Import (C, gzerror, "gzerror"); cannam@128: pragma Import (C, adler32, "adler32"); cannam@128: pragma Import (C, crc32, "crc32"); cannam@128: pragma Import (C, deflateInit, "deflateInit_"); cannam@128: pragma Import (C, inflateInit, "inflateInit_"); cannam@128: pragma Import (C, deflateInit2, "deflateInit2_"); cannam@128: pragma Import (C, inflateInit2, "inflateInit2_"); cannam@128: pragma Import (C, zError, "zError"); cannam@128: pragma Import (C, inflateSyncPoint, "inflateSyncPoint"); cannam@128: pragma Import (C, get_crc_table, "get_crc_table"); cannam@128: cannam@128: -- since zlib 1.2.0: cannam@128: cannam@128: pragma Import (C, inflateCopy, "inflateCopy"); cannam@128: pragma Import (C, compressBound, "compressBound"); cannam@128: pragma Import (C, deflateBound, "deflateBound"); cannam@128: pragma Import (C, gzungetc, "gzungetc"); cannam@128: pragma Import (C, zlibCompileFlags, "zlibCompileFlags"); cannam@128: cannam@128: pragma Import (C, inflateBackInit, "inflateBackInit_"); cannam@128: cannam@128: -- I stopped binding the inflateBack routines, becouse realize that cannam@128: -- it does not support zlib and gzip headers for now, and have no cannam@128: -- symmetric deflateBack routines. cannam@128: -- ZLib-Ada is symmetric regarding deflate/inflate data transformation cannam@128: -- and has a similar generic callback interface for the cannam@128: -- deflate/inflate transformation based on the regular Deflate/Inflate cannam@128: -- routines. cannam@128: cannam@128: -- pragma Import (C, inflateBack, "inflateBack"); cannam@128: -- pragma Import (C, inflateBackEnd, "inflateBackEnd"); cannam@128: cannam@128: end ZLib.Thin;