xref: /csrg-svn/lib/libmp/util.c (revision 9951)
1*9951Ssam /*	@(#)util.c	4.1	12/25/82	*/
2*9951Ssam 
3*9951Ssam char *malloc();
4*9951Ssam #ifdef lint
5*9951Ssam int xv_oid;
6*9951Ssam #endif
7*9951Ssam #include <stdio.h>
8*9951Ssam #include <mp.h>
9*9951Ssam move(a,b) MINT *a,*b;
10*9951Ssam {	int i,j;
11*9951Ssam 	xfree(b);
12*9951Ssam 	b->len=a->len;
13*9951Ssam 	if((i=a->len)<0) i = -i;
14*9951Ssam 	if(i==0) return;
15*9951Ssam 	b->val=xalloc(i,"move");
16*9951Ssam 	for(j=0;j<i;j++)
17*9951Ssam 		b->val[j]=a->val[j];
18*9951Ssam 	return;
19*9951Ssam }
20*9951Ssam dummy(){}
21*9951Ssam short *xalloc(nint,s) char *s;
22*9951Ssam {	short *i;
23*9951Ssam 	i=(short *)malloc(2*(unsigned)nint+4);
24*9951Ssam #ifdef DBG
25*9951Ssam 	if(dbg) fprintf(stderr, "%s: %o\n",s,i);
26*9951Ssam #endif
27*9951Ssam 	if(i!=NULL) return(i);
28*9951Ssam 	fatal("mp: no free space");
29*9951Ssam 	return(0);
30*9951Ssam }
31*9951Ssam fatal(s) char *s;
32*9951Ssam {
33*9951Ssam 	fprintf(stderr,"%s\n",s);
34*9951Ssam 	VOID fflush(stdout);
35*9951Ssam 	sleep(2);
36*9951Ssam 	abort();
37*9951Ssam }
38*9951Ssam xfree(c) MINT *c;
39*9951Ssam {
40*9951Ssam #ifdef DBG
41*9951Ssam 	if(dbg) fprintf(stderr, "xfree ");
42*9951Ssam #endif
43*9951Ssam 	if(c->len==0) return;
44*9951Ssam 	shfree(c->val);
45*9951Ssam 	c->len=0;
46*9951Ssam 	return;
47*9951Ssam }
48*9951Ssam mcan(a) MINT *a;
49*9951Ssam {	int i,j;
50*9951Ssam 	if((i=a->len)==0) return;
51*9951Ssam 	else if(i<0) i= -i;
52*9951Ssam 	for(j=i;j>0 && a->val[j-1]==0;j--);
53*9951Ssam 	if(j==i) return;
54*9951Ssam 	if(j==0)
55*9951Ssam 	{	xfree(a);
56*9951Ssam 		return;
57*9951Ssam 	}
58*9951Ssam 	if(a->len > 0) a->len=j;
59*9951Ssam 	else a->len = -j;
60*9951Ssam }
61*9951Ssam MINT *itom(n)
62*9951Ssam {	MINT *a;
63*9951Ssam 	a=(MINT *)xalloc(2,"itom");
64*9951Ssam 	if(n>0)
65*9951Ssam 	{	a->len=1;
66*9951Ssam 		a->val=xalloc(1,"itom1");
67*9951Ssam 		*a->val=n;
68*9951Ssam 		return(a);
69*9951Ssam 	}
70*9951Ssam 	else if(n<0)
71*9951Ssam 	{	a->len = -1;
72*9951Ssam 		a->val=xalloc(1,"itom2");
73*9951Ssam 		*a->val= -n;
74*9951Ssam 		return(a);
75*9951Ssam 	}
76*9951Ssam 	else
77*9951Ssam 	{	a->len=0;
78*9951Ssam 		return(a);
79*9951Ssam 	}
80*9951Ssam }
81*9951Ssam mcmp(a,b) MINT *a,*b;
82*9951Ssam {	MINT c;
83*9951Ssam 	int res;
84*9951Ssam 	if(a->len!=b->len) return(a->len-b->len);
85*9951Ssam 	c.len=0;
86*9951Ssam 	msub(a,b,&c);
87*9951Ssam 	res=c.len;
88*9951Ssam 	xfree(&c);
89*9951Ssam 	return(res);
90*9951Ssam }
91