180ee5cbfSDavid du Colombier #include "os.h" 280ee5cbfSDavid du Colombier #include <mp.h> 380ee5cbfSDavid du Colombier #include "dat.h" 480ee5cbfSDavid du Colombier 580ee5cbfSDavid du Colombier /* 680ee5cbfSDavid du Colombier * this code assumes that mpdigit is at least as 780ee5cbfSDavid du Colombier * big as an int. 880ee5cbfSDavid du Colombier */ 980ee5cbfSDavid du Colombier 1080ee5cbfSDavid du Colombier mpint* itomp(int i,mpint * b)1180ee5cbfSDavid du Colombieritomp(int i, mpint *b) 1280ee5cbfSDavid du Colombier { 1380ee5cbfSDavid du Colombier if(b == nil) 1480ee5cbfSDavid du Colombier b = mpnew(0); 1580ee5cbfSDavid du Colombier mpassign(mpzero, b); 1680ee5cbfSDavid du Colombier if(i != 0) 1780ee5cbfSDavid du Colombier b->top = 1; 1880ee5cbfSDavid du Colombier if(i < 0){ 1980ee5cbfSDavid du Colombier b->sign = -1; 2080ee5cbfSDavid du Colombier *b->p = -i; 2180ee5cbfSDavid du Colombier } else 2280ee5cbfSDavid du Colombier *b->p = i; 2380ee5cbfSDavid du Colombier return b; 2480ee5cbfSDavid du Colombier } 2580ee5cbfSDavid du Colombier 2680ee5cbfSDavid du Colombier int mptoi(mpint * b)2780ee5cbfSDavid du Colombiermptoi(mpint *b) 2880ee5cbfSDavid du Colombier { 2980ee5cbfSDavid du Colombier uint x; 3080ee5cbfSDavid du Colombier 31*dc5a79c1SDavid du Colombier if(b->top==0) 32*dc5a79c1SDavid du Colombier return 0; 3380ee5cbfSDavid du Colombier x = *b->p; 3480ee5cbfSDavid du Colombier if(b->sign > 0){ 3580ee5cbfSDavid du Colombier if(b->top > 1 || (x > MAXINT)) 3680ee5cbfSDavid du Colombier x = (int)MAXINT; 3780ee5cbfSDavid du Colombier else 3880ee5cbfSDavid du Colombier x = (int)x; 3980ee5cbfSDavid du Colombier } else { 4080ee5cbfSDavid du Colombier if(b->top > 1 || x > MAXINT+1) 4180ee5cbfSDavid du Colombier x = (int)MININT; 4280ee5cbfSDavid du Colombier else 4380ee5cbfSDavid du Colombier x = -(int)x; 4480ee5cbfSDavid du Colombier } 4580ee5cbfSDavid du Colombier return x; 4680ee5cbfSDavid du Colombier } 47