/* 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: dk3bom.ctr */ #ifndef DK3BOM_H_INCLUDED /** Avoid multiple inclusions. */ #define DK3BOM_H_INCLUDED 1 #line 9 "dk3bom.ctr" #include "dk3conf.h" #include "dk3types.h" /** @file dk3bom.h Byte order marker detection. The functions in this module check for a byte order marker at the start of a data stream. First use dk3bom_detect_init() to initialize a detector structure. Use dk3bom_detect_add() to add the first byte to the dectector. As long as the result is DK3_STM_ACCEPT, continue adding bytes. On DK3_STM_FINISHED use dk3bom_detect_results() to retrieve the detected encoding and the array of rejected bytes. Process the rejected bytes before processing the remaining bytes from the data stream. */ /** State machine to detect a BOM (byte order marker) at the start of a data stream. */ typedef struct { int defenc; int found; int state; size_t rjb; unsigned char rj[4]; } dk3_bom_detector_t; #ifdef __cplusplus extern "C" { #endif /** Initialize detector structure. @param ptr Detector structure to initialize. */ void dk3bom_detect_init(dk3_bom_detector_t *ptr, int de); /** Add one byte to detector. @param ptr Detector structure. @param b Byte to add. @return DK3_STM_ACCEPT if there is no result yet, DK3_STM_FINISHED if a result was found or DK3_STM_ERROR on attempts to add further bytes after a result was found. */ int dk3bom_detect_add(dk3_bom_detector_t *ptr, unsigned char b); /** Retrieve results from detector structure. @param enc Pointer to variable receiving encoding. @param rjptr Address of pointer receiving address of rejected bytes array. @param rjsz Pointer to variable receiving size of rejected bytes array. @param ptr Detector structure (data source). */ void dk3bom_detect_results( int *enc, const unsigned char **rjptr, size_t *rjsz, dk3_bom_detector_t *ptr ); #ifdef __cplusplus } #endif #endif