/* 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: dk4ahd.ctr */ #ifndef DK4AHD_H_INCLUDED /** Avoid multiple inclusions. */ #define DK4AHD_H_INCLUDED 1 #line 10 "dk4ahd.ctr" /** @file dk4ahd.h ASCIIHex decoder. First initialize the decoder using the dk4ahex_dec_init() function. Add text characters using the dk4ahex_dec_add() function. The function returns DK4_EDSTM_ACCEPT if the text character was successfully stored in the decoder without completing a byte. The DK4_EDSTM_FINISHED return code indicates that a byte was finished, use dk4ahex_output() to retrieve it. The DK4_EDSTM_STOP return code indicates that an end of data (EOD) marker was found. After feeding all text characters into the decoder use dk4ahex_finish() to check whether there is an unprocessed half-byte stored. If the function returns DK4_EDSTM_FINISHED, use dk4ahex_output() to retrieve the final byte. Note: The call to dk4ahex_finish() is also necessary after obtaining DK4_EDSTM_STOP from dk4ahex_dec_add(). */ #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-Hex decoder. */ typedef struct { int cpos; /**< Current position. */ unsigned char obyte; /**< Output byte. */ } dk4_ahex_dec_t; #ifdef __cplusplus extern "C" { #endif /** Initialize decoder. @param dec Decoder to initialize. @param erp Error report, may be NULL. */ void dk4ahex_dec_init(dk4_ahex_dec_t *dec, dk4_er_t *erp); /** Add text character to decoder. @param dec Decoder. @param tc Text character to add. @param erp Error report, may be NULL. @return Action to take: - DK4_EDSTM_ACCEPT
if the text was saved in the decoder, no action necessary. - DK4_EDSTM_FINISHED
if a byte was completed, use dk4ahex_dec_output() to retrieve the byte. - DK4_EDSTM_STOP
if the end of data (EOD) marker was detected. Use dk4ahex_finish() to check whether there is still data in the decoder. - DK4_EDSTM_ERROR
if an error occured. */ int dk4ahex_dec_add(dk4_ahex_dec_t *dec, char tc, dk4_er_t *erp); /** Check for final byte. @param dec Decoder. @param erp Error report, may be NULL. @return Action to take, one from: - DK4_EDSTM_ACCEPT
if there is no action necessary. - DK4_EDSTM_FINISHED
if there is data available, use dk4ahex_dec_output() to retrieve the byte. - DK4_EDSTM_ERROR
if an error occured. */ int dk4ahex_finish(dk4_ahex_dec_t *dec, dk4_er_t *erp); /** Retrieve current decoder content. @param dec Decoder. @param erp Error report, may be NULL. @return The current byte stored in the decoder. */ unsigned char dk4ahex_output(dk4_ahex_dec_t const *dec, dk4_er_t *erp); #ifdef __cplusplus } #endif #endif