Annotation of 3BSD/lib/libmp/mout.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.