summaryrefslogtreecommitdiff
path: root/support/dktools/dk3bom.h
blob: 6cc8ea5c006ccb56aee00e7c5717f100bbd7475c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/*
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