mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 21:27:35 +00:00
Userland+Terminal: Port to new CArgsParser API
While at it, also add some niceties and fix some things.
This commit is contained in:
parent
9276582535
commit
f983dfe319
22 changed files with 392 additions and 653 deletions
|
@ -35,56 +35,29 @@ int head(const String& filename, bool print_filename, int line_count, int char_c
|
|||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
CArgsParser args_parser("head");
|
||||
|
||||
args_parser.add_arg("n", "lines", "Number of lines to print (default 10)");
|
||||
args_parser.add_arg("c", "characters", "Number of characters to print");
|
||||
args_parser.add_arg("q", "Never print filenames");
|
||||
args_parser.add_arg("v", "Always print filenames");
|
||||
|
||||
CArgsParserResult args = args_parser.parse(argc, argv);
|
||||
|
||||
int line_count = 0;
|
||||
if (args.is_present("n")) {
|
||||
line_count = strtol(args.get("n").characters(), NULL, 10);
|
||||
if (errno) {
|
||||
args_parser.print_usage();
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!line_count) {
|
||||
args_parser.print_usage();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
int char_count = 0;
|
||||
if (args.is_present("c")) {
|
||||
char_count = strtol(args.get("c").characters(), NULL, 10);
|
||||
if (errno) {
|
||||
args_parser.print_usage();
|
||||
return -1;
|
||||
}
|
||||
bool never_print_filenames = false;
|
||||
bool always_print_filenames = false;
|
||||
Vector<const char*> files;
|
||||
|
||||
if (!char_count) {
|
||||
args_parser.print_usage();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
CArgsParser args_parser;
|
||||
args_parser.add_option(line_count, "Number of lines to print (default 10)", "lines", 'n', "number");
|
||||
args_parser.add_option(char_count, "Number of characters to print", "characters", 'c', "number");
|
||||
args_parser.add_option(never_print_filenames, "Never print file names", "quiet", 'q');
|
||||
args_parser.add_option(always_print_filenames, "Always print file names", "verbose", 'v');
|
||||
args_parser.add_positional_argument(files, "File to process", "file", CArgsParser::Required::No);
|
||||
args_parser.parse(argc, argv);
|
||||
|
||||
if (line_count == 0 && char_count == 0) {
|
||||
line_count = 10;
|
||||
}
|
||||
|
||||
Vector<String> files = args.get_single_values();
|
||||
|
||||
bool print_filenames = files.size() > 1;
|
||||
|
||||
if (args.is_present("v")) {
|
||||
if (always_print_filenames)
|
||||
print_filenames = true;
|
||||
} else if (args.is_present("q")) {
|
||||
else if (never_print_filenames)
|
||||
print_filenames = false;
|
||||
}
|
||||
|
||||
if (files.is_empty()) {
|
||||
return head("", print_filenames, line_count, char_count);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue