diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/dktools/dk4a85d.h |
Initial commit
Diffstat (limited to 'support/dktools/dk4a85d.h')
-rw-r--r-- | support/dktools/dk4a85d.h | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/support/dktools/dk4a85d.h b/support/dktools/dk4a85d.h new file mode 100644 index 0000000000..0ab7ceadf9 --- /dev/null +++ b/support/dktools/dk4a85d.h @@ -0,0 +1,151 @@ +/* + 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<br> + if the input was accepted and stored in the decoder, no action + necessary. + - DK4_EDSTM_FINISHED<br> + if a sequence of 5 input text characters was completed, use + dk4a85_dec_output() to obtain the corresponding binary 4 bytes. + - DK4_EDSTM_STOP<br> + 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<br> + 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<br> + if there are no final bytes in the decoder, no action necessary. + - DK4_EDSTM_FINISHED<br> + if there are final bytes in the decoder, use dk4a85_dec_output() + to retrieve them. + - DK4_EDSTM_ERROR<br> + 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 |