Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/lib/libast/features/limits.c
1810 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1985-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* David Korn <[email protected]> *
19
* Phong Vo <[email protected]> *
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
341