]> git.ipfire.org Git - thirdparty/util-linux.git/blob - Documentation/boilerplate.c
docs: move Copyright in boilerplate.c
[thirdparty/util-linux.git] / Documentation / boilerplate.c
1 /* Please use this file as a template when introducing new command to
2 * util-linux package.
3 * -- remove above */
4 /*
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 *
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.
11 *
12 * Copyright (c) 20nn Example Commercial, Inc
13 * Written by Your Name <you@example.com>
14 *
15 * fixme-command-name - purpose of it
16 */
17 #include <getopt.h>
18 #include <stdio.h>
19 #include <unistd.h>
20
21 #include "c.h"
22 #include "closestream.h"
23 #include "nls.h"
24
25 /*
26 * FIXME: remove this comment.
27 * Other usage() constants that are not demonstrated below:
28 * USAGE_FUNCTIONS USAGE_COMMANDS USAGE_COLUMNS
29 */
30 static void __attribute__((__noreturn__)) usage(void)
31 {
32 fputs(USAGE_HEADER, stdout);
33 fprintf(stdout, _(" %s [options] file...\n"), program_invocation_short_name);
34
35 fputs(USAGE_SEPARATOR, stdout);
36 fputs(_("Short program description."), stdout);
37
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)"));
53 exit(EXIT_SUCCESS);
54 }
55
56 int main(int argc, char **argv)
57 {
58 int c;
59
60 enum {
61 OPT_XYZZY = CHAR_MAX + 1,
62 OPT_OPTIONAL /* see howto-man-page.txt about short option */
63 };
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' },
74 { NULL, 0, NULL, 0 }
75 };
76
77 setlocale(LC_ALL, "");
78 bindtextdomain(PACKAGE, LOCALEDIR);
79 textdomain(PACKAGE);
80 close_stdout_atexit();
81
82 while ((c = getopt_long(argc, argv, "nr:zelfVh", longopts, NULL)) != -1)
83 switch (c) {
84 case 'n':
85 case OPT_OPTIONAL:
86 case 'r':
87 case 'z':
88 case OPT_XYZZY:
89 case 'e':
90 case 'l':
91 case 'f':
92 break;
93 case 'V':
94 print_version(EXIT_SUCCESS);
95 case 'h':
96 usage();
97 default:
98 errtryhelp(EXIT_FAILURE);
99 }
100
101 return EXIT_SUCCESS;
102 }