attgetopt.c
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:2k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  * attgetopt.c - AT&T's public domain implementation of getopt.
  3.  *
  4.  * From the mod.sources newsgroup, volume 3, issue 58, with modifications
  5.  * to bring it up to 21st century C.
  6.  */
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include "config.h"
  10. /*
  11.  * If the systm has getopt() defined within stdio.h (like on Solaris 2.6)
  12.  * then we will not implement our own here.
  13.  */
  14. #ifndef HAVE_GETOPT_IN_STDIO_H
  15. #define ERR(s, c)       
  16. if (opterr) 
  17.         (void) fprintf(stderr, "%s: %sn", argv[0], s)
  18. int     opterr = 1;
  19. int     optind = 1;
  20. int     optopt;
  21. char    *optarg;
  22. int getopt(int argc, char **argv, char *opts)
  23. {
  24.         static int sp = 1;
  25.         register int c;
  26.         register char *cp;
  27.         if(sp == 1) {
  28.                 if(optind >= argc ||
  29.                    argv[optind][0] != '-' || argv[optind][1] == '')
  30.                         return(EOF);
  31.                 else if(strcmp(argv[optind], "--") == 0) {
  32.                         optind++;
  33.                         return(EOF);
  34.                 }
  35. }
  36.         optopt = c = argv[optind][sp];
  37.         if(c == ':' || (cp=strchr(opts, c)) == NULL) {
  38.                 ERR(": illegal option -- ", c);
  39.                 if(argv[optind][++sp] == '') {
  40.                         optind++;
  41.                         sp = 1;
  42.                 }
  43.                 return('?');
  44.         }
  45.         if(*++cp == ':') {
  46.                 if(argv[optind][sp+1] != '')
  47.                         optarg = &argv[optind++][sp+1];
  48.                 else if(++optind >= argc) {
  49.                         ERR(": option requires an argument -- ", c);
  50.                         sp = 1;
  51.                         return('?');
  52.                 } else
  53.                         optarg = argv[optind++];
  54.                 sp = 1;
  55.         } else {
  56.                 if(argv[optind][++sp] == '') {
  57.                         sp = 1;
  58.                         optind++;
  59.                 }
  60.                 optarg = NULL;
  61.         }
  62.         return(c);
  63. }
  64. #endif /* HAVE_GETOPT_IN_STDIO_H */