nim-miniz/miniz/miniz_api.nim

167 lines
5.2 KiB
Nim

# nim-miniz
# Copyright (c) 2021 Status Research & Development GmbH
# Licensed under either of
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE))
# * MIT license ([LICENSE-MIT](LICENSE-MIT))
# at your option.
# This file may not be copied, modified, or distributed except according to
# those terms.
import strutils
from os import quoteShell, DirSep, AltSep
const
minizPath = currentSourcePath.rsplit({DirSep, AltSep}, 1)[0]
{.passC: "-I" & quoteShell(minizPath).}
{.passC: "-D_LARGEFILE64_SOURCE=1".}
{.compile: minizPath & "/" & "miniz.c".}
type
MzError* {.size: sizeof(cint).} = enum
MZ_PARAM_ERROR = -10000
MZ_VERSION_ERROR = -6
MZ_BUF_ERROR = -5
MZ_MEM_ERROR = -4
MZ_DATA_ERROR = -3
MZ_STREAM_ERROR = -2
MZ_ERRNO = -1
MZ_OK = 0
MZ_STREAM_END = 1
MZ_NEED_DICT = 2
MzLevel* {.size: sizeof(cint).} = enum
MZ_DEFAULT_COMPRESSION = -1
MZ_NO_COMPRESSION = 0
MZ_BEST_SPEED = 1
MZ_LEVEL_2 = 2
MZ_LEVEL_3 = 3
MZ_LEVEL_4 = 4
MZ_LEVEL_5 = 5
MZ_LEVEL_6 = 6
MZ_LEVEL_7 = 7
MZ_LEVEL_8 = 8
MZ_BEST_COMPRESSION = 9
MZ_UBER_COMPRESSION = 10
MzMemLevel* {.size: sizeof(cint).} = enum
MZ_MEM_1 = 1
MZ_MEM_2 = 2
MZ_MEM_3 = 3
MZ_MEM_4 = 4
MZ_MEM_5 = 5
MZ_MEM_6 = 6
MZ_MEM_7 = 7
MZ_MEM_8 = 8
MZ_MEM_9 = 9
MzMethod* {.size: sizeof(cint).} = enum
MZ_DEFLATED = 8
MzWindowBits* {.size: sizeof(cint).} = enum
MZ_RAW_DEFLATE = -15
MZ_RAW_WINDOW_BITS_14 = -14
MZ_RAW_WINDOW_BITS_13 = -13
MZ_RAW_WINDOW_BITS_12 = -12
MZ_RAW_WINDOW_BITS_11 = -11
MZ_RAW_WINDOW_BITS_10 = -10
MZ_RAW_WINDOW_BITS_9 = -9
MZ_RAW_WINDOW_BITS_8 = -8
MZ_WINDOW_BITS_8 = 8
MZ_WINDOW_BITS_9 = 9
MZ_WINDOW_BITS_10 = 10
MZ_WINDOW_BITS_11 = 11
MZ_WINDOW_BITS_12 = 12
MZ_WINDOW_BITS_13 = 13
MZ_WINDOW_BITS_14 = 14
MZ_WINDOW_BITS_15 = 15
MzStrategy* {.size: sizeof(cint).} = enum
MZ_DEFAULT_STRATEGY = 0
MZ_FILTERED = 1
MZ_HUFFMAN_ONLY = 2
MZ_RLE = 3
MZ_FIXED = 4
MzFlush* {.size: sizeof(cint).} = enum
MZ_NO_FLUSH = 0
MZ_PARTIAL_FLUSH = 1
MZ_SYNC_FLUSH = 2
MZ_FULL_FLUSH = 3
MZ_FINISH = 4
MZ_BLOCK = 5
MzStream* {.importc: "mz_stream", header: "miniz.h".} = object
next_in* : ptr cuchar # pointer to next byte to read
avail_in* : cuint # number of bytes available at next_in
total_in : culong # total number of bytes consumed so far
next_out* : ptr cuchar # pointer to next byte to write
avail_out* : cuint # number of bytes that can be written to next_out
total_out* : culong # total number of bytes produced so far
const
MZ_DEFAULT_MEM_LEVEL* = MZ_MEM_8
MZ_DEFAULT_WINDOW_BITS* = MZ_WINDOW_BITS_15
MZ_DEFAULT_LEVEL* = MZ_LEVEL_6
proc mz_version*(): ptr char {.cdecl, importc: "mz_version",
header: "miniz.h".}
proc deflateInit*(mz: var MzStream, level: MzLevel): MzError {.cdecl,
importc: "mz_deflateInit", header: "miniz.h".}
proc deflateInit2*(mz: var MzStream, level: MzLevel, meth: MzMethod,
windowBits: MzWindowBits, memLevel: MzMemLevel,
strategy: MzStrategy): MzError {.cdecl,
importc: "mz_deflateInit2", header: "miniz.h".}
proc deflate*(mz: var MzStream, flush: MzFlush): MzError {.cdecl,
importc: "mz_deflate", header: "miniz.h".}
proc deflateBound*(mz: var MzStream, sourceLen: culong): culong {.cdecl,
importc: "mz_deflateBound", header: "miniz.h".}
proc deflateReset*(mz: var MzStream): MzError {.cdecl,
importc: "mz_deflateReset", header: "miniz.h".}
proc deflateEnd*(mz: var MzStream): MzError {.cdecl,
importc: "mz_deflateEnd", header: "miniz.h".}
proc inflateInit*(mz: var MzStream): MzError {.cdecl,
importc: "mz_inflateInit", header: "miniz.h".}
proc inflateInit2*(mz: var MzStream,
windowBits: MzWindowBits): MzError {.cdecl,
importc: "mz_inflateInit2", header: "miniz.h".}
proc inflateReset*(mz: var MzStream): MzError {.cdecl,
importc: "mz_inflateReset", header: "miniz.h".}
proc inflate*(mz: var MzStream, flush: MzFlush): MzError {.cdecl,
importc: "mz_inflate", header: "miniz.h".}
proc inflateEnd*(mz: var MzStream): MzError {.cdecl,
importc: "mz_inflateEnd", header: "miniz.h".}
proc mz_error*(err: MzError): ptr char {.cdecl,
importc: "mz_error", header: "miniz.h".}
const
MZ_CRC32_INIT* = 0.culong
proc mz_crc32*(crc: culong, buf: ptr cuchar,
bufLen: csize_t): culong {.cdecl,
importc: "mz_crc32", header: "miniz.h".}
func mz_crc32*[T: byte|char](input: openArray[T]): culong =
let dataPtr = if input.len == 0:
nil
else:
cast[ptr cuchar](input[0].unsafeAddr)
mz_crc32(MZ_CRC32_INIT,
dataPtr,
input.len.csize_t
).culong