attgetopt.c
资源名称:gateway-1.2.1 [点击查看]
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:2k
源码类别:
手机WAP编程
开发平台:
WINDOWS
- /*
- * attgetopt.c - AT&T's public domain implementation of getopt.
- *
- * From the mod.sources newsgroup, volume 3, issue 58, with modifications
- * to bring it up to 21st century C.
- */
- #include <stdio.h>
- #include <string.h>
- #include "config.h"
- /*
- * If the systm has getopt() defined within stdio.h (like on Solaris 2.6)
- * then we will not implement our own here.
- */
- #ifndef HAVE_GETOPT_IN_STDIO_H
- #define ERR(s, c)
- if (opterr)
- (void) fprintf(stderr, "%s: %sn", argv[0], s)
- 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] == ' ')
- 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] == ' ') {
- optind++;
- sp = 1;
- }
- return('?');
- }
- if(*++cp == ':') {
- if(argv[optind][sp+1] != ' ')
- 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] == ' ') {
- sp = 1;
- optind++;
- }
- optarg = NULL;
- }
- return(c);
- }
- #endif /* HAVE_GETOPT_IN_STDIO_H */