#define _PDCLIB_INT8_MAX _PDCLIB_CHAR_MAX
#define _PDCLIB_INT8_MIN _PDCLIB_CHAR_MIN
#define _PDCLIB_UINT8_MAX _PDCLIB_UCHAR_MAX
-#define _PDCLIB_INT8_LITERAL
-#define _PDCLIB_UINT8_LITERAL
#else
#error Unsupported width of char (not 8 bits).
#endif
#define _PDCLIB_INT16_MAX _PDCLIB_INT_MAX
#define _PDCLIB_INT16_MIN _PDCLIB_INT_MIN
#define _PDCLIB_UINT16_MAX _PDCLIB_UINT_MAX
-#define _PDCLIB_INT16_LITERAL
-#define _PDCLIB_UINT16_LITERAL
#elif _PDCLIB_SHRT_BYTES == 2
typedef signed short _PDCLIB_int16_t;
typedef unsigned short _PDCLIB_uint16_t;
#define _PDCLIB_INT16_MAX _PDCLIB_SHRT_MAX
#define _PDCLIB_INT16_MIN _PDCLIB_SHRT_MIN
#define _PDCLIB_UINT16_MAX _PDCLIB_USHRT_MAX
-#define _PDCLIB_INT16_LITERAL s
-#define _PDCLIB_UINT16_LITERAL us
#else
#error Neither 'short' nor 'int' are 16-bit.
#endif
/* Various <stdio.h> internals */
/* -------------------------------------------------------------------------- */
-/* Flags for representing mode (see fopen()). */
-#define _PDCLIB_FREAD 1
-#define _PDCLIB_FWRITE 2
-#define _PDCLIB_FAPPEND 4
-#define _PDCLIB_FRW 8
-#define _PDCLIB_FBIN 16
+/* Flags for representing mode (see fopen()). Note these must fit the same
+ status field as the _IO?BF flags in <stdio.h> and the internal flags below.
+*/
+#define _PDCLIB_FREAD 8u
+#define _PDCLIB_FWRITE 16u
+#define _PDCLIB_FAPPEND 32u
+#define _PDCLIB_FRW 64u
+#define _PDCLIB_FBIN 128u
+
+/* Internal flags, made to fit the same status field as the flags above. */
+#define _PDCLIB_WROTELAST 256u
+#define _PDCLIB_LIBBUFFER 512u
+#define _PDCLIB_VIRGINSTR 1024u
+#define _PDCLIB_ERRORFLAG 2048u
+#define _PDCLIB_EOFFLAG 4096u
struct _PDCLIB_file_t
{
_PDCLIB_fd_t handle; /* OS-specific file descriptor */
_PDCLIB_fpos_t position; /* file position indicator */
- void * buffer; /* file buffer */
+ char * buffer; /* file buffer */
_PDCLIB_size_t bufsize; /* size of buffer */
+ _PDCLIB_size_t bufidx; /* index to point of action in buffer */
+ _PDCLIB_size_t bufend; /* index to end of pre-read buffer */
unsigned int status; /* misc. status bits */
- /*mbstate_t mbstate; multibyte parse state - TODO: Unmask. */
struct _PDCLIB_file_t * next; /* provisions for linked list handling */
};
Returns a pointer to the first character not parsed as conversion specifier.
*/
const char * _PDCLIB_print( const char * spec, struct _PDCLIB_status_t * status );
+
+/* Parsing any fopen() style filemode string into a number of flags. */
+unsigned int _PDCLIB_filemode( const char * mode );