Annotation of researchv10no/cmd/ccom/vax/tests/b.i, revision 1.1

1.1     ! root        1: typedef        unsigned char   u_char;
        !             2: typedef        unsigned short  u_short;
        !             3: typedef        unsigned int    u_int;
        !             4: typedef        unsigned long   u_long;
        !             5: typedef        struct  _physadr { int r[1]; } *physadr;
        !             6: typedef        int     daddr_t;
        !             7: typedef        char *  caddr_t;
        !             8: typedef        u_short ino_t;
        !             9: typedef        int     swblk_t;
        !            10: typedef        int     size_t;
        !            11: typedef        int     time_t;
        !            12: typedef        int     label_t[14];
        !            13: typedef        short   dev_t;
        !            14: typedef        int     off_t;
        !            15: typedef long   portid_t;
        !            16: typedef struct fd_set { int fds_bits[1]; } fd_set;
        !            17: extern struct  _iobuf {
        !            18:        int     _cnt;
        !            19:        unsigned char   *_ptr;
        !            20:        unsigned char   *_base;
        !            21:        short   _flag;
        !            22:        char    _file;
        !            23: } _iob[20];
        !            24: struct _iobuf  *fopen();
        !            25: struct _iobuf  *fdopen();
        !            26: struct _iobuf  *freopen();
        !            27: long   ftell();
        !            28: char   *fgets();
        !            29: extern char    _ctype[];
        !            30: typedef int    (*SIG_TYP)();
        !            31: SIG_TYP signal();
        !            32: struct dir
        !            33: {
        !            34:        ino_t   d_ino;
        !            35:        char    d_name[14];
        !            36: };
        !            37: struct vtimes {
        !            38:        int     vm_utime;               
        !            39:        int     vm_stime;               
        !            40:        
        !            41:        unsigned vm_idsrss;             
        !            42:        unsigned vm_ixrss;              
        !            43:        int     vm_maxrss;              
        !            44:        int     vm_majflt;              
        !            45:        int     vm_minflt;              
        !            46:        int     vm_nswap;               
        !            47:        int     vm_inblk;               
        !            48:        int     vm_oublk;               
        !            49: };
        !            50: struct timeb
        !            51: {
        !            52:        time_t  time;
        !            53:        unsigned short millitm;
        !            54:        short   timezone;
        !            55:        short   dstflag;
        !            56: };
        !            57: struct vtimes newv, oldv;
        !            58: struct timeb newt, oldt;
        !            59: char   *cpp = "/lib/cpp";
        !            60: char   *ccom = "/usr/pjw/comp/vcc/comp.sv";
        !            61: char   *c2 = "/lib/c2";
        !            62: char   *as = "/bin/as";
        !            63: char   *ld = "/bin/ld";
        !            64: char   *crt0 = "/lib/crt0.o";
        !            65: char   tmp0[30];               
        !            66: char   *tmp1, *tmp2, *tmp3, *tmp4, *tmp5;
        !            67: char   *outfile;
        !            68: char   *savestr(), *strspl(), *setsuf();
        !            69: int    idexit();
        !            70: char   **av, **clist, **llist, **plist;
        !            71: int    cflag, eflag, gflag, oflag, pflag, sflag, wflag, Rflag, exflag, proflag;
        !            72: int    vflag; 
        !            73: char   *dflag;
        !            74: int    exfail;
        !            75: char   *chpass;
        !            76: char   *npassname;
        !            77: extern int     optind;
        !            78: extern int     opterr;
        !            79: extern char    *optarg;
        !            80: extern int     optopt;
        !            81: int    nc, nl, np, nxo, na;
        !            82: main(argc, argv)
        !            83:        char **argv;
        !            84: {
        !            85:        char *t;
        !            86:        char *assource;
        !            87:        int i, j, c;
        !            88:        
        !            89:        av = (char **)calloc(argc+10, sizeof (char **));
        !            90:        clist = (char **)calloc(argc, sizeof (char **));
        !            91:        llist = (char **)calloc(argc, sizeof (char **));
        !            92:        plist = (char **)calloc(argc, sizeof (char **));
        !            93:        opterr = 0;
        !            94:        while (optind<argc) switch (c = getopt(argc, argv, "vsSo:ROPgwEpPcD:I:U:C:t:B:l:d:")) {
        !            95:        case 'v':
        !            96:                vflag++;
        !            97:                continue;
        !            98:        case 'S':
        !            99:                sflag++;
        !           100:                cflag++;
        !           101:                continue;
        !           102:        case 'l':
        !           103:                llist[nl++] = strspl("-l", optarg);
        !           104:                continue;
        !           105:        case 'o':
        !           106:                outfile = optarg;
        !           107:                switch (getsuf(outfile)) {
        !           108:                case 'c':
        !           109:                case 'o':
        !           110:                        error("-o would overwrite %s", outfile);
        !           111:                        exit(8);
        !           112:                }
        !           113:                continue;
        !           114:        case 'R':
        !           115:                Rflag++;
        !           116:                continue;
        !           117:        case 'O':
        !           118:                oflag++;
        !           119:                continue;
        !           120:        case 'p':
        !           121:                proflag++;
        !           122:                continue;
        !           123:        case 'g':
        !           124:                gflag++;
        !           125:                continue;
        !           126:        case 'w':
        !           127:                wflag++;
        !           128:                continue;
        !           129:        case 'E':
        !           130:                exflag++;
        !           131:        case 'P':
        !           132:                pflag++;
        !           133:                t = strspl("-", "x");
        !           134:                t[1] = optopt;
        !           135:                plist[np++] = t;
        !           136:        case 'c':
        !           137:                cflag++;
        !           138:                continue;
        !           139:        case 'D':
        !           140:        case 'I':
        !           141:        case 'U':
        !           142:        case 'C':
        !           143:                plist[np] = strspl("-X", optarg);
        !           144:                plist[np++][1] = c;
        !           145:                continue;
        !           146:        case 't':
        !           147:                if (chpass)
        !           148:                        error("-t overwrites earlier option", 0);
        !           149:                chpass = optarg;
        !           150:                if (chpass[0]==0)
        !           151:                        chpass = "012p";
        !           152:                continue;
        !           153:        case 'B':
        !           154:                if (npassname)
        !           155:                        error("-B overwrites earlier option", 0);
        !           156:                npassname = optarg;
        !           157:                if (npassname[0]==0)
        !           158:                        npassname = "/usr/c/o";
        !           159:                continue;
        !           160:        case 'd':
        !           161:                dflag = strspl("-d", optarg);
        !           162:                continue;
        !           163:        case '?':
        !           164:        case 's':
        !           165:                t = strspl("-", "x");
        !           166:                t[1] = optopt;
        !           167:                llist[nl++] = t;
        !           168:                continue;
        !           169:        case (-1):
        !           170:                t = argv[optind];
        !           171:                optind++;
        !           172:                c = getsuf(t);
        !           173:                if (c=='c' || c=='s' || c=='i' || exflag) {
        !           174:                        clist[nc++] = t;
        !           175:                        t = setsuf(t, 'o');
        !           176:                }
        !           177:                if (nodup(llist, t)) {
        !           178:                        llist[nl++] = t;
        !           179:                        if (getsuf(t)=='o')
        !           180:                                nxo++;
        !           181:                }
        !           182:        }
        !           183:        if (gflag) {
        !           184:                if (oflag)
        !           185:                        fprintf((&_iob[2]), "cc: warning: -g disables -O\n");
        !           186:                oflag = 0;
        !           187:        }
        !           188:        if (npassname && chpass ==0)
        !           189:                chpass = "012p";
        !           190:        if (chpass && npassname==0)
        !           191:                npassname = "/usr/new";
        !           192:        if (chpass)
        !           193:        for (t=chpass; *t; t++) {
        !           194:                switch (*t) {
        !           195:                case '0':
        !           196:                        ccom = strspl(npassname, "ccom");
        !           197:                        continue;
        !           198:                case '2':
        !           199:                        c2 = strspl(npassname, "c2");
        !           200:                        continue;
        !           201:                case 'p':
        !           202:                        cpp = strspl(npassname, "cpp");
        !           203:                        continue;
        !           204:                }
        !           205:        }
        !           206:        if (proflag)
        !           207:                crt0 = "/lib/mcrt0.o";
        !           208:        if (nc==0)
        !           209:                goto nocom;
        !           210:        if (signal(2    ,       (int (*)())1) !=        (int (*)())1)
        !           211:                (void)signal(2  , idexit);
        !           212:        if (signal(15   ,       (int (*)())1) !=        (int (*)())1)
        !           213:                (void)signal(15 , idexit);
        !           214:        if (pflag==0)
        !           215:                sprintf(tmp0, "/tmp/ctm%05.5d", getpid());
        !           216:        tmp1 = strspl(tmp0, "1");
        !           217:        tmp2 = strspl(tmp0, "2");
        !           218:        tmp3 = strspl(tmp0, "3");
        !           219:        if (pflag==0)
        !           220:                tmp4 = strspl(tmp0, "4");
        !           221:        if (oflag)
        !           222:                tmp5 = strspl(tmp0, "5");
        !           223:        for (i=0; i<nc; i++) {
        !           224:                int suffix = getsuf(clist[i]);
        !           225:                if (nc > 1) {
        !           226:                        printf("%s:\n", clist[i]);
        !           227:                        fflush((&_iob[1]));
        !           228:                }
        !           229:                if (suffix == 's') {
        !           230:                        assource = clist[i];
        !           231:                        goto assemble;
        !           232:                } else
        !           233:                        assource = tmp3;
        !           234:                if (suffix == 'i')
        !           235:                        goto compile;
        !           236:                if (pflag)
        !           237:                        tmp4 = setsuf(clist[i], 'i');
        !           238:                av[0] = "cpp";
        !           239:                av[1] = clist[i];
        !           240:                av[2] = exflag ? "-" : tmp4;
        !           241:                na = 3;
        !           242:                for (j = 0; j < np; j++)
        !           243:                        av[na++] = plist[j];
        !           244:                av[na++] = 0;
        !           245:                switch (callsys(cpp, av)) {
        !           246:                        case 0:
        !           247:                                break;
        !           248:                        default:
        !           249:                                if (callsys("/lib/cpre",av)) {
        !           250:                                        exfail++;
        !           251:                                        exflag++;
        !           252:                                }
        !           253:                }
        !           254:                if (pflag || exfail) {
        !           255:                        cflag++;
        !           256:                        continue;
        !           257:                }
        !           258:                if (sflag)
        !           259:                        assource = tmp3 = setsuf(clist[i], 's');
        !           260: compile:
        !           261:                av[0] = "ccom";
        !           262:                av[1] = suffix=='i'? clist[i]: tmp4;
        !           263:                av[2] = oflag? tmp5:tmp3;
        !           264:                na = 3;
        !           265:                if (proflag)
        !           266:                        av[na++] = "-XP";
        !           267:                if (gflag)
        !           268:                        av[na++] = "-Xg";
        !           269:                if (wflag)
        !           270:                        av[na++] = "-w";
        !           271:                av[na] = 0;
        !           272:                if (callsys(ccom, av)) {
        !           273:                        cflag++;
        !           274:                        eflag++;
        !           275:                        continue;
        !           276:                }
        !           277:                if (oflag) {
        !           278:                        av[0] = "c2"; av[1] = tmp5; av[2] = tmp3; av[3] = 0;
        !           279:                        if (callsys(c2, av)) {
        !           280:                                unlink(tmp3);
        !           281:                                tmp3 = assource = tmp5;
        !           282:                        } else
        !           283:                                unlink(tmp5);
        !           284:                }
        !           285:                if (sflag)
        !           286:                        continue;
        !           287:        assemble:
        !           288:                        if (tmp1) unlink(tmp1);         if (tmp2) unlink(tmp2);         if (tmp4) unlink(tmp4);
        !           289:                av[0] = "as"; av[1] = "-o"; av[2] = setsuf(clist[i], 'o');
        !           290:                na = 3;
        !           291:                if (Rflag)
        !           292:                        av[na++] = "-R";
        !           293:                if (dflag)
        !           294:                        av[na++] = dflag;
        !           295:                av[na++] = assource;
        !           296:                av[na] = 0;
        !           297:                if (callsys(as, av) > 1) {
        !           298:                        cflag++;
        !           299:                        eflag++;
        !           300:                        continue;
        !           301:                }
        !           302:        }
        !           303: nocom:
        !           304:        if (cflag==0 && nl!=0) {
        !           305:                i = 0;
        !           306:                av[0] = "ld"; av[1] = "-X"; av[2] = crt0; na = 3;
        !           307:                if (outfile) {
        !           308:                        av[na++] = "-o";
        !           309:                        av[na++] = outfile;
        !           310:                }
        !           311:                while (i < nl)
        !           312:                        av[na++] = llist[i++];
        !           313:                if (gflag)
        !           314:                        av[na++] = "-lg";
        !           315:                av[na++] = "-lc";
        !           316:                av[na++] = 0;
        !           317:                eflag |= callsys(ld, av);
        !           318:                if (nc==1 && nxo==1 && eflag==0)
        !           319:                        unlink(setsuf(clist[0], 'o'));
        !           320:        }
        !           321:        dexit();
        !           322: }
        !           323: idexit()
        !           324: {
        !           325:        eflag = 100;
        !           326:        dexit();
        !           327: }
        !           328: dexit()
        !           329: {
        !           330:        if (!pflag) {
        !           331:                        if (tmp1) unlink(tmp1);
        !           332:                        if (tmp2) unlink(tmp2);
        !           333:                if (sflag==0)
        !           334:                                if (tmp3) unlink(tmp3);
        !           335:                        if (tmp4) unlink(tmp4);
        !           336:                        if (tmp5) unlink(tmp5);
        !           337:        }
        !           338:        exit(eflag);
        !           339: }
        !           340: error(s, x)
        !           341:        char *s, *x;
        !           342: {
        !           343:        struct _iobuf *diag = exflag ? (&_iob[2]) : (&_iob[1]);
        !           344:        fprintf(diag, "cc: ");
        !           345:        fprintf(diag, s, x);
        !           346:         (--( diag)->_cnt>=0? ((int)(*( diag)->_ptr++=(unsigned)('\n'))):_flsbuf((unsigned)('\n'), diag));
        !           347:        exfail++;
        !           348:        cflag++;
        !           349:        eflag++;
        !           350: }
        !           351: getsuf(as)
        !           352: char as[];
        !           353: {
        !           354:        register int c;
        !           355:        register char *s;
        !           356:        register int t;
        !           357:        s = as;
        !           358:        c = 0;
        !           359:        while (t = *s++)
        !           360:                if (t=='/')
        !           361:                        c = 0;
        !           362:                else
        !           363:                        c++;
        !           364:        s -= 3;
        !           365:        if (c <= 14 && c > 2 && *s++ == '.')
        !           366:                return (*s);
        !           367:        return (0);
        !           368: }
        !           369: char *
        !           370: setsuf(as, ch)
        !           371:        char *as;
        !           372: {
        !           373:        register char *s, *s1;
        !           374:        s = s1 = savestr(as);
        !           375:        while (*s)
        !           376:                if (*s++ == '/')
        !           377:                        s1 = s;
        !           378:        s[-1] = ch;
        !           379:        return (s1);
        !           380: }
        !           381: callsys(f, v)
        !           382:        char *f, **v;
        !           383: {
        !           384:        int t, status;
        !           385:        register char **vp;     
        !           386:        if(vflag) {     
        !           387:                vp = v;
        !           388:                fprintf((&_iob[2]),"+ ");
        !           389:                while (*vp)
        !           390:                        fprintf((&_iob[2]),"%s ",*vp++);
        !           391:                fprintf((&_iob[2]), "\n");
        !           392:        }
        !           393:        ftime(&oldt);
        !           394:        vtimes(0, &oldv);
        !           395:        t = vfork();
        !           396:        if (t == -1) {
        !           397:                printf("No more processes\n");
        !           398:                return (100);
        !           399:        }
        !           400:        if (t == 0) {
        !           401:                execv(f, v);
        !           402:                printf("Can't find %s\n", f);
        !           403:                fflush((&_iob[1]));
        !           404:                _exit(100);
        !           405:        }
        !           406:        while (t != wait(&status))
        !           407:                ;
        !           408:        ftime(&newt);
        !           409:        vtimes(0, &newv);
        !           410:        printf("%s\n", f);
        !           411:        printf("real %g user %g sys %g ", newt.time - oldt.time
        !           412:                + newt.millitm / 1000. - oldt.millitm / 1000.,
        !           413:                (newv.vm_utime - oldv.vm_utime) / 60.,
        !           414:                (newv.vm_stime - oldv.vm_stime) / 60.);
        !           415:        printf("reads %d writes %d\n", newv.vm_inblk - oldv.vm_inblk,
        !           416:                newv.vm_oublk - oldv.vm_oublk);
        !           417:        if ((t=(status&0377)) != 0 && t!=14) {
        !           418:                if (t!=2) {
        !           419:                        printf("Fatal error in %s\n", f);
        !           420:                        eflag = 8;
        !           421:                }
        !           422:                dexit();
        !           423:        }
        !           424:        return ((status>>8) & 0377);
        !           425: }
        !           426: nodup(l, os)
        !           427:        char **l, *os;
        !           428: {
        !           429:        register char *t, *s;
        !           430:        register int c;
        !           431:        s = os;
        !           432:        if (getsuf(s) != 'o')
        !           433:                return (1);
        !           434:        while (t = *l++) {
        !           435:                while (c = *s++)
        !           436:                        if (c != *t++)
        !           437:                                break;
        !           438:                if (*t==0 && c==0)
        !           439:                        return (0);
        !           440:                s = os;
        !           441:        }
        !           442:        return (1);
        !           443: }
        !           444: char   *savetab;
        !           445: int    saveleft;
        !           446: char *
        !           447: savestr(cp)
        !           448:        register char *cp;
        !           449: {
        !           450:        register int len;
        !           451:        len = strlen(cp) + 1;
        !           452:        if (len > saveleft) {
        !           453:                saveleft = 1024;
        !           454:                if (len > saveleft)
        !           455:                        saveleft = len;
        !           456:                savetab = (char *)malloc(saveleft);
        !           457:                if (savetab == 0) {
        !           458:                        fprintf((&_iob[2]), "ran out of memory (savestr)\n");
        !           459:                        exit(1);
        !           460:                }
        !           461:        }
        !           462:        strncpy(savetab, cp, len);
        !           463:        cp = savetab;
        !           464:        savetab += len;
        !           465:        saveleft -= len;
        !           466:        return (cp);
        !           467: }
        !           468: char *
        !           469: strspl(left, right)
        !           470:        char *left, *right;
        !           471: {
        !           472:        char buf[1024];
        !           473:        strcpy(buf, left);
        !           474:        strcat(buf, right);
        !           475:        return (savestr(buf));
        !           476: }

unix.superglobalmegacorp.com

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