Annotation of 43BSD/ucb/lisp/franz/pbignum.c, revision 1.1.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.