⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getopt.c

📁 vc环境下的pgp源码
💻 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 + -