diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2013-11-23 01:05:33 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2013-11-23 01:05:33 +0100 |
commit | 2f9ae0f8ac8610e13ced184847b57b87fe5db580 (patch) | |
tree | f9ad2223d518585a2cfe9ea1c73e1e37d07bf637 /sys/src/cmd/unix/drawterm/libmp/strtomp.c | |
parent | ea5797c0731203c09ec5fb7172e77eab2750f1a9 (diff) |
removing (outdated) drawterm
drawterm is much better maintained by russ cox,
so removing this outdated copy.
for a more recent version, go to:
http://swtch.com/drawterm/
Diffstat (limited to 'sys/src/cmd/unix/drawterm/libmp/strtomp.c')
-rw-r--r-- | sys/src/cmd/unix/drawterm/libmp/strtomp.c | 205 |
1 files changed, 0 insertions, 205 deletions
diff --git a/sys/src/cmd/unix/drawterm/libmp/strtomp.c b/sys/src/cmd/unix/drawterm/libmp/strtomp.c deleted file mode 100644 index bc1de226c..000000000 --- a/sys/src/cmd/unix/drawterm/libmp/strtomp.c +++ /dev/null @@ -1,205 +0,0 @@ -#include "os.h" -#include <mp.h> -#include <libsec.h> -#include "dat.h" - -static struct { - int inited; - - uchar t64[256]; - uchar t32[256]; - uchar t16[256]; - uchar t10[256]; -} tab; - -enum { - INVAL= 255 -}; - -static char set64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -static char set32[] = "23456789abcdefghijkmnpqrstuvwxyz"; -static char set16[] = "0123456789ABCDEF0123456789abcdef"; -static char set10[] = "0123456789"; - -static void -init(void) -{ - char *p; - - memset(tab.t64, INVAL, sizeof(tab.t64)); - memset(tab.t32, INVAL, sizeof(tab.t32)); - memset(tab.t16, INVAL, sizeof(tab.t16)); - memset(tab.t10, INVAL, sizeof(tab.t10)); - - for(p = set64; *p; p++) - tab.t64[(uchar)*p] = p-set64; - for(p = set32; *p; p++) - tab.t32[(uchar)*p] = p-set32; - for(p = set16; *p; p++) - tab.t16[(uchar)*p] = (p-set16)%16; - for(p = set10; *p; p++) - tab.t10[(uchar)*p] = (p-set10); - - tab.inited = 1; -} - -static char* -from16(char *a, mpint *b) -{ - char *p, *next; - int i; - mpdigit x; - - b->top = 0; - for(p = a; *p; p++) - if(tab.t16[(uchar)*p] == INVAL) - break; - mpbits(b, (p-a)*4); - b->top = 0; - next = p; - while(p > a){ - x = 0; - for(i = 0; i < Dbits; i += 4){ - if(p <= a) - break; - x |= tab.t16[(uchar)*--p]<<i; - } - b->p[b->top++] = x; - } - return next; -} - -static ulong mppow10[] = { - 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 -}; - -static char* -from10(char *a, mpint *b) -{ - ulong x, y; - mpint *pow, *r; - int i; - - pow = mpnew(0); - r = mpnew(0); - - b->top = 0; - for(;;){ - // do a billion at a time in native arithmetic - x = 0; - for(i = 0; i < 9; i++){ - y = tab.t10[(uchar)*a]; - if(y == INVAL) - break; - a++; - x *= 10; - x += y; - } - if(i == 0) - break; - - // accumulate into mpint - uitomp(mppow10[i], pow); - uitomp(x, r); - mpmul(b, pow, b); - mpadd(b, r, b); - if(i != 9) - break; - } - mpfree(pow); - mpfree(r); - return a; -} - -static char* -from64(char *a, mpint *b) -{ - char *buf = a; - uchar *p; - int n, m; - - for(; tab.t64[(uchar)*a] != INVAL; a++) - ; - n = a-buf; - mpbits(b, n*6); - p = malloc(n); - if(p == nil) - return a; - m = dec64(p, n, buf, n); - betomp(p, m, b); - free(p); - return a; -} - -static char* -from32(char *a, mpint *b) -{ - char *buf = a; - uchar *p; - int n, m; - - for(; tab.t64[(uchar)*a] != INVAL; a++) - ; - n = a-buf; - mpbits(b, n*5); - p = malloc(n); - if(p == nil) - return a; - m = dec32(p, n, buf, n); - betomp(p, m, b); - free(p); - return a; -} - -mpint* -strtomp(char *a, char **pp, int base, mpint *b) -{ - int sign; - char *e; - - if(b == nil) - b = mpnew(0); - - if(tab.inited == 0) - init(); - - while(*a==' ' || *a=='\t') - a++; - - sign = 1; - for(;; a++){ - switch(*a){ - case '-': - sign *= -1; - continue; - } - break; - } - - switch(base){ - case 10: - e = from10(a, b); - break; - default: - case 16: - e = from16(a, b); - break; - case 32: - e = from32(a, b); - break; - case 64: - e = from64(a, b); - break; - } - - // if no characters parsed, there wasn't a number to convert - if(e == a) - return nil; - - mpnorm(b); - b->sign = sign; - if(pp != nil) - *pp = e; - - return b; -} |