アットウィキロゴ
  1. /* Utility to accept --help and --version options as unobtrusively as possible.
  2.   Copyright (C) 1993, 1994, 1998, 1999 Free Software Foundation, Inc.
  3.  
  4.   This program is free software; you can redistribute it and/or modify
  5.   it under the terms of the GNU General Public License as published by
  6.   the Free Software Foundation; either version 2, or (at your option)
  7.   any later version.
  8.  
  9.   This program is distributed in the hope that it will be useful,
  10.   but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12.   GNU General Public License for more details.
  13.  
  14.   You should have received a copy of the GNU General Public License
  15.   along with this program; if not, write to the Free Software Foundation,
  16.   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
  17.  
  18. /* Written by Jim Meyering. */
  19.  
  20. #if HAVE_CONFIG_H
  21. # include <config.h>
  22. #endif
  23.  
  24. #include <stdio.h>
  25. #include <getopt.h>
  26. #include "closeout.h"
  27. #include "long-options.h"
  28. #include "version-etc.h"
  29.  
  30. #if ENABLE_NLS
  31. # include <libintl.h>
  32. # define _(Text) gettext (Text)
  33. #else
  34. # define _(Text) Text
  35. #endif
  36.  
  37. static struct option const long_options[] =
  38. {
  39. {"help", no_argument, 0, 'h'},
  40. {"version", no_argument, 0, 'v'},
  41. {0, 0, 0, 0}
  42. };
  43.  
  44. /* Process long options --help and --version, but only if argc == 2.
  45.   Be careful not to gobble up `--'. */
  46.  
  47. void
  48. parse_long_options (int argc,
  49. char **argv,
  50. const char *command_name,
  51. const char *package,
  52. const char *version,
  53. const char *authors,
  54. void (*usage_func)())
  55. {
  56. int c;
  57. int saved_opterr;
  58.  
  59. saved_opterr = opterr;
  60.  
  61. /* Don't print an error message for unrecognized options. */
  62. opterr = 0;
  63.  
  64. if (argc == 2
  65. && (c = getopt_long (argc, argv, "+", long_options, NULL)) != -1)
  66. {
  67. switch (c)
  68. {
  69. case 'h':
  70. (*usage_func) (0);
  71.  
  72. case 'v':
  73. version_etc (stdout, command_name, package, version, authors);
  74. close_stdout (); /* FIXME: output failure exit status
  75. should be settable via an arg. */
  76. exit (0);
  77.  
  78. default:
  79. /* Don't process any other long-named options. */
  80. break;
  81. }
  82. }
  83.  
  84. /* Restore previous value. */
  85. opterr = saved_opterr;
  86.  
  87. /* Reset this to zero so that getopt internals get initialized from
  88.   the probably-new parameters when/if getopt is called later. */
  89. optind = 0;
  90. }
  91.  



parse_long_option()は、sh-utilsのほぼ全てのプログラムから呼ばれる関数。
第一引数と第二引数は呼び出し元のプログラムのmain()関数の引数がそのまま渡される。

タグ:

+ タグ編集
  • タグ:
最終更新:2008年03月31日 03:02