comparison old/simple_render/test/LoadTexture/base64_de.cpp @ 507:735f76483bb2

Reorganization..
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 12 Oct 2009 09:39:35 +0900
parents TaskManager/Test/simple_render/test/LoadTexture/base64_de.cpp@312b535f121e
children
comparison
equal deleted inserted replaced
506:1d4a8a86f26b 507:735f76483bb2
1 #include <stdio.h>
2 //#include <iostream>
3 #include <fstream>
4 using namespace std;
5
6 class tagTT
7 {
8 public:
9 unsigned char buf;
10 char *cont;
11 int nlen;
12 };
13
14
15 unsigned char CtoNum(int c)
16 {
17 if (c >= 'A' && c <= 'Z') return c-'A';
18 if (c >= 'a' && c <= 'z') return (c - 'a')+26;
19 if (c >= '0' && c <= '9') return (c - '0')+52;
20 if (c == '+') return 62;
21 if (c == '/') return 63;
22 return 0;
23 }
24
25
26 int GetNumB64(tagTT &pWork)
27 {
28 char wr;
29 unsigned char w;
30 unsigned char r;
31
32 wr = *pWork.cont;
33 pWork.cont++;
34 if (wr=='\0' || wr=='=')
35 return -1;
36
37 while(wr=='\n' || wr=='\t')
38 {
39 wr = *pWork.cont;
40 pWork.cont++;
41 }
42
43 w = CtoNum(wr);
44 if (pWork.nlen == 0)
45 {
46 unsigned char w2;
47
48 wr = *pWork.cont;
49 pWork.cont++;
50 if (wr!='\0' && wr!='=')
51 w2 = CtoNum(wr);
52 else
53 w2 = 0;
54
55 pWork.buf = w << 2;
56 w = w2;
57 pWork.nlen = 6;
58 }
59
60 pWork.nlen -= 2;
61
62 r = pWork.buf | (w >> pWork.nlen);
63
64 pWork.buf = (w << (8 - pWork.nlen));
65 return r;
66 }
67
68
69 //int decode(char *cont, char *file_name)
70 int decode(char *cont, FILE *outfile)
71 {
72 int rw;
73 tagTT work;
74
75 //ofstream outfile(file_name);
76
77 work.buf = 0;
78 work.nlen = 0;
79 work.cont = cont;
80
81 rw = GetNumB64(work);
82 while ( rw != -1 )
83 {
84 //outfile << (char)rw;
85 putc(rw, outfile);
86 rw = GetNumB64(work);
87 }
88
89 //outfile.close();
90
91 return 0;
92 }