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