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*                  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 mode features
28 */
29
30#include "limits.h"
31
32#include "FEATURE/param"
33
34#include <modecanon.h>
35
36int
37main()
38{
39	int	n;
40	int	idperm;
41	int	idtype;
42
43	idperm = idtype = 1;
44#ifndef S_ITYPE
45#ifdef	S_IFMT
46	printf("#define S_ITYPE(m)	((m)&S_IFMT)\n");
47#else
48	printf("#define S_ITYPE(m)	((m)&~S_IPERM)\n");
49#endif
50#endif
51#ifdef S_ISBLK
52	if (!S_ISBLK(X_IFBLK)) idtype = 0;
53#else
54#ifdef S_IFBLK
55	printf("#define S_ISBLK(m)	(S_ITYPE(m)==S_IFBLK)\n");
56#else
57	printf("#define S_ISBLK(m)	0\n");
58#endif
59#endif
60#ifdef S_ISCHR
61	if (!S_ISCHR(X_IFCHR)) idtype = 0;
62#else
63#ifdef S_IFCHR
64	printf("#define S_ISCHR(m)	(S_ITYPE(m)==S_IFCHR)\n");
65#else
66	printf("#define S_ISCHR(m)	0\n");
67#endif
68#endif
69#ifdef S_ISCTG
70	if (!S_ISCTG(X_IFCTG)) idtype = 0;
71#else
72#ifdef S_IFCTG
73	printf("#define S_ISCTG(m)	(S_ITYPE(m)==S_IFCTG)\n");
74#endif
75#endif
76#ifdef S_ISDIR
77	if (!S_ISDIR(X_IFDIR)) idtype = 0;
78#else
79#ifdef S_IFDIR
80	printf("#define S_ISDIR(m)	(S_ITYPE(m)==S_IFDIR)\n");
81#else
82	printf("#define S_ISDIR(m)	0\n");
83#endif
84#endif
85#ifdef S_ISFIFO
86	if (!S_ISFIFO(X_IFIFO)) idtype = 0;
87#else
88#ifdef S_IFIFO
89	printf("#define S_ISFIFO(m)	(S_ITYPE(m)==S_IFIFO)\n");
90#else
91	printf("#define S_ISFIFO(m)	0\n");
92#endif
93#endif
94#ifdef S_ISLNK
95	if (!S_ISLNK(X_IFLNK)) idtype = 0;
96#else
97#ifdef S_IFLNK
98	printf("#define S_ISLNK(m)	(S_ITYPE(m)==S_IFLNK)\n");
99#else
100	printf("#define S_ISLNK(m)	0\n");
101#endif
102#endif
103#ifdef S_ISREG
104	if (!S_ISREG(X_IFREG)) idtype = 0;
105#else
106#ifdef S_IFREG
107	printf("#define S_ISREG(m)	(S_ITYPE(m)==S_IFREG)\n");
108#else
109	printf("#define S_ISREG(m)	0\n");
110#endif
111#endif
112#ifdef S_ISSOCK
113	if (!S_ISSOCK(X_IFSOCK)) idtype = 0;
114#else
115#ifdef S_IFSOCK
116	printf("#define S_ISSOCK(m)	(S_ITYPE(m)==S_IFSOCK)\n");
117#endif
118#endif
119	printf("\n");
120#ifndef S_IPERM
121	printf("#define S_IPERM		(S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)\n");
122#endif
123#ifndef S_ISUID
124	printf("#define S_ISUID		0%04o\n", X_ISUID);
125#else
126	if (S_ISUID != X_ISUID) idperm = 0;
127#endif
128#ifndef S_ISGID
129	printf("#define S_ISGID		0%04o\n", X_ISGID);
130#else
131	if (S_ISGID != X_ISGID) idperm = 0;
132#endif
133#ifndef S_ISVTX
134	printf("#define S_ISVTX		0%04o\n", X_ISVTX);
135#else
136	if (S_ISVTX != X_ISVTX) idperm = 0;
137#endif
138#ifndef S_IRUSR
139	printf("#define S_IRUSR		0%04o\n", X_IRUSR);
140#else
141	if (S_IRUSR != X_IRUSR) idperm = 0;
142#endif
143#ifndef S_IWUSR
144	printf("#define S_IWUSR		0%04o\n", X_IWUSR);
145#else
146	if (S_IWUSR != X_IWUSR) idperm = 0;
147#endif
148#ifndef S_IXUSR
149	printf("#define S_IXUSR		0%04o\n", X_IXUSR);
150#else
151	if (S_IXUSR != X_IXUSR) idperm = 0;
152#endif
153#ifndef S_IRGRP
154	printf("#define S_IRGRP		0%04o\n", X_IRGRP);
155#else
156	if (S_IRGRP != X_IRGRP) idperm = 0;
157#endif
158#ifndef S_IWGRP
159	printf("#define S_IWGRP		0%04o\n", X_IWGRP);
160#else
161	if (S_IWGRP != X_IWGRP) idperm = 0;
162#endif
163#ifndef S_IXGRP
164	printf("#define S_IXGRP		0%04o\n", X_IXGRP);
165#else
166	if (S_IXGRP != X_IXGRP) idperm = 0;
167#endif
168#ifndef S_IROTH
169	printf("#define S_IROTH		0%04o\n", X_IROTH);
170#else
171	if (S_IROTH != X_IROTH) idperm = 0;
172#endif
173#ifndef S_IWOTH
174	printf("#define S_IWOTH		0%04o\n", X_IWOTH);
175#else
176	if (S_IWOTH != X_IWOTH) idperm = 0;
177#endif
178#ifndef S_IXOTH
179	printf("#define S_IXOTH		0%04o\n", X_IXOTH);
180#else
181	if (S_IXOTH != X_IXOTH) idperm = 0;
182#endif
183#ifndef S_IRWXU
184	printf("#define S_IRWXU		(S_IRUSR|S_IWUSR|S_IXUSR)\n");
185#endif
186#ifndef S_IRWXG
187	printf("#define S_IRWXG		(S_IRGRP|S_IWGRP|S_IXGRP)\n");
188#endif
189#ifndef S_IRWXO
190	printf("#define S_IRWXO		(S_IROTH|S_IWOTH|S_IXOTH)\n");
191#endif
192	printf("\n");
193	if (idperm) printf("#define _S_IDPERM	1\n");
194	if (idtype) printf("#define _S_IDTYPE	1\n");
195	printf("\n");
196#ifdef BUFFERSIZE
197	n = BUFFERSIZE;
198#else
199#ifdef MAXBSIZE
200	n = MAXBSIZE;
201#else
202#ifdef SBUFSIZE
203	n = SBUFSIZE;
204#else
205#ifdef BUFSIZ
206	n = BUFSIZ;
207#else
208	if (sizeof(char*) > 4) n = 8192;
209	else if (sizeof(char*) < 4) n = 512;
210	else n = 4096;
211#endif
212#endif
213#endif
214#endif
215	printf("#define BUFFERSIZE	%u\n", n);
216	printf("\n");
217	return 0;
218}
219