diff options
Diffstat (limited to 'dev/base64/base64rev-gen.c')
-rw-r--r-- | dev/base64/base64rev-gen.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/dev/base64/base64rev-gen.c b/dev/base64/base64rev-gen.c new file mode 100644 index 0000000..faffc87 --- /dev/null +++ b/dev/base64/base64rev-gen.c @@ -0,0 +1,70 @@ +/* + * base64rev generator + * + * Copyright 2009-2010 Krzysztof Piotr Oledzki <ole@ans.pl> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + * + */ + +#include <stdio.h> + +const char base64tab[65]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +char base64rev[128]; + +#define base '#' /* arbitrary chosen base value */ +#define B64MAX 64 +#define B64PADV B64MAX + +int main() { + char *p, c; + int i, min = 255, max = 0; + + for (i = 0; i < sizeof(base64rev); i++) + base64rev[i] = base; + + for (i = 0; i < B64MAX; i++) { + c = base64tab[i]; + + if (min > c) + min = c; + + if (max < c) + max = c; + } + + for (i = 0; i < B64MAX; i++) { + c = base64tab[i]; + + if (base+i+1 > 127) { + printf("Wrong base value @%d\n", i); + return 1; + } + + base64rev[c - min] = base+i+1; + } + + base64rev['=' - min] = base + B64PADV; + + base64rev[max - min + 1] = '\0'; + + printf("#define B64BASE '%c'\n", base); + printf("#define B64CMIN '%c'\n", min); + printf("#define B64CMAX '%c'\n", max); + printf("#define B64PADV %u\n", B64PADV); + + p = base64rev; + printf("const char base64rev[]=\""); + for (p = base64rev; *p; p++) { + if (*p == '\\') + printf("\\%c", *p); + else + printf("%c", *p); + } + printf("\"\n"); + + return 0; +} |