#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
#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_LIBBUFFER 512u
+#define _PDCLIB_VIRGINSTR 1024u
+#define _PDCLIB_ERRORFLAG 2048u
+#define _PDCLIB_EOFFLAG 4096u
+#define _PDCLIB_WIDESTREAM 8192u
+#define _PDCLIB_BYTESTREAM 16384u
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 );
+
+/* Writing out unwritten buffers to file. Returns 0 if successful, EOF if error
+ occured. Sets error flag of stream in case of error.
+ */
+int _PDCLIB_fflush( struct _PDCLIB_file_t * stream );