Annotation of researchv9/jtools/src/demo/pacman/prf.c, revision 1.1

1.1     ! root        1: #include "style.h"
        !             2: #include "pacman.h"
        !             3: 
        !             4: /*     PIECES COMMENTED OUT TO SAVE SPACE */
        !             5: #ifdef BLIT
        !             6: 
        !             7: Code textmode;
        !             8: Point curloc;
        !             9: 
        !            10: showchar(c)
        !            11: char c;
        !            12: {
        !            13:        static char str[] = "x";
        !            14: 
        !            15:        str[0] = c;
        !            16:        curloc = string(&defont,str,&display,curloc,textmode);
        !            17: }
        !            18: 
        !            19: movexy(x,y)
        !            20: int    x,y;
        !            21: {
        !            22:        curloc.x = x*9+8;
        !            23:        curloc.y = y*16+12;
        !            24: }
        !            25: #endif
        !            26: 
        !            27: /*VARARGS1*/
        !            28: printf(fmt, x1)
        !            29: char *fmt;
        !            30: unsigned x1;
        !            31: {
        !            32:     extern int showchar();
        !            33: 
        !            34:     prf(fmt, &x1, showchar);
        !            35: }
        !            36: 
        !            37: 
        !            38: /*
        !            39:  * Scaled down version of C Library printf.
        !            40:  */
        !            41: 
        !            42: prf(fmt, adx, pfunc)
        !            43: register char *fmt;
        !            44: register int  *adx;
        !            45: int          (*pfunc)();
        !            46: {
        !            47:        register int b, c, i, len;
        !            48:        char *s;
        !            49:        int zfill;
        !            50:        int any;
        !            51: 
        !            52: loop:
        !            53:        while ((c = *fmt++) != '%') {
        !            54:                if(c == '\0')
        !            55:                        return;
        !            56:                (*pfunc)(c);
        !            57:        }
        !            58:        len = 0;
        !            59:        zfill = 0;
        !            60: 
        !            61: again:
        !            62:        c = *fmt++;
        !            63: 
        !            64:        switch (c) {
        !            65: 
        !            66: /*
        !            67:        case 'x': case 'X':
        !            68:                b = 16;
        !            69:                goto number;
        !            70:        case 'o': case 'O':
        !            71:                b = 8;
        !            72:                goto number;
        !            73:        case 'D':
        !            74:        case 'u':
        !            75: */
        !            76:        case 'd':
        !            77:                b = 10;
        !            78: number:
        !            79:                printn((long)*adx, b, len, zfill, pfunc);
        !            80:                break;
        !            81:        case 'l':
        !            82:                b = 10;
        !            83:                printn(*((long *)(adx++)), b, len, zfill, pfunc);
        !            84:                break;
        !            85: /*
        !            86:        case 'c':
        !            87:                b = *adx;
        !            88:                for (i = 24; i >= 0; i -= 8)
        !            89:                        if (c = (b >> i) & 0x7f)
        !            90:                                (*pfunc)(c);
        !            91:                break;
        !            92:        case 'b':
        !            93:                b = *adx++;
        !            94:                s = (char *)*adx;
        !            95:                printn((long)b, *s++,0,0, pfunc);
        !            96:                any = 0;
        !            97:                if (b) {
        !            98:                        (*pfunc)('<');
        !            99:                        while (i = *s++) {
        !           100:                                if (b & (1 << (i-1))) {
        !           101:                                        if (any)
        !           102:                                                (*pfunc)(',');
        !           103:                                        any = 1;
        !           104:                                        for (; (c = *s) > 32; s++)
        !           105:                                                (*pfunc)(c);
        !           106:                                } else
        !           107:                                        for (; *s > 32; s++)
        !           108:                                                ;
        !           109:                        }
        !           110:                        if (any)
        !           111:                                (*pfunc)('>');
        !           112:                }
        !           113:                break;
        !           114: */
        !           115:        case 's':
        !           116:                s = (char *)*adx;
        !           117:                while (c = *s++)
        !           118:                        (*pfunc)(c);
        !           119:                break;
        !           120: 
        !           121:        case '0':
        !           122:                if ( len==0 ) zfill = 1;
        !           123:        case '1': case '2': case '3': case '4':
        !           124:        case '5': case '6': case '7': case '8': case '9':
        !           125:                len = len*10 + (c-'0');
        !           126:                goto again;
        !           127: 
        !           128: 
        !           129: 
        !           130: 
        !           131:        case '%':
        !           132:                (*pfunc)('%');
        !           133:                break;
        !           134:        }
        !           135:        adx++;
        !           136:        goto loop;
        !           137: }
        !           138: 
        !           139: /*
        !           140:  * Printn prints a number n in base b.
        !           141:  * We don't use recursion to avoid deep kernel stacks.
        !           142:  */
        !           143: printn(n, b, len, zfill, pfunc)
        !           144: register long n;
        !           145: register int len;
        !           146: int (*pfunc)();
        !           147: {
        !           148:        char prbuf[11];
        !           149:        register char *cp;
        !           150: 
        !           151:        if (b == 10 && n < 0) {
        !           152:                (*pfunc)('-');
        !           153:                n = (unsigned)(-n);
        !           154:        }
        !           155:        cp = prbuf;
        !           156:        do {
        !           157:                *cp++ = "0123456789abcdef"[n%b];
        !           158:                n /= b;
        !           159:        } while (n);
        !           160:        while ( len-- > cp-prbuf )
        !           161:                if ( zfill )
        !           162:                        (*pfunc)('0');
        !           163:                else
        !           164:                        (*pfunc)(' ');
        !           165: 
        !           166:        do
        !           167:                (*pfunc)(*--cp);
        !           168:        while (cp > prbuf);
        !           169: }
        !           170: 
        !           171: 

unix.superglobalmegacorp.com

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