aboutsummaryrefslogtreecommitdiff
path: root/snag/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'snag/src/main.c')
-rw-r--r--snag/src/main.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/snag/src/main.c b/snag/src/main.c
new file mode 100644
index 0000000..0429fda
--- /dev/null
+++ b/snag/src/main.c
@@ -0,0 +1,52 @@
+#include <stdio.h>
+
+#include "util.h"
+#include "libargs/args.h"
+#include "pkg_db.h"
+
+int cmd_install(char* cmd_name, ArgParser* parser);
+
+int main(int argc, char* argv[]) {
+
+ // create argument parser
+ ArgParser* parser = ap_new_parser();
+ if (parser == NULL) die("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) die("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)) die("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)) die("failed to parse arguments");
+ cmd_install("install", install);
+ }
+
+ ap_free(parser);
+ return 0;
+}
+
+int cmd_install(char* cmd_name, ArgParser* parser) {
+
+ // install each package specified
+ for (int i = 0; i < ap_count_args(parser); i++) {
+ if (i != 0) printf("\n");
+
+ // load package description
+ char* pkgid = ap_get_arg_at_index(parser, i);
+ package_info_t info;
+ if (load_package_info(pkgid, &info)) {
+ printf("Installing %s - %s\n", info.attrs.name, info.attrs.desc);
+ run_package_install(&info);
+ }
+ }
+
+ return 0;
+}