/* * This is an unpublished work copyright (c) 1998 HELIOS Software GmbH * 30827 Garbsen, Germany */ #include #include #ifdef HAS_UNISTD # include #endif char *optarg; int optind = 1; int opterr = 1; int optopt; static int subopt; static int suboptind = 1; int getopt(int argc, char *const argv[], const char * optstring) { char *curopt; char *p; int cursubopt; if (suboptind == optind-1 && argv[suboptind][subopt] != '\0') { curopt = (char *)argv[suboptind]; } else { curopt = (char *)argv[optind]; if (curopt == NULL || curopt[0] != '-' || strcmp(curopt, "-") == 0) return -1; suboptind = optind; subopt = 1; optind++; if (strcmp(curopt, "--") == 0) return -1; } cursubopt = subopt++; if ((p = strchr(optstring, curopt[cursubopt])) == NULL) { optopt = curopt[cursubopt]; if (opterr) fprintf(stderr, "%s: illegal option -- %c\n", argv[0], optopt); return '?'; } if (p[1] == ':') { if (curopt[cursubopt+1] != '\0') { optarg = curopt+cursubopt+1; suboptind++; return p[0]; } if (argv[optind] == NULL) { optopt = p[0]; if (opterr) fprintf(stderr, "%s: option requires an argument -- %c\n", argv[0], optopt); if (*optstring == ':') return ':'; return '?'; } optarg = argv[optind++]; } return p[0]; }