|
|
1.1 ! root 1: /* UNIX DEPENDENT PROCEDURES */ ! 2: ! 3: ! 4: /* DEFAULT RULES FOR UNIX */ ! 5: ! 6: char *builtin[] = ! 7: { ! 8: #ifdef pwb ! 9: ".SUFFIXES : .L .out .o .c .f .e .r .y .yr .ye .l .s .z .x .t .h .cl", ! 10: #else ! 11: ".SUFFIXES : .out .o .c .f .e .r .y .yr .ye .l .s .cl .p", ! 12: #endif ! 13: "YACC=yacc", ! 14: "YACCR=yacc -r", ! 15: "YACCE=yacc -e", ! 16: "YFLAGS=", ! 17: "LEX=lex", ! 18: "LFLAGS=", ! 19: "CC=cc", ! 20: #ifdef vax ! 21: "AS=as", ! 22: #else ! 23: "AS=as -", ! 24: #endif ! 25: "PC=pc", ! 26: "PFLAGS=", ! 27: "CFLAGS=", ! 28: "RC=f77", ! 29: "RFLAGS=", ! 30: "EC=f77", ! 31: "EFLAGS=", ! 32: "FFLAGS=", ! 33: "LOADLIBES=", ! 34: #ifdef pwb ! 35: "SCOMP=scomp", ! 36: "SCFLAGS=", ! 37: "CMDICT=cmdict", ! 38: "CMFLAGS=", ! 39: #endif ! 40: ! 41: ".c.o :", ! 42: "\t$(CC) $(CFLAGS) -c $<", ! 43: ! 44: ".p.o :", ! 45: "\t$(PC) $(PFLAGS) -c $<", ! 46: ! 47: ".cl.o :", ! 48: "\tclass -c $<", ! 49: ! 50: ".e.o .r.o .f.o :", ! 51: "\t$(FC) $(RFLAGS) $(EFLAGS) $(FFLAGS) -c $<", ! 52: ! 53: ".s.o :", ! 54: "\t$(AS) -o $@ $<", ! 55: ! 56: ".y.o :", ! 57: "\t$(YACC) $(YFLAGS) $<", ! 58: "\t$(CC) $(CFLAGS) -c y.tab.c", ! 59: "\trm y.tab.c", ! 60: "\tmv y.tab.o $@", ! 61: ! 62: ".yr.o:", ! 63: "\t$(YACCR) $(YFLAGS) $<", ! 64: "\t$(RC) $(RFLAGS) -c y.tab.r", ! 65: "\trm y.tab.r", ! 66: "\tmv y.tab.o $@", ! 67: ! 68: ".ye.o :", ! 69: "\t$(YACCE) $(YFLAGS) $<", ! 70: "\t$(EC) $(RFLAGS) -c y.tab.e", ! 71: "\trm y.tab.e", ! 72: "\tmv y.tab.o $@", ! 73: ! 74: ".l.o :", ! 75: "\t$(LEX) $(LFLAGS) $<", ! 76: "\t$(CC) $(CFLAGS) -c lex.yy.c", ! 77: "\trm lex.yy.c", ! 78: "\tmv lex.yy.o $@", ! 79: ! 80: ".y.c :", ! 81: "\t$(YACC) $(YFLAGS) $<", ! 82: "\tmv y.tab.c $@", ! 83: ! 84: ".l.c :", ! 85: "\t$(LEX) $(LFLAGS) $<", ! 86: "\tmv lex.yy.c $@", ! 87: ! 88: ".yr.r:", ! 89: "\t$(YACCR) $(YFLAGS) $<", ! 90: "\tmv y.tab.r $@", ! 91: ! 92: ".ye.e :", ! 93: "\t$(YACCE) $(YFLAGS) $<", ! 94: "\tmv y.tab.e $@", ! 95: ! 96: #ifdef pwb ! 97: ".o.L .c.L .t.L:", ! 98: "\t$(SCOMP) $(SCFLAGS) $<", ! 99: ! 100: ".t.o:", ! 101: "\t$(SCOMP) $(SCFLAGS) -c $<", ! 102: ! 103: ".t.c:", ! 104: "\t$(SCOMP) $(SCFLAGS) -t $<", ! 105: ! 106: ".h.z .t.z:", ! 107: "\t$(CMDICT) $(CMFLAGS) $<", ! 108: ! 109: ".h.x .t.x:", ! 110: "\t$(CMDICT) $(CMFLAGS) -c $<", ! 111: #endif ! 112: ! 113: ".s.out .c.out .o.out :", ! 114: "\t$(CC) $(CFLAGS) $< $(LOADLIBES) -o $@", ! 115: ! 116: ".f.out .r.out .e.out :", ! 117: "\t$(FC) $(EFLAGS) $(RFLAGS) $(FFLAGS) $< $(LOADLIBES) -o $@", ! 118: "\t-rm $*.o", ! 119: ! 120: ".y.out :", ! 121: "\t$(YACC) $(YFLAGS) $<", ! 122: "\t$(CC) $(CFLAGS) y.tab.c $(LOADLIBES) -ly -o $@", ! 123: "\trm y.tab.c", ! 124: ! 125: ".l.out :", ! 126: "\t$(LEX) $(LFLAGS) $<", ! 127: "\t$(CC) $(CFLAGS) lex.yy.c $(LOADLIBES) -ll -o $@", ! 128: "\trm lex.yy.c", ! 129: ! 130: 0 }; ! 131: ! 132: #include "defs" ! 133: #include <sys/types.h> ! 134: ! 135: ! 136: TIMETYPE exists(filename) ! 137: char *filename; ! 138: { ! 139: #include <sys/stat.h> ! 140: struct stat buf; ! 141: register char *s; ! 142: TIMETYPE lookarch(); ! 143: ! 144: for(s = filename ; *s!='\0' && *s!='(' ; ++s) ! 145: ; ! 146: ! 147: if(*s == '(') ! 148: return(lookarch(filename)); ! 149: ! 150: if(stat(filename,&buf) < 0) ! 151: return(0); ! 152: else return(buf.st_mtime); ! 153: } ! 154: ! 155: ! 156: TIMETYPE prestime() ! 157: { ! 158: TIMETYPE t; ! 159: time(&t); ! 160: return(t); ! 161: } ! 162: ! 163: ! 164: ! 165: #include <sys/dir.h> ! 166: FSTATIC char n15[15]; ! 167: FSTATIC char *n15end = &n15[14]; ! 168: ! 169: ! 170: ! 171: struct depblock *srchdir(pat, mkchain, nextdbl) ! 172: register char *pat; /* pattern to be matched in directory */ ! 173: int mkchain; /* nonzero if results to be remembered */ ! 174: struct depblock *nextdbl; /* final value for chain */ ! 175: { ! 176: FILE * dirf; ! 177: register int i; ! 178: int nread, cldir; ! 179: char *dirname, *dirpref, *endir, *filepat, *p, temp[100]; ! 180: char fullname[100], *p1, *p2; ! 181: struct nameblock *q; ! 182: struct depblock *thisdbl; ! 183: struct opendir *od; ! 184: struct pattern *patp; ! 185: ! 186: struct direct entry[32]; ! 187: ! 188: ! 189: thisdbl = 0; ! 190: ! 191: if(mkchain == NO) ! 192: for(patp=firstpat ; patp ; patp = patp->nxtpattern) ! 193: if(! unequal(pat, patp->patval)) return(0); ! 194: ! 195: patp = ALLOC(pattern); ! 196: patp->nxtpattern = firstpat; ! 197: firstpat = patp; ! 198: patp->patval = copys(pat); ! 199: ! 200: endir = 0; ! 201: ! 202: for(p=pat; *p!='\0'; ++p) ! 203: if(*p=='/') endir = p; ! 204: ! 205: if(endir==0) ! 206: { ! 207: dirname = "."; ! 208: dirpref = ""; ! 209: filepat = pat; ! 210: } ! 211: else { ! 212: dirname = pat; ! 213: *endir = '\0'; ! 214: dirpref = concat(dirname, "/", temp); ! 215: filepat = endir+1; ! 216: } ! 217: ! 218: dirf = NULL; ! 219: cldir = NO; ! 220: ! 221: for(od = firstod; od; od = od->nxtopendir) ! 222: if(! unequal(dirname, od->dirn) ) ! 223: { ! 224: dirf = od->dirfc; ! 225: fseek(dirf, 0L, 0); /* start over at the beginning */ ! 226: break; ! 227: } ! 228: ! 229: if(dirf == NULL) ! 230: { ! 231: dirf = fopen(dirname, "r"); ! 232: if(nopdir >= MAXDIR) ! 233: cldir = YES; ! 234: else { ! 235: ++nopdir; ! 236: od = ALLOC(opendir); ! 237: od->nxtopendir = firstod; ! 238: firstod = od; ! 239: od->dirfc = dirf; ! 240: od->dirn = copys(dirname); ! 241: } ! 242: } ! 243: ! 244: if(dirf == NULL) ! 245: { ! 246: fprintf(stderr, "Directory %s: ", dirname); ! 247: fatal("Cannot open"); ! 248: } ! 249: ! 250: else do ! 251: { ! 252: nread = fread( (char *) &entry[0], sizeof(struct direct), 32, dirf) ; ! 253: for(i=0; i<nread; ++i) ! 254: if(entry[i].d_ino!= 0) ! 255: { ! 256: p1 = entry[i].d_name; ! 257: p2 = n15; ! 258: while( (p2<n15end) && ! 259: (*p2++ = *p1++)!='\0' ); ! 260: if( amatch(n15,filepat) ) ! 261: { ! 262: concat(dirpref,n15,fullname); ! 263: if( (q=srchname(fullname)) ==0) ! 264: q = makename(copys(fullname)); ! 265: if(mkchain) ! 266: { ! 267: thisdbl = ALLOC(depblock); ! 268: thisdbl->nxtdepblock = nextdbl; ! 269: thisdbl->depname = q; ! 270: nextdbl = thisdbl; ! 271: } ! 272: } ! 273: } ! 274: ! 275: } while(nread==32); ! 276: ! 277: if(endir != 0) *endir = '/'; ! 278: ! 279: if(cldir) ! 280: fclose(dirf); ! 281: return(thisdbl); ! 282: } ! 283: ! 284: /* stolen from glob through find */ ! 285: ! 286: static amatch(s, p) ! 287: char *s, *p; ! 288: { ! 289: register int cc, scc, k; ! 290: int c, lc; ! 291: ! 292: scc = *s; ! 293: lc = 077777; ! 294: switch (c = *p) { ! 295: ! 296: case '[': ! 297: k = 0; ! 298: while (cc = *++p) { ! 299: switch (cc) { ! 300: ! 301: case ']': ! 302: if (k) ! 303: return(amatch(++s, ++p)); ! 304: else ! 305: return(0); ! 306: ! 307: case '-': ! 308: k |= (lc <= scc) & (scc <= (cc=p[1]) ) ; ! 309: } ! 310: if (scc==(lc=cc)) k++; ! 311: } ! 312: return(0); ! 313: ! 314: case '?': ! 315: caseq: ! 316: if(scc) return(amatch(++s, ++p)); ! 317: return(0); ! 318: case '*': ! 319: return(umatch(s, ++p)); ! 320: case 0: ! 321: return(!scc); ! 322: } ! 323: if (c==scc) goto caseq; ! 324: return(0); ! 325: } ! 326: ! 327: static umatch(s, p) ! 328: char *s, *p; ! 329: { ! 330: if(*p==0) return(1); ! 331: while(*s) ! 332: if (amatch(s++,p)) return(1); ! 333: return(0); ! 334: } ! 335: ! 336: #ifdef METERFILE ! 337: #include <pwd.h> ! 338: int meteron = 0; /* default: metering off */ ! 339: ! 340: meter(file) ! 341: char *file; ! 342: { ! 343: TIMETYPE tvec; ! 344: char *p, *ctime(); ! 345: FILE * mout; ! 346: struct passwd *pwd, *getpwuid(); ! 347: ! 348: if(file==0 || meteron==0) return; ! 349: ! 350: pwd = getpwuid(getuid()); ! 351: ! 352: time(&tvec); ! 353: ! 354: if( (mout=fopen(file,"a")) != NULL ) ! 355: { ! 356: p = ctime(&tvec); ! 357: p[16] = '\0'; ! 358: fprintf(mout,"User %s, %s\n",pwd->pw_name,p+4); ! 359: fclose(mout); ! 360: } ! 361: } ! 362: #endif ! 363: ! 364: ! 365: /* look inside archives for notations a(b) and a((b)) ! 366: a(b) is file member b in archive a ! 367: a((b)) is entry point _b in object archive a ! 368: */ ! 369: ! 370: #ifdef ASCARCH ! 371: # include <ar.h> ! 372: #else ! 373: # include <ar.h> ! 374: #endif ! 375: #include <a.out.h> ! 376: ! 377: static long arflen; ! 378: static long arfdate; ! 379: static char arfname[16]; ! 380: FILE *arfd; ! 381: long int arpos, arlen; ! 382: ! 383: static struct exec objhead; ! 384: ! 385: static struct nlist objentry; ! 386: ! 387: ! 388: TIMETYPE lookarch(filename) ! 389: char *filename; ! 390: { ! 391: char *p, *q, *send, s[15]; ! 392: int i, nc, nsym, objarch; ! 393: ! 394: for(p = filename; *p!= '(' ; ++p) ! 395: ; ! 396: *p = '\0'; ! 397: openarch(filename); ! 398: *p++ = '('; ! 399: ! 400: if(*p == '(') ! 401: { ! 402: objarch = YES; ! 403: nc = 8; ! 404: ++p; ! 405: } ! 406: else ! 407: { ! 408: objarch = NO; ! 409: nc = 14; ! 410: } ! 411: send = s + nc; ! 412: ! 413: for( q = s ; q<send && *p!='\0' && *p!=')' ; *q++ = *p++ ) ! 414: ; ! 415: while(q < send) ! 416: *q++ = '\0'; ! 417: while(getarch()) ! 418: { ! 419: if(objarch) ! 420: { ! 421: getobj(); ! 422: nsym = objhead.a_syms / sizeof(objentry); ! 423: for(i = 0; i<nsym ; ++i) ! 424: { ! 425: fread( (char *) &objentry, sizeof(objentry),1,arfd); ! 426: if( (objentry.n_type & N_EXT) ! 427: && ((objentry.n_type & ~N_EXT) || objentry.n_value) ! 428: && eqstr(objentry.n_un.n_name,s,nc)) ! 429: { ! 430: clarch(); ! 431: return(arfdate); ! 432: } ! 433: } ! 434: } ! 435: ! 436: else if( eqstr(arfname, s, nc)) ! 437: { ! 438: clarch(); ! 439: return(arfdate); ! 440: } ! 441: } ! 442: ! 443: clarch(); ! 444: return( 0L); ! 445: } ! 446: ! 447: ! 448: clarch() ! 449: { ! 450: fclose( arfd ); ! 451: } ! 452: ! 453: ! 454: openarch(f) ! 455: register char *f; ! 456: { ! 457: #ifdef ASCARCH ! 458: char magic[SARMAG]; ! 459: #endif ! 460: int word; ! 461: #include <sys/stat.h> ! 462: struct stat buf; ! 463: ! 464: stat(f, &buf); ! 465: arlen = buf.st_size; ! 466: ! 467: arfd = fopen(f, "r"); ! 468: if(arfd == NULL) ! 469: fatal1("cannot open %s", f); ! 470: ! 471: fread( (char *) &word, sizeof(word), 1, arfd); ! 472: #ifdef ASCARCH ! 473: fseek(arfd, 0L, 0); ! 474: fread(magic, SARMAG, 1, arfd); ! 475: arpos = SARMAG; ! 476: if( ! eqstr(magic, ARMAG, SARMAG) ) ! 477: #else ! 478: arpos = sizeof(word); ! 479: if(word != ARMAG) ! 480: #endif ! 481: fatal1("%s is not an archive", f); ! 482: ! 483: arflen = 0; ! 484: } ! 485: ! 486: ! 487: ! 488: getarch() ! 489: { ! 490: struct ar_hdr arhead; ! 491: long atol(); ! 492: ! 493: arpos += (arflen + 1) & ~1L; /* round archived file length up to even */ ! 494: if(arpos >= arlen) ! 495: return(0); ! 496: fseek(arfd, arpos, 0); ! 497: ! 498: fread( (char *) &arhead, sizeof(arhead), 1, arfd); ! 499: arpos += sizeof(arhead); ! 500: #ifdef ASCARCH ! 501: arflen = atol(arhead.ar_size); ! 502: arfdate = atol(arhead.ar_date); ! 503: #else ! 504: arflen = arhead.ar_size; ! 505: arfdate = arhead.ar_date; ! 506: #endif ! 507: strncpy(arfname, arhead.ar_name, sizeof(arhead.ar_name)); ! 508: return(1); ! 509: } ! 510: ! 511: ! 512: getobj() ! 513: { ! 514: long int skip; ! 515: ! 516: fread( (char *) &objhead, sizeof(objhead), 1, arfd); ! 517: if (N_BADMAG(objhead)) ! 518: fatal1("%s is not an object module", arfname); ! 519: skip = objhead.a_text + objhead.a_data; ! 520: #ifdef vax ! 521: skip += objhead.a_trsize + objhead.a_drsize; ! 522: #else ! 523: if(! objhead.a_flag ) ! 524: skip *= 2; ! 525: #endif ! 526: fseek(arfd, skip, 1); ! 527: } ! 528: ! 529: ! 530: eqstr(a,b,n) ! 531: register char *a, *b; ! 532: int n; ! 533: { ! 534: register int i; ! 535: for(i = 0 ; i < n ; ++i) ! 536: if(*a++ != *b++) ! 537: return(NO); ! 538: return(YES); ! 539: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.