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