/* 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: dk4a85d.ctr */ #ifndef DK4A85D_H_INCLUDED /** Avoid multiple inclusions. */ #define DK4A85D_H_INCLUDED 1 #line 10 "dk4a85d.ctr" /** @file dk4a85d.h ASCII-85 decoder. First initialize the decoder structure, use the dk4a85_dec_init() function. Add bytes to the decoder using the dk4a85_dec_add() function as long as adding results in DK4_EDSTM_ACCEPT or DK4_EDSTM_FINISHED. On DK4_EDSTM_FINISHED use dk4a85_dec_output() to obtain the binary bytes. A return value DK4_EDSTM_STOP indicates that the end of data (EOD) marker was found in the data stream, you must not add further characters to the decoder. After adding all bytes use dk4a85_dec_finish() to check whether there is data for a final incomplete sequence stored in the decoder. If the test results in DK4_EDSTM_FINISHED, use dk4a85_dec_output() to obtain the binary bytes. The dk4a85_dec_finish() is also necessary if you stopped feeding input due to a DK4_EDSTM_STOP result from dk4a85_dec_add(). Note: You can not directly call dk4a85_dec_output() after receiving DK4_EDSTM_STOP from dk4a85_dec_add(), the call to dk4a85_dec_finish() is required. */ #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 /** ASCII 85 decoder. */ typedef struct { char ib[6]; /**< Input bytes, ASCII. */ unsigned char ob[4]; /**< Output bytes, binary. */ size_t os; /**< Output buffer size. */ size_t is; /**< Index of next input byte to receive. */ int tf; /**< Flag: Tilde found */ } dk4_a85_dec_t; #ifdef __cplusplus extern "C" { #endif /** Initialize decoder before using it. @param dec Decoder to initialize. @param erp Error report, may be NULL. */ void dk4a85_dec_init(dk4_a85_dec_t *dec, dk4_er_t *erp); /** Add one text character to the decoder. @param dec Decoder to use. @param input Input text character. @param erp Error report, may be NULL. @return Action to take, one from: - DK4_EDSTM_ACCEPT
if the input was accepted and stored in the decoder, no action necessary. - DK4_EDSTM_FINISHED
if a sequence of 5 input text characters was completed, use dk4a85_dec_output() to obtain the corresponding binary 4 bytes. - DK4_EDSTM_STOP
if an EOD (end of data) marker was found. Use dk4a85_dec_finish() and take appropriate action to process the final byte sequence. - DK4_EDSTM_ERROR
if an error occured. */ int dk4a85_dec_add(dk4_a85_dec_t *dec, char input, dk4_er_t *erp); /** Check whether final bytes are stored in the decoder. @param dec Decoder to use. @param erp Error report, may be NULL. @return Action to take, one from: - DK4_EDSTM_ACCEPT
if there are no final bytes in the decoder, no action necessary. - DK4_EDSTM_FINISHED
if there are final bytes in the decoder, use dk4a85_dec_output() to retrieve them. - DK4_EDSTM_ERROR
if an error occured. */ int dk4a85_dec_finish(dk4_a85_dec_t *dec, dk4_er_t *erp); /** Retrieve final bytes. @param dptr Address of buffer pointer to set, should be initialized to NULL. @param szptr Address of size variable to set, should be initialized to 0. @param dec Decoder to use. @param erp Error report, may be NULL. @return 1 on success (bytes available, 0 otherwise). */ int dk4a85_dec_output( const unsigned char **dptr, size_t *szptr, dk4_a85_dec_t const *dec, dk4_er_t *erp ); #ifdef __cplusplus } #endif #endif