/* WARNING: This file was generated by dkct. 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 */ /* Copyright (C) 2015-2017, Dirk Krause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above opyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #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. */ #include "dk4conf.h" #include "dk4error.h" /** 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 *dec, dk4_er_t *erp ); #ifdef __cplusplus } #endif #endif