xref: /plan9/sys/src/cmd/unix/drawterm/libmp/mptoi.c (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
1 #include "os.h"
2 #include <mp.h>
3 #include "dat.h"
4 
5 /*
6  *  this code assumes that mpdigit is at least as
7  *  big as an int.
8  */
9 
10 mpint*
itomp(int i,mpint * b)11 itomp(int i, mpint *b)
12 {
13 	if(b == nil)
14 		b = mpnew(0);
15 	mpassign(mpzero, b);
16 	if(i != 0)
17 		b->top = 1;
18 	if(i < 0){
19 		b->sign = -1;
20 		*b->p = -i;
21 	} else
22 		*b->p = i;
23 	return b;
24 }
25 
26 int
mptoi(mpint * b)27 mptoi(mpint *b)
28 {
29 	uint x;
30 
31 	x = *b->p;
32 	if(b->sign > 0){
33 		if(b->top > 1 || (x > MAXINT))
34 			x = (int)MAXINT;
35 		else
36 			x = (int)x;
37 	} else {
38 		if(b->top > 1 || x > MAXINT+1)
39 			x = (int)MININT;
40 		else
41 			x = -(int)x;
42 	}
43 	return x;
44 }
45