Annotation of 43BSDTahoe/bin/make/gcos.c, revision 1.1

1.1     ! root        1: static char *sccsid = "@(#)gcos.c      4.4 (Berkeley) 87/12/04";
        !             2: /* GCOS DEPENDENT PROCEDURES */
        !             3: 
        !             4: 
        !             5: /* DEFAULT RULES FOR GCOS */
        !             6: 
        !             7: char *builtin[]
        !             8:        {
        !             9:        ".SUFFIXES : .d .c .y .lib",
        !            10:        ".d.c:",
        !            11:        "\t./dtgen $<",
        !            12:        ".y.c:",
        !            13:        "\t./yacc $<",
        !            14:        "\tcopy y.tab.c; /$@",
        !            15:        ".y.lib:",
        !            16:        "\t./yacc $<",
        !            17:        "\t./cc y.tab.c r=$@",
        !            18:        ".c.lib:",
        !            19:        "\t./cc $< r=$@",
        !            20:        0 };
        !            21: 
        !            22: # define MAXCSIZE 500
        !            23: # define YZERO 60
        !            24: 
        !            25: int gtcalled 0;
        !            26: 
        !            27: /* all kinds of static declarations that must be used.. */
        !            28: 
        !            29: static double day { 64*1000*60*60*24 };  /* length of day in clock ticks */
        !            30: 
        !            31: struct { int lhs:18, rhs:18; };
        !            32: struct catb {
        !            33:        int words[6],
        !            34:        name1, name2,
        !            35:        passw1, passw2,
        !            36:        word10, word11,
        !            37:        datcreat, datmod,  datused,
        !            38:        stuff[6],
        !            39:        jjjj:18, tused:18;
        !            40:        };
        !            41: struct { int :3, slot:18; };  /* slot where time from cat. block fits */
        !            42: 
        !            43: struct catdesc {
        !            44:        int cat1, cat2, cpass1, cpass2,
        !            45:            file1, file2, filep1, filep2,
        !            46:            endmark; };
        !            47: 
        !            48: extern int _q_reg, _a_reg;
        !            49: 
        !            50: 
        !            51: # define A10(x,y) 10*x + y
        !            52: 
        !            53: /*     interpret the mm/dd/yy format */
        !            54: 
        !            55: struct d9 { int        :5, m1:4, :5, m2:4, :9,
        !            56:                :5, d1:4, :5, d2:4, :9,
        !            57:                :5, y1:4, :5, y2:4  ;};
        !            58: 
        !            59: struct d6 { int        :2, m61:4, :2, m62:4,
        !            60:                :2, d61:4, :2, d62:4,
        !            61:                :2, y61:4, :2, y62:4; };
        !            62: 
        !            63: static day6( d6word ){ /* return the day number of a word in bci format */
        !            64:        int m, y, d;
        !            65: 
        !            66:        y = A10( d6word.y61, d6word.y62 );
        !            67:        m = A10( d6word.m61, d6word.m62 );
        !            68:        d = A10( d6word.d61, d6word.d62 );
        !            69: 
        !            70:        return( d + 31*( m + 12*(y-YZERO) ) );
        !            71:        }
        !            72: 
        !            73: static day9( p ) register int *p; {
        !            74: 
        !            75:        int m, y, d;
        !            76: 
        !            77:        y = A10( p->y1, p->y2 );
        !            78:        m = A10( p->m1, p->m2 );
        !            79:        d = A10( p->d1, p->d2 );
        !            80: 
        !            81:        return( d + 31*( m + 12*(y-YZERO) ) );
        !            82:        }
        !            83: 
        !            84: 
        !            85: static int dfold( dayno, timeno ){
        !            86:        int kk;
        !            87:        kk = ( day*dayno + timeno) / 32768.;
        !            88:        }
        !            89: 
        !            90: int prestime(){
        !            91:        int date[2];
        !            92:        drldrl( 021, date );
        !            93:        return( dfold( day9(date), _q_reg ) );
        !            94:        }
        !            95: 
        !            96: 
        !            97: 
        !            98: # define DODRL ar[0] = status; ar[1] = &b.cat1; drldrl(30,sp1,sp2); p=ar[0]<<18;
        !            99: 
        !           100: static struct { int fn1, fn2;  int ftm; } fbb[MAXCSIZE];
        !           101: static int catsiz;
        !           102: 
        !           103: getcat() {
        !           104: 
        !           105:        register i, *p, j;
        !           106:        int asname[4];
        !           107:        struct catdesc b;
        !           108:        int sp1, sp2, temp;
        !           109:        int ar[2], status[2];
        !           110:        int filbuf[380];
        !           111: 
        !           112:        gtcalled = 1;
        !           113: 
        !           114:        sp1 = ar;
        !           115:        sp1 >>= 18;
        !           116:        sp2 = filbuf;
        !           117:        sp2 >>= 18;
        !           118:        sp2.lhs = 19;
        !           119: 
        !           120:        b.cat1 = b.cat2 = b.file1 = -1;
        !           121:        b.cpass1 = b.cpass2 = 0202020202020;
        !           122: 
        !           123:        DODRL
        !           124:        sp2.lhs++;
        !           125:        for( i=0; p!=0 && i<MAXCSIZE; ++i ){
        !           126: 
        !           127:                fbb[i].fn1 = b.file1 = p->name1;
        !           128:                fbb[i].fn2 = b.file2 = p->name2;
        !           129:                b.filep1 = p->passw1;
        !           130:                b.filep2 = p->passw2;
        !           131:                b.endmark = -1;
        !           132:                temp = 0;
        !           133:                temp.slot = p->tused;
        !           134:                fbb[i].ftm = dfold( day6(p->datmod), temp );
        !           135:                DODRL
        !           136:                }
        !           137:        catsiz = i;
        !           138:        }
        !           139: 
        !           140:  exists( p ) 
        !           141:  struct nameblock *p; {
        !           142:        char *s, *cp, name[13];
        !           143:        int i, *p, bcd[2];
        !           144: 
        !           145: /*
        !           146:    cheat about names with slashes -- try opening;
        !           147:    if it is openable, it exists, and assume it was made
        !           148:    at t=1 (long time ago); otherwise, assume it
        !           149:    does not exist
        !           150: */
        !           151: 
        !           152: cp = p->namep;
        !           153: 
        !           154: for(s=cp ; *s ; ++s)
        !           155:        if(*s == '/')
        !           156:                if(i = copen(cp,'r') < 0)
        !           157:                        return(0);
        !           158:                else    {
        !           159:                        cclose(i);
        !           160:                        return(1);
        !           161:                        }
        !           162: 
        !           163: if(gtcalled == 0)  getcat();
        !           164: 
        !           165:        p = name;
        !           166:        for( i=0; *cp; ++i ) name[i] = *cp++;
        !           167:        while( i<12 ) name[i++] = ' ';
        !           168:        f9to6( *p, bcd[0], 12 );
        !           169:        for ( i=0; i<catsiz; ++i ){
        !           170:                if( fbb[i].fn1 == bcd[0] && fbb[i].fn2 == bcd[1] )
        !           171:                        return( fbb[i].ftm );
        !           172:                }
        !           173:        return( 0 );
        !           174:        }
        !           175: 
        !           176: 
        !           177: #include "defs"
        !           178: 
        !           179: static char n13[13];
        !           180: static char *n13end &n13[12];
        !           181: 
        !           182: 
        !           183: 
        !           184: struct depblock *srchdir(pat, mkchain, nextdbl)
        !           185: 
        !           186: char *pat; /* pattern to be matched in directory */
        !           187: int mkchain;  /* nonzero if results to be remembered */
        !           188: struct depblock *nextdbl;  /* final value for chain */
        !           189: {
        !           190: int dirf;
        !           191: int i, nread;
        !           192: char *dirname, *dirpref, *endir, *filepat, *p, temp[BUFSIZ];
        !           193: char fullname[BUFSIZ], *p1, *p2, *copys();
        !           194: struct nameblock *q;
        !           195: struct depblock *thisdbl;
        !           196: struct pattern *patp;
        !           197: int *intp1, *intp2;
        !           198: 
        !           199: if(gtcalled == 0)  getcat();
        !           200: thisdbl=0;
        !           201: 
        !           202: if(mkchain == 0)
        !           203:        for(patp=firstpat ; patp!=0 ; patp = patp->nxtpattern)
        !           204:                if(! unequal(pat, patp->patval)) return(0);
        !           205: 
        !           206: patp = ALLOC(pattern);
        !           207: patp->nxtpattern = firstpat;
        !           208: firstpat = patp;
        !           209: patp->patval = copys(pat);
        !           210: 
        !           211: endir = 0;
        !           212: 
        !           213: for(p=pat; *p!='\0'; ++p)
        !           214:        if(*p=='/') endir = p;
        !           215: 
        !           216: if(endir==0)
        !           217:        {
        !           218:        dirname = "";
        !           219:        dirpref = "";
        !           220:        filepat = pat;
        !           221:        }
        !           222: else   {
        !           223: fatal("File name has an embedded slash");
        !           224:        dirname = pat;
        !           225:        *endir = '\0';
        !           226:        dirpref = concat(dirname, "/", temp);
        !           227:        filepat = endir+1;
        !           228:        }
        !           229: 
        !           230: for(i=0;i<catsiz;++i)
        !           231:        {
        !           232:        intp1 = &fbb[i].fn1;
        !           233:        intp2 = n13;
        !           234:        f6to9(*intp1, *intp2, 12);
        !           235:        for(p1=n13; p1<n13end && *p1!=' ' ; ++p1) 
        !           236:                if('A'<=*p1 && *p1<='Z') *p1 += ('a'-'A');
        !           237:                *p1 = '\0';
        !           238: 
        !           239:        if( amatch(n13,filepat) )
        !           240:                {
        !           241:                concat(dirpref,n13,fullname);
        !           242:                if( (q=srchname(fullname)) ==0)
        !           243:                        q = makename(copys(fullname));
        !           244:                if(mkchain)
        !           245:                        {
        !           246:                        thisdbl = ALLOC(depblock);
        !           247:                        thisdbl->nextp = nextdbl;
        !           248:                        thisdbl->depname = q;
        !           249:                        nextdbl = thisdbl;
        !           250:                        }
        !           251:                }
        !           252:        }
        !           253: 
        !           254: if(endir != 0)  *endir = '/';
        !           255: 
        !           256: return(thisdbl);
        !           257: }
        !           258: 
        !           259: /* stolen from glob through find */
        !           260: 
        !           261: amatch(s, p)
        !           262: char *s, *p;
        !           263: {
        !           264:        register int cc, scc, k;
        !           265:        int c, lc;
        !           266: 
        !           267:        scc = *s;
        !           268:        lc = 077777;
        !           269:        switch (c = *p) {
        !           270: 
        !           271:        case '[':
        !           272:                k = 0;
        !           273:                while (cc = *++p) {
        !           274:                        switch (cc) {
        !           275: 
        !           276:                        case ']':
        !           277:                                if (k)
        !           278:                                        return(amatch(++s, ++p));
        !           279:                                else
        !           280:                                        return(0);
        !           281: 
        !           282:                        case '-':
        !           283:                                k |= lc <= scc & scc <= (cc=p[1]);
        !           284:                        }
        !           285:                        if (scc==(lc=cc)) k++;
        !           286:                }
        !           287:                return(0);
        !           288: 
        !           289:        case '?':
        !           290:        caseq:
        !           291:                if(scc) return(amatch(++s, ++p));
        !           292:                return(0);
        !           293:        case '*':
        !           294:                return(umatch(s, ++p));
        !           295:        case 0:
        !           296:                return(!scc);
        !           297:        }
        !           298:        if (c==scc) goto caseq;
        !           299:        return(0);
        !           300: }
        !           301: 
        !           302: umatch(s, p)
        !           303: char *s, *p;
        !           304: {
        !           305:        if(*p==0) return(1);
        !           306:        while(*s)
        !           307:                if (amatch(s++,p)) return(1);
        !           308:        return(0);
        !           309: }
        !           310: 
        !           311: 
        !           312: 
        !           313: dosys(comstring,nohalt)
        !           314: char *comstring;
        !           315: int nohalt;
        !           316: {
        !           317: char *p;
        !           318: 
        !           319: for(p=comstring ; *p!='\0' ; ++p);
        !           320: if( p-comstring > 80)
        !           321:        fatal("Command string longer than 80 characters");
        !           322: 
        !           323: system(comstring);
        !           324: 
        !           325: return(0);
        !           326: }
        !           327: 
        !           328: 
        !           329: touch(s)
        !           330: char *s;
        !           331: {
        !           332: fprintf(stderr, "touch not yet implemented on GCOS\n");
        !           333: cexit(2);
        !           334: }

unix.superglobalmegacorp.com

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