diff options
author | zachir <zachir@librem.one> | 2025-07-13 19:17:24 -0500 |
---|---|---|
committer | zachir <zachir@librem.one> | 2025-07-13 19:17:24 -0500 |
commit | 9aec5af465fe17a4d624588d553258848d435dc0 (patch) | |
tree | f461a1d6ecdd1e7af93dee597fb858294064d26f | |
parent | b0244316361e479230c3cbe4981110facfe136af (diff) |
Remove ArgType; use bitmask for args
-rw-r--r-- | src/main.zig | 80 |
1 files changed, 33 insertions, 47 deletions
diff --git a/src/main.zig b/src/main.zig index c902202..c721988 100644 --- a/src/main.zig +++ b/src/main.zig @@ -6,18 +6,6 @@ const parseInt = std.fmt.parseInt; const print = std.debug.print; const GeneralPurposeAllocator = std.heap.GeneralPurposeAllocator; -/// There are 4 args: help, version, copyright, and quiet -/// ArgType also contains longarg, which is how zeven checks if the arg -/// will be -- -const ArgType = enum { - help, - version, - copyright, - quiet, - longarg, - badarg, -}; - const VERSION = "1.0.0"; const LICENSE = "MIT"; @@ -43,7 +31,7 @@ pub fn main() anyerror!u8 { defer _ = gpa.deinit(); var arg_it = try argsWithAllocator(allocator); defer arg_it.deinit(); - var f_arg: ?ArgType = null; + var f_arg: u5 = 0b0; var f_int: i32 = undefined; // This is whether or not to print the results var quiet: bool = false; @@ -52,51 +40,49 @@ pub fn main() anyerror!u8 { // This skips the name of the binary _ = arg_it.next(); while (arg_it.next()) |arg| { - f_arg = null; if (arg[0] == '-') { // It's an arg! - f_arg = switch (arg[1]) { - 'h' => ArgType.help, - 'v' => ArgType.version, - 'c' => ArgType.copyright, - 'q' => ArgType.quiet, - '-' => ArgType.longarg, - '0'...'9' => null, - else => ArgType.badarg, - }; - } - if (f_arg) |usearg| { - var realarg = usearg; - if (usearg == ArgType.longarg) { + if (arg[1] == '-') { if (eql(u8, arg, "--help")) { - realarg = ArgType.help; + f_arg = 0b1; } else if (eql(u8, arg, "--copyright")) { - realarg = ArgType.copyright; + f_arg = 0b10; } else if (eql(u8, arg, "--version")) { - realarg = ArgType.version; + f_arg = 0b100; } else if (eql(u8, arg, "--quiet")) { - realarg = ArgType.quiet; + f_arg = 0b1000; } else { - realarg = ArgType.badarg; + f_arg = 0b11111; } + } else { + f_arg = switch (arg[1]) { + 'h' => f_arg | 0b1, + 'c' => f_arg | 0b10, + 'v' => f_arg | 0b100, + 'q' => f_arg | 0b1000, + '0'...'9' => 0, + else => f_arg | 0b11111, + }; } - _ = switch (realarg) { - ArgType.quiet => { - quiet = true; - continue; - }, - ArgType.help => { + if (f_arg > 0) { + if (f_arg ^ 0b11111 == 0) { + return print_arg(255); + } + if (f_arg ^ 0b1 == 0) { return print_arg(0); - }, - ArgType.copyright => { + } + if (f_arg ^ 0b10 == 0) { return print_arg(1); - }, - ArgType.version => { + } + if (f_arg ^ 0b100 == 0) { return print_arg(2); - }, - else => { - return print_arg(255); - }, - }; + } + if (f_arg ^ 0b1000 == 0) { + quiet = true; + } + } else { + value = true; + f_int = parseInt(i32, arg, 10) catch |err| return err; + } } else { // Not an arg! value = true; f_int = parseInt(i32, arg, 10) catch |err| return err; |