summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzachir <zachir@librem.one>2025-07-13 19:17:24 -0500
committerzachir <zachir@librem.one>2025-07-13 19:17:24 -0500
commit9aec5af465fe17a4d624588d553258848d435dc0 (patch)
treef461a1d6ecdd1e7af93dee597fb858294064d26f
parentb0244316361e479230c3cbe4981110facfe136af (diff)
Remove ArgType; use bitmask for args
-rw-r--r--src/main.zig80
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;