Subversion Repositories HelenOS

Rev

Rev 3284 | Rev 3346 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3284 Rev 3301
1
#!/bin/sh
1
#!/bin/sh
2
# Copyright (C) 2008 Tim Post - All Rights Reserved
2
# Copyright (C) 2008 Tim Post - All Rights Reserved
3
# Redistribution and use in source and binary forms, with or without
3
# Redistribution and use in source and binary forms, with or without
4
# modification, are permitted provided that the following conditions are met:
4
# modification, are permitted provided that the following conditions are met:
5
#
5
#
6
# Redistributions of source code must retain the above copyright notice, this
6
# Redistributions of source code must retain the above copyright notice, this
7
# list of conditions and the following disclaimer.
7
# list of conditions and the following disclaimer.
8
#
8
#
9
# Redistributions in binary form must reproduce the above copyright notice,
9
# Redistributions in binary form must reproduce the above copyright notice,
10
# this list of conditions and the following disclaimer in the documentation
10
# this list of conditions and the following disclaimer in the documentation
11
# and/or other materials provided with the distribution.
11
# and/or other materials provided with the distribution.
12
#
12
#
13
# Neither the name of the original program's authors nor the names of its
13
# Neither the name of the original program's authors nor the names of its
14
# contributors may be used to endorse or promote products derived from this
14
# contributors may be used to endorse or promote products derived from this
15
# software without specific prior written permission.
15
# software without specific prior written permission.
16
#
16
#
17
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
# POSSIBILITY OF SUCH DAMAGE.
27
# POSSIBILITY OF SUCH DAMAGE.
28
 
28
 
29
# Script to generate skeletal files for a new command
29
# Script to generate skeletal files for a new command
30
# Uses `getopt', not quite a bash-ism but might be
30
# Uses `getopt', not quite a bash-ism but might be
31
# lacking on some legacy systems.
31
# lacking on some legacy systems.
32
 
32
 
33
# If your shell does not support eval, shift (x) or
33
# If your shell does not support eval, shift (x) or
34
# here-now documents, sorry :) 
34
# here-now documents, sorry :) 
35
 
35
 
36
usage()
36
usage()
37
{
37
{
38
	def="$DEFAULT_COMMAND"
38
	def="$DEFAULT_COMMAND"
39
	cat << EOF
39
	cat << EOF
40
\`$PROGNAME' generates skeletal command files to simplify adding commands
40
\`$PROGNAME' generates skeletal command files to simplify adding commands
41
Usage: $PROGNAME [options] <location>
41
Usage: $PROGNAME [options] <location>
42
Options:
42
Options:
43
  -n, --name         Name of the command (default: ${def})
43
  -n, --name         Name of the command (default: ${def})
44
  -d, --desc         Short (20 30 chars) description of the command
44
  -d, --desc         Short (20 30 chars) description of the command
45
                     (def: "The $def command")
45
                     (def: "The $def command")
46
  -e, --entry        Entry function of the command (def: cmd_${def})
46
  -e, --entry        Entry function of the command (def: cmd_${def})
47
  -h, --help-entry   Entry function for command help (def: help_cmd_${def})
47
  -h, --help-entry   Entry function for command help (def: help_cmd_${def})
48
  -a, --alias        Alias (nickname) for this command (def: none)
48
  -a, --alias        Alias (nickname) for this command (def: none)
49
  -r, --restrict     Restriction level (interactive, non-interactive, both)
49
  -r, --restrict     Restriction level (interactive, non-interactive, both)
50
                     (def: module is both, builtin is interactive only)
50
                     (def: module is both, builtin is interactive only)
51
  -t, --type         Type of command (module or builtin) (def: module)
51
  -t, --type         Type of command (module or builtin) (def: module)
52
  -H, --help         This help summary
52
  -H, --help         This help summary
53
  -V, --version      Print $PROGNAME version and exit normally
53
  -V, --version      Print $PROGNAME version and exit normally
54
 
54
 
55
Notes:
55
Notes:
56
  You must supply at least the name of the command.
56
  You must supply at least the name of the command.
57
 
57
 
58
  If you do not specify a location (i.e. modules/foo), the command will be
58
  If you do not specify a location (i.e. modules/foo), the command will be
59
  created in modules/command_name or builtins/command_name depending on your
59
  created in modules/command_name or builtins/command_name depending on your
60
  selection.
60
  selection.
61
 
61
 
62
  This script will only create skeletal files and inform you what headers
62
  This script will only create skeletal files and inform you what headers
63
  need to be modified to incorporate the command. You will also have to
63
  need to be modified to incorporate the command. You will also have to
64
  manually update the main Makefile.
64
  manually update the main Makefile.
65
 
65
 
66
  This script is intended only to be a convenience for developers. Example use:
66
  This script is intended only to be a convenience for developers. Example use:
67
    $PROGNAME -n foo -d "Foo power" -a bar -r both -t module modules/foo
67
    $PROGNAME -n foo -d "Foo power" -a bar -r both -t module modules/foo
68
 
68
 
69
  The example would generate a modular command named 'foo', which is also
69
  The example would generate a modular command named 'foo', which is also
70
  reached by typing 'bar' and available in either interactive or noninteractive
70
  reached by typing 'bar' and available in either interactive or noninteractive
71
  mode.
71
  mode.
72
 
72
 
73
  Skeletal files do *not* depend on the autoconf generated "config.h" unless you
73
  Skeletal files do *not* depend on the autoconf generated "config.h" unless you
74
  include it. This may or may not be desirable depending on your use.
74
  include it. This may or may not be desirable depending on your use.
75
 
75
 
76
Report bugs to $PROGMAINT
76
Report bugs to $PROGMAINT
77
 
77
 
78
EOF
78
EOF
79
}
79
}
80
 
80
 
81
# Convert a string to all uppercase
81
# Convert a string to all uppercase
82
toupper()
82
toupper()
83
{
83
{
84
	local str="$1"
84
	local str="$1"
85
 
85
 
86
	echo "${str}" | tr 'a-z' 'A-Z'
86
	echo "${str}" | tr 'a-z' 'A-Z'
87
}
87
}
88
 
88
 
89
# Template stored `here-now' style, this generates all files needed
89
# Template stored `here-now' style, this generates all files needed
90
# for a new command according to arguments passed.
90
# for a new command according to arguments passed.
91
generate_code()
91
generate_code()
92
{
92
{
93
	echo "Creating ${OUTDIR}/${CMDNAME}.def ..."
93
	echo "Creating ${OUTDIR}/${CMDNAME}.def ..."
94
	cat << EOF > ${OUTDIR}/${CMDNAME}.def
94
	cat << EOF > ${OUTDIR}/${CMDNAME}.def
95
{
95
{
96
	"${CMDNAME}",
96
	"${CMDNAME}",
97
	"${CMDDESC}",
97
	"${CMDDESC}",
98
	&${CMDENTRY},
98
	&${CMDENTRY},
99
	&${HELPENTRY},
99
	&${HELPENTRY},
100
	${CMDRESTRICT}
100
	${CMDRESTRICT}
101
},
101
},
102
 
102
 
103
EOF
103
EOF
104
	[ -n "${CMDALIAS}" ] && cat << EOF >> ${OUTDIR}/${CMDNAME}.def
104
	[ -n "${CMDALIAS}" ] && cat << EOF >> ${OUTDIR}/${CMDNAME}.def
105
{
105
{
106
	"${CMDALIAS}",
106
	"${CMDALIAS}",
107
	NULL,
107
	NULL,
108
	&${CMDENTRY},
108
	&${CMDENTRY},
109
	&${HELPENTRY},
109
	&${HELPENTRY},
110
	${CMDRESTRICT}
110
	${CMDRESTRICT}
111
},
111
},
112
 
112
 
113
EOF
113
EOF
114
	local defname=$(toupper "${CMDNAME}")
114
	local defname=$(toupper "${CMDNAME}")
115
	echo "Creating ${OUTDIR}/entry.h ..."
115
	echo "Creating ${OUTDIR}/entry.h ..."
116
	cat << EOF > ${OUTDIR}/entry.h
116
	cat << EOF > ${OUTDIR}/entry.h
117
#ifndef ${defname}_ENTRY_H
117
#ifndef ${defname}_ENTRY_H
118
#define ${defname}_ENTRY_H
118
#define ${defname}_ENTRY_H
119
 
119
 
120
EOF
120
EOF
121
	[ "${CMDTYPE}" = "module" ] && cat << EOF >> ${OUTDIR}/entry.h
121
	[ "${CMDTYPE}" = "module" ] && cat << EOF >> ${OUTDIR}/entry.h
122
/* Entry points for the ${CMDNAME} command */
122
/* Entry points for the ${CMDNAME} command */
123
extern int * ${CMDENTRY}(char **);
123
extern int * ${CMDENTRY}(char **);
124
extern void * ${HELPENTRY}(unsigned int);
124
extern void * ${HELPENTRY}(unsigned int);
125
 
125
 
126
#endif /* ${defname}_ENTRY_H */
126
#endif /* ${defname}_ENTRY_H */
127
 
127
 
128
EOF
128
EOF
129
	[ "${CMDTYPE}" = "builtin" ] && cat << EOF >> ${OUTDIR}/entry.h
129
	[ "${CMDTYPE}" = "builtin" ] && cat << EOF >> ${OUTDIR}/entry.h
130
/* Pick up cliuser_t */
130
/* Pick up cliuser_t */
131
#include "scli.h"
131
#include "scli.h"
132
 
132
 
133
/* Entry points for the ${CMDNAME} command */
133
/* Entry points for the ${CMDNAME} command */
134
extern int * ${CMDENTRY}(char **, cliuser_t *);
134
extern int * ${CMDENTRY}(char **, cliuser_t *);
135
extern void * ${HELPENTRY}(unsigned int);
135
extern void * ${HELPENTRY}(unsigned int);
136
 
136
 
137
#endif /* ${defname}_ENTRY_H */
137
#endif /* ${defname}_ENTRY_H */
138
 
138
 
139
EOF
139
EOF
140
	echo "Creating ${OUTDIR}/${CMDNAME}.h ..."
140
	echo "Creating ${OUTDIR}/${CMDNAME}.h ..."
141
	cat << EOF > ${OUTDIR}/${CMDNAME}.h
141
	cat << EOF > ${OUTDIR}/${CMDNAME}.h
142
#ifndef ${defname}_H
142
#ifndef ${defname}_H
143
#define ${defname}_H
143
#define ${defname}_H
144
 
144
 
145
/* Prototypes for the ${CMDNAME} command, excluding entry points */
145
/* Prototypes for the ${CMDNAME} command, excluding entry points */
146
 
146
 
147
 
147
 
148
#endif /* ${defname}_H */
148
#endif /* ${defname}_H */
149
 
149
 
150
EOF
150
EOF
151
	echo "Creating ${OUTDIR}/${CMDNAME}.c ..."
151
	echo "Creating ${OUTDIR}/${CMDNAME}.c ..."
152
	cat << EOF > ${OUTDIR}/${CMDNAME}.c
152
	cat << EOF > ${OUTDIR}/${CMDNAME}.c
153
/* Automatically generated by ${PROGNAME} on ${TIMESTAMP}
153
/* Automatically generated by ${PROGNAME} on ${TIMESTAMP}
154
 * This is machine generated output. The author of ${PROGNAME} claims no
154
 * This is machine generated output. The author of ${PROGNAME} claims no
155
 * copyright over the contents of this file. Where legally permitted, the
155
 * copyright over the contents of this file. Where legally permitted, the
156
 * contents herein are donated to the public domain.
156
 * contents herein are donated to the public domain.
157
 *
157
 *
158
 * You should apply any license and copyright that you wish to this file,
158
 * You should apply any license and copyright that you wish to this file,
159
 * replacing this header in its entirety. */
159
 * replacing this header in its entirety. */
160
 
160
 
161
#include <stdio.h>
161
#include <stdio.h>
162
#include <stdlib.h>
162
#include <stdlib.h>
163
#include "config.h"
163
#include "config.h"
-
 
164
#include "util.h"
164
#include "errors.h"
165
#include "errors.h"
165
#include "entry.h"
166
#include "entry.h"
166
#include "${CMDNAME}.h"
167
#include "${CMDNAME}.h"
167
#include "cmds.h"
168
#include "cmds.h"
168
 
169
 
169
static char *cmdname = "${CMDNAME}";
170
static char *cmdname = "${CMDNAME}";
170
 
171
 
171
/* Dispays help for ${CMDNAME} in various levels */
172
/* Dispays help for ${CMDNAME} in various levels */
172
void * ${HELPENTRY}(unsigned int level)
173
void * ${HELPENTRY}(unsigned int level)
173
{
174
{
174
	printf("This is the %s help for '%s'.\n",
175
	printf("This is the %s help for '%s'.\n",
175
		level ? EXT_HELP : SHORT_HELP, cmdname);
176
		level ? EXT_HELP : SHORT_HELP, cmdname);
176
	return CMD_VOID;
177
	return CMD_VOID;
177
}
178
}
178
 
179
 
179
EOF
180
EOF
180
	[ "${CMDTYPE}" = "module" ] && cat << EOF >> ${OUTDIR}/${CMDNAME}.c
181
	[ "${CMDTYPE}" = "module" ] && cat << EOF >> ${OUTDIR}/${CMDNAME}.c
181
/* Main entry point for ${CMDNAME}, accepts an array of arguments */
182
/* Main entry point for ${CMDNAME}, accepts an array of arguments */
182
int * ${CMDENTRY}(char **argv)
183
int * ${CMDENTRY}(char **argv)
183
EOF
184
EOF
184
	[ "${CMDTYPE}" = "builtin" ] && cat << EOF >> ${OUTDIR}/${CMDNAME}.c
185
	[ "${CMDTYPE}" = "builtin" ] && cat << EOF >> ${OUTDIR}/${CMDNAME}.c
185
/* Main entry point for ${CMDNAME}, accepts an array of arguments and a
186
/* Main entry point for ${CMDNAME}, accepts an array of arguments and a
186
 * pointer to the cliuser_t structure */
187
 * pointer to the cliuser_t structure */
187
int * ${CMDENTRY}(char **argv, cliuser_t *usr)
188
int * ${CMDENTRY}(char **argv, cliuser_t *usr)
188
EOF
189
EOF
189
	cat << EOF >> ${OUTDIR}/${CMDNAME}.c
190
	cat << EOF >> ${OUTDIR}/${CMDNAME}.c
190
{
191
{
191
	unsigned int argc;
192
	unsigned int argc;
192
	unsigned int i;
193
	unsigned int i;
193
 
194
 
194
	/* Count the arguments */
195
	/* Count the arguments */
195
	for (argc = 0; argv[argc] != NULL; argc ++);
196
	for (argc = 0; argv[argc] != NULL; argc ++);
196
 
197
 
197
	printf("%s %s\n", TEST_ANNOUNCE, cmdname);
198
	printf("%s %s\n", TEST_ANNOUNCE, cmdname);
198
	printf("%d arguments passed to %s", argc - 1, cmdname);
199
	printf("%d arguments passed to %s", argc - 1, cmdname);
199
 
200
 
200
	if (argc < 2) {
201
	if (argc < 2) {
201
		printf("\n");
202
		printf("\n");
202
		return CMD_SUCCESS;
203
		return CMD_SUCCESS;
203
	}
204
	}
204
 
205
 
205
	printf(":\n");
206
	printf(":\n");
206
	for (i = 1; i < argc; i++)
207
	for (i = 1; i < argc; i++)
207
		printf("[%d] -> %s\n", i, argv[i]);
208
		printf("[%d] -> %s\n", i, argv[i]);
208
 
209
 
209
	return CMD_SUCCESS;
210
	return CMD_SUCCESS;
210
}
211
}
211
 
212
 
212
EOF
213
EOF
213
	printf "Done.\n\nYou should now modify %ss/%ss.h and ../Makefile" \
214
	printf "Done.\n\nYou should now modify %ss/%ss.h and ../Makefile" \
214
		"${CMDTYPE}" "${CMDTYPE}"
215
		"${CMDTYPE}" "${CMDTYPE}"
215
	printf " to include your new command.\n"
216
	printf " to include your new command.\n"
216
	[ -n "$CMDALIAS" ] &&  {
217
	[ -n "$CMDALIAS" ] &&  {
217
		printf "\nYou should also modify %ss/%s_aliases.h and " \
218
		printf "\nYou should also modify %ss/%s_aliases.h and " \
218
			"${CMDTYPE}" "${CMDTYPE}"
219
			"${CMDTYPE}" "${CMDTYPE}"
219
		printf "add %s as an alias for %s\n" \
220
		printf "add %s as an alias for %s\n" \
220
			"${CMDALIAS}" "${CMDNAME}"
221
			"${CMDALIAS}" "${CMDNAME}"
221
	}
222
	}
222
	printf "\nOnce completed, re-run make\n\n"
223
	printf "\nOnce completed, re-run make\n\n"
223
}
224
}
224
 
225
 
225
# Main program
226
# Main program
226
 
227
 
227
TIMESTAMP="$(date)"
228
TIMESTAMP="$(date)"
228
PROGNAME=$(basename $0)
229
PROGNAME=$(basename $0)
229
PROGVER="0.0.1"
230
PROGVER="0.0.1"
230
PROGMAINT="Tim Post <echo@echoreply.us>"
231
PROGMAINT="Tim Post <echo@echoreply.us>"
231
DEFAULT_COMMAND="cmdname"
232
DEFAULT_COMMAND="cmdname"
232
 
233
 
233
# We need at least one
234
# We need at least one
234
[ $# = 0 ] && usage && exit 1;
235
[ $# = 0 ] && usage && exit 1;
235
 
236
 
236
TEMP=$(getopt -o n:d:e:h:a:r:t:HV \
237
TEMP=$(getopt -o n:d:e:h:a:r:t:HV \
237
--long name:,desc:,entry:,help-entry:,alias:,restrict:,type:,help,version \
238
--long name:,desc:,entry:,help-entry:,alias:,restrict:,type:,help,version \
238
-- "$@") || {
239
-- "$@") || {
239
	echo "Try $PROGNAME --help for help"
240
	echo "Try $PROGNAME --help for help"
240
}
241
}
241
 
242
 
242
eval set -- "$TEMP"
243
eval set -- "$TEMP"
243
 
244
 
244
while true; do
245
while true; do
245
	case "$1" in
246
	case "$1" in
246
	-n | --name)
247
	-n | --name)
247
		CMDNAME="$2"
248
		CMDNAME="$2"
248
		shift 2
249
		shift 2
249
		continue
250
		continue
250
	;;
251
	;;
251
	-d | --desc)
252
	-d | --desc)
252
		CMDDESC="$2"
253
		CMDDESC="$2"
253
		shift 2
254
		shift 2
254
		continue
255
		continue
255
	;;
256
	;;
256
	-e | --entry)
257
	-e | --entry)
257
		CMDENTRY="$2"
258
		CMDENTRY="$2"
258
		shift 2
259
		shift 2
259
		continue
260
		continue
260
	;;
261
	;;
261
	-h | --help-entry)
262
	-h | --help-entry)
262
		HELPENTRY="$2"
263
		HELPENTRY="$2"
263
		shift 2
264
		shift 2
264
		continue
265
		continue
265
	;;
266
	;;
266
	-a | --alias)
267
	-a | --alias)
267
		CMDALIAS="$2"
268
		CMDALIAS="$2"
268
		shift 2
269
		shift 2
269
		continue
270
		continue
270
	;;
271
	;;
271
	-r | --restrict)
272
	-r | --restrict)
272
		CMDRESTRICT="$2"
273
		CMDRESTRICT="$2"
273
		shift 2
274
		shift 2
274
		continue
275
		continue
275
	;;
276
	;;
276
	-t | --type)
277
	-t | --type)
277
		CMDTYPE="$2"
278
		CMDTYPE="$2"
278
		shift 2
279
		shift 2
279
		continue
280
		continue
280
	;;
281
	;;
281
	-H | --help)
282
	-H | --help)
282
		usage
283
		usage
283
		exit 0
284
		exit 0
284
	;;
285
	;;
285
	-V | --version)
286
	-V | --version)
286
		echo "$PROGVER"
287
		echo "$PROGVER"
287
		exit 0
288
		exit 0
288
	;;
289
	;;
289
	--)
290
	--)
290
		break
291
		break
291
	;;
292
	;;
292
	esac
293
	esac
293
done
294
done
294
 
295
 
295
# Pick up a location if one was specified
296
# Pick up a location if one was specified
296
eval set -- "$*"
297
eval set -- "$*"
297
[ -n "$2" ] && OUTDIR="$2"
298
[ -n "$2" ] && OUTDIR="$2"
298
 
299
 
299
# Fill in defaults for whatever was not specified
300
# Fill in defaults for whatever was not specified
300
[ -n "$CMDNAME" ] || CMDNAME="$DEFAULT_COMMAND"
301
[ -n "$CMDNAME" ] || CMDNAME="$DEFAULT_COMMAND"
301
[ -n "$CMDDESC" ] || CMDDESC="The $CMDNAME command"
302
[ -n "$CMDDESC" ] || CMDDESC="The $CMDNAME command"
302
[ -n "$CMDENTRY" ] || CMDENTRY="cmd_${CMDNAME}"
303
[ -n "$CMDENTRY" ] || CMDENTRY="cmd_${CMDNAME}"
303
[ -n "$HELPENTRY" ] || HELPENTRY="help_cmd_${CMDNAME}"
304
[ -n "$HELPENTRY" ] || HELPENTRY="help_cmd_${CMDNAME}"
304
[ -n "$CMDTYPE" ] || CMDTYPE="module"
305
[ -n "$CMDTYPE" ] || CMDTYPE="module"
305
[ -n "$OUTDIR" ] || OUTDIR="${CMDTYPE}s/${CMDNAME}"
306
[ -n "$OUTDIR" ] || OUTDIR="${CMDTYPE}s/${CMDNAME}"
306
 
307
 
307
# Builtins typically only need to be available in interactive mode,
308
# Builtins typically only need to be available in interactive mode,
308
# set the default accordingly.
309
# set the default accordingly.
309
[ -n "$CMDRESTRICT" ] || {
310
[ -n "$CMDRESTRICT" ] || {
310
	[ "$CMDTYPE" = "module" ] && CMDRESTRICT="both"
311
	[ "$CMDTYPE" = "module" ] && CMDRESTRICT="both"
311
	[ "$CMDTYPE" = "builtin" ] && CMDRESTRICT="interactive"
312
	[ "$CMDTYPE" = "builtin" ] && CMDRESTRICT="interactive"
312
}
313
}
313
 
314
 
314
# Set the restriction level as the structure expects to see it
315
# Set the restriction level as the structure expects to see it
315
case "$CMDRESTRICT" in
316
case "$CMDRESTRICT" in
316
	0 | both)
317
	0 | both)
317
		CMDRESTRICT="0"
318
		CMDRESTRICT="0"
318
	;;
319
	;;
319
	1 | non-interactive)
320
	1 | non-interactive)
320
		CMDRESTRICT="1"
321
		CMDRESTRICT="1"
321
	;;
322
	;;
322
	-1 | interactive)
323
	-1 | interactive)
323
		CMDRESTRICT="-1"
324
		CMDRESTRICT="-1"
324
	;;
325
	;;
325
	*)
326
	*)
326
		usage
327
		usage
327
		exit 1
328
		exit 1
328
	;;
329
	;;
329
esac
330
esac
330
 
331
 
331
# Do a little sanity
332
# Do a little sanity
332
[ -d $OUTDIR ] && {
333
[ -d $OUTDIR ] && {
333
	echo "$OUTDIR already exists, remove it to proceed."
334
	echo "$OUTDIR already exists, remove it to proceed."
334
	exit 1
335
	exit 1
335
}
336
}
336
 
337
 
337
mkdir -p ${OUTDIR} >/dev/null 2>&1 || {
338
mkdir -p ${OUTDIR} >/dev/null 2>&1 || {
338
	echo "Could not create ${OUTDIR}, aborting!"
339
	echo "Could not create ${OUTDIR}, aborting!"
339
	exit 1
340
	exit 1
340
}
341
}
341
 
342
 
342
# Generate the files and inform on how to include them based on options
343
# Generate the files and inform on how to include them based on options
343
generate_code
344
generate_code
344
 
345
 
345
exit 0
346
exit 0
346
 
347
 
347
 
348