home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 22 gnu
/
22-gnu.zip
/
f77cmd.zip
/
f77
/
getopt.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-10-24
|
2KB
|
98 lines
/* @(#)pd/getopt/getopt.c 1.2 10/24/90 05:19:06 */
/*
* This file is in the public domain.
*/
/*
* shell interface to the getopt(3) function for implementing a standard
* option interface. Usage in a shell script:
*
* set -- `getopt [-n progname] [-q] $*`
*
* -n sets the program name to use for usage messages, -q disables
* a usage message from getopt(3). Beyond these additional flags,
* see the System V getopt(1) man page for usage instructions.
*/
#include <stdio.h>
extern char **optarg;
extern int optind, opterr;
int prevopt = 0;
char *program;
main(argc, argv)
int argc;
char **argv;
{
int c;
char *optstr;
int exitflag = 0; /* != 0 ==> error encountered */
program = *argv;
for (;;) {
if (argc > 2 && strcmp(argv[1], "-q") == 0) {
opterr = 0;
argv++;
--argc;
continue;
}
if (argc > 2 && strncmp(argv[1], "-n", 2) == 0) {
if (argv[1][2] == '\0') {
argv += 2;
argc -= 2;
program = argv[0];
} else {
argv++;
--argc;
program = &argv[0][2];
}
continue;
}
break;
}
if (argc < 2) {
fprintf(stderr,
"Usage: %s [ -q ] [ -n name ] opt-string [args]\n",
argv[0]);
exit(2);
}
optstr = *++argv;
--argc;
*argv = program;
while ((c = getopt(argc, argv, optstr)) != EOF) {
static char buf[] = "-o";
/* catch errors for later exiting */
if (c == '?') {
exitflag = 1;
}
/* process the arg we have found */
if (c != '?' || opterr == 0) {
buf[1] = c;
outarg(buf);
}
if (optarg) {
outarg(optarg);
}
}
outarg("--");
while (optind < argc) {
outarg(argv[optind++]);
}
putchar('\n');
exit(exitflag);
}
outarg(s)
char *s;
{
if (prevopt) {
putchar(' ');
}
prevopt = 1;
fputs(s, stdout);
}