home *** CD-ROM | disk | FTP | other *** search
/ ftp.muug.mb.ca / 2014.06.ftp.muug.mb.ca.tar / ftp.muug.mb.ca / pub / src / top / getopt.c < prev    next >
C/C++ Source or Header  |  1992-02-01  |  1KB  |  67 lines

  1. /*LINTLIBRARY*/
  2. #define NULL    0
  3. #define EOF    (-1)
  4. #define ERR(s, c)    if(opterr){\
  5.     extern int strlen(), write();\
  6.     char errbuf[2];\
  7.     errbuf[0] = c; errbuf[1] = '\n';\
  8.     (void) write(2, argv[0], strlen(argv[0]));\
  9.     (void) write(2, s, strlen(s));\
  10.     (void) write(2, errbuf, 2);}
  11.  
  12. #define strchr index
  13.  
  14. extern int strcmp();
  15. extern char *strchr();
  16.  
  17. int    opterr = 1;
  18. int    optind = 1;
  19. int    optopt;
  20. char    *optarg;
  21.  
  22. int
  23. getopt(argc, argv, opts)
  24. int    argc;
  25. char    **argv, *opts;
  26. {
  27.     static int sp = 1;
  28.     register int c;
  29.     register char *cp;
  30.  
  31.     if(sp == 1)
  32.         if(optind >= argc ||
  33.            argv[optind][0] != '-' || argv[optind][1] == '\0')
  34.             return(EOF);
  35.         else if(strcmp(argv[optind], "--") == NULL) {
  36.             optind++;
  37.             return(EOF);
  38.         }
  39.     optopt = c = argv[optind][sp];
  40.     if(c == ':' || (cp=strchr(opts, c)) == NULL) {
  41.         ERR(": unknown option, -", c);
  42.         if(argv[optind][++sp] == '\0') {
  43.             optind++;
  44.             sp = 1;
  45.         }
  46.         return('?');
  47.     }
  48.     if(*++cp == ':') {
  49.         if(argv[optind][sp+1] != '\0')
  50.             optarg = &argv[optind++][sp+1];
  51.         else if(++optind >= argc) {
  52.             ERR(": argument missing for -", c);
  53.             sp = 1;
  54.             return('?');
  55.         } else
  56.             optarg = argv[optind++];
  57.         sp = 1;
  58.     } else {
  59.         if(argv[optind][++sp] == '\0') {
  60.             sp = 1;
  61.             optind++;
  62.         }
  63.         optarg = NULL;
  64.     }
  65.     return(c);
  66. }
  67.