pub(super) use crate::compat::host::printf;
pub(super) const PREFIX: &str = "%s: ";
pub(super) const TRY_HELP: &str = "Try '%s --help' for more information.";
pub(super) const BUG: &str = "Internal error (bug)";
pub(super) const STRM_UNSUPPORTED_CHECK: &str =
"Unsupported type of integrity check; not verifying file integrity";
pub(super) const STRM_MEMLIMIT: &str = "Memory usage limit reached";
pub(super) const STRM_FORMAT: &str = "File format not recognized";
pub(super) const STRM_OPTIONS: &str = "Unsupported options";
pub(super) const STRM_DATA: &str = "Compressed data is corrupt";
pub(super) const STRM_BUF: &str = "Unexpected end of input";
pub(super) const MEM_NEEDED_NO_LIMIT: &str =
"%s MiB of memory is required. The limiter is disabled.";
pub(super) const MEM_NEEDED: &str = "%s MiB of memory is required. The limit is %s.";
pub(super) const MEM_LIMIT_BYTES: &str = "%s B";
pub(super) const MEM_LIMIT_MIB: &str = "%s MiB";
pub(super) const FILTER_CHAIN: &str = "%s: Filter chain: %s\n";
pub(super) const NAME_COLON: &str = "%s: %s";
pub(super) const PLAIN: &str = "%s";
pub(super) const VERSION_FIRST_LINE: &str = "xz (stuffr %s; XZ Utils 5.8.4 compatible)\n";
pub(super) const VERSION_LIBLZMA: &str = "liblzma 5.8.4\n";
pub(super) const VERSION_ROBOT: &str = "XZ_VERSION=50080042\nLIBLZMA_VERSION=50080042\n";
pub(super) const FILTERS_HELP_INTRO: &str = concat!(
"Filter chains are set using the --filters=FILTERS or --filters1=FILTERS ...\n",
"--filters9=FILTERS options. Each filter in the chain can be separated by\n",
"spaces or '--'. Alternatively a preset <0-9>[e] can be specified instead of\n",
"a filter chain.\n",
"\n",
"The supported filters and their options are:\n",
);
pub(super) const FILTERS_HELP_LIST: &str = concat!(
"lzma2:preset=<0-9[e]>,dict=<4KiB-1536MiB>,lc=<0-4>,lp=<0-4>,pb=<0-4>,",
"mode=<fast|normal>,nice=<2-273>,mf=<hc3|hc4|bt2|bt3|bt4>,depth=<0-4294967295>\n",
"x86:start=<0-4294967295>\n",
"arm:start=<0-4294967295>\n",
"armthumb:start=<0-4294967295>\n",
"arm64:start=<0-4294967295>\n",
"riscv:start=<0-4294967295>\n",
"powerpc:start=<0-4294967295>\n",
"ia64:start=<0-4294967295>\n",
"sparc:start=<0-4294967295>\n",
"delta:dist=<1-256>\n",
);
pub(super) const HELP: &str = concat!(
"Usage: %s [OPTION]... [FILE]...\n",
"Compress or decompress FILEs in the .xz format.\n",
"\n",
"Mandatory arguments to long options are mandatory for short options too.\n",
"\n",
" -z, --compress force compression\n",
" -d, --decompress force decompression\n",
" -t, --test test compressed file integrity\n",
" -l, --list list information about .xz files\n",
" -k, --keep keep (don't delete) input files\n",
" -f, --force force overwrite of output file and (de)compress links\n",
" -c, --stdout write to standard output and don't delete input files\n",
" -0 ... -9 compression preset; default is 6; take compressor *and*\n",
" decompressor memory usage into account before using 7-9!\n",
" -e, --extreme try to improve compression ratio by using more CPU time;\n",
" does not affect decompressor memory requirements\n",
" -T, --threads=NUM use at most NUM threads; the default is 0 which uses as\n",
" many threads as there are processor cores\n",
" -q, --quiet suppress warnings; specify twice to suppress errors too\n",
" -v, --verbose be verbose; specify twice for even more verbose\n",
" -h, --help display this short help and exit\n",
" -H, --long-help display the long help (lists also the advanced options)\n",
" -V, --version display the version number and exit\n",
"\n",
"With no FILE, or when FILE is -, read standard input.\n",
"\n",
"Report bugs to <xz@tukaani.org> (in English or Finnish).\n",
"XZ Utils home page: <https://tukaani.org/xz/>\n",
);
pub(super) const LONG_HELP: &str = concat!(
"Usage: %s [OPTION]... [FILE]...\n",
"Compress or decompress FILEs in the .xz format.\n",
"\n",
"Mandatory arguments to long options are mandatory for short options too.\n",
"\n",
" Operation mode:\n",
"\n",
" -z, --compress force compression\n",
" -d, --decompress force decompression\n",
" -t, --test test compressed file integrity\n",
" -l, --list list information about .xz files\n",
"\n",
" Operation modifiers:\n",
"\n",
" -k, --keep keep (don't delete) input files\n",
" -f, --force force overwrite of output file and (de)compress links\n",
" -c, --stdout write to standard output and don't delete input files\n",
" --no-sync don't synchronize the output file to the storage device\n",
" before removing the input file\n",
" --single-stream decompress only the first stream, and silently ignore\n",
" possible remaining input data\n",
" --no-sparse do not create sparse files when decompressing\n",
" -S, --suffix=.SUF use the suffix '.SUF' on compressed files\n",
" --files[=FILE] read filenames to process from FILE; if FILE is omitted,\n",
" filenames are read from the standard input; filenames\n",
" must be terminated with the newline character\n",
" --files0[=FILE] like --files but use the null character as terminator\n",
"\n",
" Basic file format and compression options:\n",
"\n",
" -F, --format=FORMAT file format to encode or decode; possible values are\n",
" 'auto' (default), 'xz', 'lzma', 'lzip', and 'raw'\n",
" -C, --check=NAME integrity check type: 'none' (use with caution), 'crc32',\n",
" 'crc64' (default), or 'sha256'\n",
" --ignore-check don't verify the integrity check when decompressing\n",
" -0 ... -9 compression preset; default is 6; take compressor *and*\n",
" decompressor memory usage into account before using 7-9!\n",
" -e, --extreme try to improve compression ratio by using more CPU time;\n",
" does not affect decompressor memory requirements\n",
" -T, --threads=NUM use at most NUM threads; the default is 0 which uses as\n",
" many threads as there are processor cores\n",
" --block-size=SIZE\n",
" start a new .xz block after every SIZE bytes of input;\n",
" use this to set the block size for threaded compression\n",
" --block-list=BLOCKS\n",
" start a new .xz block after the given comma-separated\n",
" intervals of uncompressed data; optionally, specify a\n",
" filter chain number (0-9) followed by a ':' before the\n",
" uncompressed data size\n",
" --flush-timeout=NUM\n",
" when compressing, if more than NUM milliseconds has\n",
" passed since the previous flush and reading more input\n",
" would block, all pending data is flushed out\n",
" --memlimit-compress=LIMIT\n",
" --memlimit-decompress=LIMIT\n",
" --memlimit-mt-decompress=LIMIT\n",
" -M, --memlimit=LIMIT\n",
" set memory usage limit for compression, decompression,\n",
" threaded decompression, or all of these; LIMIT is in\n",
" bytes, %% of RAM, or 0 for defaults\n",
" --no-adjust if compression settings exceed the memory usage limit,\n",
" give an error instead of adjusting the settings downwards\n",
"\n",
" Custom filter chain for compression (an alternative to using presets):\n",
"\n",
" --filters=FILTERS set the filter chain using the liblzma filter string\n",
" syntax; use --filters-help for more information\n",
" --filters1=FILTERS ... --filters9=FILTERS\n",
" set additional filter chains using the liblzma filter\n",
" string syntax to use with --block-list\n",
" --filters-help display more information about the liblzma filter string\n",
" syntax and exit\n",
"\n",
" --lzma1[=OPTS]\n",
" --lzma2[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n",
" more of the following options (valid values; default):\n",
" preset=PRE reset options to a preset (0-9[e])\n",
" dict=NUM dictionary size (4KiB - 1536MiB; 8MiB)\n",
" lc=NUM number of literal context bits (0-4; 3)\n",
" lp=NUM number of literal position bits (0-4; 0)\n",
" pb=NUM number of position bits (0-4; 2)\n",
" mode=MODE compression mode (fast, normal; normal)\n",
" nice=NUM nice length of a match (2-273; 64)\n",
" mf=NAME match finder (hc3, hc4, bt2, bt3, bt4; bt4)\n",
" depth=NUM maximum search depth; 0=automatic (default)\n",
"\n",
" --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n",
" --arm[=OPTS] ARM BCJ filter\n",
" --armthumb[=OPTS] ARM-Thumb BCJ filter\n",
" --arm64[=OPTS] ARM64 BCJ filter\n",
" --powerpc[=OPTS] PowerPC BCJ filter (big endian only)\n",
" --ia64[=OPTS] IA-64 (Itanium) BCJ filter\n",
" --sparc[=OPTS] SPARC BCJ filter\n",
" --riscv[=OPTS] RISC-V BCJ filter\n",
" Valid OPTS for all BCJ filters:\n",
" start=NUM start offset for conversions (default=0)\n",
"\n",
" --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n",
" dist=NUM distance between bytes being subtracted\n",
" from each other (1-256; 1)\n",
"\n",
" Other options:\n",
"\n",
" -q, --quiet suppress warnings; specify twice to suppress errors too\n",
" -v, --verbose be verbose; specify twice for even more verbose\n",
" -Q, --no-warn make warnings not affect the exit status\n",
" --robot use machine-parsable messages (useful for scripts)\n",
"\n",
" --info-memory display the total amount of RAM and the currently active\n",
" memory usage limits, and exit\n",
" -h, --help display the short help (lists only the basic options)\n",
" -H, --long-help display this long help and exit\n",
" -V, --version display the version number and exit\n",
"\n",
"With no FILE, or when FILE is -, read standard input.\n",
"\n",
"Report bugs to <xz@tukaani.org> (in English or Finnish).\n",
"XZ Utils home page: <https://tukaani.org/xz/>\n",
);
pub(super) const WRITE_FAILED: &str = "%s: Writing to standard output failed: %s\n";
pub(super) const NOT_AN_INTEGER: &str = "%s: Value is not a non-negative decimal integer";
pub(super) const INVALID_MULTIPLIER: &str = "%s: Invalid multiplier suffix";
pub(super) const VALID_SUFFIXES: &str =
"Valid suffixes are 'KiB' (2^10), 'MiB' (2^20), and 'GiB' (2^30).";
pub(super) const OUT_OF_RANGE: &str = "Value of the option '%s' must be in the range [%s, %s]";
pub(super) const TTY_STDIN: &str = "Compressed data cannot be read from a terminal";
pub(super) const TTY_STDOUT: &str = "Compressed data cannot be written to a terminal";
pub(super) const BLOCK_LIST_INVALID: &str = "%s: Invalid argument to --block-list";
pub(super) const BLOCK_LIST_NO_SIZE: &str =
"In --block-list, block size is missing after filter chain number '%s:'";
pub(super) const BLOCK_LIST_ZERO: &str = "0 can only be used as the last element in --block-list";
pub(super) const UNKNOWN_FORMAT: &str = "%s: Unknown file format type";
pub(super) const UNSUPPORTED_CHECK: &str = "%s: Unsupported integrity check type";
pub(super) const ONLY_ONE_FILES: &str =
"Only one file can be specified with '--files' or '--files0'.";
pub(super) const NAME_AND_REASON: &str = "%s: %s";
pub(super) const LZIP_COMPRESS: &str = "Compression of lzip files (.lz) is not supported";
pub(super) const BLOCK_LIST_IGNORED: &str =
"--block-list is ignored unless compressing to the .xz format";
pub(super) const RAW_NEEDS_SUFFIX: &str =
"With --format=raw, --suffix=.SUF is required unless writing to stdout";
pub(super) const ROBOT_CODING: &str =
"Compression and decompression with --robot are not supported yet.";
pub(super) const STDIN_BOTH: &str =
"Cannot read data from standard input when reading filenames from standard input";
pub(super) const READ_NAMES_FAILED: &str = "%s: Error reading filenames: %s";
pub(super) const NAMES_UNEXPECTED_END: &str = "%s: Unexpected end of input when reading filenames";
pub(super) const NAMES_NUL: &str = "%s: Null character found when reading filenames; \
maybe you meant to use '--files0' instead of '--files'?";
pub(super) const STDIN_NAME: &[u8] = b"(stdin)";
pub(super) const NAME_VALUE_PAIRS: &str =
"Options must be 'name=value' pairs separated with commas";
pub(super) const INVALID_OPTION_NAME: &str = "%s: Invalid option name";
pub(super) const INVALID_OPTION_VALUE: &str = "Invalid option value";
pub(super) const UNSUPPORTED_PRESET: &str = "Unsupported LZMA1/LZMA2 preset: %s";
pub(super) const LC_LP: &str = "The sum of lc and lp must not exceed 4";
pub(super) const MAX_FILTERS: &str = "Maximum number of filters is four";
pub(super) const FILTERS_ERROR: &str = "Error in --filters%s=FILTERS option:";
pub(super) const CARET: &str = "%s^";
pub(super) const MEMLIMIT_TOO_LOW: &str =
"Memory usage limit is too low for the given filter setup.";
pub(super) const CHAIN_NOT_SPECIFIED: &str =
"filter chain %s used by --block-list but not specified with --filters%s=";
pub(super) const RAW_PRESET: &str = "Using a preset in raw mode is discouraged.";
pub(super) const RAW_PRESET_VARIES: &str =
"The exact options of the presets may vary between software versions.";
pub(super) const LZMA_NEEDS_LZMA1: &str = "The .lzma format supports only the LZMA1 filter";
pub(super) const LZMA1_NOT_IN_XZ: &str = "LZMA1 cannot be used with the .xz format";
pub(super) const FLUSH_INCOMPATIBLE: &str = "Filter chain %s is incompatible with --flush-timeout";
pub(super) const FLUSH_SINGLE_THREADED: &str =
"Switching to single-threaded mode due to --flush-timeout";
pub(super) const UNSUPPORTED_CHAIN_N: &str = "Unsupported options in filter chain %s";
pub(super) const USING_THREADS: &str = "Using up to %s threads.";
pub(super) const UNSUPPORTED_CHAIN: &str = "Unsupported filter chain or filter options";
pub(super) const DECOMPRESSION_NEEDS: &str = "Decompression will need %s MiB of memory.";
pub(super) const REDUCED_THREADS: &str = "Reduced the number of threads from %s to %s to not \
exceed the memory usage limit of %s MiB";
pub(super) const REDUCED_TO_ONE: &str = "Reduced the number of threads from %s to one. The \
automatic memory usage limit of %s MiB is still being exceeded. %s MiB of memory is \
required. Continuing anyway.";
pub(super) const SINGLE_THREADED_FOR_LIMIT: &str =
"Switching to single-threaded mode to not exceed the memory usage limit of %s MiB";
pub(super) const ADJUSTED_DICT: &str = "Adjusted LZMA%s dictionary size from %s MiB to %s MiB \
to not exceed the memory usage limit of %s MiB";
pub(super) const ADJUSTED_DICT_N: &str = "Adjusted LZMA%s dictionary size for --filters%s from \
%s MiB to %s MiB to not exceed the memory usage limit of %s MiB";
pub(super) const EMPTY_FILENAME: &str = "Empty filename, skipping";
pub(super) const IS_SYMLINK: &str = "%s: Is a symbolic link, skipping";
pub(super) const IS_DIRECTORY: &str = "%s: Is a directory, skipping";
pub(super) const NOT_REGULAR: &str = "%s: Not a regular file, skipping";
pub(super) const SETID: &str = "%s: File has setuid or setgid bit set, skipping";
pub(super) const STICKY: &str = "%s: File has sticky bit set, skipping";
pub(super) const HARD_LINKS: &str = "%s: Input file has more than one hard link, skipping";
pub(super) const MOVED: &str = "%s: File seems to have been moved, not removing";
pub(super) const CANNOT_REMOVE: &str = "%s: Cannot remove: %s";
pub(super) const CANNOT_SET_OWNER: &str = "%s: Cannot set the file owner: %s";
pub(super) const CANNOT_SET_GROUP: &str = "%s: Cannot set the file group: %s";
pub(super) const CANNOT_SET_PERMISSIONS: &str = "%s: Cannot set the file permissions: %s";
pub(super) const SYNC_FILE_FAILED: &str = "%s: Synchronizing the file failed: %s";
pub(super) const SYNC_DIR_FAILED: &str = "%s: Synchronizing the directory of the file failed: %s";
pub(super) const OPEN_DIR_FAILED: &str = "%s: Opening the directory failed: %s";
pub(super) const CLOSE_FAILED: &str = "%s: Closing the file failed: %s";
pub(super) const SPARSE_SEEK_FAILED: &str =
"%s: Seeking failed when trying to create a sparse file: %s";
pub(super) const READ_ERROR: &str = "%s: Read error: %s";
pub(super) const SEEK_ERROR: &str = "%s: Error seeking the file: %s";
pub(super) const UNEXPECTED_EOF: &str = "%s: Unexpected end of file";
pub(super) const WRITE_ERROR: &str = "%s: Write error: %s";
pub(super) const POLL_FAILED: &str = "%s: poll() failed: %s";
pub(super) const STDOUT_NAME: &[u8] = b"(stdout)";
pub(super) const SC_EMPTY: &str =
"Empty string is not allowed, try '6' if a default value is needed";
pub(super) const SC_UNSUPPORTED_PRESET: &str = "Unsupported preset";
pub(super) const SC_PRESET_FLAG: &str = "Unsupported flag in the preset";
pub(super) const SC_MAX_FILTERS: &str = "The maximum number of filters is four";
pub(super) const SC_NAME_MISSING: &str = "Filter name is missing";
pub(super) const SC_INVALID_CHAIN: &str = "Invalid filter chain ('lzma2' missing at the end?)";
pub(super) const SC_UNKNOWN_FILTER: &str = "Unknown filter name";
pub(super) const SC_NOT_IN_XZ: &str = "This filter cannot be used in the .xz format";
pub(super) const SC_PAIRS: &str = "Options must be 'name=value' pairs separated with commas";
pub(super) const SC_UNKNOWN_OPTION: &str = "Unknown option name";
pub(super) const SC_EMPTY_VALUE: &str = "Option value cannot be empty";
pub(super) const SC_INVALID_VALUE: &str = "Invalid option value";
pub(super) const SC_NOT_INTEGER: &str = "Value is not a non-negative decimal integer";
pub(super) const SC_OUT_OF_RANGE: &str = "Value out of range";
pub(super) const SC_NO_SUFFIX: &str = "This option does not support any multiplier suffixes";
pub(super) const SC_BAD_SUFFIX: &str = "Invalid multiplier suffix (KiB, MiB, or GiB)";
pub(super) const SC_LC_LP: &str = "The sum of lc and lp must not exceed 4";
pub(super) const INVALID_SUFFIX: &str = "%s: Invalid filename suffix";
pub(super) const UNKNOWN_SUFFIX: &str = "%s: Filename has an unknown suffix, skipping";
pub(super) const HAS_SUFFIX: &str = "%s: File already has '%s' suffix, skipping";
pub(super) const INFO_MEMORY_ROBOT: &str = "%s\t%s\t%s\t%s\t%s\t%s\n";
pub(super) const INFO_HARDWARE: &str = "Hardware information:\n";
pub(super) const INFO_LIMITS: &str = "\nMemory usage limits:\n";
pub(super) const INFO_LABELS: [&str; 6] = [
"Amount of physical memory (RAM):",
"Number of processor threads:",
"Compression:",
"Decompression:",
"Multi-threaded decompression:",
"Default for -T0:",
];
pub(super) const INFO_ROW_LIMIT: &str = " %s %s MiB (%s B)\n";
pub(super) const INFO_ROW_DISABLED: &str = " %s Disabled\n";
pub(super) const INFO_ROW_THREADS: &str = " %s %s\n";
pub(super) const BSD_INVALID_OPTION: &str = "%s: invalid option -- %s\n";
pub(super) const BSD_ILLEGAL_OPTION: &str = "%s: illegal option -- %s\n";
pub(super) const BSD_NEEDS_ARGUMENT_SHORT: &str = "%s: option requires an argument -- %s\n";
pub(super) const BSD_AMBIGUOUS: &str = "%s: option `--%s' is ambiguous\n";
pub(super) const BSD_NO_ARGUMENT: &str = "%s: option `--%s' doesn't allow an argument\n";
pub(super) const BSD_NEEDS_ARGUMENT_LONG: &str = "%s: option `--%s' requires an argument\n";
pub(super) const BSD_UNRECOGNIZED: &str = "%s: unrecognized option `--%s'\n";
pub(super) const GLIBC_INVALID_OPTION: &str = "%s: invalid option -- '%s'\n";
pub(super) const GLIBC_NEEDS_ARGUMENT_SHORT: &str = "%s: option requires an argument -- '%s'\n";
pub(super) const GLIBC_AMBIGUOUS: &str = "%s: option '--%s' is ambiguous; possibilities:";
pub(super) const GLIBC_CANDIDATE: &str = " '--%s'";
pub(super) const GLIBC_NO_ARGUMENT: &str = "%s: option '--%s' doesn't allow an argument\n";
pub(super) const GLIBC_NEEDS_ARGUMENT_LONG: &str = "%s: option '--%s' requires an argument\n";
pub(super) const GLIBC_UNRECOGNIZED: &str = "%s: unrecognized option '--%s'\n";
pub(super) const FILENAME_OF: &str = "%s (%s/%s)\n";
pub(super) const FILENAME_NTH: &str = "%s (%s)\n";
pub(super) const FILENAME_GAP: &str = "\n";
pub(super) const PROGRESS_PERCENT_UNKNOWN: &str = "--- %";
pub(super) const PROGRESS_PERCENT: &str = "%s %%";
pub(super) const PROGRESS_PERCENT_DONE: &str = "100 %";
pub(super) const PROGRESS_SIZES: &str = "%s / %s";
pub(super) const PROGRESS_RATIO: &str = " = %s";
pub(super) const PROGRESS_RATIO_OVER: &str = " > 9.999";
pub(super) const PROGRESS_SPEED: &str = "%s %siB/s";
pub(super) const PROGRESS_SPEED_UNITS: [&str; 3] = ["K", "M", "G"];
pub(super) const PROGRESS_TIME_MS: &str = "%s:%s";
pub(super) const PROGRESS_TIME_HMS: &str = "%s:%s:%s";
pub(super) const REMAINING_S: &str = "%s s";
pub(super) const REMAINING_MIN_S: &str = "%s min %s s";
pub(super) const REMAINING_MIN: &str = "%s min";
pub(super) const REMAINING_H_MIN: &str = "%s h %s min";
pub(super) const REMAINING_H: &str = "%s h";
pub(super) const REMAINING_D_H: &str = "%s d %s h";
pub(super) const REMAINING_D: &str = "%s d";
pub(super) const PROGRESS_LINE: &str = "\r %s %s %s %s %s\r";
pub(super) const PROGRESS_SIGNAL_END: &str = "\n";
pub(super) const PROGRESS_FINAL_LINE: &str = "\r %s %s %s %s %s\n";
pub(super) const PROGRESS_NAME: &str = "%s: ";
pub(super) const PROGRESS_PERCENT_FIELD: &str = "%s, ";
pub(super) const PROGRESS_FIELD: &str = ", %s";
pub(super) const PROGRESS_END: &str = "\n";
pub(super) const LIST_XZ_ONLY: &str =
"--list works only on .xz files (--format=xz or --format=auto)";
pub(super) const LIST_LZMAINFO: &str = "Try 'lzmainfo' with .lzma files.";
pub(super) const LIST_STDIN: &str = "--list does not support reading from standard input";
pub(super) const LIST_EMPTY: &str = "%s: File is empty";
pub(super) const LIST_TOO_SMALL: &str = "%s: Too small to be a valid .xz file";
pub(super) const LIST_TOTALS_TOO_LARGE: &str =
"Error: The total compressed or uncompressed size of the files is too large";
pub(super) const COLON_STRS: [&str; 10] = [
"Streams:",
"Blocks:",
"Compressed size:",
"Uncompressed size:",
"Ratio:",
"Check:",
"Stream Padding:",
"Memory needed:",
"Sizes in headers:",
"Number of files:",
];
pub(super) const HEADINGS: [(&str, usize); 16] = [
("Stream", 6),
("Block", 9),
("Blocks", 9),
("CompOffset", 15),
("UncompOffset", 15),
("CompSize", 15),
("UncompSize", 15),
("TotalSize", 15),
("Ratio", 5),
("Check", 10),
("CheckVal", 1),
("Padding", 7),
("Header", 5),
("Flags", 2),
("MemUsage", 7 + 4),
("Filters", 1),
];
pub(super) const CHECK_NAMES: [&str; 16] = [
"None",
"CRC32",
"Unknown-2",
"Unknown-3",
"CRC64",
"Unknown-5",
"Unknown-6",
"Unknown-7",
"Unknown-8",
"Unknown-9",
"SHA-256",
"Unknown-11",
"Unknown-12",
"Unknown-13",
"Unknown-14",
"Unknown-15",
];
pub(super) const CHECK_SEP: &str = ",";
pub(super) const CHECK_SEP_SPACE: &str = ", ";
pub(super) const NO_VALUE: &str = "---";
pub(super) const BASIC_HEADINGS: &str =
"Strms Blocks Compressed Uncompressed Ratio Check Filename\n";
pub(super) const BASIC_ROW: &str = "%s %s %s %s %s %s %s\n";
pub(super) const BASIC_TOTALS_LINE: &str =
"-------------------------------------------------------------------------------\n";
pub(super) const BASIC_TOTALS: &str = "%s %s %s %s %s %s %s files\n";
pub(super) const ADV_ROW: &str = " %s %s\n";
pub(super) const ADV_ROW_MIB: &str = " %s %s MiB\n";
pub(super) const ADV_MIN_VERSION: &str = " Minimum XZ Utils version: %s\n";
pub(super) const YES: &str = "Yes";
pub(super) const NO: &str = "No";
pub(super) const ADV_STREAMS_HEADINGS: &str = " %s\n %s %s %s %s %s %s %s %s %s\n";
pub(super) const ADV_STREAM_ROW: &str = " %s %s %s %s %s %s %s %s %s\n";
pub(super) const ADV_BLOCKS_HEADINGS: &str = " %s\n %s %s %s %s %s %s %s %s";
pub(super) const ADV_BLOCKS_HEADINGS_DEBUG: &str = " %s %s %s %s %s %s";
pub(super) const ADV_BLOCK_ROW: &str = " %s %s %s %s %s %s %s %s";
pub(super) const ADV_BLOCK_ROW_DEBUG: &str = " %s %s %s %s %s MiB %s";
pub(super) const NEWLINE: &str = "\n";
pub(super) const ADV_TOTALS: &str = "\nTotals:\n";
pub(super) const VERSION: &str = "%s.%s.%s%s";
pub(super) const VERSION_ALPHA: &str = "alpha";
pub(super) const VERSION_BETA: &str = "beta";
pub(super) const NICESTR_UNITS: [&str; 5] = ["B", "KiB", "MiB", "GiB", "TiB"];
pub(super) const NICESTR: &str = "%s %s";
pub(super) const NICESTR_BYTES: &str = " (%s B)";
pub(super) const ROBOT_NAME: &str = "name\t%s\n";
pub(super) const ROBOT_FILE: &str = "file\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n";
pub(super) const ROBOT_STREAM: &str = "stream\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n";
pub(super) const ROBOT_BLOCK: &str = "block\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s";
pub(super) const ROBOT_BLOCK_DEBUG: &str = "\t%s\t%s\t%s\t%s\t%s\t%s";
pub(super) const ROBOT_SUMMARY: &str = "summary\t%s\t%s\t%s\n";
pub(super) const ROBOT_TOTALS: &str = "totals\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s";
pub(super) const ROBOT_TOTALS_DEBUG: &str = "\t%s\t%s\t%s";
pub(super) const ROBOT_YES: &str = "yes";
pub(super) const ROBOT_NO: &str = "no";