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