xref: /plan9/sys/src/libmp/port/mptoui.c (revision 53293322fe00aa40b36db08693d8966ace41141d)
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*
uitomp(uint i,mpint * b)1180ee5cbfSDavid du Colombier uitomp(uint 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 	*b->p = i;
1980ee5cbfSDavid du Colombier 	return b;
2080ee5cbfSDavid du Colombier }
2180ee5cbfSDavid du Colombier 
2280ee5cbfSDavid du Colombier uint
mptoui(mpint * b)2380ee5cbfSDavid du Colombier mptoui(mpint *b)
2480ee5cbfSDavid du Colombier {
2580ee5cbfSDavid du Colombier 	uint x;
2680ee5cbfSDavid du Colombier 
2780ee5cbfSDavid du Colombier 	x = *b->p;
28*53293322SDavid du Colombier 	if(b->sign < 0)
2980ee5cbfSDavid du Colombier 		x = 0;
30*53293322SDavid du Colombier 	else if(b->top > 1 || (sizeof(mpdigit) > sizeof(uint) && x > MAXUINT))
3180ee5cbfSDavid du Colombier 		x =  MAXUINT;
3280ee5cbfSDavid du Colombier 	return x;
3380ee5cbfSDavid du Colombier }
34