home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / libmp / util.c < prev   
Encoding:
C/C++ Source or Header  |  1979-01-10  |  1.3 KB  |  89 lines

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