1: /*
   2:  * Copyright (c) 1980 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  */
   6: 
   7: #ifndef lint
   8: static char sccsid[] = "@(#)mout.c	5.2 (Berkeley) 3/13/86";
   9: #endif not lint
  10: 
  11: #include <stdio.h>
  12: #include <mp.h>
  13: m_in(a,b,f) MINT *a; FILE *f;
  14: {   MINT x,y,ten;
  15:     int sign,c;
  16:     short qten,qy;
  17:     xfree(a);
  18:     sign=1;
  19:     ten.len=1;
  20:     ten.val= &qten;
  21:     qten=b;
  22:     x.len=0;
  23:     y.len=1;
  24:     y.val= &qy;
  25:     while((c=getc(f))!=EOF)
  26:     switch(c)
  27:     {
  28:     case '\\':  (void)getc(f);
  29:         continue;
  30:     case '\t':
  31:     case '\n': a->len *= sign;
  32:         xfree(&x);
  33:         return(0);
  34:     case ' ':
  35:         continue;
  36:     case '-': sign = -sign;
  37:         continue;
  38:     default: if(c>='0' && c<= '9')
  39:         {   qy=c-'0';
  40:             mult(&x,&ten,a);
  41:             madd(a,&y,a);
  42:             move(a,&x);
  43:             continue;
  44:         }
  45:         else
  46:         {   VOID ungetc(c,stdin);
  47:             a->len *= sign;
  48:             return(0);
  49:         }
  50:     }
  51:     return(EOF);
  52: }
  53: m_out(a,b,f) MINT *a; FILE *f;
  54: {   int sign,xlen,i;
  55:     short r;
  56:     MINT x;
  57:     char *obuf, *malloc();
  58:     register char *bp;
  59:     sign=1;
  60:     xlen=a->len;
  61:     if(xlen<0)
  62:     {   xlen= -xlen;
  63:         sign= -1;
  64:     }
  65:     if(xlen==0)
  66:     {   fprintf(f,"0\n");
  67:         return;
  68:     }
  69:     x.len=xlen;
  70:     x.val=xalloc(xlen,"m_out");
  71:     for(i=0;i<xlen;i++) x.val[i]=a->val[i];
  72:     obuf=malloc(7*(unsigned)xlen);
  73:     bp=obuf+7*xlen-1;
  74:     *bp--=0;
  75:     while(x.len>0)
  76:     {   for(i=0;i<10&&x.len>0;i++)
  77:         {   sdiv(&x,(short)b,&x,&r);
  78:             *bp--=r+'0';
  79:         }
  80:         if(x.len>0) *bp--=' ';
  81:     }
  82:     if(sign==-1) *bp--='-';
  83:     fprintf(f,"%s\n",bp+1);
  84:     free(obuf);
  85:     FREE(x)
  86:     return;
  87: }
  88: sdiv(a,n,q,r) MINT *a,*q; short n; short *r;
  89: {   MINT x,y;
  90:     int sign;
  91:     sign=1;
  92:     x.len=a->len;
  93:     x.val=a->val;
  94:     if(n<0)
  95:     {   sign= -sign;
  96:         n= -n;
  97:     }
  98:     if(x.len<0)
  99:     {   sign = -sign;
 100:         x.len= -x.len;
 101:     }
 102:     s_div(&x,n,&y,r);
 103:     xfree(q);
 104:     q->val=y.val;
 105:     q->len=sign*y.len;
 106:     *r = *r*sign;
 107:     return;
 108: }
 109: s_div(a,n,q,r) MINT *a,*q; short n; short *r;
 110: {   int qlen,i;
 111:     long int x;
 112:     short *qval;
 113:     x=0;
 114:     qlen=a->len;
 115:     qval=xalloc(qlen,"s_div");
 116:     for(i=qlen-1;i>=0;i--)
 117:     {
 118:         x=x*0100000L+a->val[i];
 119:         qval[i]=x/n;
 120:         x=x%n;
 121:     }
 122:     *r=x;
 123:     if(qlen && qval[qlen-1]==0) qlen--;
 124:     q->len=qlen;
 125:     q->val=qval;
 126:     if(qlen==0) shfree(qval);
 127:     return;
 128: }
 129: min(a) MINT *a;
 130: {
 131:     return(m_in(a,10,stdin));
 132: }
 133: omin(a) MINT *a;
 134: {
 135:     return(m_in(a,8,stdin));
 136: }
 137: mout(a) MINT *a;
 138: {
 139:     m_out(a,10,stdout);
 140: }
 141: omout(a) MINT *a;
 142: {
 143:     m_out(a,8,stdout);
 144: }
 145: fmout(a,f) MINT *a; FILE *f;
 146: {   m_out(a,10,f);
 147: }
 148: fmin(a,f) MINT *a; FILE *f;
 149: {
 150:     return(m_in(a,10,f));
 151: }

Defined functions

fmin defined in line 148; never used
fmout defined in line 145; never used
m_in defined in line 13; used 3 times
m_out defined in line 53; used 3 times
mout defined in line 137; never used
omin defined in line 133; never used
omout defined in line 141; never used
s_div defined in line 109; used 1 times
sdiv defined in line 88; used 4 times

Defined variables

sccsid defined in line 8; never used
Last modified: 1987-02-18
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1217
Valid CSS Valid XHTML 1.0 Strict