1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
/*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License v2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 021110-1307, USA.
*/
#ifndef __BTRFS_HELP_H__
#define __BTRFS_HELP_H__
#include <limits.h>
#include <stdbool.h>
struct cmd_struct;
struct cmd_group;
/* User defined long options first option */
#define GETOPT_VAL_FIRST 256
#define GETOPT_VAL_SI 512
#define GETOPT_VAL_IEC 513
#define GETOPT_VAL_RAW 514
#define GETOPT_VAL_HUMAN_READABLE 515
#define GETOPT_VAL_KBYTES 516
#define GETOPT_VAL_MBYTES 517
#define GETOPT_VAL_GBYTES 518
#define GETOPT_VAL_TBYTES 519
#define GETOPT_VAL_HELP 520
#define GETOPT_VAL_PARAM 521
#define GETOPT_VAL_DRY_RUN 522
#define ARGV0_BUF_SIZE PATH_MAX
#define HELPINFO_UNITS_LONG \
OPTLINE("--raw", "raw numbers in bytes"), \
OPTLINE("--human-readable", "human friendly numbers, base 1024 (default)"), \
OPTLINE("--iec", "use 1024 as a base (KiB, MiB, GiB, TiB)"), \
OPTLINE("--si", "use 1000 as a base (kB, MB, GB, TB)"), \
OPTLINE("--kbytes", "show sizes in KiB, or kB with --si"), \
OPTLINE("--mbytes", "show sizes in MiB, or MB with --si"), \
OPTLINE("--gbytes", "show sizes in GiB, or GB with --si"), \
OPTLINE("--tbytes", "show sizes in TiB, or TB with --si")
#define HELPINFO_UNITS_SHORT_LONG \
OPTLINE("-b|--raw", "raw numbers in bytes"), \
OPTLINE("-h|--human-readable", "human friendly numbers, base 1024 (default)"), \
OPTLINE("-H", "human friendly numbers, base 1000"), \
OPTLINE("--iec", "use 1024 as a base (KiB, MiB, GiB, TiB)"), \
OPTLINE("--si", "use 1000 as a base (kB, MB, GB, TB)"), \
OPTLINE("-k|--kbytes", "show sizes in KiB, or kB with --si"), \
OPTLINE("-m|--mbytes", "show sizes in MiB, or MB with --si"), \
OPTLINE("-g|--gbytes", "show sizes in GiB, or GB with --si"), \
OPTLINE("-t|--tbytes", "show sizes in TiB, or TB with --si")
#define HELPINFO_OPTION "\x01"
#define HELPINFO_DESC "\x02"
/* Keep the line length below 100 chars. */
#define HELPINFO_PREFIX_WIDTH 4
#define HELPINFO_LISTING_WIDTH 8
#define HELPINFO_OPTION_WIDTH 24
#define HELPINFO_OPTION_MARGIN 2
#define HELPINFO_DESC_PREFIX (HELPINFO_PREFIX_WIDTH + \
HELPINFO_OPTION_WIDTH + \
HELPINFO_OPTION_MARGIN)
#define HELPINFO_DESC_WIDTH 99 - HELPINFO_DESC_PREFIX
#define OPTLINE(opt, text) HELPINFO_OPTION opt HELPINFO_DESC text
/*
* Special marker in the help strings that will preemptively insert the global
* options and then continue with the following text that possibly follows
* after the regular options
*/
#define HELPINFO_INSERT_GLOBALS "", \
"Global options:"
#define HELPINFO_INSERT_FORMAT "--format TYPE"
#define HELPINFO_INSERT_DRY_RUN OPTLINE("--dry-run", "do not do any active/changing actions")
#define HELPINFO_INSERT_VERBOSE OPTLINE("-v|--verbose", "increase output verbosity")
#define HELPINFO_INSERT_QUIET OPTLINE("-q|--quiet", "print only errors")
/*
* Descriptor of output format
*/
struct format_desc {
unsigned int value;
char name[8];
};
extern const struct format_desc output_formats[2];
const char *output_format_name(unsigned int value);
__attribute__((noreturn))
void usage_unknown_option(const struct cmd_struct *cmd, char **argv);
__attribute__((noreturn))
void usage(const struct cmd_struct *cmd, int error);
void usage_command(const struct cmd_struct *cmd, bool full, bool err);
void usage_command_group(const struct cmd_group *grp, bool all, bool err);
void usage_command_group_short(const struct cmd_group *grp);
__attribute__((noreturn))
void help_unknown_token(const char *arg, const struct cmd_group *grp);
__attribute__((noreturn))
void help_ambiguous_token(const char *arg, const struct cmd_group *grp);
void help_command_group(const struct cmd_group *grp, int argc, char **argv);
void help_builtin_features(const char *prefix);
int check_argc_exact(int nargs, int expected);
int check_argc_min(int nargs, int expected);
int check_argc_max(int nargs, int expected);
void clean_args_no_options(const struct cmd_struct *cmd,
int argc, char *argv[]);
void clean_args_no_options_relaxed(const struct cmd_struct *cmd,
int argc, char *argv[]);
void fixup_argv0(char **argv, const char *token);
void set_argv0(char **argv);
const char *get_argv0_buf(void);
#endif
|