1*4887Schin /*********************************************************************** 2*4887Schin * * 3*4887Schin * This software is part of the ast package * 4*4887Schin * Copyright (c) 1985-2007 AT&T Knowledge Ventures * 5*4887Schin * and is licensed under the * 6*4887Schin * Common Public License, Version 1.0 * 7*4887Schin * by AT&T Knowledge Ventures * 8*4887Schin * * 9*4887Schin * A copy of the License is available at * 10*4887Schin * http://www.opensource.org/licenses/cpl1.0.txt * 11*4887Schin * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 12*4887Schin * * 13*4887Schin * Information and Software Systems Research * 14*4887Schin * AT&T Research * 15*4887Schin * Florham Park NJ * 16*4887Schin * * 17*4887Schin * Glenn Fowler <gsf@research.att.com> * 18*4887Schin * David Korn <dgk@research.att.com> * 19*4887Schin * Phong Vo <kpv@research.att.com> * 20*4887Schin * * 21*4887Schin ***********************************************************************/ 22*4887Schin #pragma prototyped 23*4887Schin /* 24*4887Schin * Glenn Fowler 25*4887Schin * AT&T Research 26*4887Schin * 27*4887Schin * generate limits features 28*4887Schin * 29*4887Schin * FOPEN_MAX POSIX says ANSI defines it but it's not in ANSI 30*4887Schin * 31*4887Schin * NOTE: two's complement binary integral representation assumed 32*4887Schin */ 33*4887Schin 34*4887Schin #if defined(__STDPP__directive) && defined(__STDPP__hide) 35*4887Schin __STDPP__directive pragma pp:hide getpagesize getdtablesize 36*4887Schin #else 37*4887Schin #define getpagesize ______getpagesize 38*4887Schin #define getdtablesize ______getdtablesize 39*4887Schin #endif 40*4887Schin 41*4887Schin /* 42*4887Schin * we'd like as many symbols as possible defined 43*4887Schin * the standards push the vendors the other way 44*4887Schin * but don't provide guard that lets everything through 45*4887Schin * so each vendor adds their own guard 46*4887Schin * many now include something like <standards.h> to 47*4887Schin * get it straight in one place -- <sys/types.h> should 48*4887Schin * kick that in 49*4887Schin */ 50*4887Schin 51*4887Schin #include "FEATURE/standards" 52*4887Schin #include "FEATURE/lib" 53*4887Schin 54*4887Schin #ifdef __sun 55*4887Schin #define _timespec timespec 56*4887Schin #endif 57*4887Schin 58*4887Schin #include <sys/types.h> 59*4887Schin 60*4887Schin #undef _SGIAPI 61*4887Schin #define _SGIAPI 1 62*4887Schin 63*4887Schin #if _hdr_limits 64*4887Schin #include <limits.h> 65*4887Schin #endif 66*4887Schin 67*4887Schin #undef _SGIAPI 68*4887Schin #define _SGIAPI 0 69*4887Schin 70*4887Schin #include "FEATURE/lib" 71*4887Schin #include "FEATURE/common" 72*4887Schin 73*4887Schin #if _hdr_unistd 74*4887Schin #include <unistd.h> 75*4887Schin #endif 76*4887Schin 77*4887Schin #include "FEATURE/param" 78*4887Schin 79*4887Schin #if defined(__STDPP__directive) && defined(__STDPP__hide) 80*4887Schin __STDPP__directive pragma pp:nohide getpagesize getdtablesize 81*4887Schin #else 82*4887Schin #undef getpagesize 83*4887Schin #undef getdtablesize 84*4887Schin #endif 85*4887Schin 86*4887Schin int main() 87*4887Schin { 88*4887Schin char c; 89*4887Schin unsigned char uc; 90*4887Schin unsigned short us; 91*4887Schin unsigned int ui; 92*4887Schin unsigned long ul; 93*4887Schin unsigned long val; 94*4887Schin #if _typ_uint64_t 95*4887Schin uint64_t ull; 96*4887Schin uint64_t vll; 97*4887Schin #endif 98*4887Schin 99*4887Schin /* 100*4887Schin * <limits.h> with *constant* valued macros 101*4887Schin */ 102*4887Schin 103*4887Schin printf("\n"); 104*4887Schin #ifndef CHAR_BIT 105*4887Schin uc = 0; 106*4887Schin uc = ~uc; 107*4887Schin val = 1; 108*4887Schin while (uc >>= 1) val++; 109*4887Schin printf("#define CHAR_BIT %lu\n", val); 110*4887Schin #endif 111*4887Schin #ifndef MB_LEN_MAX 112*4887Schin val = 1; 113*4887Schin printf("#define MB_LEN_MAX %lu\n", val); 114*4887Schin #endif 115*4887Schin 116*4887Schin c = 0; 117*4887Schin c = ~c; 118*4887Schin uc = 0; 119*4887Schin uc = ~uc; 120*4887Schin us = 0; 121*4887Schin us = ~us; 122*4887Schin ui = 0; 123*4887Schin ui = ~ui; 124*4887Schin ul = 0; 125*4887Schin ul = ~ul; 126*4887Schin #if _typ_uint64_t 127*4887Schin ull = 0; 128*4887Schin ull = ~ull; 129*4887Schin #endif 130*4887Schin 131*4887Schin #ifndef UCHAR_MAX 132*4887Schin val = uc; 133*4887Schin printf("#if defined(__STDC__)\n"); 134*4887Schin printf("#define UCHAR_MAX %luU\n", val); 135*4887Schin printf("#else\n"); 136*4887Schin printf("#define UCHAR_MAX %lu\n", val); 137*4887Schin printf("#endif\n"); 138*4887Schin #endif 139*4887Schin 140*4887Schin #ifndef SCHAR_MIN 141*4887Schin val = (unsigned char)(uc >> 1) + 1; 142*4887Schin printf("#define SCHAR_MIN (-%lu)\n", val); 143*4887Schin #endif 144*4887Schin 145*4887Schin #ifndef SCHAR_MAX 146*4887Schin val = (unsigned char)(uc >> 1); 147*4887Schin printf("#define SCHAR_MAX %lu\n", val); 148*4887Schin #endif 149*4887Schin 150*4887Schin if (c < 0) 151*4887Schin { 152*4887Schin #ifndef CHAR_MIN 153*4887Schin printf("#define CHAR_MIN SCHAR_MIN\n"); 154*4887Schin #endif 155*4887Schin 156*4887Schin #ifndef CHAR_MAX 157*4887Schin printf("#define CHAR_MAX SCHAR_MAX\n"); 158*4887Schin #endif 159*4887Schin } 160*4887Schin else 161*4887Schin { 162*4887Schin #ifndef CHAR_MIN 163*4887Schin printf("#define CHAR_MIN 0\n"); 164*4887Schin #endif 165*4887Schin 166*4887Schin #ifndef CHAR_MAX 167*4887Schin printf("#define CHAR_MAX UCHAR_MAX\n"); 168*4887Schin #endif 169*4887Schin } 170*4887Schin 171*4887Schin #ifndef USHRT_MAX 172*4887Schin val = us; 173*4887Schin printf("#if defined(__STDC__)\n"); 174*4887Schin printf("#define USHRT_MAX %luU\n", val); 175*4887Schin printf("#else\n"); 176*4887Schin printf("#define USHRT_MAX %lu\n", val); 177*4887Schin printf("#endif\n"); 178*4887Schin #endif 179*4887Schin 180*4887Schin #ifndef SHRT_MIN 181*4887Schin val = (unsigned short)(us >> 1) + 1; 182*4887Schin printf("#define SHRT_MIN (-%lu)\n", val); 183*4887Schin #endif 184*4887Schin 185*4887Schin #ifndef SHRT_MAX 186*4887Schin val = (unsigned short)(us >> 1); 187*4887Schin printf("#define SHRT_MAX %lu\n", val); 188*4887Schin #endif 189*4887Schin 190*4887Schin if (ui == us) 191*4887Schin { 192*4887Schin #ifndef UINT_MAX 193*4887Schin printf("#define UINT_MAX USHRT_MAX\n"); 194*4887Schin #endif 195*4887Schin 196*4887Schin #ifndef INT_MIN 197*4887Schin printf("#define INT_MIN SHRT_MIN\n"); 198*4887Schin #endif 199*4887Schin 200*4887Schin #ifndef INT_MAX 201*4887Schin printf("#define INT_MAX SHRT_MAX\n"); 202*4887Schin #endif 203*4887Schin } 204*4887Schin else 205*4887Schin { 206*4887Schin #ifndef UINT_MAX 207*4887Schin val = ui; 208*4887Schin printf("#if defined(__STDC__)\n"); 209*4887Schin printf("#define UINT_MAX %luU\n", val); 210*4887Schin printf("#else\n"); 211*4887Schin printf("#define UINT_MAX %lu\n", val); 212*4887Schin printf("#endif\n"); 213*4887Schin #endif 214*4887Schin 215*4887Schin #ifndef INT_MIN 216*4887Schin val = (unsigned int)(ui >> 1) + 1; 217*4887Schin if (ui == ul) printf("#define INT_MIN (-%lu-1)\n", val - 1); 218*4887Schin else printf("#define INT_MIN (-%lu)\n", val); 219*4887Schin #endif 220*4887Schin 221*4887Schin #ifndef INT_MAX 222*4887Schin val = (unsigned int)(ui >> 1); 223*4887Schin printf("#define INT_MAX %lu\n", val); 224*4887Schin #endif 225*4887Schin } 226*4887Schin 227*4887Schin if (ul == ui) 228*4887Schin { 229*4887Schin #ifndef ULONG_MAX 230*4887Schin printf("#define ULONG_MAX UINT_MAX\n"); 231*4887Schin #endif 232*4887Schin 233*4887Schin #ifndef LONG_MIN 234*4887Schin printf("#define LONG_MIN INT_MIN\n"); 235*4887Schin #endif 236*4887Schin 237*4887Schin #ifndef LONG_MAX 238*4887Schin printf("#define LONG_MAX INT_MAX\n"); 239*4887Schin #endif 240*4887Schin } 241*4887Schin else 242*4887Schin { 243*4887Schin #ifndef ULONG_MAX 244*4887Schin val = ul; 245*4887Schin printf("#if defined(__STDC__)\n"); 246*4887Schin printf("#define ULONG_MAX %luLU\n", val); 247*4887Schin printf("#else\n"); 248*4887Schin printf("#define ULONG_MAX %lu\n", val); 249*4887Schin printf("#endif\n"); 250*4887Schin #endif 251*4887Schin 252*4887Schin #ifndef LONG_MIN 253*4887Schin val = (unsigned long)(ul >> 1) + 1; 254*4887Schin printf("#define LONG_MIN (-%luL-1L)\n", val - 1); 255*4887Schin #endif 256*4887Schin 257*4887Schin #ifndef LONG_MAX 258*4887Schin val = (unsigned long)(ul >> 1); 259*4887Schin printf("#define LONG_MAX %luL\n", val); 260*4887Schin #endif 261*4887Schin } 262*4887Schin 263*4887Schin #if _typ_uint64_t && !_ast_intmax_long 264*4887Schin if (ull == ul) 265*4887Schin { 266*4887Schin #ifndef ULLONG_MAX 267*4887Schin printf("#define ULLONG_MAX ULONG_MAX\n"); 268*4887Schin #endif 269*4887Schin 270*4887Schin #ifndef LLONG_MIN 271*4887Schin printf("#define LLONG_MIN LONG_MIN\n"); 272*4887Schin #endif 273*4887Schin 274*4887Schin #ifndef LLONG_MAX 275*4887Schin printf("#define LLONG_MAX LONG_MAX\n"); 276*4887Schin #endif 277*4887Schin } 278*4887Schin else 279*4887Schin { 280*4887Schin #ifndef ULLONG_MAX 281*4887Schin vll = ull; 282*4887Schin printf("#ifndef ULLONG_MAX\n"); 283*4887Schin printf("#if defined(__STDC__) && _ast_LL\n"); 284*4887Schin printf("#define ULLONG_MAX %lluULL\n", vll); 285*4887Schin printf("#else\n"); 286*4887Schin printf("#define ULLONG_MAX %llu\n", vll); 287*4887Schin printf("#endif\n"); 288*4887Schin printf("#endif\n"); 289*4887Schin #endif 290*4887Schin 291*4887Schin #ifndef LLONG_MIN 292*4887Schin vll = (uint64_t)(ull >> 1) + 1; 293*4887Schin printf("#ifndef LLONG_MIN\n"); 294*4887Schin printf("#if defined(__STDC__) && _ast_LL\n"); 295*4887Schin printf("#define LLONG_MIN (-%lluLL-1LL)\n", vll - 1); 296*4887Schin printf("#else\n"); 297*4887Schin printf("#define LLONG_MIN (-%llu-1)\n", vll - 1); 298*4887Schin printf("#endif\n"); 299*4887Schin printf("#endif\n"); 300*4887Schin #endif 301*4887Schin 302*4887Schin #ifndef LLONG_MAX 303*4887Schin vll = (uint64_t)(ull >> 1); 304*4887Schin printf("#ifndef LLONG_MAX\n"); 305*4887Schin printf("#if defined(__STDC__) && _ast_LL\n"); 306*4887Schin printf("#define LLONG_MAX %lluLL\n", vll); 307*4887Schin printf("#else\n"); 308*4887Schin printf("#define LLONG_MAX %llu\n", vll); 309*4887Schin printf("#endif\n"); 310*4887Schin printf("#endif\n"); 311*4887Schin #endif 312*4887Schin } 313*4887Schin #endif 314*4887Schin 315*4887Schin printf("\n"); 316*4887Schin #ifdef _UWIN 317*4887Schin printf("#ifdef _UWIN\n"); 318*4887Schin printf("#ifndef DBL_DIG\n"); 319*4887Schin printf("#define DBL_DIG 15\n"); 320*4887Schin printf("#endif\n"); 321*4887Schin printf("#ifndef DBL_MAX\n"); 322*4887Schin printf("#define DBL_MAX 1.7976931348623158e+308\n"); 323*4887Schin printf("#endif\n"); 324*4887Schin printf("#ifndef FLT_DIG\n"); 325*4887Schin printf("#define FLT_DIG 6\n"); 326*4887Schin printf("#endif\n"); 327*4887Schin printf("#ifndef FLT_MAX\n"); 328*4887Schin printf("#define FLT_MAX 3.402823466e+38F\n"); 329*4887Schin printf("#endif\n"); 330*4887Schin printf("#endif\n"); 331*4887Schin printf("\n"); 332*4887Schin #endif 333*4887Schin 334*4887Schin #include "conflim.h" 335*4887Schin 336*4887Schin printf("\n"); 337*4887Schin 338*4887Schin return 0; 339*4887Schin } 340