From 156c89a9781e8e5e3580e48646adc36b4d8cee85 Mon Sep 17 00:00:00 2001 From: dacctal Date: Fri, 29 May 2026 09:58:16 +0000 Subject: created separate parse loop to prioritize flags --- src/cla_parse.c | 145 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 76 insertions(+), 69 deletions(-) diff --git a/src/cla_parse.c b/src/cla_parse.c index 7620d97..9c62e07 100644 --- a/src/cla_parse.c +++ b/src/cla_parse.c @@ -19,78 +19,85 @@ #include "resolve_deps.h" -#define COMMAND(large, small, code) \ - if (strcmp(argv[i], large) == 0 || strcmp(argv[i], small) == 0) \ - code +#define COMMAND(large, small, code) \ + if (strcmp(argv[i], large) == 0 || strcmp(argv[i], small) == 0) \ + code -#define NOT_ENOUGH_ARGS(arg, next) \ - printf("%sNot enough arguments! Try: `pkgit %s [%s]`\n", print_error, arg, next) +#define NOT_ENOUGH_ARGS(arg, next) \ + printf("%sNot enough arguments! Try: `pkgit %s [%s]`\n", print_error, arg, \ + next) void cla_parse(int argc, char **argv) { - Pkg pkg = {0}; + Pkg pkg = {0}; - if (!argv[1]) { - help(); - return; - } + if (!argv[1]) { + help(); + return; + } - for (int i = 1; i < argc; i++) { - COMMAND("--link", "-l", { is_symlink_install = true; }); - COMMAND("--quiet", "-q", { is_verbose = false; }); - COMMAND("add", "a", { - if (argv[i + 1]) { - add_repo(argv[i + 1], name_from_url(argv[i + 1])); - } else { - NOT_ENOUGH_ARGS(argv[i], "url"); - } - }); - COMMAND("build", "b", { - if (argv[i + 1]) { - if (argv[i + 2]) { - pkg = create_pkg(argv[i + 1], argv[i + 2]); - build(pkg); - } else if (!is_verbose) { - pkg = create_pkg(argv[i + 1], "quiet"); - build(pkg); - } else { - pkg = create_pkg(argv[i + 1], "default"); - build(pkg); - } - } else { - pkg = create_pkg(".", "default"); - build(pkg); - } - }); - COMMAND("install", "i", { - if (argv[i + 1]) { - if (argv[i + 2]) { - pkg = create_pkg(argv[i + 1], argv[i + 2]); - install_pkg(pkg); - } else if (!is_verbose) { - pkg = create_pkg(argv[i + 1], "quiet"); - install_pkg(pkg); - } else { - pkg = create_pkg(argv[i + 1], "default"); - install_pkg(pkg); - } - } else { - NOT_ENOUGH_ARGS(argv[i], "url/pkg"); - } - }); - COMMAND("remove", "r", { - if (argv[i + 1]) { - pkg = create_pkg(argv[i + 1], "default"); - remove_pkg(pkg); - } else { - NOT_ENOUGH_ARGS(argv[i], "url/pkg"); - } - }); - COMMAND("update", "u", { update_all(); }); - COMMAND("declare", "d", { declare(); }); - COMMAND("list", "l", { list_pkgs(); }); - COMMAND("find", "f", { find(argv[i + 1]); }); - COMMAND("--version", "-v", { printf("%s\n", version); }); - COMMAND("--help", "-h", { help(); }); - COMMAND("--check", "-c", { resolve_deps(); return; }); - } + for (int i = 1; i < argc; i++) { + COMMAND("--link", "-l", { is_symlink_install = true; }); + COMMAND("--quiet", "-q", { is_verbose = false; }); + } + + for (int i = 1; i < argc; i++) { + COMMAND("add", "a", { + if (argv[i + 1]) { + add_repo(argv[i + 1], name_from_url(argv[i + 1])); + } else { + NOT_ENOUGH_ARGS(argv[i], "url"); + } + }); + COMMAND("build", "b", { + if (argv[i + 1]) { + if (argv[i + 2]) { + pkg = create_pkg(argv[i + 1], argv[i + 2]); + build(pkg); + } else if (!is_verbose) { + pkg = create_pkg(argv[i + 1], "quiet"); + build(pkg); + } else { + pkg = create_pkg(argv[i + 1], "default"); + build(pkg); + } + } else { + pkg = create_pkg(".", "default"); + build(pkg); + } + }); + COMMAND("install", "i", { + if (argv[i + 1]) { + if (argv[i + 2]) { + pkg = create_pkg(argv[i + 1], argv[i + 2]); + install_pkg(pkg); + } else if (!is_verbose) { + pkg = create_pkg(argv[i + 1], "quiet"); + install_pkg(pkg); + } else { + pkg = create_pkg(argv[i + 1], "default"); + install_pkg(pkg); + } + } else { + NOT_ENOUGH_ARGS(argv[i], "url/pkg"); + } + }); + COMMAND("remove", "r", { + if (argv[i + 1]) { + pkg = create_pkg(argv[i + 1], "default"); + remove_pkg(pkg); + } else { + NOT_ENOUGH_ARGS(argv[i], "url/pkg"); + } + }); + COMMAND("update", "u", { update_all(); }); + COMMAND("declare", "d", { declare(); }); + COMMAND("list", "l", { list_pkgs(); }); + COMMAND("find", "f", { find(argv[i + 1]); }); + COMMAND("--version", "-v", { printf("%s\n", version); }); + COMMAND("--help", "-h", { help(); }); + COMMAND("--check", "-c", { + resolve_deps(); + return; + }); + } } \ No newline at end of file -- cgit v1.2.3