Blame


1 b2cfc4e2 2003-09-30 devnull #include <lib9.h>
2 b2cfc4e2 2003-09-30 devnull static char t16e[] = "0123456789ABCDEF";
3 b2cfc4e2 2003-09-30 devnull
4 b2cfc4e2 2003-09-30 devnull int
5 b2cfc4e2 2003-09-30 devnull dec16(uchar *out, int lim, char *in, int n)
6 b2cfc4e2 2003-09-30 devnull {
7 b2cfc4e2 2003-09-30 devnull int c, w = 0, i = 0;
8 b2cfc4e2 2003-09-30 devnull uchar *start = out;
9 b2cfc4e2 2003-09-30 devnull uchar *eout = out + lim;
10 b2cfc4e2 2003-09-30 devnull
11 b2cfc4e2 2003-09-30 devnull while(n-- > 0){
12 b2cfc4e2 2003-09-30 devnull c = *in++;
13 b2cfc4e2 2003-09-30 devnull if('0' <= c && c <= '9')
14 b2cfc4e2 2003-09-30 devnull c = c - '0';
15 b2cfc4e2 2003-09-30 devnull else if('a' <= c && c <= 'z')
16 b2cfc4e2 2003-09-30 devnull c = c - 'a' + 10;
17 b2cfc4e2 2003-09-30 devnull else if('A' <= c && c <= 'Z')
18 b2cfc4e2 2003-09-30 devnull c = c - 'A' + 10;
19 b2cfc4e2 2003-09-30 devnull else
20 b2cfc4e2 2003-09-30 devnull continue;
21 b2cfc4e2 2003-09-30 devnull w = (w<<4) + c;
22 b2cfc4e2 2003-09-30 devnull i++;
23 b2cfc4e2 2003-09-30 devnull if(i == 2){
24 b2cfc4e2 2003-09-30 devnull if(out + 1 > eout)
25 b2cfc4e2 2003-09-30 devnull goto exhausted;
26 b2cfc4e2 2003-09-30 devnull *out++ = w;
27 b2cfc4e2 2003-09-30 devnull w = 0;
28 b2cfc4e2 2003-09-30 devnull i = 0;
29 b2cfc4e2 2003-09-30 devnull }
30 b2cfc4e2 2003-09-30 devnull }
31 b2cfc4e2 2003-09-30 devnull exhausted:
32 b2cfc4e2 2003-09-30 devnull return out - start;
33 b2cfc4e2 2003-09-30 devnull }
34 b2cfc4e2 2003-09-30 devnull
35 b2cfc4e2 2003-09-30 devnull int
36 b2cfc4e2 2003-09-30 devnull enc16(char *out, int lim, uchar *in, int n)
37 b2cfc4e2 2003-09-30 devnull {
38 b2cfc4e2 2003-09-30 devnull uint c;
39 b2cfc4e2 2003-09-30 devnull char *eout = out + lim;
40 b2cfc4e2 2003-09-30 devnull char *start = out;
41 b2cfc4e2 2003-09-30 devnull
42 b2cfc4e2 2003-09-30 devnull while(n-- > 0){
43 b2cfc4e2 2003-09-30 devnull c = *in++;
44 b2cfc4e2 2003-09-30 devnull if(out + 2 >= eout)
45 b2cfc4e2 2003-09-30 devnull goto exhausted;
46 b2cfc4e2 2003-09-30 devnull *out++ = t16e[c>>4];
47 b2cfc4e2 2003-09-30 devnull *out++ = t16e[c&0xf];
48 b2cfc4e2 2003-09-30 devnull }
49 b2cfc4e2 2003-09-30 devnull exhausted:
50 b2cfc4e2 2003-09-30 devnull *out = 0;
51 b2cfc4e2 2003-09-30 devnull return out - start;
52 b2cfc4e2 2003-09-30 devnull }