From fe6c36e18042603bb096d3685fe3988e32331ebf Mon Sep 17 00:00:00 2001 From: haturatu Date: Tue, 10 Dec 2024 21:28:04 +0900 Subject: first commit --- AWK/b91dec.awk | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100755 AWK/b91dec.awk (limited to 'AWK/b91dec.awk') diff --git a/AWK/b91dec.awk b/AWK/b91dec.awk new file mode 100755 index 0000000..8a15fc3 --- /dev/null +++ b/AWK/b91dec.awk @@ -0,0 +1,48 @@ +#!/usr/bin/awk -f + +# basE91 decoder +# Copyright (c) 2000-2006 Joachim Henke +# http://base91.sourceforge.net/ + +BEGIN { + b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&()*+,./:;<=>?@[]^_`{|}~\"" + for (i = 0; i < 256; ++i) { + --d[sprintf("%c", i)] + } + for (i = 0; i < 91; ++i) { + d[substr(b, i + 1, 1)] = i + } + b = 0 + n = 0 + v = -1 +} + +{ + l = length($0) + for (i = 1; i <= l; ++i) { + c = d[substr($0, i, 1)] + if (c < 0) { + continue + } + if (v < 0) { + v = c + } else { + v += c * 91 + b += v * 2 ^ n + n += v % 8192 > 88 ? 13 : 14 + do { + b -= c = b % 256 + printf "%c", c + b /= 256 + n -= 8 + } while (n > 7) + v = -1 + } + } +} + +END { + if (v + 1) { + printf "%c", b + v * 2 ^ n + } +} -- cgit v1.2.3