/* Please use this file as a template when introducing new command to * util-linux package. * -- remove above */ /* * SPDX-License-Identifier: GPL-2.0-or-later * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * fixme-command-name - purpose of it * * Copyright (c) 20nn Example Commercial, Inc * Written by Your Name * */ #include #include #include #include "c.h" #include "closestream.h" #include "nls.h" /* * FIXME: remove this comment. * Other usage() constants that are not demonstrated below: * USAGE_FUNCTIONS USAGE_COMMANDS USAGE_COLUMNS */ static void __attribute__((__noreturn__)) usage(void) { fputs(USAGE_HEADER, stdout); printf(_(" %s [options] file...\n"), program_invocation_short_name); fputs(USAGE_SEPARATOR, stdout); puts(_("Short program description.")); fputs(USAGE_OPTIONS, stdout); puts(_(" -n, --no-argument option does not use argument")); puts(_(" --optional[=] option argument is optional")); puts(_(" -r, --required option requires an argument")); puts(_(" -z no long option")); puts(_(" --xyzzy a long option only")); puts(_(" -e, --extremely-long-long-option\n" " use next line for description when needed")); puts(_(" -l, --long-explanation an example of very verbose, and chatty option\n" " description on two, or multiple lines, where the\n" " consecutive lines are intended by two spaces")); puts(_(" -f, --foobar next option description resets indent")); fputs(USAGE_SEPARATOR, stdout); printf(USAGE_HELP_OPTIONS(25)); /* char offset to align option descriptions */ printf(USAGE_MAN_TAIL("fixme-command-name(1)")); exit(EXIT_SUCCESS); } int main(int argc, char **argv) { int c; enum { OPT_XYZZY = CHAR_MAX + 1, OPT_OPTIONAL /* see howto-man-page.txt about short option */ }; static const struct option longopts[] = { { "no-argument", no_argument, NULL, 'n' }, { "optional", optional_argument, NULL, OPT_OPTIONAL }, { "required", required_argument, NULL, 'r' }, { "extremely-long-long-option", no_argument, NULL, 'e' }, { "xyzzy", no_argument, NULL, OPT_XYZZY }, { "long-explanation", no_argument, NULL, 'l' }, { "foobar", no_argument, NULL, 'f' }, { "version", no_argument, NULL, 'V' }, { "help", no_argument, NULL, 'h' }, { NULL, 0, NULL, 0 } }; setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); close_stdout_atexit(); while ((c = getopt_long(argc, argv, "nr:zelfVh", longopts, NULL)) != -1) switch (c) { case 'n': case OPT_OPTIONAL: case 'r': case 'z': case OPT_XYZZY: case 'e': case 'l': case 'f': break; case 'V': print_version(EXIT_SUCCESS); case 'h': usage(); default: errtryhelp(EXIT_FAILURE); } return EXIT_SUCCESS; }