diff options
Diffstat (limited to 'src/benchmarks/espresso/getopt.c')
| -rw-r--r-- | src/benchmarks/espresso/getopt.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/benchmarks/espresso/getopt.c b/src/benchmarks/espresso/getopt.c new file mode 100644 index 0000000..017c907 --- /dev/null +++ b/src/benchmarks/espresso/getopt.c @@ -0,0 +1,45 @@ +#include "espresso.h" +#include "port.h" +/* File : getopt.c + Author : Henry Spencer, University of Toronto + Updated: 28 April 1984 + Purpose: get option letter from argv. +*/ +#define NullS ((char *) 0) + +char *optarg; /* Global argument pointer. */ +int optind = 0; /* Global argv index. */ + +int getopt(int argc, char * const * argv, const char * optstring) + { + register int c; + register char *place; + static char *scan = NullS; /* Private scan pointer. */ + + optarg = NullS; + + if (scan == NullS || *scan == '\0') { + if (optind == 0) optind++; + if (optind >= argc) return EOF; + place = argv[optind]; + if (place[0] != '-' || place[1] == '\0') return EOF; + optind++; + if (place[1] == '-' && place[2] == '\0') return EOF; + scan = place+1; + } + + c = *scan++; + place = strchr(optstring, c); + if (place == NullS || c == ':') { + fprintf(stderr, "%s: unknown option %c\n", argv[0], c); + return '?'; + } + if (*++place == ':') { + if (*scan != '\0') { + optarg = scan, scan = NullS; + } else { + optarg = argv[optind], optind++; + } + } + return c; + } |
