Annotation of 42BSD/ucb/lisp/franz/pbignum.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char *rcsid =
        !             3:    "$Header: pbignum.c,v 1.3 83/09/12 14:17:59 sklower Exp $";
        !             4: #endif
        !             5: 
        !             6: /*                                     -[Sat Jan 29 13:30:47 1983 by jkf]-
        !             7:  *     pbignum.c                       $Locker:  $
        !             8:  * print a bignum
        !             9:  *
        !            10:  * (c) copyright 1982, Regents of the University of California
        !            11:  */
        !            12: 
        !            13: #include "global.h"
        !            14: 
        !            15: pbignum(current, useport)
        !            16: register lispval current;
        !            17: register FILE *useport;
        !            18: {
        !            19:        long  *top, *bot, *work, negflag = 0;
        !            20:        char *alloca();
        !            21:        register int *digitp;
        !            22:        Keepxs();
        !            23: 
        !            24:        /* copy bignum onto stack */
        !            25:        top = (sp()) - 1;
        !            26:        do {
        !            27:                stack(current->s.I);
        !            28:        } while(current = current->s.CDR);
        !            29: 
        !            30:        bot = sp();
        !            31:        if (top==bot) {
        !            32:                fprintf(useport,"%d",*bot);
        !            33:                Freexs();
        !            34:                return;
        !            35:        }
        !            36: 
        !            37:        /* save space for printed digits*/
        !            38:        work = (int *)alloca((top-bot)*2*sizeof(int));
        !            39:        if( *bot < 0) {
        !            40:                negflag = 1;
        !            41:                dsneg(top,bot);
        !            42:        }
        !            43: 
        !            44:        /* figure out nine digits at a time by destructive division*/
        !            45:        for(digitp = work; bot <= top; digitp++) {
        !            46:                *digitp = dodiv(top,bot);
        !            47:                if(*bot==0) bot += 1;
        !            48:        }
        !            49:        
        !            50:        /* print them out */
        !            51: 
        !            52:        if(negflag) putc('-',useport);
        !            53:        fprintf(useport,"%d",*--digitp);
        !            54:        while ( digitp > work) fprintf(useport,"%.09d",*--digitp);
        !            55:        Freexs();
        !            56: }

unix.superglobalmegacorp.com

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