diff --git a/bin/fex b/bin/fex index 59ec24f..26bcefd 100755 Binary files a/bin/fex and b/bin/fex differ diff --git a/obj/fex.o b/obj/fex.o index 4846d01..cf8ef0f 100644 Binary files a/obj/fex.o and b/obj/fex.o differ diff --git a/obj/sanity.o b/obj/sanity.o index 9f386d5..6d6737f 100644 Binary files a/obj/sanity.o and b/obj/sanity.o differ diff --git a/src/fex.c b/src/fex.c index 212f66d..f6fc774 100644 --- a/src/fex.c +++ b/src/fex.c @@ -11,13 +11,23 @@ #include "config.h" #include "debug.h" +enum Flags { + FLAG_INSTALL = 1 << 0, + FLAG_UPDATE = 1 << 1, + FLAG_SOURCE = 1 << 2, + FLAG_UNINSTALL = 1 << 3, + FLAG_LIST = 1 << 4, + FLAG_SEARCH = 1 << 5, + FLAG_FORCE = 1 << 6, + FLAG_UPGRADE = 1 << 7, +}; void help() { nprint("E", "Usage: fex (OPT) (PACKAGES)"); } int main(int argc, char** argv) { - int fIns = 0, fUpd = 0, fSrc = 0, fUin = 0, fLis = 0, fSer = 0, fVer = 0, fFrc = 0, fUpg = 0; + unsigned short flags = 0; char* packages[argc - 1]; int pkgCount = 0; if (argc < 2) { @@ -25,38 +35,33 @@ int main(int argc, char** argv) { return 1; } - - for(int i = 1; i < argc; i++) { if(argv[i][0] == '-') { for(int j = 1; argv[i][j] != '\0'; j++) { switch(argv[i][j]) { - case 'i': // install - fIns = 1; + case 'i': // install, 0 + flags |= FLAG_INSTALL; break; - case 'u': // update - fUpd = 1; + case 'u': // update, 1 + flags |= FLAG_UPDATE; break; - case 'S': // source - fSrc = 1; + case 'S': // source, 2 + flags |= FLAG_SOURCE; break; - case 'r': // remove - fUin = 1; + case 'r': // remove, 3 + flags |= FLAG_UNINSTALL; break; - case 'l': // list - fLis = 1; + case 'l': // list, 4 + flags |= FLAG_LIST; break; - case 's': // search - fSer = 1; + case 's': // search, 5 + flags |= FLAG_SEARCH; break; - case 'v': // verbose - fVer = 1; + case 'f': // force, 6 + flags |= FLAG_FORCE; break; - case 'f': // force - fFrc = 1; - break; - case 'c': // upgrade; don't ask why I'm using 'c' - fUpg = 1; + case 'c': // upgrade; don't ask why I'm using 'c', 7 + flags |= FLAG_UPGRADE; break; default: nprint("E", "Flag '%c' is unknown.", argv[i][j]); @@ -72,12 +77,15 @@ int main(int argc, char** argv) { #ifdef debugEnabled DEBUG_PRINT("sysSanity: %d", sysSanity); - const char* flagNames[] = {"Install", "Update", "Source", "Remove", "List", "Search","Verbose", "Force", "Upgrade"}; - int* flagValues[] = {&fIns, &fUpd, &fSrc, &fUin, &fLis, &fSer, &fVer, &fFrc, &fUpg}; - int flagCount = sizeof(flagNames) / sizeof(flagNames[0]); // This should match the number of flags - - for(int i = 0; i < flagCount; i++) { - nprint("D", "Flag %s: %d", flagNames[i], *flagValues[i]); + unsigned int flag_values[] = {0b00000001, 0b00000010, 0b00000100, 0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b10000000}; + char* flag_names[] = {"Install", "Update", "Source", "Uninstall", "List", "Search", "Force", "Upgrade"}; + int num_flags = sizeof(flag_values) / sizeof(flag_values[0]); + for(int i = 0; i < num_flags; i++) { + if (flags & flag_values[i]) { + nprint("D", "%s flag is set.", flag_names[i]); + } else { + nprint("D", "%s flag is not set.", flag_names[i]); + } } for(int i = 0; i < pkgCount; i++) { nprint("D", "Package %d: %s", i, packages[i]);