1 /* Please use this file as a template when introducing new command to
5 * SPDX-License-Identifier: GPL-2.0-or-later
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * Copyright (c) 20nn Example Commercial, Inc
13 * Written by Your Name <you@example.com>
15 * fixme-command-name - purpose of it
22 #include "closestream.h"
26 * FIXME: remove this comment.
27 * Other usage() constants that are not demonstrated below:
28 * USAGE_FUNCTIONS USAGE_COMMANDS USAGE_COLUMNS
30 static void __attribute__((__noreturn__
)) usage(void)
32 fputs(USAGE_HEADER
, stdout
);
33 fprintf(stdout
, _(" %s [options] file...\n"), program_invocation_short_name
);
35 fputs(USAGE_SEPARATOR
, stdout
);
36 fputs(_("Short program description."), stdout
);
38 fputs(USAGE_OPTIONS
, stdout
);
39 fputs(_(" -n, --no-argument option does not use argument"), stdout
);
40 fputs(_(" --optional[=<arg>] option argument is optional"), stdout
);
41 fputs(_(" -r, --required <arg> option requires an argument"), stdout
);
42 fputs(_(" -z no long option"), stdout
);
43 fputs(_(" --xyzzy a long option only"), stdout
);
44 fputs(_(" -e, --extremely-long-long-option\n"
45 " use next line for description when needed"), stdout
);
46 fputs(_(" -l, --long-explanation an example of very verbose, and chatty option\n"
47 " description on two, or multiple lines, where the\n"
48 " consecutive lines are intended by two spaces"), stdout
);
49 fputs(_(" -f, --foobar next option description resets indent"), stdout
);
50 fputs(USAGE_SEPARATOR
, stdout
);
51 fprintf(stdout
, USAGE_HELP_OPTIONS(25)); /* char offset to align option descriptions */
52 fprintf(stdout
, USAGE_MAN_TAIL("fixme-command-name(1)"));
56 int main(int argc
, char **argv
)
61 OPT_XYZZY
= CHAR_MAX
+ 1,
62 OPT_OPTIONAL
/* see howto-man-page.txt about short option */
64 static const struct option longopts
[] = {
65 { "no-argument", no_argument
, NULL
, 'n' },
66 { "optional", optional_argument
, NULL
, OPT_OPTIONAL
},
67 { "required", required_argument
, NULL
, 'r' },
68 { "extremely-long-long-option", no_argument
, NULL
, 'e' },
69 { "xyzzy", no_argument
, NULL
, OPT_XYZZY
},
70 { "long-explanation", no_argument
, NULL
, 'l' },
71 { "foobar", no_argument
, NULL
, 'f' },
72 { "version", no_argument
, NULL
, 'V' },
73 { "help", no_argument
, NULL
, 'h' },
77 setlocale(LC_ALL
, "");
78 bindtextdomain(PACKAGE
, LOCALEDIR
);
80 close_stdout_atexit();
82 while ((c
= getopt_long(argc
, argv
, "nr:zelfVh", longopts
, NULL
)) != -1)
94 print_version(EXIT_SUCCESS
);
98 errtryhelp(EXIT_FAILURE
);