/* Copyright (C) 2016-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: dk4strmco.ctr */ #ifndef DK4STRMCO_H_INCLUDED /** Avoid multiple inclusions. */ #define DK4STRMCO_H_INCLUDED 1 #line 9 "dk4strmco.ctr" /** @file dk4strmco.h Compression streams. A compression stream is an additional dk4_stream_t object on top of an existring stream (referred to as downside stream). Data written to the compression stream is compressed using one or multiple algorithms: - Run-length encoding as preprocessing. - Flate compression or LZW compression. - ASCII-Hex or ASCII-85 output encoding. The results of the compression operations are passed to the downside stream. Note: Closing the compression stream does not close the downside stream. So you create a mixed stream (i.e. for PDF files) containing both plain text and compressed chunks. To add a compressed chunk open a compression stream on top of the existing output stream, pass data to the compression stream, close the compression stream and continue writing to the output stream. */ #ifndef DK4CONF_H_INCLUDED #if DK4_BUILDING_DKTOOLS4 #include "dk4conf.h" #else #include #endif #endif #ifndef DK4ERROR_H_INCLUDED #if DK4_BUILDING_DKTOOLS4 #include "dk4error.h" #else #include #endif #endif #ifndef DK4STRM_H_INCLUDED #if DK4_BUILDING_DKTOOLS4 #include "dk4strm.h" #else #include #endif #endif /** Preprocessing before compression. */ enum dk4_strmco_pp { DK4_STRMCO_PP_NONE = 0 , /**< No preprocessing. */ DK4_STRMCO_PP_RUNLENGTH /**< Use run-length before real compression. */ }; /** Compression method. */ enum dk4_strmco_co { DK4_STRMCO_CO_NONE = 0 , /**< No compression. */ DK4_STRMCO_CO_FLATE , /**< Use flate compression. */ DK4_STRMCO_CO_LZW /**< Use LZW compression for PS level 2. */ }; /** Output encoding. */ enum dk4_strmco_oe { DK4_STRMCO_OE_NONE = 0 , /**< No output encoding. */ DK4_STRMCO_OE_HEX , /**< Hexadecimal encoding. */ DK4_STRMCO_OE_ASCII85 /**< ASCII85 encoding. */ }; /** Flags for compression stream. */ enum { DK4_STRMCO_FL_EOD_PP = 1 , /**< Write EOD marker at end of preproc. */ DK4_STRMCO_FL_EOD_OE = 2 , /**< Write EOD marker at end of out enc. */ DK4_STRMCO_FL_NL_OE = 4 , /**< Break output lines before 80. */ DK4_STRMCO_FL_CR_NL = 8 , /**< Use CR/NL combination. */ DK4_STRMCO_FL_UPPER_OE = 16 , /**< Upper case characters in hex digits. */ }; #ifdef __cplusplus extern "C" { #endif /** Open a compressing stream on top of an existing stream. Only write operations can be performed on the new stream, no read operations. @param strm Low-level destination stream, must be writable. @param pp Preprocessing method. @param co Compression method. @param oe Output encoding. @param fl Flags. @param erp Error report, may be NULL. @return Valid pointer to new stream on success, NULL on error. Error codes: - DK4_E_INVALID_ARGUMENTS
if strm is NULL, - DK4_E_MATH_OVERFLOW
on numeric overflow when calculating the product of elsize and nelem, - DK4_E_MEMORY_ALLOCATION_FAILED
with mem.elsize and mem.nelem set if there is not enough memory available. */ dk4_stream_t * dk4strmco_open( dk4_stream_t *strm, enum dk4_strmco_pp pp, enum dk4_strmco_co co, enum dk4_strmco_oe oe, int fl, dk4_er_t *erp ); #ifdef __cplusplus } #endif /* vim: set ai sw=4 ts=4 : */ #endif