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

1.1     ! root        1: #ifndef lint
        !             2: static char *rcsid =
        !             3:    "$Header: subbig.c,v 1.2 83/09/12 14:17:31 sklower Exp $";
        !             4: #endif
        !             5: 
        !             6: /*                                     -[Sat Jan 29 13:36:05 1983 by jkf]-
        !             7:  *     subbig.c                        $Locker:  $
        !             8:  * bignum subtraction
        !             9:  *
        !            10:  * (c) copyright 1982, Regents of the University of California
        !            11:  */
        !            12: 
        !            13: #include "global.h"
        !            14: 
        !            15: /*
        !            16:  * subbig -- subtract one bignum from another.
        !            17:  *
        !            18:  * What this does is it negates each coefficient of a copy of the bignum
        !            19:  * which is just pushed on the stack for convenience.  This may give rise
        !            20:  * to a bignum which is not in canonical form, but is nonetheless a repre
        !            21:  * sentation of a bignum.  Addbig then adds it to a bignum, and produces
        !            22:  * a result in canonical form.
        !            23:  */
        !            24: lispval
        !            25: subbig(pos,neg)
        !            26: lispval pos, neg;
        !            27: {
        !            28:        register lispval work;
        !            29:        lispval adbig();
        !            30:        register long *mysp = sp() - 2;
        !            31:        register long *ersatz = mysp;
        !            32:        Keepxs();
        !            33: 
        !            34:        for(work = neg; work!=0; work = work->s.CDR) {
        !            35:                stack((long)(mysp -= 2));
        !            36:                stack(-work->i);
        !            37:        }
        !            38:        mysp[3] = 0;
        !            39:        work = (adbig(pos,(lispval)ersatz));
        !            40:        Freexs();
        !            41:        return(work);
        !            42: }

unix.superglobalmegacorp.com

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