Annotation of coherent/d/usr/lib/libmp/min.c, revision 1.1

1.1     ! root        1: #include <stdio.h>
        !             2: #include <assert.h>
        !             3: #include <ctype.h>
        !             4: #include "mprec.h"
        !             5: 
        !             6: 
        !             7: /*
        !             8:  *     Ibase is an int which contains the input base used by min.
        !             9:  *     It should be between 2 and 16.  Regardless of ibase, the
        !            10:  *     legal digits are 0 - 9 and A - F.
        !            11:  */
        !            12: 
        !            13: int    ibase = 10;
        !            14: 
        !            15: 
        !            16: /*
        !            17:  *     Min reads in a number in base ibase from stdin and sets "a" 
        !            18:  *     to that number.  Note that a leading minus sign is allowed as
        !            19:  *     are leading blanks.
        !            20:  */
        !            21: 
        !            22: void
        !            23: min(a)
        !            24: register mint *a;
        !            25: {
        !            26:        register int ch;
        !            27:        register char mifl;     /* leading minus flag */
        !            28:        char cval;
        !            29:        mint c = {1, &cval};
        !            30: 
        !            31:        assert(2 <= ibase && ibase <= 16);
        !            32:        /* throw away old value, and set to zero */
        !            33:        mcopy(mzero, a);
        !            34: 
        !            35:        /* skip leading blanks */
        !            36:        do {
        !            37:                ch = getchar();
        !            38:        } while (isascii(ch) && isspace(ch));
        !            39: 
        !            40:        /* check for leading minus */
        !            41:        mifl = ch == '-';
        !            42:        if (mifl)
        !            43:                do {
        !            44:                        ch = getchar();
        !            45:                } while (isascii(ch) && isspace(ch));
        !            46: 
        !            47:        /* scan thru actual number, building result in a */
        !            48:        while (okdigit(ch)) {
        !            49:                cval = valdigit(ch);
        !            50:                smult(a, ibase, a);
        !            51:                madd(a, &c, a);
        !            52:                ch = getchar();
        !            53:        }
        !            54:        ungetc(ch, stdin);
        !            55: 
        !            56:        /* adjust sign of a */
        !            57:        if (mifl)
        !            58:                mneg(a, a);
        !            59: }
        !            60: 
        !            61: 
        !            62: /*
        !            63:  *     Okdigit returns true iff "ch" is a valid digit.  This means
        !            64:  *     iff it is a normal digit or one of the letters 'A' thru 'F'.
        !            65:  */
        !            66: 
        !            67: static
        !            68: okdigit(ch)
        !            69: register int ch;
        !            70: {
        !            71:        return (isascii(ch) && isdigit(ch) || 'A'<=ch && ch<='F');
        !            72: }
        !            73: 
        !            74: 
        !            75: /*
        !            76:  *     Valdigit returns the numerical value for the character "ch"
        !            77:  *     when it is interpreted as a digit.  Note that valdigit assumes
        !            78:  *     that "ch" has already been successfully tested by okdigit.
        !            79:  */
        !            80: 
        !            81: static
        !            82: valdigit(ch)
        !            83: register int ch;
        !            84: {
        !            85:        return (isdigit(ch) ? ch+0-'0' : ch+0xA-'A');
        !            86: }

unix.superglobalmegacorp.com

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