summaryrefslogtreecommitdiff
path: root/support/dktools/dk4strm.h
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/dktools/dk4strm.h
Initial commit
Diffstat (limited to 'support/dktools/dk4strm.h')
-rw-r--r--support/dktools/dk4strm.h390
1 files changed, 390 insertions, 0 deletions
diff --git a/support/dktools/dk4strm.h b/support/dktools/dk4strm.h
new file mode 100644
index 0000000000..aa02a5ef28
--- /dev/null
+++ b/support/dktools/dk4strm.h
@@ -0,0 +1,390 @@
+/*
+ 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: dk4strm.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 DK4STRM_H_INCLUDED
+/** Avoid multiple inclusions. */
+#define DK4STRM_H_INCLUDED 1
+
+
+#line 10 "dk4strm.ctr"
+
+/** @file
+ Generic dk4_stream_t interface for
+ input and output operations.
+
+ CRT on Windows: Optional.
+*/
+
+#ifndef DK4CONF_H_INCLUDED
+#include "dk4conf.h"
+#endif
+
+#ifndef DK4TYPES_H_INCLUDED
+#include "dk4types.h"
+#endif
+
+#ifndef DK4ERROR_H_INCLUDED
+#include "dk4error.h"
+#endif
+
+#ifndef STDLIB_H_INCLUDED
+#include <stdlib.h>
+#define STDLIB_H_INCLUDED 1
+#endif
+
+/** API for stream function.
+*/
+typedef struct {
+ void *d; /**< In: Low level data. */
+ char *b; /**< In: Buffer for data to write or read. */
+ size_t sz_in; /**< In: Number of bytes to write or read. */
+ size_t sz_out; /**< Out: Number of bytes written or read. */
+ int cmd; /**< In: Command to execute. */
+ int res; /**< Out: Low level operation result. */
+} dk4_stream_api_t;
+
+/** Function to execute one low level command.
+*/
+typedef void dk4_stream_api_fct_t(dk4_stream_api_t *);
+
+/** Generic I/O stream.
+*/
+typedef struct {
+ void *d; /**< Low level data object. */
+ dk4_stream_api_fct_t *fct; /**< Function for low level operations. */
+ char *bi; /**< Buffer for input. */
+ char *bo; /**< Buffer for output. */
+ dk4_um_t bwr; /**< Number of bytes written. */
+ size_t szbi; /**< Input buffer size. */
+ size_t szbo; /**< Output buffer size. */
+ size_t usbi; /**< Bytes used in input buffer. */
+ size_t usbo; /**< Bytes used in output buffer. */
+ size_t rebi; /**< Read bytes from input buffer. */
+ int fl; /**< Flags for allowed operations. */
+ int feoi; /**< Flag: Found end of input. */
+ int bwo; /**< Flag: Numeric overflow in bwr. */
+ int oenc; /**< Output encoding for 32 bit characters. */
+ int zreof; /**< Flag: Zero bytes read indicates EOF. */
+} dk4_stream_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Open new stream, allocate memory.
+ @param obj Low level object.
+ @param fct Low level function.
+ @param fl Read/write flags: DK4_STREAM_READ, DK4_STREAM_WRITE
+ or (DK4_STREAM_READ | DK4_STREAM_WRITE).
+ @param ibs Input buffer size (0 for default).
+ @param obs Output buffer size (0 for default).
+ @param erp Error report, may be NULL.
+ @return Pointer to new stream on success, NULL on error.
+
+ Error codes:
+ - DK4_E_INVALID_ARGUMENTS<br>
+ if obj or fct is NULL or fl is invalid,
+ - DK4_E_MATH_OVERFLOW<br>
+ if ibs or obs is too large,
+ - DK4_E_MEMORY_ALLOCATION_FAILED<br>
+ if allocation of input or output buffer failed.
+*/
+dk4_stream_t *
+dk4stream_open(
+ void *obj,
+ dk4_stream_api_fct_t *fct,
+ int fl,
+ size_t ibs,
+ size_t obs,
+ dk4_er_t *erp
+);
+
+/** Close data stream, release memory.
+ @param strm Stream to close.
+ @param erp Error report, may be NULL.
+ @return 1 on success, 0 on error.
+
+ Error codes:
+ - DK4_E_INVALID_ARGUMENTS<br>
+ if strm is NULL,
+ - DK4_E_WRITE_FAILED<br>
+ if writing one ore multiple bytes to the stream failed,
+ - DK4_E_FLUSH_FAILED<br>
+ if flushing data downwards failed,
+ - DK4_E_CLOSE_FAILED<br>
+ if closing downward data failed.
+*/
+int
+dk4stream_close(dk4_stream_t *strm, dk4_er_t *erp);
+
+/** Write one byte to output stream.
+ @param strm Output stream.
+ @param c Byte to write.
+ @param erp Error report, may be NULL.
+ @return 1 on success, 0 on error.
+
+ Error codes:
+ - DK4_E_INVALID_ARGUMENTS<br>
+ if strm is NULL or not opened for writing,
+ - DK4_E_WRITE_FAILED<br>
+ if writing one ore multiple bytes to the stream failed,
+ - DK4_E_FLUSH_FAILED<br>
+ if flusing data downwards failed.
+*/
+int
+dk4stream_write_byte(dk4_stream_t *strm, char c, dk4_er_t *erp);
+
+/** Write a buffer to output stream.
+ @param strm Output stream.
+ @param b Buffer start address.
+ @param sz Number of bytes to write.
+ @param erp Error report, may be NULL.
+ @return 1 on success (all bytes written), 0 on error.
+
+ Error codes:
+ - DK4_E_INVALID_ARGUMENTS<br>
+ if strm is NULL or not opened for writing,
+ - DK4_E_WRITE_FAILED<br>
+ if writing one ore multiple bytes to the stream failed,
+ - DK4_E_FLUSH_FAILED<br>
+ if flusing data downwards failed.
+*/
+int
+dk4stream_write(dk4_stream_t *strm, const void *b, size_t sz, dk4_er_t *erp);
+
+
+/** Write a char string to the stream.
+ @param strm Output stream.
+ @param str String to write.
+ @param erp Error report, may be NULL.
+ @return 1 on success (all bytes written), 0 on error.
+
+ Error codes:
+ - DK4_E_INVALID_ARGUMENTS<br>
+ if strm is NULL or not opened for writing,
+ - DK4_E_WRITE_FAILED<br>
+ if writing one ore multiple bytes to the stream failed,
+ - DK4_E_FLUSH_FAILED<br>
+ if flusing data downwards failed.
+*/
+int
+dk4stream_write_char_string(dk4_stream_t *strm, const char *str, dk4_er_t *erp);
+
+/** Flush stream input and output data.
+ @param strm Stream to flush.
+ @param flfl Flush type: 0=just flush output buffer
+ contents to low level object, 1=0+flush low level object,
+ 2=1+flush all low level objects recursively (for output filtering).
+ @param erp Error report, may be NULL.
+ @return 1 on success, 0 on error.
+
+ Error codes:
+ - DK4_E_INVALID_ARGUMENTS<br>
+ if strm is NULL.
+ - DK4_E_WRITE_FAILED<br>
+ if writing one ore multiple bytes to the stream failed
+ - DK4_E_FLUSH_FAILED<br>
+ if flusing data downwards failed.
+*/
+int
+dk4stream_flush(dk4_stream_t *strm, int flfl, dk4_er_t *erp);
+
+/** Flush stream output data.
+ @param strm Stream to flush.
+ @param flfl Flush type: 0=just flush output buffer
+ contents to low level object, 1=0+flush low level object,
+ 2=1+flush all low level objects recursively (for output filtering).
+ @param erp Error report, may be NULL.
+ @return 1 on success, 0 on error.
+
+ Error codes:
+ - DK4_E_INVALID_ARGUMENTS<br>
+ if strm is NULL or not opened for writing,
+ - DK4_E_WRITE_FAILED<br>
+ if writing one ore multiple bytes to the stream failed,
+ - DK4_E_FLUSH_FAILED<br>
+ if flushing data downwards failed.
+*/
+int
+dk4stream_flush_write(dk4_stream_t *strm, int flfl, dk4_er_t *erp);
+
+/** Flush stream input data (discard data in input buffer).
+ @param strm Stream to flush.
+ @param erp Error report, may be NULL.
+ @return 1 on success, 0 on error.
+
+ Error codes:
+ - DK4_E_INVALID_ARGUMENTS<br>
+ if strm is NULL or not opened for writing.
+*/
+int
+dk4stream_flush_read(dk4_stream_t *strm, dk4_er_t *erp);
+
+/** Read a single character.
+ @param dst Pointer to variable for result.
+ @param strm Stream to read from.
+ @param erp Error report, may be NULL.
+ @return 1 on success, 0 on error.
+
+ Error codes:
+ - DK4_E_INVALID_ARGUMENTS<br>
+ if strm is NULL or not opened for reading,
+*/
+int
+dk4stream_c8_read_byte(char *dst, dk4_stream_t *strm, dk4_er_t *erp);
+
+/** Read multiple bytes into buffer.
+ @param b Pointer to buffer start address.
+ @param szptr Pointer to size variable, in: available size,
+ out: number of bytes read.
+ @param strm Stream to read from.
+ @param erp Error report, may be NULL.
+ @return 1 on success (there were bytes read), 0 on error.
+
+ Error codes:
+ - DK4_E_INVALID_ARGUMENTS<br>
+ if strm is NULL or not opened for reading,
+ - DK4_E_NOT_FOUND<br>
+ if end of input was detected in read attempt,
+ - DK4_E_READ_FAILED<br>
+ if a read attempt failed for other reasons.
+*/
+int
+dk4stream_read(void *b, size_t *szptr, dk4_stream_t *strm, dk4_er_t *erp);
+
+/** Get number of bytes written.
+ @param strm Stream to get number of bytes for.
+ @return Number of bytes written to the stream (number of bytes
+ received from the upside, not number of bytes written
+ downwards).
+*/
+dk4_um_t
+dk4stream_bytes_written(const dk4_stream_t *strm);
+
+/** Check for numeric overflow in number of bytes written.
+ @param strm Stream to check.
+ @return 1 if overflow occured, 0 if there was no overflow.
+*/
+int
+dk4stream_overflow_bytes_written(const dk4_stream_t *strm);
+
+/** Check whether end of input was found during read attempt.
+ @param strm Stream to check.
+ @return 1 if EOF was detected, 0 otherwise.
+*/
+int
+dk4stream_found_eof(const dk4_stream_t *strm);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+/** Flags whether read or write operations allowed.
+*/
+enum {
+ DK4_STREAM_READ = 1, /**< Reading from stream allowed. */
+ DK4_STREAM_WRITE = 2 /**< Writing to stream allowed. */
+};
+
+
+
+/** Low level commands to execute in the stream API function.
+ The api.cmd is set to one of the values.
+ Depending on api.cmd, other api attributes must be set
+ on input or must be set as response by the low level function.
+*/
+enum {
+ /** Read data.
+ Input api.d: Low level data.
+ Input api.b: Input data buffer.
+ Input api.sz_in: Input data buffer
+ size.
+ Output api.res: 1=any bytes found,
+ 0=no bytes found.
+ Output api.sz_out: Number of bytes
+ read into input
+ buffer.
+ */
+ DK4_STREAM_API_READ = 1,
+
+ /** Write data.
+ Input api.d: Low level data.
+ Input api.b: Output data buffer.
+ Input api.sz_in: Output data buffer
+ size.
+ Output api.res: 1=all bytes
+ written,
+ 0=not all bytes
+ written.
+ Output api.sz_out: Number of bytes
+ written.
+ */
+ DK4_STREAM_API_WRITE ,
+
+ /** Flush data.
+ Input api.d: Low level data.
+ Output api.res: 1=no error reported,
+ 0=error reported.
+ */
+ DK4_STREAM_API_FLUSH ,
+
+ /** Check whether end of input is found.
+ Input api.d: Low level data.
+ Output api.res 1=end of input
+ reached,
+ 0=not yet reached.
+ */
+ DK4_STREAM_API_AT_END ,
+
+ /** Close low level data.
+ Input api.d: Low level data.
+ Output api.res: 1=no error reported,
+ 0=error reported.
+ */
+ DK4_STREAM_API_CLOSE ,
+
+ /** Check whether a read result of 0
+ indicates EOF.
+ Input api.d: Low level data.
+ Output api.res 1=reading zero bytes
+ indicates EOF, 0=no.
+ */
+ DK4_STREAM_API_ZERO_READ_IS_EOF
+};
+
+
+#endif