1da2e3ebdSchiniff AST_COMMON 2da2e3ebdSchinhdr pthread,stdarg,stddef,stdint,inttypes,types,unistd 3da2e3ebdSchinsys types 4da2e3ebdSchintyp long.double,size_t,ssize_t 5*b30d1939SAndy Fiddamantyp __va_list stdio.h 6da2e3ebdSchin 7da2e3ebdSchinmac SF_APPEND,SF_CLOSE sys/stat.h sys/socket.h 8da2e3ebdSchin 9da2e3ebdSchindll import note{ Microsoft import/export nonsense }end execute{ 10da2e3ebdSchin __declspec(dllimport) int foo; 11da2e3ebdSchin int main() { return foo == 5 ? 0 : 1; } 12da2e3ebdSchin int bar = 5; 13da2e3ebdSchin int* _imp__foo = &bar; 14da2e3ebdSchin}end 15da2e3ebdSchin 16da2e3ebdSchinstd proto note{ standard C prototypes ok }end compile{ 17da2e3ebdSchin extern int foo(int, int); 18da2e3ebdSchin bar() { foo(1, 1); } 19da2e3ebdSchin}end 20da2e3ebdSchin 21da2e3ebdSchintst ptr_void note{ standard C void* ok }end compile{ 22da2e3ebdSchin extern void* foo(); 23da2e3ebdSchin void* bar() { return foo(); } 24da2e3ebdSchin}end 25da2e3ebdSchin 26da2e3ebdSchincat{ 27da2e3ebdSchin /* disable non-standard linux/gnu inlines */ 28da2e3ebdSchin #ifdef __GNUC__ 29da2e3ebdSchin # undef __OPTIMIZE_SIZE__ 30da2e3ebdSchin # define __OPTIMIZE_SIZE__ 1 31da2e3ebdSchin #endif 32da2e3ebdSchin 33da2e3ebdSchin /* __STD_C indicates that the language is ANSI-C or C++ */ 34da2e3ebdSchin #if !defined(__STD_C) && __STDC__ 35da2e3ebdSchin # define __STD_C 1 36da2e3ebdSchin #endif 37da2e3ebdSchin #if !defined(__STD_C) && (__cplusplus || c_plusplus) 38da2e3ebdSchin # define __STD_C 1 39da2e3ebdSchin #endif 40da2e3ebdSchin #if !defined(__STD_C) && _std_proto 41da2e3ebdSchin # define __STD_C 1 42da2e3ebdSchin #endif 43da2e3ebdSchin #if !defined(__STD_C) 44da2e3ebdSchin # define __STD_C 0 45da2e3ebdSchin #endif 46da2e3ebdSchin 47da2e3ebdSchin /* extern symbols must be protected against C++ name mangling */ 48da2e3ebdSchin #ifndef _BEGIN_EXTERNS_ 49da2e3ebdSchin # if __cplusplus || c_plusplus 50da2e3ebdSchin # define _BEGIN_EXTERNS_ extern "C" { 51da2e3ebdSchin # define _END_EXTERNS_ } 52da2e3ebdSchin # else 53da2e3ebdSchin # define _BEGIN_EXTERNS_ 54da2e3ebdSchin # define _END_EXTERNS_ 55da2e3ebdSchin # endif 56da2e3ebdSchin #endif 57da2e3ebdSchin 58da2e3ebdSchin /* _ARG_ simplifies function prototyping among flavors of C */ 59da2e3ebdSchin #ifndef _ARG_ 60da2e3ebdSchin # if __STD_C 61da2e3ebdSchin # define _ARG_(x) x 62da2e3ebdSchin # else 63da2e3ebdSchin # define _ARG_(x) () 64da2e3ebdSchin # endif 65da2e3ebdSchin #endif 66da2e3ebdSchin 67da2e3ebdSchin /* _NIL_ simplifies defining nil pointers to a given type */ 68da2e3ebdSchin #ifndef _NIL_ 69da2e3ebdSchin # define _NIL_(x) ((x)0) 70da2e3ebdSchin #endif 71da2e3ebdSchin 72*b30d1939SAndy Fiddaman /* __INLINE__, if defined, is the inline keyword */ 73da2e3ebdSchin #if !defined(__INLINE__) && defined(__cplusplus) 74da2e3ebdSchin # define __INLINE__ inline 75da2e3ebdSchin #endif 76da2e3ebdSchin #if !defined(__INLINE__) && defined(_WIN32) && !defined(__GNUC__) 77da2e3ebdSchin # define __INLINE__ __inline 78da2e3ebdSchin #endif 79da2e3ebdSchin 80da2e3ebdSchin /* Void_t is defined so that Void_t* can address any type */ 81da2e3ebdSchin #ifndef Void_t 82da2e3ebdSchin # if __STD_C 83da2e3ebdSchin # define Void_t void 84da2e3ebdSchin # else 85da2e3ebdSchin # define Void_t char 86da2e3ebdSchin # endif 87da2e3ebdSchin #endif 88da2e3ebdSchin 89da2e3ebdSchin /* windows variants and veneers */ 90da2e3ebdSchin #if !defined(_WINIX) && (_UWIN || __CYGWIN__ || __EMX__) 91da2e3ebdSchin # define _WINIX 1 92da2e3ebdSchin #endif 93da2e3ebdSchin 94da2e3ebdSchin /* dynamic linked library external scope handling */ 95da2e3ebdSchin #ifdef __DYNAMIC__ 96da2e3ebdSchin # undef __DYNAMIC__ 97da2e3ebdSchin # ifndef _DLL 98da2e3ebdSchin # define _DLL 1 99da2e3ebdSchin # endif 100da2e3ebdSchin #endif 101da2e3ebdSchin #if _dll_import 102da2e3ebdSchin # if _BLD_STATIC && !_BLD_DLL 103da2e3ebdSchin # undef _DLL 104da2e3ebdSchin # else 105da2e3ebdSchin # if !_UWIN && !defined(_DLL) 106da2e3ebdSchin # define _DLL 1 107da2e3ebdSchin # endif 108da2e3ebdSchin # endif 109da2e3ebdSchin # if !defined(__EXPORT__) && _BLD_DLL 110da2e3ebdSchin # define __EXPORT__ __declspec(dllexport) 111da2e3ebdSchin # endif 112da2e3ebdSchin # if !defined(__IMPORT__) && ( _BLD_DLL || defined(_DLL) ) 113da2e3ebdSchin # define __IMPORT__ __declspec(dllimport) 114da2e3ebdSchin # endif 115da2e3ebdSchin # if _BLD_DLL && _UWIN 116da2e3ebdSchin # define __DYNAMIC__(v) (_ast_getdll()->_ast_ ## v) 117da2e3ebdSchin # endif 118da2e3ebdSchin #endif 119da2e3ebdSchin #if !defined(_astimport) 120da2e3ebdSchin # if defined(__IMPORT__) && defined(_DLL) 121da2e3ebdSchin # define _astimport __IMPORT__ 122da2e3ebdSchin # else 123da2e3ebdSchin # define _astimport extern 124da2e3ebdSchin # endif 125da2e3ebdSchin #endif 126da2e3ebdSchin #if _dll_import && ( !_BLD_DLL || _WINIX && !_UWIN ) 127da2e3ebdSchin # ifdef __STDC__ 128da2e3ebdSchin # define __EXTERN__(T,obj) extern T obj; T* _imp__ ## obj = &obj 129da2e3ebdSchin # define __DEFINE__(T,obj,val) T obj = val; T* _imp__ ## obj = &obj 130da2e3ebdSchin # else 131da2e3ebdSchin # define __EXTERN__(T,obj) extern T obj; T* _imp__/**/obj = &obj 132da2e3ebdSchin # define __DEFINE__(T,obj,val) T obj = val; T* _imp__/**/obj = &obj 133da2e3ebdSchin # endif 134da2e3ebdSchin #else 135da2e3ebdSchin # define __EXTERN__(T,obj) extern T obj 136da2e3ebdSchin # define __DEFINE__(T,obj,val) T obj = val 137da2e3ebdSchin #endif 138da2e3ebdSchin}end 139da2e3ebdSchin 140*b30d1939SAndy Fiddamanif tst - note{ <stdarg.h>+<wchar.h> works }end compile{ 141*b30d1939SAndy Fiddaman /*<NOSTDIO>*/ 142*b30d1939SAndy Fiddaman #include <stdarg.h> 143*b30d1939SAndy Fiddaman #include <wchar.h> 144*b30d1939SAndy Fiddaman }end 145*b30d1939SAndy Fiddamanelif tst - note{ explicit <sys/va_list.h> before <stdarg.h>+<wchar.h> }end compile{ 146*b30d1939SAndy Fiddaman /*<NOSTDIO>*/ 147*b30d1939SAndy Fiddaman #include <sys/va_list.h> 148*b30d1939SAndy Fiddaman #include <stdarg.h> 149*b30d1939SAndy Fiddaman #include <wchar.h> 150*b30d1939SAndy Fiddaman }end { 151*b30d1939SAndy Fiddaman #include <sys/va_list.h> 152*b30d1939SAndy Fiddaman } 153*b30d1939SAndy Fiddamanendif 154*b30d1939SAndy Fiddaman 155da2e3ebdSchintst ast_LL note{ LL numeric suffix supported }end compile{ 156da2e3ebdSchin int i = 1LL; 157da2e3ebdSchin unsigned int u = 1ULL; /* NOTE: some compilers choke on 1LLU */ 158da2e3ebdSchin}end 159da2e3ebdSchin 160da2e3ebdSchintst - -DN=1 - -DN=2 - -DN=3 - -DN=4 - -DN=5 - -DN=6 - -DN=7 - -DN=8 - -DN=0 output{ 161da2e3ebdSchin #define _BYTESEX_H 162da2e3ebdSchin 163da2e3ebdSchin #include <string.h> 164da2e3ebdSchin #include <sys/types.h> 165da2e3ebdSchin 166da2e3ebdSchin #if _STD_ 167da2e3ebdSchin #if N == 1 168da2e3ebdSchin #define _ast_int8_t long 169da2e3ebdSchin #define _ast_int8_str "long" 170da2e3ebdSchin #endif 171da2e3ebdSchin #if N == 2 172da2e3ebdSchin #define _ast_int8_t long long 173da2e3ebdSchin #define _ast_int8_str "long long" 174da2e3ebdSchin #endif 175da2e3ebdSchin #if N == 3 176da2e3ebdSchin #define _ast_int8_t __int64 177da2e3ebdSchin #define _ast_int8_str "__int64" 178da2e3ebdSchin #endif 179da2e3ebdSchin #if N == 4 180da2e3ebdSchin #define _ast_int8_t __int64_t 181da2e3ebdSchin #define _ast_int8_str "__int64_t" 182da2e3ebdSchin #endif 183da2e3ebdSchin #if N == 5 184da2e3ebdSchin #define _ast_int8_t _int64_t 185da2e3ebdSchin #define _ast_int8_str "_int64_t" 186da2e3ebdSchin #endif 187da2e3ebdSchin #if N == 6 188da2e3ebdSchin #define _ast_int8_t int64_t 189da2e3ebdSchin #define _ast_int8_str "int64_t" 190da2e3ebdSchin #endif 191da2e3ebdSchin #if N == 7 192da2e3ebdSchin #define _ast_int8_t _int64 193da2e3ebdSchin #define _ast_int8_str "_int64" 194da2e3ebdSchin #endif 195da2e3ebdSchin #if N == 8 196da2e3ebdSchin #define _ast_int8_t int64 197da2e3ebdSchin #define _ast_int8_str "int64" 198da2e3ebdSchin #endif 199da2e3ebdSchin #endif 200da2e3ebdSchin 201da2e3ebdSchin #define elementsof(x) (sizeof(x)/sizeof(x[0])) 202da2e3ebdSchin 203da2e3ebdSchin static char i_char = 1; 204da2e3ebdSchin static short i_short = 1; 205da2e3ebdSchin static int i_int = 1; 206da2e3ebdSchin static long i_long = 1L; 207da2e3ebdSchin #ifdef _ast_int8_t 208da2e3ebdSchin #if _ast_LL 209da2e3ebdSchin static _ast_int8_t i_long_long = 1LL; 210da2e3ebdSchin static unsigned _ast_int8_t u_long_long = 18446744073709551615ULL; 211da2e3ebdSchin #else 212da2e3ebdSchin static _ast_int8_t i_long_long = 1; 213da2e3ebdSchin static unsigned _ast_int8_t u_long_long = 18446744073709551615; 214da2e3ebdSchin #endif 215da2e3ebdSchin #endif 216da2e3ebdSchin 217da2e3ebdSchin static struct 218da2e3ebdSchin { 219da2e3ebdSchin char* name; 220da2e3ebdSchin int size; 221da2e3ebdSchin char* swap; 222da2e3ebdSchin } int_type[] = 223da2e3ebdSchin { 224da2e3ebdSchin "char", sizeof(char), (char*)&i_char, 225da2e3ebdSchin "short", sizeof(short), (char*)&i_short, 226da2e3ebdSchin "int", sizeof(int), (char*)&i_int, 227da2e3ebdSchin "long", sizeof(long), (char*)&i_long, 228da2e3ebdSchin #ifdef _ast_int8_t 229da2e3ebdSchin _ast_int8_str, sizeof(_ast_int8_t), (char*)&i_long_long, 230da2e3ebdSchin #endif 231da2e3ebdSchin }; 232da2e3ebdSchin 233da2e3ebdSchin static int int_size[] = { 1, 2, 4, 8 }; 234da2e3ebdSchin 235da2e3ebdSchin int 236da2e3ebdSchin main() 237da2e3ebdSchin { 238da2e3ebdSchin register int t; 239da2e3ebdSchin register int s; 240da2e3ebdSchin register int m = 1; 241da2e3ebdSchin register int b = 1; 242da2e3ebdSchin register int w = 0; 243da2e3ebdSchin 244da2e3ebdSchin #ifdef _ast_int8_t 245da2e3ebdSchin unsigned _ast_int8_t p; 246da2e3ebdSchin char buf[64]; 247da2e3ebdSchin 248da2e3ebdSchin if (int_type[elementsof(int_type)-1].size <= 4) 249da2e3ebdSchin return 1; 250da2e3ebdSchin p = 0x12345678; 251da2e3ebdSchin p <<= 32; 252da2e3ebdSchin p |= 0x9abcdef0; 253da2e3ebdSchin sprintf(buf, "0x%016llx", p); 254da2e3ebdSchin if (strcmp(buf, "0x123456789abcdef0")) 255da2e3ebdSchin return 1; 256da2e3ebdSchin #endif 257da2e3ebdSchin for (s = 0; s < elementsof(int_size); s++) 258da2e3ebdSchin { 259da2e3ebdSchin for (t = 0; t < elementsof(int_type) && int_type[t].size < int_size[s]; t++); 260da2e3ebdSchin if (t < elementsof(int_type)) 261da2e3ebdSchin { 262da2e3ebdSchin m = int_size[s]; 263da2e3ebdSchin #if __INTERIX 264da2e3ebdSchin if (m == 8) 265da2e3ebdSchin { 266da2e3ebdSchin printf("#ifdef _MSC_VER\n"); 267da2e3ebdSchin printf("#define _ast_int8_t __int64\n"); 268da2e3ebdSchin printf("#else\n"); 269da2e3ebdSchin printf("#define _ast_int8_t long long\n"); 270da2e3ebdSchin printf("#endif\n"); 271da2e3ebdSchin } 272da2e3ebdSchin else 273da2e3ebdSchin #endif 274da2e3ebdSchin printf("#define _ast_int%d_t %s\n", m, int_type[t].name); 275da2e3ebdSchin if (m > 1) 276da2e3ebdSchin { 277da2e3ebdSchin if (*int_type[t].swap) 278da2e3ebdSchin w |= b; 279da2e3ebdSchin b <<= 1; 280da2e3ebdSchin } 281da2e3ebdSchin } 282da2e3ebdSchin } 283da2e3ebdSchin printf("#define _ast_intmax_t _ast_int%d_t\n", m); 284da2e3ebdSchin if (m == sizeof(long)) 285da2e3ebdSchin printf("#define _ast_intmax_long 1\n"); 286da2e3ebdSchin printf("#define _ast_intswap %d\n", w); 287da2e3ebdSchin printf("\n"); 288da2e3ebdSchin return 0; 289da2e3ebdSchin } 290da2e3ebdSchin}end 291da2e3ebdSchin 292*b30d1939SAndy Fiddamantst - output{ 293*b30d1939SAndy Fiddaman #include <string.h> 294*b30d1939SAndy Fiddaman #include <sys/types.h> 295*b30d1939SAndy Fiddaman 296*b30d1939SAndy Fiddaman #if _X86_ || _X64_ 297*b30d1939SAndy Fiddaman #define COND 1 298*b30d1939SAndy Fiddaman #define CONDNAME "_X64_" 299*b30d1939SAndy Fiddaman #else 300*b30d1939SAndy Fiddaman #define COND 0 301*b30d1939SAndy Fiddaman #endif 302*b30d1939SAndy Fiddaman 303*b30d1939SAndy Fiddaman #define elementsof(x) (sizeof(x)/sizeof(x[0])) 304*b30d1939SAndy Fiddaman 305*b30d1939SAndy Fiddaman static struct 306*b30d1939SAndy Fiddaman { 307*b30d1939SAndy Fiddaman char* name; 308*b30d1939SAndy Fiddaman int size; 309*b30d1939SAndy Fiddaman int cond; 310*b30d1939SAndy Fiddaman } types[] = 311*b30d1939SAndy Fiddaman { 312*b30d1939SAndy Fiddaman "short", sizeof(short), 0, 313*b30d1939SAndy Fiddaman "int", sizeof(int), 0, 314*b30d1939SAndy Fiddaman "long", sizeof(long), 0, 315*b30d1939SAndy Fiddaman "size_t", sizeof(size_t), 0, 316*b30d1939SAndy Fiddaman "pointer", sizeof(void*), COND * 4, 317*b30d1939SAndy Fiddaman "float", sizeof(float), 0, 318*b30d1939SAndy Fiddaman "double", sizeof(double), 0, 319*b30d1939SAndy Fiddaman #ifdef _typ_long_double 320*b30d1939SAndy Fiddaman "long_double", sizeof(long double), 0, 321*b30d1939SAndy Fiddaman #endif 322*b30d1939SAndy Fiddaman }; 323*b30d1939SAndy Fiddaman 324*b30d1939SAndy Fiddaman int 325*b30d1939SAndy Fiddaman main() 326*b30d1939SAndy Fiddaman { 327*b30d1939SAndy Fiddaman register int t; 328*b30d1939SAndy Fiddaman 329*b30d1939SAndy Fiddaman for (t = 0; t < elementsof(types); t++) 330*b30d1939SAndy Fiddaman #if COND 331*b30d1939SAndy Fiddaman if (types[t].cond) 332*b30d1939SAndy Fiddaman { 333*b30d1939SAndy Fiddaman printf("#if %s\n", CONDNAME); 334*b30d1939SAndy Fiddaman printf("#define _ast_sizeof_%s%s %d /* sizeof(%s) */\n", types[t].name, strlen(types[t].name) < 4 ? "\t" : "", types[t].cond * 2, types[t].name); 335*b30d1939SAndy Fiddaman printf("#else\n"); 336*b30d1939SAndy Fiddaman printf("#define _ast_sizeof_%s%s %d /* sizeof(%s) */\n", types[t].name, strlen(types[t].name) < 4 ? "\t" : "", types[t].cond, types[t].name); 337*b30d1939SAndy Fiddaman printf("#endif\n"); 338*b30d1939SAndy Fiddaman } 339*b30d1939SAndy Fiddaman else 340*b30d1939SAndy Fiddaman #endif 341*b30d1939SAndy Fiddaman printf("#define _ast_sizeof_%s%s %d /* sizeof(%s) */\n", types[t].name, strlen(types[t].name) < 4 ? "\t" : "", types[t].size, types[t].name); 342*b30d1939SAndy Fiddaman printf("\n"); 343*b30d1939SAndy Fiddaman return 0; 344*b30d1939SAndy Fiddaman } 345*b30d1939SAndy Fiddaman}end 346*b30d1939SAndy Fiddaman 347da2e3ebdSchintst - -DN=1 - -DN=0 output{ 348da2e3ebdSchin #define _BYTESEX_H 349da2e3ebdSchin 350da2e3ebdSchin #include <string.h> 351da2e3ebdSchin #include <sys/types.h> 352da2e3ebdSchin 353da2e3ebdSchin #if !N || !_STD_ 354da2e3ebdSchin #undef _typ_long_double 355da2e3ebdSchin #endif 356da2e3ebdSchin 357da2e3ebdSchin #define elementsof(x) (sizeof(x)/sizeof(x[0])) 358da2e3ebdSchin 359da2e3ebdSchin static struct 360da2e3ebdSchin { 361da2e3ebdSchin char* name; 362da2e3ebdSchin int size; 363da2e3ebdSchin } flt_type[] = 364da2e3ebdSchin { 365da2e3ebdSchin "float", sizeof(float), 366da2e3ebdSchin "double", sizeof(double), 367da2e3ebdSchin #ifdef _typ_long_double 368da2e3ebdSchin "long double", sizeof(long double), 369da2e3ebdSchin #endif 370da2e3ebdSchin }; 371da2e3ebdSchin 372da2e3ebdSchin int 373da2e3ebdSchin main() 374da2e3ebdSchin { 375da2e3ebdSchin register int t; 376da2e3ebdSchin register int m = 1; 377da2e3ebdSchin 378da2e3ebdSchin #ifdef _typ_long_double 379da2e3ebdSchin long double p; 380da2e3ebdSchin char buf[64]; 381da2e3ebdSchin 382da2e3ebdSchin if (flt_type[elementsof(flt_type)-1].size <= sizeof(double)) 383da2e3ebdSchin return 1; 384da2e3ebdSchin p = 1.12345E-55; 385da2e3ebdSchin sprintf(buf, "%1.5LE", p); 386da2e3ebdSchin if (strcmp(buf, "1.12345E-55")) 387da2e3ebdSchin return 1; 388da2e3ebdSchin #endif 389da2e3ebdSchin for (t = 0; t < elementsof(flt_type); t++) 390da2e3ebdSchin { 391da2e3ebdSchin while (t < (elementsof(flt_type) - 1) && flt_type[t].size == flt_type[t + 1].size) 392da2e3ebdSchin t++; 393da2e3ebdSchin m = flt_type[t].size; 394da2e3ebdSchin printf("#define _ast_flt%d_t %s\n", flt_type[t].size, flt_type[t].name); 395da2e3ebdSchin } 396da2e3ebdSchin printf("#define _ast_fltmax_t _ast_flt%d_t\n", m); 397da2e3ebdSchin if (m == sizeof(double)) 398da2e3ebdSchin printf("#define _ast_fltmax_double 1\n"); 399da2e3ebdSchin return 0; 400da2e3ebdSchin } 401da2e3ebdSchin}end 402da2e3ebdSchin 403da2e3ebdSchintyp int8_t stdint.h inttypes.h no{ 404da2e3ebdSchin #undef _typ_int8_t 405da2e3ebdSchin #define _typ_int8_t 1 406da2e3ebdSchin typedef _ast_int1_t int8_t; 407da2e3ebdSchin}end 408da2e3ebdSchintyp uint8_t stdint.h inttypes.h no{ 409da2e3ebdSchin #undef _typ_uint8_t 410da2e3ebdSchin #define _typ_uint8_t 1 411da2e3ebdSchin typedef unsigned _ast_int1_t uint8_t; 412da2e3ebdSchin}end 413da2e3ebdSchintyp int16_t stdint.h inttypes.h no{ 414da2e3ebdSchin #undef _typ_int16_t 415da2e3ebdSchin #define _typ_int16_t 1 416da2e3ebdSchin typedef _ast_int2_t int16_t; 417da2e3ebdSchin}end 418da2e3ebdSchintyp uint16_t stdint.h inttypes.h no{ 419da2e3ebdSchin #undef _typ_uint16_t 420da2e3ebdSchin #define _typ_uint16_t 1 421da2e3ebdSchin typedef unsigned _ast_int2_t uint16_t; 422da2e3ebdSchin}end 423da2e3ebdSchintyp int32_t stdint.h inttypes.h no{ 424da2e3ebdSchin #undef _typ_int32_t 425da2e3ebdSchin #define _typ_int32_t 1 426da2e3ebdSchin typedef _ast_int4_t int32_t; 427da2e3ebdSchin}end 428da2e3ebdSchintyp uint32_t stdint.h inttypes.h no{ 429da2e3ebdSchin #undef _typ_uint32_t 430da2e3ebdSchin #define _typ_uint32_t 1 431da2e3ebdSchin typedef unsigned _ast_int4_t uint32_t; 432da2e3ebdSchin}end 433da2e3ebdSchintyp int64_t stdint.h inttypes.h no{ 434da2e3ebdSchin #ifdef _ast_int8_t 435da2e3ebdSchin #undef _typ_int64_t 436da2e3ebdSchin #define _typ_int64_t 1 437da2e3ebdSchin typedef _ast_int8_t int64_t; 438da2e3ebdSchin #endif 439da2e3ebdSchin}end 440da2e3ebdSchintyp uint64_t stdint.h inttypes.h no{ 441da2e3ebdSchin #ifdef _ast_int8_t 442da2e3ebdSchin #undef _typ_uint64_t 443da2e3ebdSchin #define _typ_uint64_t 1 444da2e3ebdSchin typedef unsigned _ast_int8_t uint64_t; 445da2e3ebdSchin #endif 446da2e3ebdSchin}end 447da2e3ebdSchintyp intmax_t stdint.h inttypes.h no{ 448*b30d1939SAndy Fiddaman #undef _typ_intmax_t 449*b30d1939SAndy Fiddaman #define _typ_intmax_t 1 450da2e3ebdSchin typedef _ast_intmax_t intmax_t; 451da2e3ebdSchin}end 452da2e3ebdSchintyp uintmax_t stdint.h inttypes.h no{ 453*b30d1939SAndy Fiddaman #undef _typ_uintmax_t 454*b30d1939SAndy Fiddaman #define _typ_uintmax_t 1 455da2e3ebdSchin typedef unsigned _ast_intmax_t uintmax_t; 456da2e3ebdSchin}end 457*b30d1939SAndy Fiddamantyp uintptr_t stdint.h inttypes.h no{ 458*b30d1939SAndy Fiddaman #undef _typ_uintptr_t 459*b30d1939SAndy Fiddaman #define _typ_uintptr_t 1 460*b30d1939SAndy Fiddaman #if _ast_sizeof_pointer == 8 && defined(_ast_int8_t) 461*b30d1939SAndy Fiddaman typedef unsigned _ast_int8_t uintptr_t; 462*b30d1939SAndy Fiddaman #else 463*b30d1939SAndy Fiddaman typedef unsigned _ast_int4_t uintptr_t; 464*b30d1939SAndy Fiddaman #endif 465*b30d1939SAndy Fiddaman}end 466da2e3ebdSchin 467da2e3ebdSchintst - -DTRY=1 - -DTRY=1 -Dvoid=char - -DTRY=2 - -DTRY=3 - -DTRY=4 output{ 468da2e3ebdSchin #if _STD_ && _hdr_stdarg 469da2e3ebdSchin #include <stdarg.h> 470da2e3ebdSchin static void 471da2e3ebdSchin varyfunny(int* p, ...) 472da2e3ebdSchin { 473da2e3ebdSchin va_list ap; 474da2e3ebdSchin va_start(ap, p); 475da2e3ebdSchin #if TRY == 1 476da2e3ebdSchin *p = *ap++ != 0; 477da2e3ebdSchin #endif /*TRY == 1*/ 478da2e3ebdSchin #if TRY == 2 479da2e3ebdSchin *p = *ap != 0; 480da2e3ebdSchin #endif /*TRY == 2*/ 481da2e3ebdSchin #if TRY == 3 482da2e3ebdSchin *p = ap++ != 0; 483da2e3ebdSchin #endif /*TRY == 3*/ 484da2e3ebdSchin va_end(ap); 485da2e3ebdSchin } 486da2e3ebdSchin #else 487da2e3ebdSchin #include <varargs.h> 488da2e3ebdSchin static void 489da2e3ebdSchin varyfunny(va_alist) 490da2e3ebdSchin va_dcl 491da2e3ebdSchin { 492da2e3ebdSchin va_list ap; 493da2e3ebdSchin int* p; 494da2e3ebdSchin va_start(ap); 495da2e3ebdSchin p = va_arg(ap, int*); 496da2e3ebdSchin #if TRY == 1 497da2e3ebdSchin *p = *ap++ != 0; 498da2e3ebdSchin #endif /*TRY == 1*/ 499da2e3ebdSchin #if TRY == 2 500da2e3ebdSchin *p = *ap != 0; 501da2e3ebdSchin #endif /*TRY == 2*/ 502da2e3ebdSchin #if TRY == 3 503da2e3ebdSchin *p = ap++ != 0; 504da2e3ebdSchin #endif /*TRY == 3*/ 505da2e3ebdSchin va_end(ap); 506da2e3ebdSchin } 507da2e3ebdSchin #endif 508da2e3ebdSchin int 509da2e3ebdSchin main() 510da2e3ebdSchin { 511da2e3ebdSchin int r; 51234f9b3eeSRoland Mainz 513da2e3ebdSchin printf("\n#ifndef va_listref\n"); 51434f9b3eeSRoland Mainz printf("#ifndef va_start\n"); 51534f9b3eeSRoland Mainz printf("#if __STD_C\n"); 51634f9b3eeSRoland Mainz printf("#include <stdarg.h>\n"); 51734f9b3eeSRoland Mainz printf("#else\n"); 51834f9b3eeSRoland Mainz printf("#include <varargs.h>\n"); 51934f9b3eeSRoland Mainz printf("#endif\n"); 52034f9b3eeSRoland Mainz printf("#endif\n"); 521da2e3ebdSchin #if TRY == 4 522da2e3ebdSchin printf("#define va_listref(p) (&(p))\t"); 523da2e3ebdSchin printf("/* pass va_list to varargs function */\n"); 524da2e3ebdSchin printf("#define va_listval(p) (*(p))\t"); 525da2e3ebdSchin printf("/* retrieve va_list from va_arg(ap,va_listarg) */\n"); 526da2e3ebdSchin printf("#define va_listarg va_list*\t"); 527da2e3ebdSchin printf("/* va_arg() va_list type */\n"); 528da2e3ebdSchin #else 529da2e3ebdSchin varyfunny(&r); 530da2e3ebdSchin printf("#define va_listref(p) (p)\t"); 531da2e3ebdSchin printf("/* pass va_list to varargs function */\n"); 532da2e3ebdSchin if (sizeof(va_list) > sizeof(void*)) 533da2e3ebdSchin printf("#define va_listval(p) (*(p))\t"); 534da2e3ebdSchin else 535da2e3ebdSchin printf("#define va_listval(p) (p)\t"); 536da2e3ebdSchin printf("/* retrieve va_list from va_arg(ap,va_listarg) */\n"); 537da2e3ebdSchin #if TRY == 2 538da2e3ebdSchin printf("#define va_listarg va_list*\t"); 539da2e3ebdSchin #else 540da2e3ebdSchin printf("#define va_listarg va_list\t"); 541da2e3ebdSchin #endif /*TRY == 2*/ 542da2e3ebdSchin printf("/* va_arg() va_list type */\n"); 543da2e3ebdSchin #endif /*TRY == 4*/ 544da2e3ebdSchin 545da2e3ebdSchin #if _UWIN 546da2e3ebdSchin printf("#ifndef va_copy\n"); 547da2e3ebdSchin printf("#define va_copy(to,fr) ((to)=(fr))\t"); 548da2e3ebdSchin printf("/* copy va_list fr -> to */\n"); 549da2e3ebdSchin printf("#endif\n"); 550da2e3ebdSchin #else 551da2e3ebdSchin #if !defined(va_copy) 552da2e3ebdSchin #if defined(__va_copy) 553da2e3ebdSchin printf("#ifndef va_copy\n"); 554da2e3ebdSchin printf("#define va_copy(to,fr) __va_copy(to,fr)\t"); 555da2e3ebdSchin printf("/* copy va_list fr -> to */\n"); 556da2e3ebdSchin printf("#endif\n"); 557da2e3ebdSchin #else 558da2e3ebdSchin #if TRY == 2 559da2e3ebdSchin printf("#ifndef va_copy\n"); 560da2e3ebdSchin printf("#define va_copy(to,fr) memcpy(to,fr,sizeof(va_list))\t"); 561da2e3ebdSchin printf("/* copy va_list fr -> to */\n"); 562da2e3ebdSchin printf("#endif\n"); 563da2e3ebdSchin #else 564da2e3ebdSchin printf("#ifndef va_copy\n"); 565da2e3ebdSchin printf("#define va_copy(to,fr) ((to)=(fr))\t"); 566da2e3ebdSchin printf("/* copy va_list fr -> to */\n"); 567da2e3ebdSchin printf("#endif\n"); 568da2e3ebdSchin #endif 569da2e3ebdSchin #endif 570da2e3ebdSchin #endif 571da2e3ebdSchin #endif 572da2e3ebdSchin 573da2e3ebdSchin printf("#endif\n"); 574da2e3ebdSchin return 0; 575da2e3ebdSchin } 576da2e3ebdSchin}end 577da2e3ebdSchin 578da2e3ebdSchincat{ 579da2e3ebdSchin #ifndef _AST_STD_H 580da2e3ebdSchin # if __STD_C && _hdr_stddef 581da2e3ebdSchin # include <stddef.h> 582da2e3ebdSchin # endif 583da2e3ebdSchin # if _sys_types 584da2e3ebdSchin # include <sys/types.h> 585da2e3ebdSchin # endif 586da2e3ebdSchin # if _hdr_stdint 587da2e3ebdSchin # include <stdint.h> 588da2e3ebdSchin # else 589da2e3ebdSchin # if _hdr_inttypes 590da2e3ebdSchin # include <inttypes.h> 591da2e3ebdSchin # endif 592da2e3ebdSchin # endif 593da2e3ebdSchin #endif 594da2e3ebdSchin #if !_typ_size_t 595da2e3ebdSchin # define _typ_size_t 1 596da2e3ebdSchin typedef int size_t; 597da2e3ebdSchin #endif 598da2e3ebdSchin #if !_typ_ssize_t 599da2e3ebdSchin # define _typ_ssize_t 1 600da2e3ebdSchin typedef int ssize_t; 601da2e3ebdSchin #endif 602da2e3ebdSchin #ifndef _AST_STD_H 603da2e3ebdSchin # define _def_map_ast 1 604da2e3ebdSchin # if !_def_map_ast 605da2e3ebdSchin # include <ast_map.h> 606da2e3ebdSchin # endif 607da2e3ebdSchin #endif 608da2e3ebdSchin}end 609da2e3ebdSchin 610da2e3ebdSchinrun{ 611da2e3ebdSchin grep __NO_INCLUDE_WARN__ /usr/include/stat.h >/dev/null 2>&1 && 612da2e3ebdSchin grep '<name.h>' /usr/include/sys/stat.h >/dev/null 2>&1 && 613da2e3ebdSchin grep __name_h /usr/include/name.h >/dev/null 2>&1 && 614da2e3ebdSchin cat <<! 615da2e3ebdSchin /* disable ${HOSTTYPE} <sys/foo.h> vs. <foo.h> clash warnings */ 616da2e3ebdSchin #ifndef __NO_INCLUDE_WARN__ 617da2e3ebdSchin #define __NO_INCLUDE_WARN__ 1 618da2e3ebdSchin #endif 619da2e3ebdSchin /* disable ${HOSTTYPE} <sys/stat.h> <name.h> hijack */ 620da2e3ebdSchin #ifndef __name_h 621da2e3ebdSchin #define __name_h 1 622da2e3ebdSchin #endif 623da2e3ebdSchin ! 624da2e3ebdSchin}end 625