From b59699746fd3afe2390aadbeaa2249a7b84d5cb8 Mon Sep 17 00:00:00 2001 From: EliteTK Date: Sat, 8 Nov 2014 18:19:05 +0000 Subject: Wrote license header prefixing tool and added some new code. --- lskdecode.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 lskdecode.c (limited to 'lskdecode.c') diff --git a/lskdecode.c b/lskdecode.c new file mode 100644 index 0000000..96ab023 --- /dev/null +++ b/lskdecode.c @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2014 Tomasz Kramkowski + * + * This program is free software. It is licensed under version 3 of the + * GNU General Public License. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see [http://www.gnu.org/licenses/]. + */ +#include +#include +#include + +int main(int argc, char **argv) +{ + unsigned char subst[4][256]; + unsigned char lastval[] = {249, 20, 174, 199}; + + /* Generate substitution tables. */ + for (int i = 0; i < 256; i++) { + for (int ii = 0; ii < 4; ii++) + subst[ii][i] = lastval[ii]; + + if (i % 8 == 7) lastval[0] -= 13; + else lastval[0] += i & 1 ? 3 : -1; + + if (i % 8 == 7) lastval[1] += 9; + else if ((i + 4) % 8 == 7) lastval[1] -=7; + else lastval[1] += 1; + + if (i % 16 == 15) lastval[2] += 29; + else lastval[2] += i & 1 ? -3 : 1; + + if (i % 8 == 7) lastval[3] += 15; + else lastval[3] -= 1; + } + + /* decode */ + int c; + int pos = argc > 1 ? strtol(argv[1], NULL, 10) : 0; + while ((c = getchar()) != EOF) { + for (int i = 0; i < 256; i++) + if (subst[pos%4][i] == c) { + if (isascii(i)) putchar(i); + break; + } + pos++; + } + + return 0; +} -- cgit v1.2.3-54-g00ecf