Annotation of 3BSD/cmd/lisp/pbignum.c, revision 1.1

1.1     ! root        1: #include "global.h"
        !             2: 
        !             3: pbignum(current, useport)
        !             4: register lispval current;
        !             5: register FILE *useport;
        !             6: {
        !             7:        int  *top, *bot, *work, negflag = 0, *sp(), *alloca();
        !             8:        register int *digitp, *binp;
        !             9:        register lispval last;
        !            10: 
        !            11:        /* copy bignum onto stack */
        !            12:        top = sp() - 1;
        !            13:        do {
        !            14:                stack(current->I);
        !            15:        } while(current = current->CDR);
        !            16: 
        !            17:        bot = sp();
        !            18:        if (top==bot) {
        !            19:                fprintf(useport,"%d",*bot);
        !            20:                return;
        !            21:        }
        !            22: 
        !            23:        /* save space for printed digits*/
        !            24:        work = alloca((top-bot)*2*sizeof(int));
        !            25:        if( *bot < 0) {
        !            26:                negflag = 1;
        !            27:                dsneg(top,bot);
        !            28:        }
        !            29: 
        !            30:        /* figure out nine digits at a time by destructive division*/
        !            31:        for(digitp = work; bot <= top; digitp++) {
        !            32:                *digitp = dodiv(top,bot);
        !            33:                if(*bot==0) bot += 1;
        !            34:        }
        !            35:        
        !            36:        /* print them out */
        !            37: 
        !            38:        if(negflag) putc('-',useport);
        !            39:        fprintf(useport,"%d",*--digitp);
        !            40:        while ( digitp > work) fprintf(useport,"%09d",*--digitp);
        !            41: }

unix.superglobalmegacorp.com

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