⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mygetopt.ch

📁 lzo-1.08-src.zip 高效的压缩解压代码
💻 CH
📖 第 1 页 / 共 2 页
字号:
#ifdef GETOPT_COMPAT          && (longopts == NULL              || argv[optind][0] != '+' || argv[optind][1] == '\0')#endif                          /* GETOPT_COMPAT */          )        {          if (ordering == REQUIRE_ORDER)            return EOF;          optarg = argv[optind++];          return 1;        }      /* We have found another option-ARGV-element.         Start decoding its characters.  */      nextchar = (argv[optind] + 1                  + (longopts != NULL && argv[optind][1] == '-'));    }  if (longopts != NULL      && ((argv[optind][0] == '-'           && (argv[optind][1] == '-' || long_only))#ifdef GETOPT_COMPAT          || argv[optind][0] == '+'#endif                          /* GETOPT_COMPAT */          ))    {      const struct option *p;      char *s = nextchar;      int exact = 0;      int ambig = 0;      const struct option *pfound = NULL;      int indfound = 0;      int needexact = 0;#if defined(__LZO_DOS) || defined(__LZO_WIN)      /* allow `--option#value' because you cannout assign a '='         to an environment variable under DOS command.com */      while (*s && *s != '=' && * s != '#')        s++;#else      while (*s && *s != '=')        s++;#endif      /* Test all options for either exact match or abbreviated matches.  */      for (p = longopts, option_index = 0; p->name;           p++, option_index++)        if (!strncmp (p->name, nextchar, (unsigned) (s - nextchar)))          {            if (p->has_arg & 0x10)              needexact = 1;            if ((unsigned) (s - nextchar) == my_strlen (p->name))              {                /* Exact match found.  */                pfound = p;                indfound = option_index;                exact = 1;                break;              }            else if (pfound == NULL)              {                /* First nonexact match found.  */                pfound = p;                indfound = option_index;              }            else              /* Second nonexact match found.  */              ambig = 1;          }      /* don't allow nonexact longoptions */      if (needexact && !exact)        {          if (opterr)            fprintf (stderr, "%s: unrecognized option `%s'\n",                     argv[0], argv[optind]);          nextchar += my_strlen (nextchar);          optind++;          return BAD_OPTION;        }      if (ambig && !exact)        {          if (opterr)            fprintf (stderr, "%s: option `%s' is ambiguous\n",                     argv[0], argv[optind]);          nextchar += my_strlen (nextchar);          optind++;          return BAD_OPTION;        }      if (pfound != NULL)        {          int have_arg = (s[0] != '\0');          if (have_arg && (pfound->has_arg & 0xf))            have_arg = (s[1] != '\0');          option_index = indfound;          optind++;          if (have_arg)            {              /* Don't test has_arg with >, because some C compilers don't                 allow it to be used on enums.  */              if (pfound->has_arg & 0xf)                optarg = s + 1;              else                {                  if (opterr)                    {                      if (argv[optind - 1][1] == '-')                        /* --option */                        fprintf (stderr,                                 "%s: option `--%s' doesn't allow an argument\n",                                 argv[0], pfound->name);                      else                        /* +option or -option */                        fprintf (stderr,                             "%s: option `%c%s' doesn't allow an argument\n",                             argv[0], argv[optind - 1][0], pfound->name);                    }                  nextchar += my_strlen (nextchar);                  return BAD_OPTION;                }            }          else if ((pfound->has_arg & 0xf) == 1)            {#if 0              if (optind < argc)#else              if (optind < argc && (pfound->has_arg & 0x20) == 0)#endif                optarg = argv[optind++];              else                {                  if (opterr)                    fprintf (stderr, "%s: option `--%s%s' requires an argument\n",                             argv[0], pfound->name,                             (pfound->has_arg & 0x20) ? "=" : "");                  nextchar += my_strlen (nextchar);                  return optstring[0] == ':' ? ':' : BAD_OPTION;                }            }          nextchar += my_strlen (nextchar);          if (longind != NULL)            *longind = option_index;          if (pfound->flag)            {              *(pfound->flag) = pfound->val;              return 0;            }          return pfound->val;        }      /* Can't find it as a long option.  If this is not getopt_long_only,         or the option starts with '--' or is not a valid short         option, then it's an error.         Otherwise interpret it as a short option.  */      if (!long_only || argv[optind][1] == '-'#ifdef GETOPT_COMPAT          || argv[optind][0] == '+'#endif                          /* GETOPT_COMPAT */          || my_index (optstring, *nextchar) == NULL)        {          if (opterr)            {              if (argv[optind][1] == '-')                /* --option */                fprintf (stderr, "%s: unrecognized option `--%s'\n",                         argv[0], nextchar);              else                /* +option or -option */                fprintf (stderr, "%s: unrecognized option `%c%s'\n",                         argv[0], argv[optind][0], nextchar);            }          nextchar = empty_string;          optind++;          return BAD_OPTION;        }        ambig = ambig;    }  /* Look at and handle the next option-character.  */  {    char c = *nextchar++;    const char *temp = my_index (optstring, c);    /* Increment `optind' when we start to process its last character.  */    if (*nextchar == '\0')      ++optind;    if (temp == NULL || c == ':')      {        if (opterr)          {#if 0            if (c < 040 || c >= 0177)              fprintf (stderr, "%s: unrecognized option, character code 0%o\n",                       argv[0], c);            else              fprintf (stderr, "%s: unrecognized option `-%c'\n", argv[0], c);#else            /* 1003.2 specifies the format of this message.  */            fprintf (stderr, "%s: illegal option -- %c\n", argv[0], c);#endif          }        optopt = c;        return BAD_OPTION;      }    if (temp[1] == ':')      {        if (temp[2] == ':')          {            /* This is an option that accepts an argument optionally.  */            if (*nextchar != '\0')              {                optarg = nextchar;                optind++;              }            else              optarg = 0;            nextchar = NULL;          }        else          {            /* This is an option that requires an argument.  */            if (*nextchar != '\0')              {                optarg = nextchar;                /* If we end this ARGV-element by taking the rest as an arg,                   we must advance to the next element now.  */                optind++;              }            else if (optind == argc)              {                if (opterr)                  {#if 0                    fprintf (stderr, "%s: option `-%c' requires an argument\n",                             argv[0], c);#else                    /* 1003.2 specifies the format of this message.  */                    fprintf (stderr, "%s: option requires an argument -- %c\n",                             argv[0], c);#endif                  }                optopt = c;                if (optstring[0] == ':')                  c = ':';                else                  c = BAD_OPTION;              }            else              /* We already incremented `optind' once;                 increment it again when taking next ARGV-elt as argument.  */              optarg = argv[optind++];            nextchar = NULL;          }      }    return c;  }}int mfx_getopt(int argc, char **argv, const char *optstring){  return _getopt_internal (argc, argv, optstring,                           (const struct option *) 0,                           (int *) 0,                           0);}int mfx_getopt_long(int argc, char **argv, const char *options,                    const struct option *long_options, int *opt_index){  return _getopt_internal (argc, argv, options, long_options, opt_index, 0);}#ifdef TEST/* Compile with -DTEST to make an executable for use in testing   the above definition of `getopt'.  */intmain (argc, argv)     int argc;     char **argv;{  int c;  int digit_optind = 0;  while (1)    {      int this_option_optind = optind ? optind : 1;      c = getopt (argc, argv, "abc:d:0123456789");      if (c == EOF)        break;      switch (c)        {        case '0':        case '1':        case '2':        case '3':        case '4':        case '5':        case '6':        case '7':        case '8':        case '9':          if (digit_optind != 0 && digit_optind != this_option_optind)            printf ("digits occur in two different argv-elements.\n");          digit_optind = this_option_optind;          printf ("option %c\n", c);          break;        case 'a':          printf ("option a\n");          break;        case 'b':          printf ("option b\n");          break;        case 'c':          printf ("option c with value `%s'\n", optarg);          break;        case BAD_OPTION:          break;        default:          printf ("?? getopt returned character code 0%o ??\n", c);        }    }  if (optind < argc)    {      printf ("non-option ARGV-elements: ");      while (optind < argc)        printf ("%s ", argv[optind++]);      printf ("\n");    }  exit (0);}#endif /* TEST */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -