+#define _PDCLIB_INTMAX_MIN _PDCLIB_concat( _PDCLIB_concat( _PDCLIB_, _PDCLIB_INTMAX ), _MIN )
+#define _PDCLIB_INTMAX_MAX _PDCLIB_concat( _PDCLIB_concat( _PDCLIB_, _PDCLIB_INTMAX ), _MAX )
+#define _PDCLIB_UINTMAX_MAX _PDCLIB_concat( _PDCLIB_concat( _PDCLIB_U, _PDCLIB_INTMAX ), _MAX )
+#define _PDCLIB_INTMAX_C( value ) _PDCLIB_concat( value, _PDCLIB_INTMAX_LITERAL )
+#define _PDCLIB_UINTMAX_C( value ) _PDCLIB_concat( value, _PDCLIB_concat( u, _PDCLIB_INTMAX_LITERAL ) )
+
+/* -------------------------------------------------------------------------- */
+/* Various <stdio.h> internals */
+/* -------------------------------------------------------------------------- */
+
+/* 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_LIBBUFFER 512u
+#define _PDCLIB_ERRORFLAG 1024u
+#define _PDCLIB_EOFFLAG 2048u
+#define _PDCLIB_WIDESTREAM 4096u
+#define _PDCLIB_BYTESTREAM 8192u
+
+/* Position / status structure for getpos() / fsetpos(). */
+struct _PDCLIB_fpos_t
+{
+ _PDCLIB_uint64_t offset; /* File position offset */
+ int status; /* Multibyte parsing state (unused, reserved) */
+};
+
+/* FILE structure */
+struct _PDCLIB_file_t
+{
+ _PDCLIB_fd_t handle; /* OS file handle */
+ char * buffer; /* Pointer to buffer memory */
+ _PDCLIB_size_t bufsize; /* Size of buffer */
+ _PDCLIB_size_t bufidx; /* Index of current position in buffer */
+ _PDCLIB_size_t bufend; /* Index of last pre-read character in buffer */
+ struct _PDCLIB_fpos_t pos; /* Offset and multibyte parsing state */
+ _PDCLIB_size_t ungetidx; /* Number of ungetc()'ed characters */
+ unsigned char * ungetbuf; /* ungetc() buffer */
+ unsigned int status; /* Status flags; see above */
+ /* multibyte parsing status to be added later */
+ char * filename; /* Name the current stream has been opened with */
+ struct _PDCLIB_file_t * next; /* Pointer to next struct (internal) */
+};
+
+/* -------------------------------------------------------------------------- */
+/* Internal data types */
+/* -------------------------------------------------------------------------- */
+
+/* Structure required by both atexit() and exit() for handling atexit functions */
+struct _PDCLIB_exitfunc_t
+{
+ struct _PDCLIB_exitfunc_t * next;
+ void (*func)( void );
+};
+
+/* Structures required by malloc(), realloc(), and free(). */
+struct _PDCLIB_headnode_t
+{
+ struct _PDCLIB_memnode_t * first;
+ struct _PDCLIB_memnode_t * last;
+};
+
+struct _PDCLIB_memnode_t
+{
+ _PDCLIB_size_t size;
+ struct _PDCLIB_memnode_t * next;
+};
+
+/* Status structure required by _PDCLIB_print(). */
+struct _PDCLIB_status_t
+{
+ int base; /* base to which the value shall be converted */
+ _PDCLIB_int_fast32_t flags; /* flags and length modifiers */
+ _PDCLIB_size_t n; /* maximum number of characters to be written */
+ _PDCLIB_size_t i; /* number of characters already written */
+ _PDCLIB_size_t this; /* output chars in the current conversion */
+ char * s; /* target buffer */
+ _PDCLIB_size_t width; /* width of current field */
+ _PDCLIB_size_t prec; /* precision of current field */
+ struct _PDCLIB_file_t * stream;/* for to-stream output */
+ _PDCLIB_va_list arg; /* argument stack passed to the printf function */
+};