]> pd.if.org Git - pdclib/blobdiff - internals/_PDCLIB_int.h
Temporary integration of _PDCLIB_print(), broken.
[pdclib] / internals / _PDCLIB_int.h
index 317173eeffaade97ea36e3aac15a7ee9530bb05d..f3252e1e8b80c1d91c154caea270773a1488e6f1 100644 (file)
@@ -1,7 +1,5 @@
 /* $Id$ */
 
-/* Release $Name$ */
-
 /* PDCLib internal integer logic <_PDCLIB_int.h>
 
    This file is part of the Public Domain C Library (PDCLib).
@@ -252,6 +250,79 @@ typedef unsigned _PDCLIB_intmax _PDCLIB_uintmax_t;
 #define _PDCLIB_INTMAX_C( value )  concat( value, _PDCLIB_INTMAX_LITERAL )
 #define _PDCLIB_UINTMAX_C( value ) concat( value, concat( u, _PDCLIB_INTMAX_LITERAL ) )
 
+/* -------------------------------------------------------------------------- */
+/* 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
+
+struct _PDCLIB_file_t
+{
+    _PDCLIB_fd_t            handle;   /* OS-specific file descriptor */
+    _PDCLIB_fpos_t          position; /* file position indicator */
+    void *                  buffer;   /* file buffer */
+    _PDCLIB_size_t          bufsize;  /* size of buffer */
+    int                     status;   /* misc. status bits */
+  /*mbstate_t               mbstate;    multibyte parse state - TODO: Unmask. */
+    struct _PDCLIB_file_t * next;     /* provisions for linked list handling */
+};
+
+/* -------------------------------------------------------------------------- */
+/* 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  */
+};
+
+#if 0
+
+/* fpos_t, an object type (not an array!) capable of storing any position
+   information of a file.
+*/
+typedef unsigned long long int  _PDCLIB_fpos_t;
+
+/* file descriptor - a type used by the OS to identify a stream */
+typedef int                     _PDCLIB_fd_t;
+
+#endif
+
 /* -------------------------------------------------------------------------- */
 /* Declaration of helper functions (implemented in functions/_PDCLIB).        */
 /* -------------------------------------------------------------------------- */
@@ -261,7 +332,10 @@ _PDCLIB_intmax_t _PDCLIB_atomax( const char * s );
 
 /* Two helper functions used by strtol(), strtoul() and long long variants.   */
 const char * _PDCLIB_strtox_prelim( const char * p, char * sign, int * base );
-_PDCLIB_uintmax_t _PDCLIB_strtox_main( const char ** p, int base, _PDCLIB_uintmax_t error, _PDCLIB_uintmax_t limval, int limdigit );
+_PDCLIB_uintmax_t _PDCLIB_strtox_main( const char ** p, unsigned int base, _PDCLIB_uintmax_t error, _PDCLIB_uintmax_t limval, _PDCLIB_uintmax_t limdigit, char * sign );
 
 /* Digits array used by various integer conversion functions in <stdlib.h>    */
 extern char _PDCLIB_digits[];
+
+/* The worker for all printf() type of functions. */
+const char * _PDCLIB_print( const char * spec, struct _PDCLIB_status_t * status );