/* * base64rev generator * * Copyright 2009-2010 Krzysztof Piotr Oledzki * * 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 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; }