getopt.c

来自「PGP—Pretty Good Privacy」· C语言 代码 · 共 75 行

C
75
字号
/*
 *	getopt.c
 */

#ifdef WIN32			/* marcd */
#if defined( BSD )
#include <strings.h>
#else
#include <string.h>
#endif

/* LINTLIBRARY */
#define EOF	(-1)
#define ERR(s, c)	if(opterr) {\
						extern int write();\
						char errbuf[2];\
						errbuf[0] = c; errbuf[1] = '\n';\
						(void) write(2, argv[0], (unsigned)strlen(argv[0]));\
						(void) write(2, s, (unsigned)strlen(s));\
						(void) write(2, errbuf, 2);}


int		opterr = 1;
int		optind = 1;
int		optopt;
char	*optarg;

int getopt( 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][1] == '\0') {
			optind = 1;
			return( EOF );
		}
		else
			if ( strcmp(argv[optind], "--") == 0 ) {
				optind++;
				return(EOF);
			}

	optopt = c = argv[optind][sp];
	if (c == ':' || ( cp = strchr(opts, c) ) == NULL) {
		ERR(": illegal option -- ", c);
		if ( argv[optind][++sp] == '\0' ) {
			optind++;
			sp = 1;
		}
		return('?');
	}
	if (*++cp == ':') {
		if (argv[optind][sp+1] != '\0')
			optarg = &argv[optind++][sp+1];
		else if (++optind >= argc) {
			ERR(": option requires an argument -- ", c);
			sp = 1;
			return('?');
		} else
			optarg = argv[optind++];
		sp = 1;
	} else {
		if (argv[optind][++sp] == '\0') {
			sp = 1;
			optind++;
		}
		optarg = NULL;
	}
	return(c);
}
#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?