URI:
       tgetopt.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tgetopt.c (1055B)
       ---
            1 #include        <stdio.h>
            2 #include <string.h>
            3 #include "ext.h"
            4 #define ERR(str, chr)       if(opterr){fprintf(stderr, "%s%s%c\n", argv[0], str, chr);}
            5 int     opterr = 1;
            6 int     optind = 1;
            7 int        optopt;
            8 char    *optarg;
            9 
           10 int
           11 getopt (int argc, char **argv, char *opts)
           12 {
           13         static int sp = 1;
           14         register int c;
           15         register char *cp;
           16 
           17         if (sp == 1)
           18                 if (optind >= argc ||
           19                    argv[optind][0] != '-' || argv[optind][1] == '\0')
           20                         return EOF;
           21                 else if (strcmp(argv[optind], "--") == 0) {
           22                         optind++;
           23                         return EOF;
           24                 }
           25         optopt = c = argv[optind][sp];
           26         if (c == ':' || (cp=strchr(opts, c)) == NULL) {
           27                 ERR (": illegal option -- ", c);
           28                 if (argv[optind][++sp] == '\0') {
           29                         optind++;
           30                         sp = 1;
           31                 }
           32                 return '?';
           33         }
           34         if (*++cp == ':') {
           35                 if (argv[optind][sp+1] != '\0')
           36                         optarg = &argv[optind++][sp+1];
           37                 else if (++optind >= argc) {
           38                         ERR (": option requires an argument -- ", c);
           39                         sp = 1;
           40                         return '?';
           41                 } else
           42                         optarg = argv[optind++];
           43                 sp = 1;
           44         } else {
           45                 if (argv[optind][++sp] == '\0') {
           46                         sp = 1;
           47                         optind++;
           48                 }
           49                 optarg = NULL;
           50         }
           51         return c;
           52 }