Compile using blc my-file-name.bl
and run ./out
.
#import "extra/argparse"
MyOptLevel :: enum {
DEBUG;
RELEASE_SMALL;
RELEASE_FAST;
}
// Some options we need.
MyArgs :: struct {
is_debug: bool;
worker_count: s32;
directory: string_view;
inputs: []string_view;
outputs: []string_view;
optimization: MyOptLevel;
}
main :: fn () s32 {
using argparse;
// Create and initialize new instance of argument parser.
parser: Parser;
init(&parser, "This is cool testing application parsing command-line arguments, enjoy!");
// Don't forget to terminate it!
defer terminate(&parser);
args: MyArgs;
// Set the executable name (used in help).
set_executable_name(&parser, command_line_arguments[0]);
// Add very basic usage information.
add_usage(&parser, "[options]");
// Register positional argument prefixes for input and output files.
add_positional(&parser, &args.inputs, "--input", "-i", "List of input files.");
add_positional(&parser, &args.outputs, "--output", "-o", "List of output files.");
// Register all other arguments.
add(&parser, &args.is_debug, "--debug", "-d", "Enable debug mode"); // Boolean flag.
add(&parser, &args.worker_count, "--worker-count", "", "Count of worker threads."); // Integer value.
add(&parser, &args.directory, "--dir", "", "Root directory path."); // String view (no need to be preallocated).
add(&parser, &args.optimization, "--opt", "", "Optimization level."); // Enumerator value.
// Parse all command line arguments here.
parsed_argument_count, parse_error :: parse(&parser, command_line_arguments);
if parse_error {
// Print error and show the help.
print_err(parse_error);
print_help(&parser);
return 1;
}
// Use the parsed options.
print("\nParsed arguments: %\n", parsed_argument_count);
print("%\n", args);
return 0;
}