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