From: Paul Eggert Date: Sun, 7 Nov 1999 21:06:38 +0000 (+0000) Subject: Include getopt.h. X-Git-Url: https://git.dogcows.com/gitweb?a=commitdiff_plain;h=02519e55752f86d85a03643332a0bdd0850c265c;p=chaz%2Ftar Include getopt.h. (long_opts): New constant. (usage): New function. (main): Implement --help and --version. Output usage message if arguments are bad. --- diff --git a/src/rmt.c b/src/rmt.c index 8e9ad84..0215bff 100644 --- a/src/rmt.c +++ b/src/rmt.c @@ -32,6 +32,7 @@ #include "system.h" #include "safe-read.h" +#include #include #ifndef EXIT_FAILURE @@ -252,6 +253,34 @@ decode_oflag (char const *oflag_string) return symbolic_oflag; } +static struct option const long_opts[] = +{ + {"help", no_argument, 0, 'h'}, + {"version", no_argument, 0, 'v'}, + {0, 0, 0, 0} +}; + +static void +usage (int status) +{ + if (status != EXIT_SUCCESS) + fprintf (stderr, _("Try `%s --help' for more information.\n"), + program_name); + else + { + printf (_("\ +Usage: %s [OPTION]\n\ +Manipulate a tape drive, accepting commands from a remote process.\n\ +\n\ + --version Output version info.\n\ + --help Output this help.\n"), + program_name); + fputs (_("\nReport bugs to .\n"), stdout); + } + + exit (status); +} + /*---. | ? | `---*/ @@ -271,12 +300,32 @@ main (int argc, char *const *argv) bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); - /* FIXME: Implement --help and --version as for any other GNU program. */ + switch (getopt_long (argc, argv, "", long_opts, NULL)) + { + default: + usage (EXIT_FAILURE); + + case 'h': + usage (EXIT_SUCCESS); + + case 'v': + printf ("rmt (GNU %s) %s\n%s\n%s\n", PACKAGE, VERSION, + "Copyright 1999 Free Software Foundation, Inc.", + _("\ +This program comes with NO WARRANTY, to the extent permitted by law.\n\ +You may redistribute it under the terms of the GNU General Public License;\n\ +see the file named COPYING for details.")); + return EXIT_SUCCESS; + + case -1: + break; + } - argc--, argv++; - if (argc > 0) + if (optind < argc) { - debug_file = fopen (*argv, "w"); + if (optind != argc - 1) + usage (EXIT_FAILURE); + debug_file = fopen (argv[optind], "w"); if (debug_file == 0) { report_numbered_error (errno); @@ -289,7 +338,7 @@ top: errno = 0; /* FIXME: errno should be read-only */ status = 0; if (safe_read (STDIN_FILENO, &command, 1) != 1) - exit (EXIT_SUCCESS); + return EXIT_SUCCESS; switch (command) {