| #include "os.h" |
| #include <mp.h> |
| #include "dat.h" |
| |
| /* |
| * this code assumes that mpdigit is at least as |
| * big as an int. |
| */ |
| |
| mpint* |
| itomp(int i, mpint *b) |
| { |
| if(b == nil) |
| b = mpnew(0); |
| mpassign(mpzero, b); |
| if(i != 0) |
| b->top = 1; |
| if(i < 0){ |
| b->sign = -1; |
| *b->p = -i; |
| } else |
| *b->p = i; |
| return b; |
| } |
| |
| int |
| mptoi(mpint *b) |
| { |
| uint x; |
| |
| if(b->top==0) |
| return 0; |
| x = *b->p; |
| if(b->sign > 0){ |
| if(b->top > 1 || (x > MAXINT)) |
| x = (int)MAXINT; |
| else |
| x = (int)x; |
| } else { |
| if(b->top > 1 || x > MAXINT+1) |
| x = (int)MININT; |
| else |
| x = -(int)x; |
| } |
| return x; |
| } |