Annotation of 3BSD/cmd/lisp/pbignum.c, revision 1.1.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.