blob: 8a15fc3ea9af96565da18fd7be70add0be658895 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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
}
}
|