aboutsummaryrefslogtreecommitdiff
path: root/src/benchmarks/espresso/getopt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/benchmarks/espresso/getopt.c')
-rw-r--r--src/benchmarks/espresso/getopt.c45
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;
+ }