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