--- /dev/null
+#ifndef _PDCLIB_IO_H\r
+#define _PDCLIB_IO_H\r
+#include "_PDCLIB_int.h"\r
+#include "_PDCLIB_threadconfig.h"\r
+\r
+/* PDCLib internal I/O logic <_PDCLIB_int.h>\r
+\r
+ This file is part of the Public Domain C Library (PDCLib).\r
+ Permission is granted to use, modify, and / or redistribute at will.\r
+*/\r
+\r
+/* Flags for representing mode (see fopen()). Note these must fit the same\r
+ status field as the _IO?BF flags in <stdio.h> and the internal flags below.\r
+*/\r
+#define _PDCLIB_FREAD 8u\r
+#define _PDCLIB_FWRITE 16u\r
+#define _PDCLIB_FAPPEND 32u \r
+#define _PDCLIB_FRW 64u\r
+#define _PDCLIB_FBIN 128u\r
+\r
+/* Internal flags, made to fit the same status field as the flags above. */\r
+/* -------------------------------------------------------------------------- */\r
+/* free() the buffer memory on closing (false for user-supplied buffer) */\r
+#define _PDCLIB_FREEBUFFER 512u\r
+/* stream has encountered error / EOF */\r
+#define _PDCLIB_ERRORFLAG 1024u\r
+#define _PDCLIB_EOFFLAG 2048u\r
+/* stream is wide-oriented */\r
+#define _PDCLIB_WIDESTREAM 4096u\r
+/* stream is byte-oriented */\r
+#define _PDCLIB_BYTESTREAM 8192u\r
+/* file associated with stream should be remove()d on closing (tmpfile()) */\r
+#define _PDCLIB_DELONCLOSE 16384u\r
+/* stream handle should not be free()d on close (stdin, stdout, stderr) */\r
+#define _PDCLIB_STATIC 32768u\r
+\r
+/* Position / status structure for getpos() / fsetpos(). */\r
+struct _PDCLIB_fpos_t\r
+{\r
+ _PDCLIB_uint64_t offset; /* File position offset */\r
+ int status; /* Multibyte parsing state (unused, reserved) */\r
+};\r
+\r
+/* FILE structure */\r
+struct _PDCLIB_file_t\r
+{\r
+ _PDCLIB_fd_t handle; /* OS file handle */\r
+ _PDCLIB_MTX_T lock; /* file lock */\r
+ char * buffer; /* Pointer to buffer memory */\r
+ _PDCLIB_size_t bufsize; /* Size of buffer */\r
+ _PDCLIB_size_t bufidx; /* Index of current position in buffer */\r
+ _PDCLIB_size_t bufend; /* Index of last pre-read character in buffer */\r
+ struct _PDCLIB_fpos_t pos; /* Offset and multibyte parsing state */\r
+ _PDCLIB_size_t ungetidx; /* Number of ungetc()'ed characters */\r
+ unsigned char * ungetbuf; /* ungetc() buffer */\r
+ unsigned int status; /* Status flags; see above */\r
+ /* multibyte parsing status to be added later */\r
+ char * filename; /* Name the current stream has been opened with */\r
+ struct _PDCLIB_file_t * next; /* Pointer to next struct (internal) */\r
+};\r
+\r
+\r
+#endif\r