+/* Release $Name$ */
+
+/* Input/output <stdio.h>
+
+ This file is part of the Public Domain C Library (PDCLib).
+ Permission is granted to use, modify, and / or redistribute at will.
+*/
+
+#ifndef _PDCLIB_STDIO_H
+#define _PDCLIB_STDIO_H _PDCLIB_STDIO_H
+
+#ifndef _PDCLIB_INT_H
+#define _PDCLIB_INT_H _PDCLIB_INT_H
+#include <_PDCLIB_int.h>
+#endif
+
+#ifndef _PDCLIB_SIZE_T_DEFINED
+#define _PDCLIB_SIZE_T_DEFINED _PDCLIB_SIZE_T_DEFINED
+typedef _PDCLIB_size_t size_t;
+#endif
+
+#ifndef _PDCLIB_NULL_DEFINED
+#define _PDCLIB_NULL_DEFINED _PDCLIB_NULL_DEFINED
+#define NULL _PDCLIB_NULL
+#endif
+
+/* See setvbuf(), third argument */
+/* Fully buffered - transmit block-wise */
+#define _IOFBF 1
+/* Line buffered - transmit line-wise */
+#define _IOLBF 2
+/* Not buffered - transmit immediately */
+#define _IONBF 4
+
+/* See setbuf(). Minimum 256. */
+#define BUFSIZ 1024
+
+/* Internal-only flags for representing mode */
+#define _PDCLIB_FREAD 1
+#define _PDCLIB_FWRITE 2
+#define _PDCLIB_FAPPEND 4
+#define _PDCLIB_FRW 8
+#define _PDCLIB_FBIN 16
+
+typedef struct _PDCLIB_file_t FILE;
+typedef _PDCLIB_fpos_t fpos_t;
+
+/* Must be integer and of negative value */
+#define EOF -1
+
+/* Maximum number of files this implementation can open simultaneously. Minimum 8. */
+#define FOPEN_MAX 1
+
+/* Maximum file name length (plus terminating \0) this implementation does
+ guarantee can be opened. If there is no limit on the length of filenames,
+ this should be a recommended size for filename buffers.
+*/
+#define FILENAME_MAX 1024
+
+/* Buffer size for tmpnam() */
+#define L_tmpnam 1024
+
+/* Number of distinct file names that can be generated by tmpnam(). */
+#define TMP_MAX 50
+
+/* See fseek(), third argument */
+#define SEEK_CUR 1
+#define SEEK_END 2
+#define SEEK_SET 4
+
+typedef struct
+{
+ _PDCLIB_fd_t handle; /* OS-specific file descriptor */
+ _PDCLIB_fpos_t position; /* file position indicator */
+ void * buffer; /* file buffer */
+ size_t bufsize; /* size of buffer */
+ int status; /* misc. status bits */
+ /*mbstate_t mbstate;*//* multibyte parse state */ /* TODO: Unmask. */
+ FILE * next; /* provisions for linked list handling */
+} FILE;
+
+/* Text-mode I/O is at liberty to skip non-printing characters and trailing spaces.
+ Binary I/O is at liberty to add trailing zero bytes.
+ First operation decides "orientation" of the stream (wide / byte).
+ freopen() removes orientation; see also fwide().
+ Binary wide-oriented streams have the file-positioning restrictions ascribed to both text and binary streams.
+ For wide-oriented streams, after a successful call to a file-positioning function that leaves the file position indicator prior to the end-of-file, a wide character output function can overwrite a partial multibyte character; any file contents beyond the byte(s) written are henceforth indeterminate.
+ Whether a file of zero length (unwritten-to) actually exists is implementation-defined.
+ Wide text input from file: fgetwc() / mbrtowc()
+ Wide text output to file: wcrtomb() / fputwc()
+ Multibyte encoding in file may contain embedded null bytes
+ Multibyte encoding in file need not begin / end in initial shift state.
+ Conversion may trigger EILSEQ.
+*/
+
+/* Operations on files */