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 <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 
36 int
main()37 main()
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