rewrite help text

This commit is contained in:
Martin Michelsen
2023-07-06 21:58:34 -07:00
parent 97daebdf83
commit 01d0203de6
+53 -24
View File
@@ -89,28 +89,42 @@ When ACTION is given, newserv will do things other than running the server.\n\
Some actions accept input and/or output filenames; see the descriptions below\n\ Some actions accept input and/or output filenames; see the descriptions below\n\
for details. If INPUT-FILENAME is missing or is '-', newserv reads from stdin.\n\ for details. If INPUT-FILENAME is missing or is '-', newserv reads from stdin.\n\
If OUTPUT-FILENAME is missing and the input is not from stdin, newserv writes\n\ If OUTPUT-FILENAME is missing and the input is not from stdin, newserv writes\n\
the output to INPUT-FILENAME.dec; if OUTPUT-FILENAME is '-', newserv writes the\n\ the output to INPUT-FILENAME.dec or a similarly-named file; if OUTPUT-FILENAME\n\
output to stdout. If stdout is a terminal, data written there is formatted in a\n\ is '-', newserv writes the output to stdout. If stdout is a terminal and the\n\
hex/ASCII view; otherwise, raw (binary) data is written there.\n\ output is not text, the data written to stdout is formatted in a hex/ASCII\n\
view; in any other case, the raw output is written to stdout, which (for most\n\
actions) may include arbitrary binary data.\n\
\n\ \n\
The actions are:\n\ The actions are:\n\
help\n\ help\n\
You\'re reading it now.\n\ You\'re reading it now.\n\
compress-prs [INPUT-FILENAME [OUTPUT-FILENAME]]\n\ compress-prs [INPUT-FILENAME [OUTPUT-FILENAME]]\n\
decompress-prs [INPUT-FILENAME [OUTPUT-FILENAME]]\n\
compress-pr2 [INPUT-FILENAME [OUTPUT-FILENAME]]\n\ compress-pr2 [INPUT-FILENAME [OUTPUT-FILENAME]]\n\
decompress-pr2 [INPUT-FILENAME [OUTPUT-FILENAME]]\n\
compress-bc0 [INPUT-FILENAME [OUTPUT-FILENAME]]\n\ compress-bc0 [INPUT-FILENAME [OUTPUT-FILENAME]]\n\
Compress data using the PRS, PR2, or BC0 algorithms. By default, the\n\
heuristic-based compressor is used, which gives a good balance between\n\
memory usage, CPU usage, and output size. For PRS and PR2, this compressor\n\
can be tuned with the --compression-level=N option, which specifies how\n\
aggressive the compressor should be in searching for literal sequences. The\n\
default level is 0; a higher value generally means slower compression and a\n\
smaller output size. If the compression level is -1, the input data is\n\
encoded in a PRS-compatible format but not actually compressed, resulting\n\
in valid PRS data which is about 9/8 the size of the input.\n\
There is also a compressor which produces the absolute smallest output\n\
size, but uses much more memory and CPU time. To use this compressor, use\n\
the --optimal option.\n\
decompress-prs [INPUT-FILENAME [OUTPUT-FILENAME]]\n\
decompress-pr2 [INPUT-FILENAME [OUTPUT-FILENAME]]\n\
decompress-bc0 [INPUT-FILENAME [OUTPUT-FILENAME]]\n\ decompress-bc0 [INPUT-FILENAME [OUTPUT-FILENAME]]\n\
Compress or decompress data using the PRS, PR2, or BC0 algorithms. When\n\ Decompress data compressed using the PRS, PR2, or BC0 algorithms.\n\
compressing with PRS or PR2, the --compression-level=N option (default 1)\n\
specifies how aggressive the compressor should be in searching for literal\n\
sequences. A higher value generally means slower compression and a smaller\n\
output size. If 0 is given, the data is PRS-encoded but not actually\n\
compressed, resulting in valid PRS data which is larger than the input.\n\
prs-size [INPUT-FILENAME]\n\ prs-size [INPUT-FILENAME]\n\
Compute the decompressed size of the PRS-compressed input data, but don\'t\n\ Compute the decompressed size of the PRS-compressed input data, but don\'t\n\
write the decompressed data anywhere.\n\ write the decompressed data anywhere.\n\
disassemble-prs [INPUT-FILENAME]\n\
disassemble-bc0 [INPUT-FILENAME]\n\
Write a textual representation of the commands contained in a PRS or BC0\n\
command stream. The output is written to stdout. This is mainly useful for\n\
debugging the compressors and decompressors themselves.\n\
encrypt-data [INPUT-FILENAME [OUTPUT-FILENAME] [OPTIONS...]]\n\ encrypt-data [INPUT-FILENAME [OUTPUT-FILENAME] [OPTIONS...]]\n\
decrypt-data [INPUT-FILENAME [OUTPUT-FILENAME] [OPTIONS...]]\n\ decrypt-data [INPUT-FILENAME [OUTPUT-FILENAME] [OPTIONS...]]\n\
Encrypt or decrypt data using PSO\'s standard network protocol encryption.\n\ Encrypt or decrypt data using PSO\'s standard network protocol encryption.\n\
@@ -122,23 +136,26 @@ The actions are:\n\
For non-BB ciphers, the --big-endian option applies the cipher masks as\n\ For non-BB ciphers, the --big-endian option applies the cipher masks as\n\
big-endian instead of little-endian, which is necessary for some GameCube\n\ big-endian instead of little-endian, which is necessary for some GameCube\n\
file formats.\n\ file formats.\n\
encrypt-trivial-data [--seed=BASIS] [INPUT-FILENAME [OUTPUT-FILENAME]]\n\ encrypt-trivial-data --seed=BASIS [INPUT-FILENAME [OUTPUT-FILENAME]]\n\
decrypt-trivial-data [--seed=BASIS] [INPUT-FILENAME [OUTPUT-FILENAME]]\n\ decrypt-trivial-data [--seed=BASIS] [INPUT-FILENAME [OUTPUT-FILENAME]]\n\
Encrypt or decrypt data using the Episode 3 trivial algorithm. If BASIS is\n\ Encrypt or decrypt data using the Episode 3 trivial algorithm. When\n\
given, it should be specified as one hex byte. If BASIS is not given,\n\ encrypting, --seed=BASIS is required; BASIS should be a single byte\n\
newserv will try all possible values and return the one that results in the\n\ specified in hexadecimal. When decrypting, BASIS should be specified the\n\
greatest number of zero bytes in the output.\n\ same way, but if it is not given, newserv will try all possible basis\n\
values and return the one that results in the greatest number of zero bytes\n\
in the output.\n\
encrypt-gci-save CRYPT-OPTION INPUT-FILENAME [OUTPUT-FILENAME]\n\ encrypt-gci-save CRYPT-OPTION INPUT-FILENAME [OUTPUT-FILENAME]\n\
decrypt-gci-save CRYPT-OPTION INPUT-FILENAME [OUTPUT-FILENAME]\n\ decrypt-gci-save CRYPT-OPTION INPUT-FILENAME [OUTPUT-FILENAME]\n\
Encrypt or decrypt a character or Guild Card file. If encrypting, the\n\ Encrypt or decrypt a character or Guild Card file in GCI format. If\n\
checksum is also recomputed and stored in the encrypted file. CRYPT-OPTION\n\ encrypting, the checksum is also recomputed and stored in the encrypted\n\
is required; it can be either --sys=SYSTEM-FILENAME or --seed=ROUND1-SEED\n\ file. CRYPT-OPTION is required; it can be either --sys=SYSTEM-FILENAME\n\
(specified in hex).\n\ (specifying the name of the corresponding PSO_SYSTEM .gci file) or\n\
--seed=ROUND1-SEED (specified as a 32-bit hexadecimal number).\n\
salvage-gci INPUT-FILENAME [--round2] [CRYPT-OPTION] [--bytes=SIZE]\n\ salvage-gci INPUT-FILENAME [--round2] [CRYPT-OPTION] [--bytes=SIZE]\n\
Attempt to find either the round-1 or round-2 decryption seed for a\n\ Attempt to find either the round-1 or round-2 decryption seed for a\n\
corrupted GCI file. If --round2 is given, then CRYPT-OPTION must be given\n\ corrupted GCI file. If --round2 is given, then CRYPT-OPTION must be given\n\
(and should specify either a valid system file or the round1 seed).\n\ (and should specify either a valid system file or the round1 seed).\n\
find-decryption-seed <OPTIONS...>\n\ find-decryption-seed OPTIONS...\n\
Perform a brute-force search for a decryption seed of the given data. The\n\ Perform a brute-force search for a decryption seed of the given data. The\n\
ciphertext is specified with the --encrypted=DATA option and the expected\n\ ciphertext is specified with the --encrypted=DATA option and the expected\n\
plaintext is specified with the --decrypted=DATA option. The plaintext may\n\ plaintext is specified with the --decrypted=DATA option. The plaintext may\n\
@@ -146,7 +163,7 @@ The actions are:\n\
operator), but overall it must be the same length as the ciphertext. By\n\ operator), but overall it must be the same length as the ciphertext. By\n\
default, this option uses PSO V3 encryption, but this can be overridden\n\ default, this option uses PSO V3 encryption, but this can be overridden\n\
with --pc. (BB encryption seeds are too long to be searched for with this\n\ with --pc. (BB encryption seeds are too long to be searched for with this\n\
function.) By default, the number of worker threads is equal the the number\n\ function.) By default, the number of worker threads is equal to the number\n\
of CPU cores in the system, but this can be overridden with the\n\ of CPU cores in the system, but this can be overridden with the\n\
--threads=NUM-THREADS option.\n\ --threads=NUM-THREADS option.\n\
decode-sjis [INPUT-FILENAME [OUTPUT-FILENAME]]\n\ decode-sjis [INPUT-FILENAME [OUTPUT-FILENAME]]\n\
@@ -167,7 +184,7 @@ The actions are:\n\
GCI or VMS file, use the --seed=SEED option and give the serial number (as\n\ GCI or VMS file, use the --seed=SEED option and give the serial number (as\n\
a hex-encoded 32-bit integer). If you don\'t know the serial number,\n\ a hex-encoded 32-bit integer). If you don\'t know the serial number,\n\
newserv will find it via a brute-force search, which will take a long time.\n\ newserv will find it via a brute-force search, which will take a long time.\n\
disassemble-bin [INPUT-FILENAME [OUTPUT-FILENAME]]\n\ disassemble-quest-script [INPUT-FILENAME [OUTPUT-FILENAME]]\n\
Disassemble the input quest script (.bin file) into a text representation\n\ Disassemble the input quest script (.bin file) into a text representation\n\
of the commands and metadata it contains.\n\ of the commands and metadata it contains.\n\
cat-client ADDR:PORT\n\ cat-client ADDR:PORT\n\
@@ -185,6 +202,10 @@ The actions are:\n\
Print the name of the item given by DATA (in hex). DATA must not contain\n\ Print the name of the item given by DATA (in hex). DATA must not contain\n\
spaces. If DATA is 20 bytes, newserv assumes it contains an unused item ID\n\ spaces. If DATA is 20 bytes, newserv assumes it contains an unused item ID\n\
field; if it is fewer bytes, up to 16 bytes are used.\n\ field; if it is fewer bytes, up to 16 bytes are used.\n\
encode-item DESCRIPTION\n\
Encode the description of an item into its corresponding ItemData (hex)\n\
representation. If DESCRIPTION contains spaces, it must be quoted, such as\n\
\"L&K14 COMBAT +10 0/10/15/0/35\".\n\
replay-log [INPUT-FILENAME] [OPTIONS...]\n\ replay-log [INPUT-FILENAME] [OPTIONS...]\n\
Replay a terminal log as if it were a client session. input-filename may be\n\ Replay a terminal log as if it were a client session. input-filename may be\n\
specified for this option. This is used for regression testing, to make\n\ specified for this option. This is used for regression testing, to make\n\
@@ -197,6 +218,14 @@ The actions are:\n\
is treated as a prefix which is prepended to the filename of each file\n\ is treated as a prefix which is prepended to the filename of each file\n\
contained in the archive. If --big-endian is given, the archive header is\n\ contained in the archive. If --big-endian is given, the archive header is\n\
read in GameCube format; otherwise it is read in PC/BB format.\n\ read in GameCube format; otherwise it is read in PC/BB format.\n\
format-rare-item-set [--json] [INPUT-FILENAME]\n\
Print the contents of a rare item table in a human-readable format. If\n\
--json is given, the input is parsed as a JSON rare item set (see\n\
system/blueburst/rare-table.json for an example of this format). If --json\n\
is not given, the input is parsed as a REL rare item set.\n\
convert-itemrt-rel-to-json [INPUT-FILENAME [OUTPUT-FILENAME]]\n\
Convert a REL rare table to a JSON rare item set. The resulting JSON has\n\
the same structure as system/blueburst/rare-table.json.\n\
\n\ \n\
A few options apply to multiple modes described above:\n\ A few options apply to multiple modes described above:\n\
--parse-data\n\ --parse-data\n\
@@ -464,7 +493,7 @@ int main(int argc, char** argv) {
} else if (!strcmp(argv[x], "decode-qst")) { } else if (!strcmp(argv[x], "decode-qst")) {
behavior = Behavior::DECODE_QUEST_FILE; behavior = Behavior::DECODE_QUEST_FILE;
quest_file_type = Quest::FileFormat::QST; quest_file_type = Quest::FileFormat::QST;
} else if (!strcmp(argv[x], "disassemble-bin")) { } else if (!strcmp(argv[x], "disassemble-quest-script")) {
behavior = Behavior::DISASSEMBLE_QUEST_SCRIPT; behavior = Behavior::DISASSEMBLE_QUEST_SCRIPT;
} else if (!strcmp(argv[x], "cat-client")) { } else if (!strcmp(argv[x], "cat-client")) {
behavior = Behavior::CAT_CLIENT; behavior = Behavior::CAT_CLIENT;