home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / TELECOM / OS9_Unix.lzh / RSHSRC / getopt.c < prev    next >
Text File  |  1992-09-01  |  1KB  |  66 lines

  1. /*
  2.  * getopt - get option letter from argv
  3.  */
  4.  
  5. /* getopt implementation by Henry Specer.  (See getopt.3) */
  6.  
  7. #include <stdio.h>
  8.  
  9. char    *optarg;    /* Global argument pointer. */
  10. int    optind = 0;    /* Global argv index. */
  11.  
  12. static char    *scan = NULL;    /* Private scan pointer. */
  13.  
  14. extern char    *index();
  15.  
  16. int
  17. getopt(argc, argv, optstring)
  18. int argc;
  19. char *argv[];
  20. char *optstring;
  21. {
  22.     register char c;
  23.     register char *place;
  24.  
  25.     optarg = NULL;
  26.  
  27.     if (scan == NULL || *scan == '\0') {
  28.         if (optind == 0)
  29.             optind++;
  30.     
  31.         if (optind >= argc || argv[optind][0] != '-' || argv[optind][1] == '\0')
  32.             return(EOF);
  33.         if (strcmp(argv[optind], "--")==0) {
  34.             optind++;
  35.             return(EOF);
  36.         }
  37.     
  38.         scan = argv[optind]+1;
  39.         optind++;
  40.     }
  41.  
  42.     c = *scan++;
  43.     place = index(optstring, c);
  44.  
  45.     if (place == NULL || c == ':') {
  46.         fprintf(stderr, "%s: unknown option -%c\n", argv[0], c);
  47.         return('?');
  48.     }
  49.  
  50.     place++;
  51.     if (*place == ':') {
  52.         if (*scan != '\0') {
  53.             optarg = scan;
  54.             scan = NULL;
  55.         } else if (optind < argc) {
  56.             optarg = argv[optind];
  57.             optind++;
  58.         } else {
  59.             fprintf(stderr, "%s: -%c argument missing\n", argv[0], c);
  60.             return('?');
  61.         }
  62.     }
  63.  
  64.     return(c);
  65. }
  66.