Annotation of researchv10no/cmd/xref/output.c, revision 1.1

1.1     ! root        1: #include       "output.h"
        !             2: 
        !             3: 
        !             4: #define MAXLIN 256
        !             5: 
        !             6: TYPE L_INT     EXPR;
        !             7: INT            mkfault;
        !             8: INT            outfile = 1;
        !             9: CHAR           *digitptr;
        !            10: CHAR           printbuf[MAXLIN];
        !            11: CHAR           *printptr = printbuf;
        !            12: 
        !            13: printc(c)
        !            14:        CHAR            c;
        !            15: {
        !            16:        REG STRING      q;
        !            17:        CHAR            d;
        !            18:        INT             posn, tabs, p;
        !            19: 
        !            20:        IF mkfault
        !            21:        THEN    return;
        !            22:        ELIF (*printptr=c)==NL
        !            23:        THEN    tabs=0; posn=0; q=printbuf;
        !            24:                FOR p=0; p<printptr-printbuf; p++
        !            25:                DO      d=printbuf[p];
        !            26:                        IF (p&7)==0 ANDF posn>1
        !            27:                        THEN    tabs++; posn=0;
        !            28:                        FI
        !            29:                        IF d==SP
        !            30:                        THEN    posn++;
        !            31:                        ELSE    WHILE tabs>0 DO *q++=TB; tabs--; OD
        !            32:                                WHILE posn>0 DO *q++=SP; posn--; OD
        !            33:                                *q++=d;
        !            34:                        FI
        !            35:                OD
        !            36:                *q++=NL;
        !            37:                write(outfile,printbuf,q-printbuf);
        !            38:                printptr=printbuf;
        !            39:        ELIF c==TB
        !            40:        THEN    *printptr++=SP;
        !            41:                WHILE (printptr-printbuf)&7 DO *printptr++=SP; OD
        !            42:        ELIF c
        !            43:        THEN    printptr++;
        !            44:        FI
        !            45: }
        !            46: 
        !            47: print(format, value)
        !            48:        STRING          format;
        !            49:        INT             value;
        !            50: {
        !            51:        STRING          scan = format;
        !            52:        STRING          s;
        !            53:        INT             width, prec;
        !            54:        CHAR            c, adj;
        !            55:        INT             decpt, n;
        !            56:        CHAR            digits[64];
        !            57:        EXPR            e = value.p_expr;
        !            58:        POS             i = value.p_int;
        !            59: 
        !            60:        WHILE c = *scan++
        !            61:        DO IF c!='%'
        !            62:           THEN printc(c);
        !            63:           ELSE IF (adj = *scan)=='-' THEN scan++; FI
        !            64:                width=convert(&scan);
        !            65:                IF *scan=='.' THEN scan++; prec=convert(&scan); ELSE prec = -1; FI
        !            66:                digitptr=digits;
        !            67:                s=0;
        !            68:                SWITCH c = *scan++ IN
        !            69: 
        !            70:                    case 'd':
        !            71:                        e=i;
        !            72:                    case 'D':
        !            73:                        printn(e,-1,10); break;
        !            74: 
        !            75:                    case 'u':
        !            76:                        e=i;
        !            77:                    case 'U':
        !            78:                        printn(e,0,10); break;
        !            79: 
        !            80:                    case 'o':
        !            81:                        e=i;
        !            82:                    case 'O':
        !            83:                        printn(e,0,8); break;
        !            84: 
        !            85:                    case 'q':
        !            86:                        e=i;
        !            87:                    case 'Q':
        !            88:                        printn(e,-1,8); break;
        !            89: 
        !            90:                    case 'x':
        !            91:                        e=i;
        !            92:                    case 'e':
        !            93:                    case 'X':
        !            94:                        printn(e,0,16); break;
        !            95: 
        !            96:                    case 'Y':
        !            97:                        printd(e); break;
        !            98: 
        !            99:                    case 'c':
        !           100:                        printc(value.p_char); break;
        !           101: 
        !           102:                    case 's':
        !           103:                        s=value.p_string; break;
        !           104: 
        !           105:                    case 'f':
        !           106:                    case 'F':
        !           107:                        s=ecvt(value.p_real, prec, &decpt, &n);
        !           108:                        *digitptr++=(n?'-':'+');
        !           109:                        *digitptr++ = (decpt<=0 ? '0' : *s++);
        !           110:                        IF decpt>0 THEN decpt--; FI
        !           111:                        *digitptr++ = '.';
        !           112:                        WHILE *s ANDF prec-- DO *digitptr++ = *s++; OD
        !           113:                        WHILE *--digitptr=='0' DONE
        !           114:                        digitptr += (digitptr-digits>=3 ? 1 : 2);
        !           115:                        IF decpt
        !           116:                        THEN *digitptr++ = 'e'; printn((L_INT)(decpt),-1,10);
        !           117:                        FI
        !           118:                        s=0; prec = -1; break;
        !           119: 
        !           120:                    case 'm':
        !           121:                        break;
        !           122: 
        !           123:                    case 'M':
        !           124:                        width=i; break;
        !           125: 
        !           126:                    case 'T':
        !           127:                        width=i;
        !           128: 
        !           129:                    case 't':
        !           130:                        IF width
        !           131:                        THEN width -= charpos()%width;
        !           132:                        FI
        !           133:                        break;
        !           134: 
        !           135:                    default:
        !           136:                        printc(c);
        !           137:                ENDSW
        !           138: 
        !           139:                IF s==0
        !           140:                THEN    *digitptr=0; s=digits;
        !           141:                FI
        !           142:                n=length(s);
        !           143:                n=(prec<n ANDF prec>=0 ? prec : n);
        !           144:                width -= n;
        !           145:                IF adj!='-'
        !           146:                THEN    WHILE width-- > 0
        !           147:                        DO printc(SP); OD
        !           148:                FI
        !           149:                WHILE n-- DO printc(*s++); OD
        !           150:                WHILE width-- > 0 DO printc(SP); OD
        !           151:                digitptr=digits;
        !           152:           FI
        !           153:        OD
        !           154: }
        !           155: 
        !           156: LOCAL  printd(tvec)
        !           157:        L_INT           tvec;
        !           158: {
        !           159:        REG INT         i;
        !           160:        REG STRING      timeptr = ctime(&tvec);
        !           161: 
        !           162:        FOR i=20; i<24; i++ DO *digitptr++ = *(timeptr+i); OD
        !           163:        FOR i=3; i<19; i++ DO *digitptr++ = *(timeptr+i); OD
        !           164: } /*printd*/
        !           165: 
        !           166: prints(s)
        !           167:        REG STRING      s;
        !           168: {
        !           169:        REG CHAR        c;
        !           170: 
        !           171:        WHILE c = *s++ DO printc(c); OD
        !           172: }
        !           173: 
        !           174: LOCAL  convert(cp)
        !           175:        REG STRING      *cp;
        !           176: {
        !           177:        REG CHAR        c;
        !           178:        INT             n = 0;
        !           179: 
        !           180:        WHILE ((c = *(*cp)++)>='0') ANDF (c<='9') DO n=n*10+c-'0'; OD
        !           181:        (*cp)--;
        !           182:        return(n);
        !           183: }
        !           184: 
        !           185: LOCAL  printn(n, sgn, base)
        !           186:        EXPR            n;
        !           187:        INT             sgn;
        !           188: {
        !           189:        REG INT         k;
        !           190:        INT             digs[15];
        !           191:        REG INT         *dptr = digs;
        !           192: 
        !           193:        IF n<0 ANDF sgn<0 THEN n = -n; *digitptr++ = '-'; FI
        !           194:        IF base==8 ANDF n THEN *digitptr++='0';
        !           195:        ELIF base==16 THEN *digitptr++='#';
        !           196:        FI
        !           197:        WHILE n
        !           198:        DO *dptr++=divide(&n,base);
        !           199:        OD
        !           200:        IF dptr==digs THEN *dptr++=0; FI
        !           201:        WHILE dptr!=digs
        !           202:        DO  k = *--dptr;
        !           203:            *digitptr++ = (k+(k<=9 ? '0' : 'a'-10));
        !           204:        OD
        !           205: }
        !           206: 
        !           207: charpos()
        !           208: {
        !           209:        return(printptr-printbuf);
        !           210: }
        !           211: 
        !           212: flushbuf()
        !           213: {
        !           214:        IF printptr!=printbuf
        !           215:        THEN    newline();
        !           216:        FI
        !           217: }
        !           218: 
        !           219: newline()
        !           220: {
        !           221:        printc(NL);
        !           222: }
        !           223: 
        !           224: eqstr(s1, s2)
        !           225:        REG STRING      s1, s2;
        !           226: {
        !           227:        REG STRING       es1 = s1+8;
        !           228: 
        !           229:        IF *s1=='~' ORF *s1=='_'
        !           230:        THEN IF *s2 != *s1 THEN s1++; FI
        !           231:        FI
        !           232:        WHILE *s1++ == *s2
        !           233:        DO IF *s2++ == 0 ORF s1>=es1
        !           234:           THEN return(1);
        !           235:           FI
        !           236:        OD
        !           237:        return(0);
        !           238: }

unix.superglobalmegacorp.com

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