/*
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