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