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