📄 getopt.c
字号:
/*____________________________________________________________________________
getopt.c
This is the AT&T public domain source for getopt(3). It is the code
which was given out at the 1985 UNIFORUM conference in Dallas.
There is no manual page. That is because the one they gave out at
UNIFORUM was slightly different from the current System V Release 2
manual page. The difference apparently involved a note about the
famous rules 5 and 6, recommending using white space between an
option and its first argument, and not grouping options that have
arguments. Getopt itself is currently lenient about both of these
things. White space is allowed, but not mandatory, and the last option
in a group can have an argument. That particular version of the man
page evidently has no official existence. The current SVR2 man page
reflects the actual behavor of this getopt.
$Id: getopt.c,v 1.9 1999/05/12 21:01:03 sluu Exp $
____________________________________________________________________________*/
#include <string.h>
#include <stdio.h>
#include "getopt.h"
#include "language.h"
/*LINTLIBRARY */
#ifndef NULL
#define NULL 0
#endif
#define EOF (-1)
#define ERR(str, chr) (opterr ? \
fprintf(stderr, "%s%s%c\n", argv[0], str, chr) : 0)
int opterr = 1;
int optind = 1;
int optopt = 0;
char *optarg = 0;
int pgpGetOpt(int argc, char **argv, char *opts)
{
static int sp = 1;
register int c;
register char *cp;
if (sp == 1) {
if (optind >= argc || (argv[optind][0] != '+' &&
argv[optind][0] != '-') || argv[optind][1] == '\0')
return EOF;
else if (strcmp(argv[optind], "--") == 0) {
optind++;
return EOF;
}
/* '+' for config options, '+' should not be in the opts list */
if (argv[optind][0] == '+') {
optarg = argv[optind++] + 1;
return '+';
}
}
optopt = c = argv[optind][sp];
if (c == ':' || (cp = strchr(opts, c)) == NULL) {
ERR(LANG(": illegal option -- "), c);
if (argv[optind][++sp] == '\0') {
optind++;
sp = 1;
}
return '\0';
}
if (*++cp == ':') {
if (argv[optind][sp + 1] != '\0')
optarg = &argv[optind++][sp + 1];
else if (++optind >= argc) {
ERR(LANG(": option requires an argument -- "), c);
sp = 1;
return '\0';
} else
optarg = argv[optind++];
sp = 1;
} else {
if (argv[optind][++sp] == '\0') {
sp = 1;
optind++;
}
optarg = NULL;
}
return c;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -