00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00037 #include "basex.h"
00038
00039 #ifdef BASE16_LOOKUP_TABLE
00040 #ifdef BASE16_LOOKUP_LARGE
00041
00042 unsigned char _bx_hexdig_hi[256]={
00043 '0', '0', '0', '0', '0', '0', '0', '0',
00044 '0', '0', '0', '0', '0', '0', '0', '0',
00045 '1', '1', '1', '1', '1', '1', '1', '1',
00046 '1', '1', '1', '1', '1', '1', '1', '1',
00047 '2', '2', '2', '2', '2', '2', '2', '2',
00048 '2', '2', '2', '2', '2', '2', '2', '2',
00049 '3', '3', '3', '3', '3', '3', '3', '3',
00050 '3', '3', '3', '3', '3', '3', '3', '3',
00051 '4', '4', '4', '4', '4', '4', '4', '4',
00052 '4', '4', '4', '4', '4', '4', '4', '4',
00053 '5', '5', '5', '5', '5', '5', '5', '5',
00054 '5', '5', '5', '5', '5', '5', '5', '5',
00055 '6', '6', '6', '6', '6', '6', '6', '6',
00056 '6', '6', '6', '6', '6', '6', '6', '6',
00057 '7', '7', '7', '7', '7', '7', '7', '7',
00058 '7', '7', '7', '7', '7', '7', '7', '7',
00059 '8', '8', '8', '8', '8', '8', '8', '8',
00060 '8', '8', '8', '8', '8', '8', '8', '8',
00061 '9', '9', '9', '9', '9', '9', '9', '9',
00062 '9', '9', '9', '9', '9', '9', '9', '9',
00063 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
00064 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
00065 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B',
00066 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B',
00067 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C',
00068 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C',
00069 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D',
00070 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D',
00071 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E',
00072 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E',
00073 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F',
00074 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F'
00075 };
00076
00077 unsigned char _bx_hexdig_low[256]={
00078 '0', '1', '2', '3', '4', '5', '6', '7',
00079 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
00080 '0', '1', '2', '3', '4', '5', '6', '7',
00081 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
00082 '0', '1', '2', '3', '4', '5', '6', '7',
00083 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
00084 '0', '1', '2', '3', '4', '5', '6', '7',
00085 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
00086 '0', '1', '2', '3', '4', '5', '6', '7',
00087 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
00088 '0', '1', '2', '3', '4', '5', '6', '7',
00089 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
00090 '0', '1', '2', '3', '4', '5', '6', '7',
00091 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
00092 '0', '1', '2', '3', '4', '5', '6', '7',
00093 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
00094 '0', '1', '2', '3', '4', '5', '6', '7',
00095 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
00096 '0', '1', '2', '3', '4', '5', '6', '7',
00097 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
00098 '0', '1', '2', '3', '4', '5', '6', '7',
00099 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
00100 '0', '1', '2', '3', '4', '5', '6', '7',
00101 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
00102 '0', '1', '2', '3', '4', '5', '6', '7',
00103 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
00104 '0', '1', '2', '3', '4', '5', '6', '7',
00105 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
00106 '0', '1', '2', '3', '4', '5', '6', '7',
00107 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
00108 '0', '1', '2', '3', '4', '5', '6', '7',
00109 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
00110 };
00111
00112 unsigned char _bx_unhexdig256[256]={
00113 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00114 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00115 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00116 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00117 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x01,
00118 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0xff, 0xff,
00119 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
00120 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00121 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00122 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0b, 0x0c,
00123 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00124 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00125 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00126 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00127 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00128 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00129 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00130 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00131 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00132 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00133 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00134 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00135 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00136 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00137 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00138 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
00139
00140 #else
00141
00142 unsigned char _bx_hexdig[16+1]="0123456789ABCDEF";
00143
00144 unsigned char _bx_unhexdig32[32]={
00145 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
00146 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x0b, 0x0c,
00147 0x0d, 0x0e, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
00148 0xff };
00149
00150 #endif
00151 #endif
00152
00153 #ifdef BASE64_LOOKUP_TABLE
00154
00155 #ifdef BASE64_LOOKUP_LARGE
00156
00157
00158 unsigned char _bx_b64_first[256];
00159 unsigned char _bx_b64_second[4][256];
00160 unsigned char _bx_b64_third[4][256];
00161 unsigned char _bx_b64_fourth[256];
00162
00163 unsigned char _bx_ub64[256];
00164
00165 #elif defined BASE64_LOOKUP_8K
00166 unsigned short _bx_b64_12[4096];
00167 unsigned char _bx_ub64[256];
00168
00169 #else
00170
00171
00172 unsigned char _bx_b64[64+1]=
00173 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
00174
00175
00176 unsigned char _bx_ub64[0x54+1]={
00177 0x3e, 0xff, 0xff, 0xff, 0x3f,
00178 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d,
00179 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x01, 0x02,
00180 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c,
00181 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
00182 0x17, 0x18, 0x19, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1a,
00183 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24,
00184 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e,
00185 0x2f, 0x30, 0x31, 0x32, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff };
00186
00187 #endif
00188
00189 #endif
00190
00191 #define b64_enc_char(c) base64_enc_char(c)
00192 #define b64_dec_char(c) base64_dec_char(c)
00193
00194 int init_basex()
00195 {
00196 #ifdef BASE64_LOOKUP_TABLE
00197 #if defined BASE64_LOOKUP_LARGE || defined BASE64_LOOKUP_8K
00198 int r;
00199 #endif
00200 #ifdef BASE64_LOOKUP_LARGE
00201 int i;
00202
00203
00204 for (r=0; r<256; r++)
00205 _bx_b64_first[r]=b64_enc_char(((unsigned char)r)>>2);
00206 for(i=0; i<4; i++){
00207 for (r=0; r<256; r++)
00208 _bx_b64_second[i][r]=
00209 b64_enc_char((unsigned char)((i<<4)|(r>>4)));
00210 }
00211 for(i=0; i<4; i++){
00212 for (r=0; r<256; r++)
00213 _bx_b64_third[i][r]=
00214 b64_enc_char((unsigned char)(((r<<2)&0x3f)|i));
00215 }
00216 for (r=0; r<256; r++)
00217 _bx_b64_fourth[r]=b64_enc_char(((unsigned char)r&0x3f));
00218
00219
00220 for (r=0; r<256; r++)
00221 _bx_ub64[r]=b64_dec_char((unsigned char)r);
00222 #elif defined BASE64_LOOKUP_8K
00223 for (r=0; r< 4096; r++)
00224 #if defined __IS_LITTLE_ENDIAN
00225 _bx_b64_12[r]=b64_enc_char(r>>6)|(b64_enc_char(r&0x3f)<<8);
00226 #elif defined __IS_BIG_ENDIAN
00227 _bx_b64_12[r]=(b64_enc_char(r>>6)<<8)|b64_enc_char(r&0x3f);
00228 #else
00229 #error Neither __IS_LITTE_ENDIAN nor __IS_BIG_ENDIAN defined
00230 #endif
00231
00232 for (r=0; r<256; r++)
00233 _bx_ub64[r]=b64_dec_char((unsigned char)r);
00234 #endif
00235 #endif
00236 return 0;
00237 }