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