getopt1.c
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* getopt_long and getopt_long_only entry points for GNU getopt.
  2.    Copyright (C) 1987, 88, 89, 90, 91, 92, 1993, 1994
  3. Free Software Foundation, Inc.
  4. This file is part of the GNU C Library.  Its master source is NOT part of
  5. the C library, however.  The master source lives in /gd/gnu/lib.
  6. The GNU C Library is free software; you can redistribute it and/or
  7. modify it under the terms of the GNU Library General Public License as
  8. published by the Free Software Foundation; either version 2 of the
  9. License, or (at your option) any later version.
  10. The GNU C Library is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13. Library General Public License for more details.
  14. You should have received a copy of the GNU Library General Public
  15. License along with the GNU C Library; see the file COPYING.LIB.  If
  16. not, write to the Free Software Foundation, Inc., 675 Mass Ave,
  17. Cambridge, MA 02139, USA.  */
  18. #ifdef HAVE_CONFIG_H
  19. #include <config.h>
  20. #endif
  21. #include <global.h>
  22. #include "getopt.h"
  23. #if (!defined (__STDC__) || !__STDC__) && !defined(MSDOS)
  24. /* This is a separate conditional since some stdc systems
  25.    reject `defined (const)'.  */
  26. #ifndef const
  27. #define const
  28. #endif
  29. #endif
  30. #include <stdio.h>
  31. /* Comment out all this code if we are using the GNU C Library, and are not
  32.    actually compiling the library itself.  This code is part of the GNU C
  33.    Library, but also included in many other GNU distributions. Compiling
  34.    and linking in this code is a waste when using the GNU C library
  35.    (especially if it is a shared library).  Rather than having every GNU
  36.    program understand `configure --with-gnu-libc' and omit the object files,
  37.    it is simpler to just do this in the source for each such file.  */
  38. #if defined (_LIBC) || !defined (__GNU_LIBRARY__)
  39. #ifndef __WIN__
  40. #include <stdlib.h>
  41. #endif /* __WIN__ */
  42. #ifndef NULL
  43. #define NULL 0
  44. #endif
  45. int
  46. getopt_long (int argc, char *const *argv, const char *options, const struct option *long_options, int *opt_index)
  47. {
  48.   return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
  49. }
  50. /* Like getopt_long, but '-' as well as '--' can indicate a long option.
  51.    If an option that starts with '-' (not '--') doesn't match a long option,
  52.    but does match a short option, it is parsed as a short option
  53.    instead.  */
  54. int
  55. getopt_long_only (int argc, char *const *argv, const char *options, const struct option *long_options, int *opt_index)
  56. {
  57.   return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
  58. }
  59. #endif /* _LIBC or not __GNU_LIBRARY__.  */
  60. #ifdef TEST
  61. #include <stdio.h>
  62. int
  63. main (argc, argv)
  64.      int argc;
  65.      char **argv;
  66. {
  67.   int c;
  68.   int digit_optind = 0;
  69.   while (1)
  70.     {
  71.       int this_option_optind = optind ? optind : 1;
  72.       int option_index = 0;
  73.       static struct option long_options[] =
  74.       {
  75. {"add", 1, 0, 0},
  76. {"append", 0, 0, 0},
  77. {"delete", 1, 0, 0},
  78. {"verbose", 0, 0, 0},
  79. {"create", 0, 0, 0},
  80. {"file", 1, 0, 0},
  81. {0, 0, 0, 0}
  82.       };
  83.       c = getopt_long (argc, argv, "abc:d:0123456789",
  84.        long_options, &option_index);
  85.       if (c == EOF)
  86. break;
  87.       switch (c)
  88. {
  89. case 0:
  90.   printf ("option %s", long_options[option_index].name);
  91.   if (optarg)
  92.     printf (" with arg %s", optarg);
  93.   printf ("n");
  94.   break;
  95. case '0':
  96. case '1':
  97. case '2':
  98. case '3':
  99. case '4':
  100. case '5':
  101. case '6':
  102. case '7':
  103. case '8':
  104. case '9':
  105.   if (digit_optind != 0 && digit_optind != this_option_optind)
  106.     printf ("digits occur in two different argv-elements.n");
  107.   digit_optind = this_option_optind;
  108.   printf ("option %cn", c);
  109.   break;
  110. case 'a':
  111.   printf ("option an");
  112.   break;
  113. case 'b':
  114.   printf ("option bn");
  115.   break;
  116. case 'c':
  117.   printf ("option c with value `%s'n", optarg);
  118.   break;
  119. case 'd':
  120.   printf ("option d with value `%s'n", optarg);
  121.   break;
  122. case '?':
  123.   break;
  124. default:
  125.   printf ("?? getopt returned character code 0%o ??n", c);
  126. }
  127.     }
  128.   if (optind < argc)
  129.     {
  130.       printf ("non-option ARGV-elements: ");
  131.       while (optind < argc)
  132. printf ("%s ", argv[optind++]);
  133.       printf ("n");
  134.     }
  135.   exit (0);
  136. }
  137. #endif /* TEST */