xref: /plan9-contrib/sys/src/libmp/port/mptoi.c (revision dc5a79c1208f0704eeb474acc990728f8b4854f5)
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 Colombier itomp(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 Colombier mptoi(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