]> pd.if.org Git - pdclib/blob - includes/stdlib.h
Started introducting "personality".
[pdclib] / includes / stdlib.h
1 // ----------------------------------------------------------------------------
2 // $Id$
3 // ----------------------------------------------------------------------------
4 // Public Domain C Library - http://pdclib.sourceforge.net
5 // This code is Public Domain. Use, modify, and redistribute at will.
6 // ----------------------------------------------------------------------------
7 // General utilities
8 // ----------------------------------------------------------------------------
9
10 #ifndef __STDLIB_H
11 #define __STDLIB_H __STDLIB_H
12
13 // TODO: Documentation, C++ handling
14
15 // ----------------------------------------------------------------------------
16 // MACROS
17
18 #define EXIT_FAILURE // TODO
19 #define EXIT_SUCCESS // TODO
20 #define MB_CUR_MAX   // TODO
21 #define NULL         0
22 #define RAND_MAX     // TODO
23
24 // ----------------------------------------------------------------------------
25 // TYPEDEFS
26
27 typedef struct
28 {
29     int quotient;
30     int remainder;
31 } div_t;
32
33 typedef struct
34 {
35     long quotient;
36     long remainder;
37 } ldiv_t;
38
39 typedef struct
40 {   long long quotient;
41     long long remainder;
42 } lldiv_t;
43
44 typedef size_t; // TODO - personality?
45
46 #ifndef __cplusplus
47 typedef wchar_t; // TODO - personality?
48 #endif // __cplusplus
49
50 // ----------------------------------------------------------------------------
51 // FUNCTIONS - C++
52
53 #ifdef __cplusplus
54
55 long abs( long i );
56 long long abs( long long i );
57
58 ldiv_t div( long numer, long denom );
59 lldiv_t div( long long numer, long long denom );
60
61 #endif // __cplusplus
62
63 // ----------------------------------------------------------------------------
64 // FUNCTIONS - Standard C
65
66 int abs( int i );
67 long long llabs( long long i );
68 long labs( long i );
69
70 div_t div( int numer, int denom );
71 lldiv_t lldiv( long long numer, long long denom );
72 ldiv_t ldiv( long numer, long denom );
73
74 int rand( void );
75 void srand( unsigned int seed );
76
77 double atof( const char * s );
78 int atoi( const char * s );
79 long atol( const char * s );
80 long long atoll( const char * s);
81
82 double strtod( const char * restrict s, char * * restrict endptr );
83 float strtof( const char * restrict s, char * * restrict endptr );
84 long double strtold( const char * restrict s, char * * restrict endptr );
85
86 long long strtoll( const char * restrict s, char * * restrict endptr, int base );
87 unsigned long long strtoull( const char * restrict s, char * * restrict endptr, int base);
88
89 long strtol( const char * restrict s, char * * restrict endptr, int base );
90 unsigned long strtoul( const char * restrict s, char * * restrict endptr, int base);
91
92 void * calloc( size_t nelem, size_t size );
93 void free( void * ptr );
94 void * malloc( size_t size );
95 void * realloc( void * ptr, size_t size );
96
97 int mblen( const char * s, size_t n );
98 size_t mbstowcs( wchar_t * restrict wcs, const char * restrict s, size_t n );
99 int mbtowc( wchar_t * restrict pwc, const char * restrict s, size_t n );
100 size_t wcstombs( char * restrict s, const wchar_t * restrict wcs, size_t n );
101 int wctomb( char * s, wchar_t wchar );
102
103 void _Exit( int status );
104 void exit( int status );
105 void abort( void );
106 char * getenv( const char * name );
107 int system( const char * s );
108
109 #ifdef __cplusplus
110 #define __cppwrapper( x ) extern "C++" x \
111 extern "C" x
112 #else
113 #define __cppwrapper( x ) x
114 #endif // __cplusplus
115
116 __cppwrapper( int atexit( void (*func) ( void ) ) { /* TODO */ }; )
117 __cppwrapper( void * bsearch( const void * key, const void * base, size_t nelem, size_t size, int (*cmp) ( const void * ck, const void * ce) ) { /* TODO */ }; )
118 __cppwrapper( void qsort( void * base, size_t nelem, size_t size, int (*cmp) ( const void * e1, const void * e2) ) { /* TODO */ }; )
119
120 #undef __cppwrapper
121
122 #endif // __STDLIB_H