45 lines
		
	
	
		
			553 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			553 B
		
	
	
	
		
			C
		
	
	
	
	
	
#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;
 | 
						|
 | 
						|
	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;
 | 
						|
}
 |