]> pd.if.org Git - pdclib.old/blobdiff - internals/_PDCLIB_io.h
PDCLIB-15 PDCLIB-16:
[pdclib.old] / internals / _PDCLIB_io.h
diff --git a/internals/_PDCLIB_io.h b/internals/_PDCLIB_io.h
new file mode 100644 (file)
index 0000000..0dfdad2
--- /dev/null
@@ -0,0 +1,63 @@
+#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