{-# LINE 1 "Data/IterIO/ZlibInt.hsc" #-}
{-# OPTIONS_GHC -fno-warn-deprecated-flags #-}
{-# LINE 2 "Data/IterIO/ZlibInt.hsc" #-}
{-# LANGUAGE ForeignFunctionInterface #-}

-- | This module exposes the raw FFI interface to zlib C functions.
-- It is intended for internal use only, and should not be imported by
-- code outside the IterIO library.
module Data.IterIO.ZlibInt where

import Data.Word
import System.IO.Unsafe (unsafePerformIO)
import Foreign hiding (unsafePerformIO)
import Foreign.C


{-# LINE 15 "Data/IterIO/ZlibInt.hsc" #-}

foreign import ccall unsafe "zlib.h deflateInit_"
    c_deflateInit :: Ptr ZStream -> CInt -> CString -> CInt -> IO CInt
foreign import ccall unsafe "zlib.h deflateInit2_"
    c_deflateInit2 :: Ptr ZStream -> CInt -> ZMethod -> CInt -> CInt
                   -> ZStrategy -> CString -> CInt -> IO CInt
foreign import ccall unsafe "zlib.h deflate"
    c_deflate :: Ptr ZStream -> ZFlush -> IO CInt
foreign import ccall unsafe "zlib.h &deflateEnd"
    c_deflateEnd :: FunPtr (Ptr ZStream -> IO ())

foreign import ccall unsafe "zlib.h inflateInit_"
    c_inflateInit :: Ptr ZStream -> CString -> CInt -> IO CInt
foreign import ccall unsafe "zlib.h inflateInit2_"
    c_inflateInit2 :: Ptr ZStream -> CInt -> CString -> CInt -> IO CInt
foreign import ccall unsafe "zlib.h inflate"
    c_inflate :: Ptr ZStream -> ZFlush -> IO CInt
foreign import ccall unsafe "zlib.h &inflateEnd"
    c_inflateEnd :: FunPtr (Ptr ZStream -> IO ())

-- | Use this value for zlib format.  Add 16 for gzip format.  Negate
-- for raw zlib format.  When uncompressing, add 32 to determine
-- zlib/gzip format automatically.
max_wbits :: CInt
max_wbits = 15
{-# LINE 40 "Data/IterIO/ZlibInt.hsc" #-}

max_mem_level :: CInt
max_mem_level = 9
{-# LINE 43 "Data/IterIO/ZlibInt.hsc" #-}

def_mem_level :: CInt
def_mem_level = 8
{-# LINE 46 "Data/IterIO/ZlibInt.hsc" #-}

zlib_version :: CString
zlib_version = unsafePerformIO $ newCAString "1.2.6"
{-# LINE 49 "Data/IterIO/ZlibInt.hsc" #-}

z_stream_size :: (Num a) => a
z_stream_size = (56)
{-# LINE 52 "Data/IterIO/ZlibInt.hsc" #-}


{-# LINE 54 "Data/IterIO/ZlibInt.hsc" #-}
z_stream_alignment :: Int
z_stream_alignment = 4
{-# LINE 56 "Data/IterIO/ZlibInt.hsc" #-}

data ZStream = ZStream


{-# LINE 63 "Data/IterIO/ZlibInt.hsc" #-}
next_in :: Ptr ZStream -> Ptr (Ptr Word8)
next_in zptr = zptr `plusPtr` 0
{-# LINE 64 "Data/IterIO/ZlibInt.hsc" #-}
avail_in :: Ptr ZStream -> Ptr (CUInt)
avail_in zptr = zptr `plusPtr` 4
{-# LINE 65 "Data/IterIO/ZlibInt.hsc" #-}
total_in :: Ptr ZStream -> Ptr (CULong)
total_in zptr = zptr `plusPtr` 8
{-# LINE 66 "Data/IterIO/ZlibInt.hsc" #-}
next_out :: Ptr ZStream -> Ptr (Ptr Word8)
next_out zptr = zptr `plusPtr` 12
{-# LINE 67 "Data/IterIO/ZlibInt.hsc" #-}
avail_out :: Ptr ZStream -> Ptr (CUInt)
avail_out zptr = zptr `plusPtr` 16
{-# LINE 68 "Data/IterIO/ZlibInt.hsc" #-}
total_out :: Ptr ZStream -> Ptr (CULong)
total_out zptr = zptr `plusPtr` 20
{-# LINE 69 "Data/IterIO/ZlibInt.hsc" #-}
msg :: Ptr ZStream -> Ptr (CString)
msg zptr = zptr `plusPtr` 24
{-# LINE 70 "Data/IterIO/ZlibInt.hsc" #-}
zalloc :: Ptr ZStream -> Ptr (FunPtr (Ptr a -> CUInt -> CUInt -> Ptr b))
zalloc zptr = zptr `plusPtr` 32
{-# LINE 71 "Data/IterIO/ZlibInt.hsc" #-}
zfree :: Ptr ZStream -> Ptr (FunPtr (Ptr a -> Ptr b -> ()))
zfree zptr = zptr `plusPtr` 36
{-# LINE 72 "Data/IterIO/ZlibInt.hsc" #-}
opaque :: Ptr ZStream -> Ptr (Ptr a)
opaque zptr = zptr `plusPtr` 40
{-# LINE 73 "Data/IterIO/ZlibInt.hsc" #-}
data_type :: Ptr ZStream -> Ptr (ZDataType)
data_type zptr = zptr `plusPtr` 44
{-# LINE 74 "Data/IterIO/ZlibInt.hsc" #-}
adler :: Ptr ZStream -> Ptr (CULong)
adler zptr = zptr `plusPtr` 48
{-# LINE 75 "Data/IterIO/ZlibInt.hsc" #-}

newtype ZFlush = ZFlush CInt
z_NO_FLUSH  :: ZFlush
z_NO_FLUSH  = ZFlush 0
z_SYNC_FLUSH  :: ZFlush
z_SYNC_FLUSH  = ZFlush 2
z_FULL_FLUSH  :: ZFlush
z_FULL_FLUSH  = ZFlush 3
z_FINISH  :: ZFlush
z_FINISH  = ZFlush 4
z_BLOCK  :: ZFlush
z_BLOCK  = ZFlush 5

{-# LINE 84 "Data/IterIO/ZlibInt.hsc" #-}

z_OK  :: CInt
z_OK  =  0
z_STREAM_END  :: CInt
z_STREAM_END  =  1
z_NEED_DICT  :: CInt
z_NEED_DICT  =  2
z_ERRNO  :: CInt
z_ERRNO  =  (-1)
z_STREAM_ERROR  :: CInt
z_STREAM_ERROR  =  (-2)
z_DATA_ERROR  :: CInt
z_DATA_ERROR  =  (-3)
z_MEM_ERROR  :: CInt
z_MEM_ERROR  =  (-4)
z_BUF_ERROR  :: CInt
z_BUF_ERROR  =  (-5)
z_VERSION_ERROR  :: CInt
z_VERSION_ERROR  =  (-6)

{-# LINE 96 "Data/IterIO/ZlibInt.hsc" #-}

z_DEFAULT_COMPRESSION  :: CInt
z_DEFAULT_COMPRESSION  =  (-1)

{-# LINE 100 "Data/IterIO/ZlibInt.hsc" #-}

newtype ZStrategy = ZStrategy CInt
z_FILTERED  :: ZStrategy
z_FILTERED  = ZStrategy 1
z_HUFFMAN_ONLY  :: ZStrategy
z_HUFFMAN_ONLY  = ZStrategy 2
z_RLE  :: ZStrategy
z_RLE  = ZStrategy 3
z_FIXED  :: ZStrategy
z_FIXED  = ZStrategy 4
z_DEFAULT_STRATEGY  :: ZStrategy
z_DEFAULT_STRATEGY  = ZStrategy 0

{-# LINE 109 "Data/IterIO/ZlibInt.hsc" #-}

newtype ZDataType = ZDataType CInt
z_BINARY  :: ZDataType
z_BINARY  = ZDataType 0
z_TEXT  :: ZDataType
z_TEXT  = ZDataType 1
z_UNKNOWN  :: ZDataType
z_UNKNOWN  = ZDataType 2

{-# LINE 116 "Data/IterIO/ZlibInt.hsc" #-}

newtype ZMethod = ZMethod CInt
z_DEFLATED  :: ZMethod
z_DEFLATED  = ZMethod 8

{-# LINE 121 "Data/IterIO/ZlibInt.hsc" #-}


-- Local Variables:
-- haskell-program-name: "ghci -lz"
-- End: