diff options
| author | Jack Jamison <jackqjamison@gmail.com> | 2026-07-21 11:18:21 -0400 |
|---|---|---|
| committer | Jack Jamison <jackqjamison@gmail.com> | 2026-07-21 11:18:21 -0400 |
| commit | df1e0af03db13339add48a9bc6350eedb30775ff (patch) | |
| tree | 42ab1dacb3cedec4f298fd627fa77d152ea8198e /snag/main.c | |
| parent | 8b82a228ef754778caec172f5882e80ae57f536b (diff) | |
argument parsing and subcommands
Diffstat (limited to 'snag/main.c')
| -rw-r--r-- | snag/main.c | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/snag/main.c b/snag/main.c index ff7ac64..c6abcb1 100644 --- a/snag/main.c +++ b/snag/main.c @@ -1,23 +1,43 @@ #include <stdio.h> +#include "util.h" +#include "libargs/args.h" #include "pkg_db.h" -void subcmd_install(char* pkgs[], size_t count); +int cmd_install(char* cmd_name, ArgParser* parser); int main(int argc, char* argv[]) { - // run install subcommand with each argument as a package - subcmd_install(argv+1, argc-1); + // create argument parser + ArgParser* parser = ap_new_parser(); + if (parser == NULL) error_out("failed to initialize cli parsing"); + ap_set_helptext(parser, "Usage: snag <command>"); + ap_set_version(parser, "0.0"); + + // add install subcommand + ArgParser* install = ap_new_cmd(parser, "install inst i"); + if (install == NULL) error_out("failed to initialize install cli subcommand"); + ap_set_helptext(install, "Usage: snag install [packages]"); + ap_set_cmd_callback(install, cmd_install); + + // parse the arguments (automatically executes subcommands) + if (!ap_parse(parser, argc, argv)) error_out("failed to parse arguments"); + + // if no subcommand was specified, parse and execute install as the root command + if (!ap_found_cmd(parser)) { + if (!ap_parse(install, argc, argv)) error_out("failed to parse arguments"); + cmd_install("install", install); + } + ap_free(parser); return 0; } -void subcmd_install(char* pkgs[], size_t count) { - - // install each package listed - for (int i = 0; i < count; ++i) { +int cmd_install(char* cmd_name, ArgParser* parser) { - char* pkgid = pkgs[i]; + // install each package specified + for (int i = 0; i < ap_count_args(parser); i++) { + char* pkgid = ap_get_arg_at_index(parser, i); // load package description package_info_t info; @@ -26,4 +46,6 @@ void subcmd_install(char* pkgs[], size_t count) { run_package_install(&info); } } + + return 0; } |
