xref: /csrg-svn/lib/libmp/util.c (revision 19819)
1*19819Sdist /*
2*19819Sdist  * Copyright (c) 1980 Regents of the University of California.
3*19819Sdist  * All rights reserved.  The Berkeley software License Agreement
4*19819Sdist  * specifies the terms and conditions for redistribution.
5*19819Sdist  */
69951Ssam 
7*19819Sdist #ifndef lint
8*19819Sdist static char sccsid[] = "@(#)util.c	5.1 (Berkeley) 04/30/85";
9*19819Sdist #endif not lint
10*19819Sdist 
119951Ssam char *malloc();
129951Ssam #ifdef lint
139951Ssam int xv_oid;
149951Ssam #endif
159951Ssam #include <stdio.h>
169951Ssam #include <mp.h>
179951Ssam move(a,b) MINT *a,*b;
189951Ssam {	int i,j;
199951Ssam 	xfree(b);
209951Ssam 	b->len=a->len;
219951Ssam 	if((i=a->len)<0) i = -i;
229951Ssam 	if(i==0) return;
239951Ssam 	b->val=xalloc(i,"move");
249951Ssam 	for(j=0;j<i;j++)
259951Ssam 		b->val[j]=a->val[j];
269951Ssam 	return;
279951Ssam }
289951Ssam dummy(){}
299951Ssam short *xalloc(nint,s) char *s;
309951Ssam {	short *i;
319951Ssam 	i=(short *)malloc(2*(unsigned)nint+4);
329951Ssam #ifdef DBG
339951Ssam 	if(dbg) fprintf(stderr, "%s: %o\n",s,i);
349951Ssam #endif
359951Ssam 	if(i!=NULL) return(i);
369951Ssam 	fatal("mp: no free space");
379951Ssam 	return(0);
389951Ssam }
399951Ssam fatal(s) char *s;
409951Ssam {
419951Ssam 	fprintf(stderr,"%s\n",s);
429951Ssam 	VOID fflush(stdout);
439951Ssam 	sleep(2);
449951Ssam 	abort();
459951Ssam }
469951Ssam xfree(c) MINT *c;
479951Ssam {
489951Ssam #ifdef DBG
499951Ssam 	if(dbg) fprintf(stderr, "xfree ");
509951Ssam #endif
519951Ssam 	if(c->len==0) return;
529951Ssam 	shfree(c->val);
539951Ssam 	c->len=0;
549951Ssam 	return;
559951Ssam }
569951Ssam mcan(a) MINT *a;
579951Ssam {	int i,j;
589951Ssam 	if((i=a->len)==0) return;
599951Ssam 	else if(i<0) i= -i;
609951Ssam 	for(j=i;j>0 && a->val[j-1]==0;j--);
619951Ssam 	if(j==i) return;
629951Ssam 	if(j==0)
639951Ssam 	{	xfree(a);
649951Ssam 		return;
659951Ssam 	}
669951Ssam 	if(a->len > 0) a->len=j;
679951Ssam 	else a->len = -j;
689951Ssam }
699951Ssam MINT *itom(n)
709951Ssam {	MINT *a;
719951Ssam 	a=(MINT *)xalloc(2,"itom");
729951Ssam 	if(n>0)
739951Ssam 	{	a->len=1;
749951Ssam 		a->val=xalloc(1,"itom1");
759951Ssam 		*a->val=n;
769951Ssam 		return(a);
779951Ssam 	}
789951Ssam 	else if(n<0)
799951Ssam 	{	a->len = -1;
809951Ssam 		a->val=xalloc(1,"itom2");
819951Ssam 		*a->val= -n;
829951Ssam 		return(a);
839951Ssam 	}
849951Ssam 	else
859951Ssam 	{	a->len=0;
869951Ssam 		return(a);
879951Ssam 	}
889951Ssam }
899951Ssam mcmp(a,b) MINT *a,*b;
909951Ssam {	MINT c;
919951Ssam 	int res;
929951Ssam 	if(a->len!=b->len) return(a->len-b->len);
939951Ssam 	c.len=0;
949951Ssam 	msub(a,b,&c);
959951Ssam 	res=c.len;
969951Ssam 	xfree(&c);
979951Ssam 	return(res);
989951Ssam }
99