|  | #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; | 
|  | } |