|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.