From ca60281d7c13f4231bafad26e26fbbd15fdb51a8 Mon Sep 17 00:00:00 2001 From: Caleb Denio Date: Sat, 31 May 2025 11:19:07 -0400 Subject: [PATCH] be able to read upside-down barcodes --- src/imb.zig | 24 +++++++++++++++++++++++- web/imb.wasm | Bin 10277 -> 11311 bytes 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/imb.zig b/src/imb.zig index 12e83be..b08502b 100644 --- a/src/imb.zig +++ b/src/imb.zig @@ -188,7 +188,29 @@ fn generateChecksum(data: [13]u8) u16 { return checksum; } -fn decode(bars: [65]BarType) Error!BarcodeResult { +fn flipBarcode(bars: [65]BarType) [65]BarType { + var flipped: [65]BarType = undefined; + + var i: u8 = 65; + + for (bars) |bar| { + i -= 1; + + flipped[i] = switch (bar) { + .ascending => .descending, + .descending => .ascending, + else => bar, + }; + } + + return flipped; +} + +pub fn decode(bars: [65]BarType) Error!BarcodeResult { + return tryDecode(bars) catch tryDecode(flipBarcode(bars)); +} + +fn tryDecode(bars: [65]BarType) Error!BarcodeResult { var characters = [_]u13{0} ** 10; for (bars, 0..) |bar, i| { diff --git a/web/imb.wasm b/web/imb.wasm index cba5bfee858f6d568481a25a8d063796f66cfa66..ab31d911e1b93509147e2cfb754b41e700041a93 100755 GIT binary patch delta 4061 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 B*K+^>