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