/* Copyright (C) 2015-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: dk4a85e.ctr */ #ifndef DK4A85E_H_INCLUDED /** Avoid multiple inclusions. */ #define DK4A85E_H_INCLUDED 1 #line 10 "dk4a85e.ctr" /** @file dk4a85e.h ASCII-85 encoder. First initialize the encoder using the dk4a85_enc_init(). Now add the binary bytes one by one using the dk4a85_enc_add() function, as long as you have bytes available and the function returns DK4_EDSTM_ACCEPT or DK4_EDSTM_FINISHED. If the function returns DK4_EDSTM_ACCEPT, no further action is required, the byte was successfully stored in the internal data structures. If dk4a85_enc_add() returns DK4_EDSTM_FINISHED, a sequence of 4 binary bytes was processed successfully, a 1 character or 5 character sequence was produced. Use dk4a85_enc_output() to obtain the characters. Input data length is not necessarily a multiple of 4, so after feeding all binary bytes some values might still be stored in the encoder. Use dk4a85_enc_finish() to check whether an incomplete final sequence is available. If the function returns DK4_EDSTM_FINISHED, use dk4a85_enc_output() to obtain the text characters for the final bytes. */ #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 DK4EDSTM_H_INCLUDED #if DK4_BUILDING_DKTOOLS4 #include "dk4edstm.h" #else #include #endif #endif /** ASCII 85 encoder. */ typedef struct { char ob[6]; /**< Output bytes, 5 + finalizer */ unsigned char ib[4]; /**< Input bytes to process. */ size_t ci; /**< Index of current input byte. */ size_t os; /**< Number of outupt bytes available */ short az; /**< Allow z encoding */ } dk4_a85_enc_t; #ifdef __cplusplus extern "C" { #endif /** Initialize ASCII 85 encoder before adding data. @param enc Encoder to initialize. @param az Flag: Allow 'z' output character. @param erp Error report, may be NULL. Error codes: - DK4_E_INVALID_ARGUMENTS if enc is NULL. */ void dk4a85_enc_init(dk4_a85_enc_t *enc, int az, dk4_er_t *erp); /** Add one byte to encoder. @param enc Encoder to use. @param input Input byte to add. @param erp Error report, may be NULL. @return Action to take, one from: - DK4_EDSTM_ACCEPT
if input was accepted, no further action necessary at the moment. - DK4_EDSTM_FINISHED
if a sequence of 4 input bytes was completed, use dk4a85_enc_output() to obtain the text characters. - DK4_EDSTM_ERROR
if an error occured. Error codes: - DK4_E_INVALID_ARGUMENTS if enc is NULL. */ int dk4a85_enc_add(dk4_a85_enc_t *enc, unsigned char input, dk4_er_t *erp); /** Check for incomplete sequence in state machine after processing all input bytes. @param enc Encoder to use. @param erp Error report, may be NULL. @return Action to take, one from: - DK4_EDSTM_ACCEPT
if there is no incomplete sequence in the state machine, no further action necessary. - DK4_EDSTM_FINISHED
if an incomplete final sequence is available, use dk4a85_enc_output() to obtain the text characters. - DK4_EDSTM_ERROR
if an error occured. Error codes: - DK4_E_INVALID_ARGUMENTS if enc is NULL. */ int dk4a85_enc_finish(dk4_a85_enc_t *enc, dk4_er_t *erp); /** Retrieve text sequence. @param dptr Address of destination pointer to set, should be initialized to NULL. @param szptr Address of size variable to set, should be initialized to 0. @param enc Encoder to use. @param erp Error report, may be NULL. @return 1 on success (text available), 0 otherwise. Error codes: - DK4_E_INVALID_ARGUMENTS if enc, dptr, or szptr is NULL. */ int dk4a85_enc_output( const char **dptr, size_t *szptr, dk4_a85_enc_t const *enc, dk4_er_t *erp ); #ifdef __cplusplus } #endif #endif