-/* $Id$ */
+#ifndef _PDCLIB_INT_H
+#define _PDCLIB_INT_H
/* PDCLib internal integer logic <_PDCLIB_int.h>
/* would be considered a bug / missing feature: notify the author(s). */
/* -------------------------------------------------------------------------- */
-#ifndef _PDCLIB_CONFIG_H
-#define _PDCLIB_CONFIG_H _PDCLIB_CONFIG_H
#include <_PDCLIB_config.h>
-#endif
-
-#ifndef _PDCLIB_AUX_H
-#define _PDCLIB_AUX_H _PDCLIB_AUX_H
#include <_PDCLIB_aux.h>
-#endif
/* null pointer constant */
#define _PDCLIB_NULL 0
#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 <time.h> internals */
+/* -------------------------------------------------------------------------- */
+
+typedef _PDCLIB_time _PDCLIB_time_t;
+typedef _PDCLIB_clock _PDCLIB_clock_t;
+
+#if !defined(_PDCLIB_DEFINE_STRUCT_TIMESPEC)
+#define _PDCLIB_DEFINE_STRUCT_TIMESPEC() \
+ struct timespec { \
+ time_t tv_sec; \
+ long tv_nsec; \
+ };
+#endif
+
+#if !defined(_PDCLIB_DEFINE_STRUCT_TM)
+#define _PDCLIB_DEFINE_STRUCT_TM() \
+ struct tm { \
+ int tm_sec; \
+ int tm_min; \
+ int tm_hour; \
+ int tm_mday; \
+ int tm_mon; \
+ int tm_year; \
+ int tm_wday; \
+ int tm_yday; \
+ int tm_isdst; \
+ };
+#endif
+
/* -------------------------------------------------------------------------- */
/* Various <stdio.h> internals */
/* -------------------------------------------------------------------------- */
/* errno */
/* -------------------------------------------------------------------------- */
+/* If PDCLib would call its error number "errno" directly, there would be no way
+ to catch its value from underlying system calls that also use it (i.e., POSIX
+ operating systems). That is why we use an internal name, providing a means to
+ access it through <errno.h>.
+*/
extern int _PDCLIB_errno;
+
+/* A mechanism for delayed evaluation. (Not sure if this is really necessary, so
+ no detailed documentation on the "why".)
+*/
int * _PDCLIB_errno_func( void );
-/* ERANGE and EDOM are specified by the standard. */
-#define _PDCLIB_ERANGE 1
-#define _PDCLIB_EDOM 2
-/* Used in the example implementation for any kind of I/O error. */
-#define _PDCLIB_EIO 3
-/* Used in the example implementation for "unknown error". */
-#define _PDCLIB_EUNKNOWN 4
-/* Used in the example implementation for "invalid parameter value". */
-#define _PDCLIB_EINVAL 5
-/* Used in the example implementation for "I/O retries exceeded". */
-#define _PDCLIB_ERETRY 6
-/* One larger than the largest used errno */
-#define _PDCLIB_EMAX 7
-
-/* TODO: Doing this via a static array is not the way to do it. */
-char const * _PDCLIB_errno_texts[ _PDCLIB_EMAX ];
+/* -------------------------------------------------------------------------- */
+/* <ctype.h> lookup tables */
+/* -------------------------------------------------------------------------- */
+
+#define _PDCLIB_CTYPE_ALPHA 1
+#define _PDCLIB_CTYPE_BLANK 2
+#define _PDCLIB_CTYPE_CNTRL 4
+#define _PDCLIB_CTYPE_GRAPH 8
+#define _PDCLIB_CTYPE_PUNCT 16
+#define _PDCLIB_CTYPE_SPACE 32
+#define _PDCLIB_CTYPE_LOWER 64
+#define _PDCLIB_CTYPE_UPPER 128
+#define _PDCLIB_CTYPE_DIGIT 256
+#define _PDCLIB_CTYPE_XDIGT 512
+
+struct _PDCLIB_ctype_t
+{
+ _PDCLIB_uint16_t flags;
+ unsigned char upper;
+ unsigned char lower;
+ unsigned char collation;
+};
+
+#endif