--- /dev/null
+/*
+ getopt.c
+
+ modified public-domain AT&T getopt(3)
+*/
+
+#include <stdio.h>
+#include <string.h>
+
+#ifdef _POSIX_SOURCE
+# include <unistd.h>
+#else
+# define STDERR_FILENO 2
+# ifdef __STDC__
+ extern int write (int fildes, char * buf, unsigned nbyte);
+# else
+ extern int write ();
+# endif
+#endif
+
+int opterr = 1;
+int optind = 1;
+int optopt;
+char * optarg;
+
+#ifdef __STDC__
+ static void ERR (char ** argv, char * s, char c)
+#else
+ static void ERR (argv, s, c)
+ char ** argv, * s, c;
+#endif
+{
+ char errbuf[2];
+
+#ifdef DF_TRACE_DEBUG
+printf("DF_TRACE_DEBUG: static void ERR () in getopt.c\n");
+#endif
+ if (opterr)
+ {
+ errbuf[0] = c;
+ errbuf[1] = '\n';
+ (void) write(STDERR_FILENO,argv[0],strlen(argv[0]));
+ (void) write(STDERR_FILENO,s,strlen(s));
+ (void) write(STDERR_FILENO,errbuf,sizeof errbuf);
+ }
+}
+
+#ifdef __STDC__
+ int getopt (int argc, char ** argv, char * opts)
+#else
+ int getopt (argc, argv, opts)
+ int argc;
+ char ** argv, * opts;
+#endif
+{
+ static int sp = 1, error = (int) '?';
+ static char sw = '-', eos = '\0', arg = ':';
+ register char c, * cp;
+
+#ifdef DF_TRACE_DEBUG
+printf("DF_TRACE_DEBUG: int getopt () in getopt.c\n");
+#endif
+ if (sp == 1)
+ if (optind >= argc || argv[optind][0] != sw
+ || argv[optind][1] == eos)
+ return EOF;
+ else if (strcmp(argv[optind],"--") == 0)
+ {
+ optind++;
+ return EOF;
+ }
+ c = argv[optind][sp];
+ optopt = (int) c;
+ if (c == arg || (cp = strchr(opts,c)) == NULL)
+ {
+ ERR(argv,": illegal option--",c);
+ if (argv[optind][++sp] == eos)
+ {
+ optind++;
+ sp = 1;
+ }
+ return error;
+ }
+ else if (*++cp == arg)
+ {
+ if (argv[optind][sp + 1] != eos)
+ optarg = &argv[optind++][sp + 1];
+ else if (++optind >= argc)
+ {
+ ERR(argv,": option requires an argument--",c);
+ sp = 1;
+ return error;
+ }
+ else
+ optarg = argv[optind++];
+ sp = 1;
+ }
+ else
+ {
+ if (argv[optind][++sp] == eos)
+ {
+ sp = 1;
+ optind++;
+ }
+ optarg = NULL;
+ }
+ return (int) c;
+}