diff --git a/backends/frotz/getopt.c b/backends/frotz/getopt.c new file mode 100644 index 0000000000000000000000000000000000000000..1d03009c0cb17a31528aeea6407448d86f1891f4 --- /dev/null +++ b/backends/frotz/getopt.c @@ -0,0 +1,72 @@ +/* + * getopt.c + * + * Replacement for a Unix style getopt function + * + * Quick, clean, and portable to funky systems that don't have getopt() + * for whatever reason. + * + */ + +#include +#include + +#ifndef MSDOS_16BIT +#define cdecl +#endif + +int optind = 1; +int optopt = 0; + +const char *optarg = NULL; + +int cdecl getopt (int argc, char *argv[], const char *options) +{ + static int pos = 1; + + const char *p; + + if (optind >= argc || argv[optind][0] != '-' || argv[optind][1] == 0) + return EOF; + + optopt = argv[optind][pos++]; + optarg = NULL; + + if (argv[optind][pos] == 0) + { pos = 1; optind++; } + + p = strchr (options, optopt); + + if (optopt == ':' || p == NULL) { + + fputs ("illegal option -- ", stdout); + goto error; + + } else if (p[1] == ':') { + + if (optind >= argc) { + + fputs ("option requires an argument -- ", stdout); + goto error; + + } else { + + optarg = argv[optind]; + + if (pos != 1) + optarg += pos; + + pos = 1; optind++; + + } + } + return optopt; + +error: + + fputc (optopt, stdout); + fputc ('\n', stdout); + + return '?'; + +}/* getopt */