xref: /csrg-svn/lib/libmp/util.c (revision 61321)
148370Sbostic /*-
248370Sbostic  * %sccs.include.proprietary.c%
348370Sbostic  */
448370Sbostic 
519819Sdist #ifndef lint
6*61321Sbostic static char sccsid[] = "@(#)util.c	8.1 (Berkeley) 06/04/93";
748370Sbostic #endif /* not lint */
819819Sdist 
99951Ssam char *malloc();
109951Ssam #ifdef lint
119951Ssam int xv_oid;
129951Ssam #endif
139951Ssam #include <stdio.h>
149951Ssam #include <mp.h>
move(a,b)159951Ssam move(a,b) MINT *a,*b;
169951Ssam {	int i,j;
179951Ssam 	xfree(b);
189951Ssam 	b->len=a->len;
199951Ssam 	if((i=a->len)<0) i = -i;
209951Ssam 	if(i==0) return;
219951Ssam 	b->val=xalloc(i,"move");
229951Ssam 	for(j=0;j<i;j++)
239951Ssam 		b->val[j]=a->val[j];
249951Ssam 	return;
259951Ssam }
dummy()269951Ssam dummy(){}
xalloc(nint,s)279951Ssam short *xalloc(nint,s) char *s;
289951Ssam {	short *i;
299951Ssam 	i=(short *)malloc(2*(unsigned)nint+4);
309951Ssam #ifdef DBG
319951Ssam 	if(dbg) fprintf(stderr, "%s: %o\n",s,i);
329951Ssam #endif
339951Ssam 	if(i!=NULL) return(i);
349951Ssam 	fatal("mp: no free space");
359951Ssam 	return(0);
369951Ssam }
fatal(s)379951Ssam fatal(s) char *s;
389951Ssam {
399951Ssam 	fprintf(stderr,"%s\n",s);
409951Ssam 	VOID fflush(stdout);
419951Ssam 	sleep(2);
429951Ssam 	abort();
439951Ssam }
xfree(c)449951Ssam xfree(c) MINT *c;
459951Ssam {
469951Ssam #ifdef DBG
479951Ssam 	if(dbg) fprintf(stderr, "xfree ");
489951Ssam #endif
499951Ssam 	if(c->len==0) return;
509951Ssam 	shfree(c->val);
519951Ssam 	c->len=0;
529951Ssam 	return;
539951Ssam }
mcan(a)549951Ssam mcan(a) MINT *a;
559951Ssam {	int i,j;
569951Ssam 	if((i=a->len)==0) return;
579951Ssam 	else if(i<0) i= -i;
589951Ssam 	for(j=i;j>0 && a->val[j-1]==0;j--);
599951Ssam 	if(j==i) return;
609951Ssam 	if(j==0)
619951Ssam 	{	xfree(a);
629951Ssam 		return;
639951Ssam 	}
649951Ssam 	if(a->len > 0) a->len=j;
659951Ssam 	else a->len = -j;
669951Ssam }
itom(n)679951Ssam MINT *itom(n)
689951Ssam {	MINT *a;
699951Ssam 	a=(MINT *)xalloc(2,"itom");
709951Ssam 	if(n>0)
719951Ssam 	{	a->len=1;
729951Ssam 		a->val=xalloc(1,"itom1");
739951Ssam 		*a->val=n;
749951Ssam 		return(a);
759951Ssam 	}
769951Ssam 	else if(n<0)
779951Ssam 	{	a->len = -1;
789951Ssam 		a->val=xalloc(1,"itom2");
799951Ssam 		*a->val= -n;
809951Ssam 		return(a);
819951Ssam 	}
829951Ssam 	else
839951Ssam 	{	a->len=0;
849951Ssam 		return(a);
859951Ssam 	}
869951Ssam }
mcmp(a,b)879951Ssam mcmp(a,b) MINT *a,*b;
889951Ssam {	MINT c;
899951Ssam 	int res;
909951Ssam 	if(a->len!=b->len) return(a->len-b->len);
919951Ssam 	c.len=0;
929951Ssam 	msub(a,b,&c);
939951Ssam 	res=c.len;
949951Ssam 	xfree(&c);
959951Ssam 	return(res);
969951Ssam }
97