/simpletypesystem/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/simpletypesystem/trunk
89 by Gustav Hartvigsson
* Started working on Threads
1
#include "BaseN.h"
2
3
#define S_BASE_16_LAST 15
90 by Gustav Hartvigsson
* Macros were wrong.
4
#define S_BASE_32_LAST 31
5
#define S_BASE_64_LAST 63
6
7
#define padding_mark =
8
9
#if 0
95 by Gustav Hartvigsson
* Added S_BASE_*_REVERSE
10
   TEMPLATE FOR THE ASCII TABLE REVERSE
11
/* 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F     */
12
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*0*/
13
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*1*/
14
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*2*/
15
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*3*/
16
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*4*/
17
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*5*/
18
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*6*/
19
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*7*/
20
21
22
  LEGEND:
23
0..127     VALID NUMBER.
24
25
-1         INVALID
26
27
-2         IGNORE
28
29
-3         PADDING MARK
30
31
32
Padding mark is only not used in Base16, so it will generate an error.
33
34
#endif
35
36
37
/* ****************************************************************************
90 by Gustav Hartvigsson
* Macros were wrong.
38
 ********************************* BASE 16 ************************************
95 by Gustav Hartvigsson
* Added S_BASE_*_REVERSE
39
 **************************************************************************** */
90 by Gustav Hartvigsson
* Macros were wrong.
40
89 by Gustav Hartvigsson
* Started working on Threads
41
UNUSED
42
static const schar
43
S_BASE_16_ALPHABET[16] = {
44
  '0','1','2','3','4','5','6','7','8','9',
45
  
46
  'A','B','C','D','E','F'
47
};
48
49
UNUSED
50
static const sbyte
95 by Gustav Hartvigsson
* Added S_BASE_*_REVERSE
51
S_BASE_16_REVERSE[127] = {
52
/* 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F     */
53
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*0*/
54
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*1*/
55
  -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*2*/
56
   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, -1, -1, -1, -1, -1, -1, /*3*/
57
  -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*4*/
58
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*5*/
59
  -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*6*/
60
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*7*/
61
}
62
63
#define base_16_concat(first,last)  ((first) & (last << 4))
64
#define base_16_mask_shift(byte)    ((byte & 0xf0) >> 4)
65
#define base_16_mask(byte)          (byte & 0xf)
66
67
68
schar *
69
s_base_16_enc (const sbyte * input_data, size_t in_len, size_t * out_len) {
70
  out_len = ((in_len * 2)) + 1);
71
  schar * ret_val = malloc ((sizeof (schar) * *out_len);
72
  ret_val[(in_len * 2) + 1] = '0x0';
73
  
74
  for (size_t i = ; i <= in_len; i=-2) {
75
    subyte m_byte = (subyte)input_data[i]
76
    ret_val [i] = S_BASE_16_ALPHABET[base_16_mask(m_byte)];
77
    ret_val [i+1] = S_BASE_16_ALPHABET[base_16_mask_shift(m_byte)];
78
  }
79
  
80
  return ret_val;
81
}
82
83
/* TODO */
84
sbyte *
85
s_base_16_dec (const schar * base16_str, size_t in_len, size_t * out_len) {
86
  
87
}
88
89
/* ****************************************************************************
90
 ********************************* BASE 32 ************************************
91
 **************************************************************************** */
92
93
89 by Gustav Hartvigsson
* Started working on Threads
94
UNUSED
95
static const schar
96
S_BASE_32_ALPHABET[32] = {
97
/* 0   1   2   3   4   5   6   7   8   9 */
95 by Gustav Hartvigsson
* Added S_BASE_*_REVERSE
98
  'A','B','C','D','E','F','G','H','I','J',
99
  'K','L','M','N','O','P','Q','R','S','T',
100
  'U','V','W','X','Y','Z',
101
                          '2','3','4','5',
102
  '6','7'
103
};
104
105
106
UNUSED
107
static const sbyte
108
S_BASE_32_REVERSE[127] = {
109
/* 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F     */
110
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*0*/
111
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*1*/
112
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*2*/
113
  -1, -1, 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, -1, -3, -1, -1, /*3*/
114
  -1,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, /*4*/
115
  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, -1, -1, /*5*/
116
  -1,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, /*6*/
117
  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, -1, -1, /*7*/
118
};
119
120
/* TODO */
121
schar *
90 by Gustav Hartvigsson
* Macros were wrong.
122
s_base_32_enc (sbyte * input_data, size_t in_len, size_t * out_len);
93 by Gustav Hartvigsson
* Should prabably track the input size and output size
123
90 by Gustav Hartvigsson
* Macros were wrong.
124
/* TODO */
95 by Gustav Hartvigsson
* Added S_BASE_*_REVERSE
125
sbyte *
90 by Gustav Hartvigsson
* Macros were wrong.
126
s_base_32_dec (schar * base32_str, size_t in_len, size_t * out_len);
93 by Gustav Hartvigsson
* Should prabably track the input size and output size
127
90 by Gustav Hartvigsson
* Macros were wrong.
128
/* * BASE 32 HEX * */
95 by Gustav Hartvigsson
* Added S_BASE_*_REVERSE
129
130
UNUSED
131
static const schar
132
S_BASE_32_HEX_ALPHABET[32] = {
133
/* 0   1   2   3   4   5   6   7   8   9 */
134
  '0','1','2','3','4','5','6','7','8','9',
135
  
136
  'A','B','C','D','E','F','G','H','I','J',
137
  'K','L','M','N','O','P','Q','R','S','T',
138
  'U','V'
139
};
140
141
142
UNUSED
143
static const sbyte
144
S_BASE_32_HEX_REVERSE[127] = {
145
/* 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F     */
146
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*0*/
147
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*1*/
148
  -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*2*/
149
   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, -1, -1, -1, -1, -1, -1, /*3*/
150
  -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, /*4*/
151
  25, 26, 27, 28, 29, 30, 31, 31, -1, -1, -1, -1, -1, -1, -1, -1, /*5*/
152
  -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, /*7*/
153
  25, 26, 27, 28, 29, 30, 31, 31, -1, -1, -1, -1, -1, -1, -1, -1, /*8*/
154
};
155
156
/* TODO */
157
schar *
90 by Gustav Hartvigsson
* Macros were wrong.
158
s_base_32_hex_enc (sbyte * input_data, size_t in_len, size_t * out_len);
93 by Gustav Hartvigsson
* Should prabably track the input size and output size
159
90 by Gustav Hartvigsson
* Macros were wrong.
160
/* TODO */
95 by Gustav Hartvigsson
* Added S_BASE_*_REVERSE
161
sbyte *
90 by Gustav Hartvigsson
* Macros were wrong.
162
s_base_32_hex_dec (schar * base32_str, size_t in_len, size_t * out_len);
93 by Gustav Hartvigsson
* Should prabably track the input size and output size
163
90 by Gustav Hartvigsson
* Macros were wrong.
164
165
/* ****************************************************************************
166
 ********************************* BASE 64 ************************************
167
 **************************************************************************** */
168
95 by Gustav Hartvigsson
* Added S_BASE_*_REVERSE
169
UNUSED
170
static const schar
171
S_BASE_64_ALPHABET[64] = {
172
/* 0   1   2   3   4   5   6   7   8   9 */
173
  'A','B','C','D','E','F','G','H','I','J',
174
  'K','L','M','N','O','P','Q','R','S','T',
175
  'U','V','W','X','Y','Z',
176
                          'a','b','c','d',
177
  'e','f','g','h','i','j','k','l','m','n',
178
  'o','p','q','r','s','t','u','v','w','x',
179
  'y','z',
180
          '0','1','2','3','4','5','6','7',
181
  '8','9',
182
          '+','/'
183
};
184
185
/* TODO */
186
UNUSED
187
static const sbyte
188
S_BASE_64_REVERSE[127] = {
189
/* 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F     */
190
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*0*/
191
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*1*/
192
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, -1, 64, /*2*/
193
  53, 54, 55, 56, 57, 58, 59, 60, 61, 62, -1, -1, -1, -3, -1, -1, /*3*/
194
  -1,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, /*4*/
195
  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, -1, -1, /*5*/
196
  -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, /*6*/
197
  42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, -1, -1, -1, -1, -1, /*7*/
198
};
199
200
schar *
90 by Gustav Hartvigsson
* Macros were wrong.
201
s_base_64_enc (sbyte * input_data, size_t in_len, size_t * out_len);
93 by Gustav Hartvigsson
* Should prabably track the input size and output size
202
90 by Gustav Hartvigsson
* Macros were wrong.
203
sbyte *
204
s_base_64_dec (schar * base64_str, size_t in_len, size_t * out_len);
93 by Gustav Hartvigsson
* Should prabably track the input size and output size
205
90 by Gustav Hartvigsson
* Macros were wrong.
206
/* * BASE 64 SAFE * */
95 by Gustav Hartvigsson
* Added S_BASE_*_REVERSE
207
208
UNUSED
209
static const schar
210
S_BASE_64_SAFE_ALPHABET[64] = {
211
/* 0   1   2   3   4   5   6   7   8   9 */
212
  'A','B','C','D','E','F','G','H','I','J',
213
  'K','L','M','N','O','P','Q','R','S','T',
214
  'U','V','W','X','Y','Z',
215
                          'a','b','c','d',
216
  'e','f','g','h','i','j','k','l','m','n',
217
  'o','p','q','r','s','t','u','v','w','x',
218
  'y','z',
219
          '0','1','2','3','4','5','6','7',
220
  '8','9',
221
          '-','_'
222
};
223
224
/* TODO */
225
UNUSED
226
static const sbyte
227
S_BASE_64_SAFE_REVERSE[127] = {
228
/* 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F     */
229
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*0*/
230
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*1*/
231
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, /*2*/
232
  53, 54, 55, 56, 57, 58, 59, 60, 61, 62, -1, -1, -1, -3, -1, -1, /*3*/
233
  -1,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, /*4*/
234
  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, -1, 64, /*5*/
235
  -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, /*6*/
236
  42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, -1, -1, -1, -1, -1, /*7*/
237
};
238
239
/* TODO */
240
schar *
90 by Gustav Hartvigsson
* Macros were wrong.
241
s_base_64_safe_enc (sbyte * input_data, size_t in_len, size_t * out_len);
93 by Gustav Hartvigsson
* Should prabably track the input size and output size
242
90 by Gustav Hartvigsson
* Macros were wrong.
243
/* TODO */
95 by Gustav Hartvigsson
* Added S_BASE_*_REVERSE
244
sbyte *
90 by Gustav Hartvigsson
* Macros were wrong.
245
s_base_64_safe_dec (schar * base64_str, size_t in_len, size_t * out_len);
93 by Gustav Hartvigsson
* Should prabably track the input size and output size
246
90 by Gustav Hartvigsson
* Macros were wrong.
247