Annotation of 3BSD/cmd/pstat.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Print system stuff
        !             3:  */
        !             4: 
        !             5: #define mask(x) (x&0377)
        !             6: #define        clear(x) ((int)x&0x7fffffff)
        !             7: 
        !             8: #include <sys/param.h>
        !             9: #include <sys/dir.h>
        !            10: #include <sys/file.h>
        !            11: #include <sys/user.h>
        !            12: #include <sys/proc.h>
        !            13: #include <sys/text.h>
        !            14: #include <sys/inode.h>
        !            15: #include <sys/map.h>
        !            16: #include <sys/tty.h>
        !            17: #include <sys/conf.h>
        !            18: #include <sys/vm.h>
        !            19: 
        !            20: char   *fcore  = "/dev/kmem";
        !            21: char   *fnlist = "/vmunix";
        !            22: int    fc;
        !            23: 
        !            24: struct setup {
        !            25:        char    name[8];
        !            26:        int     type;
        !            27:        unsigned        value;
        !            28: } setup[] = {
        !            29: #define        SINODE  0
        !            30:        "_inode", 0, 0,
        !            31: #define        STEXT   1
        !            32:        "_text", 0, 0,
        !            33: #define        SPROC   2
        !            34:        "_proc", 0, 0,
        !            35: #define        SDZ     3
        !            36:        "_dz_tty", 0, 0,
        !            37: #define        SNDZ    4
        !            38:        "_dz_cnt", 0, 0,
        !            39: #define        SKL     5
        !            40:        "_cons", 0, 0,
        !            41: #define        SFIL    6
        !            42:        "_file", 0, 0,
        !            43: #define        SMPXC   7
        !            44:        "_mpx_cha", 0, 0,
        !            45: #define        SMPXM   8
        !            46:        "_mpx_mac", 0, 0,
        !            47: #define        SMPXB1  9
        !            48:        "_mptbc", 0, 0,
        !            49: #define        SMPXB2  10
        !            50:        "_mptbuf", 0, 0,
        !            51: #define        SMPSM   11
        !            52:        "_mpsm", 0, 0,
        !            53:        0,
        !            54: };
        !            55: 
        !            56: int    inof;
        !            57: int    txtf;
        !            58: int    prcf;
        !            59: int    ttyf;
        !            60: int    mpxf;
        !            61: int    usrf;
        !            62: long   ubase;
        !            63: int    filf;
        !            64: char   partab[1];
        !            65: struct cdevsw  cdevsw[1];
        !            66: struct bdevsw  bdevsw[1];
        !            67: int    allflg;
        !            68: int    kflg;
        !            69: 
        !            70: main(argc, argv)
        !            71: char **argv;
        !            72: {
        !            73:        register char *argp;
        !            74: 
        !            75:        argc--, argv++;
        !            76:        while (argc > 0 && **argv == '-') {
        !            77:                argp = *argv++;
        !            78:                argp++;
        !            79:                argc--;
        !            80:                while (*argp++)
        !            81:                switch (argp[-1]) {
        !            82: 
        !            83:                case 'a':
        !            84:                        allflg++;
        !            85:                        break;
        !            86: 
        !            87:                case 'i':
        !            88:                        inof++;
        !            89:                        break;
        !            90: 
        !            91:                case 'k':
        !            92:                        kflg++;
        !            93:                        fcore = "/vmcore";
        !            94:                        break;
        !            95: 
        !            96:                case 'x':
        !            97:                        txtf++;
        !            98:                        break;
        !            99:                case 'p':
        !           100:                        prcf++;
        !           101:                        break;
        !           102: 
        !           103:                case 't':
        !           104:                        ttyf++;
        !           105:                        break;
        !           106: 
        !           107:                case 'm':
        !           108:                        mpxf++;
        !           109:                        break;
        !           110: 
        !           111:                case 'u':
        !           112:                        if (argc == 0)
        !           113:                                break;
        !           114:                        argc--;
        !           115:                        usrf++;
        !           116:                        sscanf( *argv++, "%x", &ubase);
        !           117:                        break;
        !           118: 
        !           119:                case 'f':
        !           120:                        filf++;
        !           121:                        break;
        !           122:                }
        !           123:        }
        !           124:        if (argc>0)
        !           125:                fcore = argv[0];
        !           126:        if ((fc = open(fcore, 0)) < 0) {
        !           127:                printf("Can't find %s\n", fcore);
        !           128:                exit(1);
        !           129:        }
        !           130:        if (argc>1)
        !           131:                fnlist = argv[1];
        !           132:        nlist(fnlist, setup);
        !           133:        if (kflg) {
        !           134:                register struct setup *sp;
        !           135:                for (sp=setup; sp->value; sp++)
        !           136:                        sp->value &= 0x7fffffff;
        !           137:        }
        !           138:        if (setup[SINODE].type == -1) {
        !           139:                printf("no namelist\n");
        !           140:                exit(1);
        !           141:        }
        !           142:        if (inof)
        !           143:                doinode();
        !           144:        if (txtf)
        !           145:                dotext();
        !           146:        if (ttyf)
        !           147:                dotty();
        !           148:        if (prcf)
        !           149:                doproc();
        !           150:        if (usrf)
        !           151:                dousr();
        !           152:        if (filf)
        !           153:                dofil();
        !           154: /*
        !           155:        if(mpxf)
        !           156:                dompx();
        !           157: */
        !           158: }
        !           159: 
        !           160: doinode()
        !           161: {
        !           162:        register struct inode *ip;
        !           163:        struct inode xinode[NINODE];
        !           164:        register int nin, loc;
        !           165: 
        !           166:        nin = 0;
        !           167:        lseek(fc, (long)setup[SINODE].value, 0);
        !           168:        read(fc, xinode, sizeof(xinode));
        !           169:        for (ip = xinode; ip < &xinode[NINODE]; ip++)
        !           170:                if (ip->i_count)
        !           171:                        nin++;
        !           172:        printf("%d active xinodes\n", nin);
        !           173:        printf("   LOC    FLAGS  CNT DEVICE  INO  MODE  NLK UID   SIZE/DEV\n");
        !           174:        loc = setup[SINODE].value;
        !           175:        for (ip = xinode; ip < &xinode[NINODE]; ip++, loc += sizeof(xinode[0])) {
        !           176:                if (ip->i_count == 0)
        !           177:                        continue;
        !           178:                printf("%8.1x ", loc);
        !           179:                putf(ip->i_flag&ILOCK, 'L');
        !           180:                putf(ip->i_flag&IUPD, 'U');
        !           181:                putf(ip->i_flag&IACC, 'A');
        !           182:                putf(ip->i_flag&IMOUNT, 'M');
        !           183:                putf(ip->i_flag&IWANT, 'W');
        !           184:                putf(ip->i_flag&ITEXT, 'T');
        !           185:                printf("%4d", ip->i_count&0377);
        !           186:                printf("%4d,%3d", major(ip->i_dev), minor(ip->i_dev));
        !           187:                printf("%5l", ip->i_number);
        !           188:                printf("%6x", ip->i_mode & 0xffff);
        !           189:                printf("%4d", ip->i_nlink);
        !           190:                printf("%4d", ip->i_uid);
        !           191:                if ((ip->i_mode&IFMT)==IFBLK || (ip->i_mode&IFMT)==IFCHR)
        !           192:                        printf("%6d,%3d", major(ip->i_un.i_rdev), minor(ip->i_un.i_rdev));
        !           193:                else
        !           194:                        printf("%10ld", ip->i_size);
        !           195:                printf("\n");
        !           196:        }
        !           197: }
        !           198: 
        !           199: putf(v, n)
        !           200: {
        !           201:        if (v)
        !           202:                printf("%c", n);
        !           203:        else
        !           204:                printf(" ");
        !           205: }
        !           206: 
        !           207: dotext()
        !           208: {
        !           209:        register struct text *xp;
        !           210:        struct text xtext[NTEXT];
        !           211:        register loc;
        !           212:        int ntx;
        !           213: 
        !           214:        ntx = 0;
        !           215:        lseek(fc, (long)setup[STEXT].value, 0);
        !           216:        read(fc, xtext, sizeof(xtext));
        !           217:        for (xp = xtext; xp < &xtext[NTEXT]; xp++)
        !           218:                if (xp->x_iptr!=NULL)
        !           219:                        ntx++;
        !           220:        printf("%d text segments\n", ntx);
        !           221:        printf("   LOC   FLAGS  DADDR   CADDR  RSS   SIZE   IPTR    CNT CCNT\n");
        !           222:        loc = setup[STEXT].value;
        !           223:        for (xp = xtext; xp < &xtext[NTEXT]; xp++, loc+=sizeof(xtext[0])) {
        !           224:                if (xp->x_iptr == NULL)
        !           225:                        continue;
        !           226:                printf("%8.1x", loc);
        !           227:                printf(" ");
        !           228:                putf(xp->x_flag&XPAGI, 'P');
        !           229:                putf(xp->x_flag&XTRC, 'T');
        !           230:                putf(xp->x_flag&XWRIT, 'W');
        !           231:                putf(xp->x_flag&XLOAD, 'L');
        !           232:                putf(xp->x_flag&XLOCK, 'K');
        !           233:                putf(xp->x_flag&XWANT, 'w');
        !           234:                printf("%5x", xp->x_daddr);
        !           235:                printf("%11x", xp->x_caddr);
        !           236:                printf("%5d", xp->x_rssize);
        !           237:                printf("%5d", xp->x_size);
        !           238:                printf("%10.1x", xp->x_iptr);
        !           239:                printf("%5d", xp->x_count&0377);
        !           240:                printf("%4d", xp->x_ccount);
        !           241:                printf("\n");
        !           242:        }
        !           243: }
        !           244: 
        !           245: doproc()
        !           246: {
        !           247:        struct proc xproc[NPROC];
        !           248:        register struct proc *pp;
        !           249:        register loc, np;
        !           250: 
        !           251:        lseek(fc, (long)setup[SPROC].value, 0);
        !           252:        read(fc, xproc, sizeof(xproc));
        !           253:        np = 0;
        !           254:        for (pp=xproc; pp < &xproc[NPROC]; pp++)
        !           255:                if (pp->p_stat)
        !           256:                        np++;
        !           257:        printf("%d processes\n", np);
        !           258:        printf("   LOC    S    F POIP PRI SIG  UID  SLP TIM  CPU  NI    PGRP   PID   PPID    ADDR   RSS  SRSS SIZE   WCHAN    LINK   TEXTP CLKT\n");
        !           259:        for (loc=setup[SPROC].value,pp=xproc; pp<&xproc[NPROC]; pp++,loc+=sizeof(xproc[0])) {
        !           260:                if (pp->p_stat==0 && allflg==0)
        !           261:                        continue;
        !           262:                printf("%8x", loc);
        !           263:                printf(" %2d", pp->p_stat);
        !           264:                printf(" %4x", pp->p_flag & 0xffff);
        !           265:                printf(" %4d", pp->p_poip);
        !           266:                printf(" %3d", pp->p_pri);
        !           267:                printf(" %4x", pp->p_sig);
        !           268:                printf(" %4d", pp->p_uid);
        !           269:                printf(" %3d", pp->p_slptime);
        !           270:                printf(" %3d", pp->p_time);
        !           271:                printf(" %4d", pp->p_cpu&0377);
        !           272:                printf(" %3d", pp->p_nice);
        !           273:                printf(" %6d", pp->p_pgrp);
        !           274:                printf(" %6d", pp->p_pid);
        !           275:                printf(" %6d", pp->p_ppid);
        !           276:                printf(" %8x", pp->p_addr[0]);
        !           277:                printf(" %4x", pp->p_rssize);
        !           278:                printf(" %4x", pp->p_swrss);
        !           279:                printf(" %5x", pp->p_dsize+pp->p_ssize);
        !           280:                printf(" %7x", clear(pp->p_wchan));
        !           281:                printf(" %7x", clear(pp->p_link));
        !           282:                printf(" %7x", clear(pp->p_textp));
        !           283:                printf("    %u", pp->p_clktim);
        !           284:                printf("\n");
        !           285:        }
        !           286: }
        !           287: 
        !           288: dotty()
        !           289: {
        !           290:        struct tty dz_tty[32];
        !           291:        int ndz;
        !           292:        register struct tty *tp;
        !           293:        register char *mesg;
        !           294: 
        !           295:        printf("1 cons\n");
        !           296:        lseek(fc, (long)setup[SKL].value, 0);
        !           297:        read(fc, dz_tty, sizeof(dz_tty[0]));
        !           298:        mesg = " RAW CAN OUT   MODE    ADDR   DEL COL  STATE   PGRP\n";
        !           299:        printf(mesg);
        !           300:        ttyprt(&dz_tty[0]);
        !           301:        if (setup[SNDZ].type == -1)
        !           302:                return;
        !           303:        lseek(fc, (long)setup[SNDZ].value, 0);
        !           304:        read(fc, &ndz, sizeof(ndz));
        !           305:        printf("%d dz lines\n", ndz);
        !           306:        lseek(fc, (long)setup[SDZ].value, 0);
        !           307:        read(fc, dz_tty, sizeof(dz_tty));
        !           308:        for (tp = dz_tty; tp < &dz_tty[ndz]; tp++)
        !           309:                ttyprt(tp);
        !           310: }
        !           311: 
        !           312: ttyprt(atp)
        !           313: struct tty *atp;
        !           314: {
        !           315:        register struct tty *tp;
        !           316: 
        !           317:        tp = atp;
        !           318:        printf("%4d", tp->t_rawq.c_cc);
        !           319:        printf("%4d", tp->t_canq.c_cc);
        !           320:        printf("%4d", tp->t_outq.c_cc);
        !           321:        printf("%8.1o", tp->t_flags);
        !           322:        printf(" %8.1x", tp->t_addr);
        !           323:        printf("%3d", tp->t_delct);
        !           324:        printf("%4d ", tp->t_col);
        !           325:        putf(tp->t_state&TIMEOUT, 'T');
        !           326:        putf(tp->t_state&WOPEN, 'W');
        !           327:        putf(tp->t_state&ISOPEN, 'O');
        !           328:        putf(tp->t_state&CARR_ON, 'C');
        !           329:        putf(tp->t_state&BUSY, 'B');
        !           330:        putf(tp->t_state&ASLEEP, 'A');
        !           331:        putf(tp->t_state&XCLUDE, 'X');
        !           332: /*
        !           333:        putf(tp->t_state&HUPCLS, 'H');
        !           334:  */
        !           335:        printf("%6d", tp->t_pgrp);
        !           336:        printf("\n");
        !           337: }
        !           338: 
        !           339: dousr()
        !           340: {
        !           341:        struct user U;
        !           342:        register i, j, *ip;
        !           343: 
        !           344:        /* This wins only if PAGSIZ > sizeof (struct user) */
        !           345:        lseek(fc, ubase * NBPG, 0);
        !           346:        read(fc, &U, sizeof(U));
        !           347: /*
        !           348:        printf("rsav %.1o %.1o\n", U.u_rsav[0], U.u_rsav[1]);
        !           349:  */
        !           350:        printf("segflg, error %d, %d\n", U.u_segflg, U.u_error);
        !           351:        printf("uids %d,%d,%d,%d\n", U.u_uid,U.u_gid,U.u_ruid,U.u_rgid);
        !           352:        printf("procp %.1x\n", U.u_procp);
        !           353:        printf("base, count, offset %.1x %.1x %ld\n", U.u_base,
        !           354:                U.u_count, U.u_offset);
        !           355:        printf("cdir %.1x\n", U.u_cdir);
        !           356:        printf("dbuf %.14s\n", U.u_dbuf);
        !           357:        printf("dirp %.1x\n", U.u_dirp);
        !           358:        printf("dent %d %.14s\n", U.u_dent.d_ino, U.u_dent.d_name);
        !           359:        printf("pdir %.1o\n", U.u_pdir);
        !           360: /*
        !           361:        printf("dseg");
        !           362:        for (i=0; i<8; i++)
        !           363:                printf("%8.1o", U.u_uisa[i]);
        !           364:        printf("\n    ");
        !           365:        for (i=0; i<8; i++)
        !           366:                printf("%8.1o", U.u_uisd[i]);
        !           367:        if (U.u_sep) {
        !           368:                printf("\ntseg");
        !           369:                for (i=8; i<16; i++)
        !           370:                        printf("%8.1o", U.u_uisa[i]);
        !           371:                printf("\n    ");
        !           372:                for (i=8; i<16; i++)
        !           373:                        printf("%8.1o", U.u_uisd[i]);
        !           374:        }
        !           375:  */
        !           376:        printf("\nfile");
        !           377:        for (i=0; i<10; i++)
        !           378:                printf("%9.1x", U.u_ofile[i]);
        !           379:        printf("\n    ");
        !           380:        for (i=10; i<NOFILE; i++)
        !           381:                printf("%9.1x", U.u_ofile[i]);
        !           382:        printf("\nargs");
        !           383:        for (i=0; i<5; i++)
        !           384:                printf(" %.1x", U.u_arg[i]);
        !           385:        printf("\nsizes %.1x %.1x %.1x\n", U.u_tsize, U.u_dsize, U.u_ssize);
        !           386:        printf("sep %d\n", U.u_sep);
        !           387:        printf("qsav %.1x %.1x\n", U.u_qsav[0], U.u_qsav[1]);
        !           388:        printf("ssav %.1x %.1x\n", U.u_ssav[0], U.u_ssav[1]);
        !           389:        printf("sigs");
        !           390:        for (i=0; i<NSIG; i++)
        !           391:                printf(" %.1x", U.u_signal[i]);
        !           392:        printf("\ntimes %ld %ld\n", U.u_utime/60, U.u_stime/60);
        !           393:        printf("ctimes %ld %ld\n", U.u_cutime/60, U.u_cstime/60);
        !           394:        printf("ar0 %.1x\n", U.u_ar0);
        !           395: /*
        !           396:        printf("prof");
        !           397:        for (i=0; i<4; i++)
        !           398:                printf(" %.1o", U.u_prof[i]);
        !           399: */
        !           400:        printf("\nintflg %d\n", U.u_intflg);
        !           401:        printf("ttyp %.1x\n", U.u_ttyp);
        !           402:        printf("ttydev %d,%d\n", major(U.u_ttyd), minor(U.u_ttyd));
        !           403:        printf("comm %.14s\n", U.u_comm);
        !           404: /*
        !           405:        i =  U.u_stack - &U;
        !           406:        while (U[++i] == 0);
        !           407:        i &= ~07;
        !           408:        while (i < 512) {
        !           409:                printf("%x ", 0140000+2*i);
        !           410:                for (j=0; j<8; j++)
        !           411:                        printf("%9x", U[i++]);
        !           412:                printf("\n");
        !           413:        }
        !           414: */
        !           415: }
        !           416: 
        !           417: oatoi(s)
        !           418: char *s;
        !           419: {
        !           420:        register v;
        !           421: 
        !           422:        v = 0;
        !           423:        while (*s)
        !           424:                v = (v<<3) + *s++ - '0';
        !           425:        return(v);
        !           426: }
        !           427: 
        !           428: dofil()
        !           429: {
        !           430:        struct file xfile[NFILE];
        !           431:        register struct file *fp;
        !           432:        register nf;
        !           433:        int loc;
        !           434: 
        !           435:        nf = 0;
        !           436:        lseek(fc, (long)setup[SFIL].value, 0);
        !           437:        read(fc, xfile, sizeof(xfile));
        !           438:        for (fp=xfile; fp < &xfile[NFILE]; fp++)
        !           439:                if (fp->f_count)
        !           440:                        nf++;
        !           441:        printf("%d open files\n", nf);
        !           442:        printf("   LOC   FLG  CNT   INO    OFFS\n");
        !           443:        for (fp=xfile,loc=setup[SFIL].value; fp < &xfile[NFILE]; fp++,loc+=sizeof(xfile[0])) {
        !           444:                if (fp->f_count==0)
        !           445:                        continue;
        !           446:                printf("%8x ", loc);
        !           447:                putf(fp->f_flag&FREAD, 'R');
        !           448:                putf(fp->f_flag&FWRITE, 'W');
        !           449:                putf(fp->f_flag&FPIPE, 'P');
        !           450:                printf("%4d", mask(fp->f_count));
        !           451:                printf("%9.1x", fp->f_inode);
        !           452:                printf("  %ld\n", fp->f_un.f_offset);
        !           453:        }
        !           454: }
        !           455: 
        !           456: /*********
        !           457: #include <sys/mpx.h>
        !           458: dompx()
        !           459: {
        !           460:        struct chan chan[C];
        !           461:        struct mach mach[M];
        !           462:        struct line line[M-1];
        !           463:        int mptbc;
        !           464:        char mptbuf[TBSIZ];
        !           465:        register struct chan *cp;
        !           466:        register struct mach *mp;
        !           467:        register struct line *lp;
        !           468:        int loc, nc;
        !           469: 
        !           470:        lseek(fc, (long)setup[SMPXC].value, 0);
        !           471:        read(fc, chan, sizeof(chan));
        !           472:        lseek(fc, (long)setup[SMPXM].value, 0);
        !           473:        read(fc, mach, sizeof(mach));
        !           474:        lseek(fc, (long)setup[SMPXB1].value, 0);
        !           475:        read(fc, &mptbc, sizeof(mptbc));
        !           476:        lseek(fc, (long)setup[SMPXB2].value, 0);
        !           477:        read(fc, mptbuf, sizeof(mptbuf));
        !           478:        lseek(fc, (long)setup[SMPSM].value, 0);
        !           479:        read(fc, line, sizeof(line));
        !           480:        nc = 0;
        !           481:        for(cp=chan; cp < &chan[C]; cp++)
        !           482:                if(cp->cflag&ALLOC)
        !           483:                        nc++;
        !           484:        printf("%d mpx channels\n", nc);
        !           485:        printf("   LOC      FLG M   C    DEST\n");
        !           486:        for(cp=chan,loc=setup[SMPXC].value; cp < &chan[C]; cp++,loc=+sizeof(chan[0])) {
        !           487:                if((cp->cflag&ALLOC) == 0)
        !           488:                        continue;
        !           489:                printf("%7.1o ", loc);
        !           490:                putf(cp->cflag&BLOCK, 'B');
        !           491:                putf(cp->cflag&WWAIT, 'B');
        !           492:                putf(cp->cflag&CRUN, 'R');
        !           493:                putf(cp->cflag&RWAIT, 'W');
        !           494:                putf(cp->cflag&ALLOC, 'A');
        !           495:                putf(cp->cflag&DIS, 'D');
        !           496:                putf(cp->cflag&DLY, 'D');
        !           497:                printf(" %1d %3d ", mask(cp->m), mask(cp->c));
        !           498:                printf("%7.1o ", cp->dest);
        !           499:                printf("\n");
        !           500:        }
        !           501: 
        !           502:        printf("%d mpx machines\n", M);
        !           503:        printf("   LOC  FLG RCH RCN XCH XCN\n");
        !           504:        for(mp=mach,loc=setup[SMPXM].value; mp < &mach[M]; mp++,loc=+sizeof(mach[0])) {
        !           505:                printf("%7.1o ", loc);
        !           506:                putf(mp->mflag&RNEXT, 'N');
        !           507:                putf(mp->mflag&MRUN, 'R');
        !           508:                putf(mp->mflag&XNEXT, 'N');
        !           509:                printf(" %3d", mask(mp->rchan));
        !           510:                printf(" %3d", mask(mp->rcount));
        !           511:                printf(" %3d", mask(mp->xchan));
        !           512:                printf(" %3d", mask(mp->xcount));
        !           513:                for(nc=0; nc<128; nc++) {
        !           514:                        cp = mp->chanp[nc];
        !           515:                        if(cp == 0)
        !           516:                                continue;
        !           517:                        printf(" %d-%o", nc, cp);
        !           518:                }
        !           519:                printf("\n");
        !           520:        }
        !           521:        printf("%d mpx lines\n", M-1);
        !           522:        printf("   LOC  RSQ XSQ AKF XMF STE TIM SUM\n");
        !           523:        for(lp=line,loc=setup[SMPSM].value; lp < &line[M-1]; lp++, loc =+ sizeof(line[0])) {
        !           524:                printf("%7.1o ", loc);
        !           525:                printf("%3o ", lp->rseq);
        !           526:                printf("%3o ", lp->xseq);
        !           527:                printf("%3o ", lp->ackf);
        !           528:                printf("%3o ", lp->xflag);
        !           529:                printf("%3d ", lp->state);
        !           530:                printf("%3d ", lp->time);
        !           531:                printf("%7o\n", lp->sum);
        !           532:        }
        !           533:        printf("last characters recieved\n");
        !           534:        nc = -1;
        !           535:        loc = mptbc;
        !           536:        for(;;) {
        !           537:                if(nc != mptbuf[loc]) {
        !           538:                        if(nc >= 0)
        !           539:                                printf(")\n");
        !           540:                        nc = mptbuf[loc];
        !           541:                        printf("%d(", nc);
        !           542:                } else
        !           543:                        printf(",");
        !           544:                loc++;
        !           545:                if(loc >= TBSIZ)
        !           546:                        loc = 0;
        !           547:                if(loc == mptbc)
        !           548:                        break;
        !           549:                printf("%o", mask(mptbuf[loc]));
        !           550:                loc++;
        !           551:                if(loc >= TBSIZ)
        !           552:                        loc = 0;
        !           553:                if(loc == mptbc)
        !           554:                        break;
        !           555:        }
        !           556:        printf(")\n");
        !           557: }
        !           558: *********/

unix.superglobalmegacorp.com

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