aboutsummaryrefslogtreecommitdiff
path: root/snag/main.c
diff options
context:
space:
mode:
authorJack Jamison <jackqjamison@gmail.com>2026-07-21 11:18:21 -0400
committerJack Jamison <jackqjamison@gmail.com>2026-07-21 11:18:21 -0400
commitdf1e0af03db13339add48a9bc6350eedb30775ff (patch)
tree42ab1dacb3cedec4f298fd627fa77d152ea8198e /snag/main.c
parent8b82a228ef754778caec172f5882e80ae57f536b (diff)
argument parsing and subcommands
Diffstat (limited to 'snag/main.c')
-rw-r--r--snag/main.c38
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;
}