14887Schin /*********************************************************************** 24887Schin * * 34887Schin * This software is part of the ast package * 4*8462SApril.Chin@Sun.COM * Copyright (c) 1985-2008 AT&T Intellectual Property * 54887Schin * and is licensed under the * 64887Schin * Common Public License, Version 1.0 * 7*8462SApril.Chin@Sun.COM * by AT&T Intellectual Property * 84887Schin * * 94887Schin * A copy of the License is available at * 104887Schin * http://www.opensource.org/licenses/cpl1.0.txt * 114887Schin * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 124887Schin * * 134887Schin * Information and Software Systems Research * 144887Schin * AT&T Research * 154887Schin * Florham Park NJ * 164887Schin * * 174887Schin * Glenn Fowler <gsf@research.att.com> * 184887Schin * David Korn <dgk@research.att.com> * 194887Schin * Phong Vo <kpv@research.att.com> * 204887Schin * * 214887Schin ***********************************************************************/ 224887Schin #pragma prototyped 234887Schin /* 244887Schin * Glenn Fowler 254887Schin * AT&T Research 264887Schin * 274887Schin * generate limits features 284887Schin * 294887Schin * FOPEN_MAX POSIX says ANSI defines it but it's not in ANSI 304887Schin * 314887Schin * NOTE: two's complement binary integral representation assumed 324887Schin */ 334887Schin 344887Schin #if defined(__STDPP__directive) && defined(__STDPP__hide) 354887Schin __STDPP__directive pragma pp:hide getpagesize getdtablesize 364887Schin #else 374887Schin #define getpagesize ______getpagesize 384887Schin #define getdtablesize ______getdtablesize 394887Schin #endif 404887Schin 414887Schin /* 424887Schin * we'd like as many symbols as possible defined 434887Schin * the standards push the vendors the other way 444887Schin * but don't provide guard that lets everything through 454887Schin * so each vendor adds their own guard 464887Schin * many now include something like <standards.h> to 474887Schin * get it straight in one place -- <sys/types.h> should 484887Schin * kick that in 494887Schin */ 504887Schin 514887Schin #include "FEATURE/standards" 524887Schin #include "FEATURE/lib" 534887Schin 544887Schin #ifdef __sun 554887Schin #define _timespec timespec 564887Schin #endif 574887Schin 584887Schin #include <sys/types.h> 594887Schin 604887Schin #undef _SGIAPI 614887Schin #define _SGIAPI 1 624887Schin 634887Schin #if _hdr_limits 644887Schin #include <limits.h> 654887Schin #endif 664887Schin 674887Schin #undef _SGIAPI 684887Schin #define _SGIAPI 0 694887Schin 704887Schin #include "FEATURE/lib" 714887Schin #include "FEATURE/common" 724887Schin 734887Schin #if _hdr_unistd 744887Schin #include <unistd.h> 754887Schin #endif 764887Schin 774887Schin #include "FEATURE/param" 784887Schin 794887Schin #if defined(__STDPP__directive) && defined(__STDPP__hide) 804887Schin __STDPP__directive pragma pp:nohide getpagesize getdtablesize 814887Schin #else 824887Schin #undef getpagesize 834887Schin #undef getdtablesize 844887Schin #endif 854887Schin 864887Schin int main() 874887Schin { 884887Schin char c; 894887Schin unsigned char uc; 904887Schin unsigned short us; 914887Schin unsigned int ui; 924887Schin unsigned long ul; 934887Schin unsigned long val; 944887Schin #if _typ_uint64_t 954887Schin uint64_t ull; 964887Schin uint64_t vll; 974887Schin #endif 984887Schin 994887Schin /* 1004887Schin * <limits.h> with *constant* valued macros 1014887Schin */ 1024887Schin 1034887Schin printf("\n"); 1044887Schin #ifndef CHAR_BIT 1054887Schin uc = 0; 1064887Schin uc = ~uc; 1074887Schin val = 1; 1084887Schin while (uc >>= 1) val++; 1094887Schin printf("#define CHAR_BIT %lu\n", val); 1104887Schin #endif 1114887Schin #ifndef MB_LEN_MAX 1124887Schin val = 1; 1134887Schin printf("#define MB_LEN_MAX %lu\n", val); 1144887Schin #endif 1154887Schin 1164887Schin c = 0; 1174887Schin c = ~c; 1184887Schin uc = 0; 1194887Schin uc = ~uc; 1204887Schin us = 0; 1214887Schin us = ~us; 1224887Schin ui = 0; 1234887Schin ui = ~ui; 1244887Schin ul = 0; 1254887Schin ul = ~ul; 1264887Schin #if _typ_uint64_t 1274887Schin ull = 0; 1284887Schin ull = ~ull; 1294887Schin #endif 1304887Schin 1314887Schin #ifndef UCHAR_MAX 1324887Schin val = uc; 1334887Schin printf("#if defined(__STDC__)\n"); 1344887Schin printf("#define UCHAR_MAX %luU\n", val); 1354887Schin printf("#else\n"); 1364887Schin printf("#define UCHAR_MAX %lu\n", val); 1374887Schin printf("#endif\n"); 1384887Schin #endif 1394887Schin 1404887Schin #ifndef SCHAR_MIN 1414887Schin val = (unsigned char)(uc >> 1) + 1; 1424887Schin printf("#define SCHAR_MIN (-%lu)\n", val); 1434887Schin #endif 1444887Schin 1454887Schin #ifndef SCHAR_MAX 1464887Schin val = (unsigned char)(uc >> 1); 1474887Schin printf("#define SCHAR_MAX %lu\n", val); 1484887Schin #endif 1494887Schin 1504887Schin if (c < 0) 1514887Schin { 1524887Schin #ifndef CHAR_MIN 1534887Schin printf("#define CHAR_MIN SCHAR_MIN\n"); 1544887Schin #endif 1554887Schin 1564887Schin #ifndef CHAR_MAX 1574887Schin printf("#define CHAR_MAX SCHAR_MAX\n"); 1584887Schin #endif 1594887Schin } 1604887Schin else 1614887Schin { 1624887Schin #ifndef CHAR_MIN 1634887Schin printf("#define CHAR_MIN 0\n"); 1644887Schin #endif 1654887Schin 1664887Schin #ifndef CHAR_MAX 1674887Schin printf("#define CHAR_MAX UCHAR_MAX\n"); 1684887Schin #endif 1694887Schin } 1704887Schin 1714887Schin #ifndef USHRT_MAX 1724887Schin val = us; 1734887Schin printf("#if defined(__STDC__)\n"); 1744887Schin printf("#define USHRT_MAX %luU\n", val); 1754887Schin printf("#else\n"); 1764887Schin printf("#define USHRT_MAX %lu\n", val); 1774887Schin printf("#endif\n"); 1784887Schin #endif 1794887Schin 1804887Schin #ifndef SHRT_MIN 1814887Schin val = (unsigned short)(us >> 1) + 1; 1824887Schin printf("#define SHRT_MIN (-%lu)\n", val); 1834887Schin #endif 1844887Schin 1854887Schin #ifndef SHRT_MAX 1864887Schin val = (unsigned short)(us >> 1); 1874887Schin printf("#define SHRT_MAX %lu\n", val); 1884887Schin #endif 1894887Schin 1904887Schin if (ui == us) 1914887Schin { 1924887Schin #ifndef UINT_MAX 1934887Schin printf("#define UINT_MAX USHRT_MAX\n"); 1944887Schin #endif 1954887Schin 1964887Schin #ifndef INT_MIN 1974887Schin printf("#define INT_MIN SHRT_MIN\n"); 1984887Schin #endif 1994887Schin 2004887Schin #ifndef INT_MAX 2014887Schin printf("#define INT_MAX SHRT_MAX\n"); 2024887Schin #endif 2034887Schin } 2044887Schin else 2054887Schin { 2064887Schin #ifndef UINT_MAX 2074887Schin val = ui; 2084887Schin printf("#if defined(__STDC__)\n"); 2094887Schin printf("#define UINT_MAX %luU\n", val); 2104887Schin printf("#else\n"); 2114887Schin printf("#define UINT_MAX %lu\n", val); 2124887Schin printf("#endif\n"); 2134887Schin #endif 2144887Schin 2154887Schin #ifndef INT_MIN 2164887Schin val = (unsigned int)(ui >> 1) + 1; 2174887Schin if (ui == ul) printf("#define INT_MIN (-%lu-1)\n", val - 1); 2184887Schin else printf("#define INT_MIN (-%lu)\n", val); 2194887Schin #endif 2204887Schin 2214887Schin #ifndef INT_MAX 2224887Schin val = (unsigned int)(ui >> 1); 2234887Schin printf("#define INT_MAX %lu\n", val); 2244887Schin #endif 2254887Schin } 2264887Schin 2274887Schin if (ul == ui) 2284887Schin { 2294887Schin #ifndef ULONG_MAX 2304887Schin printf("#define ULONG_MAX UINT_MAX\n"); 2314887Schin #endif 2324887Schin 2334887Schin #ifndef LONG_MIN 2344887Schin printf("#define LONG_MIN INT_MIN\n"); 2354887Schin #endif 2364887Schin 2374887Schin #ifndef LONG_MAX 2384887Schin printf("#define LONG_MAX INT_MAX\n"); 2394887Schin #endif 2404887Schin } 2414887Schin else 2424887Schin { 2434887Schin #ifndef ULONG_MAX 2444887Schin val = ul; 2454887Schin printf("#if defined(__STDC__)\n"); 2464887Schin printf("#define ULONG_MAX %luLU\n", val); 2474887Schin printf("#else\n"); 2484887Schin printf("#define ULONG_MAX %lu\n", val); 2494887Schin printf("#endif\n"); 2504887Schin #endif 2514887Schin 2524887Schin #ifndef LONG_MIN 2534887Schin val = (unsigned long)(ul >> 1) + 1; 2544887Schin printf("#define LONG_MIN (-%luL-1L)\n", val - 1); 2554887Schin #endif 2564887Schin 2574887Schin #ifndef LONG_MAX 2584887Schin val = (unsigned long)(ul >> 1); 2594887Schin printf("#define LONG_MAX %luL\n", val); 2604887Schin #endif 2614887Schin } 2624887Schin 2634887Schin #if _typ_uint64_t && !_ast_intmax_long 2644887Schin if (ull == ul) 2654887Schin { 2664887Schin #ifndef ULLONG_MAX 2674887Schin printf("#define ULLONG_MAX ULONG_MAX\n"); 2684887Schin #endif 2694887Schin 2704887Schin #ifndef LLONG_MIN 2714887Schin printf("#define LLONG_MIN LONG_MIN\n"); 2724887Schin #endif 2734887Schin 2744887Schin #ifndef LLONG_MAX 2754887Schin printf("#define LLONG_MAX LONG_MAX\n"); 2764887Schin #endif 2774887Schin } 2784887Schin else 2794887Schin { 2804887Schin #ifndef ULLONG_MAX 2814887Schin vll = ull; 2824887Schin printf("#ifndef ULLONG_MAX\n"); 2834887Schin printf("#if defined(__STDC__) && _ast_LL\n"); 2844887Schin printf("#define ULLONG_MAX %lluULL\n", vll); 2854887Schin printf("#else\n"); 2864887Schin printf("#define ULLONG_MAX %llu\n", vll); 2874887Schin printf("#endif\n"); 2884887Schin printf("#endif\n"); 2894887Schin #endif 2904887Schin 2914887Schin #ifndef LLONG_MIN 2924887Schin vll = (uint64_t)(ull >> 1) + 1; 2934887Schin printf("#ifndef LLONG_MIN\n"); 2944887Schin printf("#if defined(__STDC__) && _ast_LL\n"); 2954887Schin printf("#define LLONG_MIN (-%lluLL-1LL)\n", vll - 1); 2964887Schin printf("#else\n"); 2974887Schin printf("#define LLONG_MIN (-%llu-1)\n", vll - 1); 2984887Schin printf("#endif\n"); 2994887Schin printf("#endif\n"); 3004887Schin #endif 3014887Schin 3024887Schin #ifndef LLONG_MAX 3034887Schin vll = (uint64_t)(ull >> 1); 3044887Schin printf("#ifndef LLONG_MAX\n"); 3054887Schin printf("#if defined(__STDC__) && _ast_LL\n"); 3064887Schin printf("#define LLONG_MAX %lluLL\n", vll); 3074887Schin printf("#else\n"); 3084887Schin printf("#define LLONG_MAX %llu\n", vll); 3094887Schin printf("#endif\n"); 3104887Schin printf("#endif\n"); 3114887Schin #endif 3124887Schin } 3134887Schin #endif 3144887Schin 3154887Schin printf("\n"); 3164887Schin #ifdef _UWIN 3174887Schin printf("#ifdef _UWIN\n"); 3184887Schin printf("#ifndef DBL_DIG\n"); 3194887Schin printf("#define DBL_DIG 15\n"); 3204887Schin printf("#endif\n"); 3214887Schin printf("#ifndef DBL_MAX\n"); 3224887Schin printf("#define DBL_MAX 1.7976931348623158e+308\n"); 3234887Schin printf("#endif\n"); 3244887Schin printf("#ifndef FLT_DIG\n"); 3254887Schin printf("#define FLT_DIG 6\n"); 3264887Schin printf("#endif\n"); 3274887Schin printf("#ifndef FLT_MAX\n"); 3284887Schin printf("#define FLT_MAX 3.402823466e+38F\n"); 3294887Schin printf("#endif\n"); 3304887Schin printf("#endif\n"); 3314887Schin printf("\n"); 3324887Schin #endif 3334887Schin 3344887Schin #include "conflim.h" 3354887Schin 3364887Schin printf("\n"); 3374887Schin 3384887Schin return 0; 3394887Schin } 340