2 * $Id: decode-b.c,v 3.0 1996/02/27 10:19:23 morioka Exp $
4 * modified by Kenji Rikitake <kenji@reseau.toyonaka.osaka.jp>
5 * (based on Henry Spencer's un64 shell script)
6 * and David Masterson <davidm@prism.kla.com>
12 int get_base64_char_value(int chr)
14 if( ('A' <= chr) && (chr <= 'Z') ){
17 else if( ('a' <= chr) && (chr <= 'z') ){
18 return chr - 'a' + 26;
20 else if( ('0' <= chr) && (chr <= '9') ){
21 return chr - '0' + 52;
39 unsigned int v1, v2, v3, v4, o1, o2, o3;
41 while (fgets(str, 128, rfp)) {
42 for (sp = str; *sp; ) {
43 if ((*sp == '\r') || (*sp == '\n')) break;
44 v1 = get_base64_char_value(*sp++);
45 v2 = get_base64_char_value(*sp++);
46 if ((v3 = get_base64_char_value(*sp++)) >= 0) {
47 if ((v4 = get_base64_char_value(*sp++)) >= 0) {
48 o1 = (v1 << 2) + (v2 >> 4);
49 o2 = ((v2 & 0x0f) << 4) + (v3 >> 2);
50 o3 = ((v3 & 0x03) << 6) + v4;
56 o1 = (v1 << 2) + (v2 >> 4);
57 o2 = ((v2 & 0x0f) << 4) + (v3 >> 2);
64 o1 = (v1 << 2) + (v2 >> 4);