1/*********************************************************************** 2* * 3* This software is part of the ast package * 4* Copyright (c) 1985-2010 AT&T Intellectual Property * 5* and is licensed under the * 6* Common Public License, Version 1.0 * 7* by AT&T Intellectual Property * 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 86int 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