⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 files.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
/* UNIX DEPENDENT PROCEDURES *//* DEFAULT RULES FOR UNIX */char *builtin[] =	{	".SUFFIXES : .out .o .c .f .e .r .y .yr .ye .l .s",	"YACC=yacc",	"YACCR=yacc -r",	"YACCE=yacc -e",	"YFLAGS=",	"LEX=lex",	"LFLAGS=",	"CC=cc",#ifdef vax	"AS=as".#else	"AS=as -",#endif	"CFLAGS=",	"RC=f77",	"RFLAGS=",	"EC=f77",	"EFLAGS=",	"FFLAGS=",	"LOADLIBES=",	".c.o :",	"\t$(CC) $(CFLAGS) -c $<",	".e.o .r.o .f.o :",	"\t$(EC) $(RFLAGS) $(EFLAGS) $(FFLAGS) -c $<",	".s.o :",	"\t$(AS) -o $@ $<",	".y.o :",	"\t$(YACC) $(YFLAGS) $<",	"\t$(CC) $(CFLAGS) -c y.tab.c",	"\trm y.tab.c",	"\tmv y.tab.o $@",	".yr.o:",	"\t$(YACCR) $(YFLAGS) $<",	"\t$(RC) $(RFLAGS) -c y.tab.r",	"\trm y.tab.r",	"\tmv y.tab.o $@",	".ye.o :",	"\t$(YACCE) $(YFLAGS) $<",	"\t$(EC) $(RFLAGS) -c y.tab.e",	"\trm y.tab.e",	"\tmv y.tab.o $@",	".l.o :",	"\t$(LEX) $(LFLAGS) $<",	"\t$(CC) $(CFLAGS) -c lex.yy.c",	"\trm lex.yy.c",	"\tmv lex.yy.o $@",	".y.c :",	"\t$(YACC) $(YFLAGS) $<",	"\tmv y.tab.c $@",	".l.c :",	"\t$(LEX) $<",	"\tmv lex.yy.c $@",	".yr.r:",	"\t$(YACCR) $(YFLAGS) $<",	"\tmv y.tab.r $@",	".ye.e :",	"\t$(YACCE) $(YFLAGS) $<",	"\tmv y.tab.e $@",	".s.out .c.out .o.out :",	"\t$(CC) $(CFLAGS) $< $(LOADLIBES) -o $@",	".f.out .r.out .e.out :",	"\t$(EC) $(EFLAGS) $(RFLAGS) $(FFLAGS) $< $(LOADLIBES) -o $@",	"\t-rm $*.o",	".y.out :",	"\t$(YACC) $(YFLAGS) $<",	"\t$(CC) $(CFLAGS) y.tab.c $(LOADLIBES) -ly -o $@",	"\trm y.tab.c",	".l.out :",	"\t$(LEX) $<",	"\t$(CC) $(CFLAGS) lex.yy.c $(LOADLIBES) -ll -o $@",	"\trm lex.yy.c",	0 };#include "defs"#include <sys/types.h>TIMETYPE exists(filename)char *filename;{#include <sys/stat.h>struct stat buf;register char *s;TIMETYPE lookarch();for(s = filename ; *s!='\0' && *s!='(' ; ++s)	;if(*s == '(')	return(lookarch(filename));if(stat(filename,&buf) < 0) 	return(0);else	return(buf.st_mtime);}TIMETYPE prestime(){TIMETYPE t;time(&t);return(t);}#include <sys/dir.h>FSTATIC char n15[15];FSTATIC char *n15end	= &n15[14];struct depblock *srchdir(pat, mkchain, nextdbl)register char *pat; /* pattern to be matched in directory */int mkchain;  /* nonzero if results to be remembered */struct depblock *nextdbl;  /* final value for chain */{FILE * dirf;int i, nread;char *dirname, *dirpref, *endir, *filepat, *p, temp[100];char fullname[100], *p1, *p2;struct nameblock *q;struct depblock *thisdbl;struct opendir *od;struct pattern *patp;struct direct entry[32];thisdbl = 0;if(mkchain == NO)	for(patp=firstpat ; patp ; patp = patp->nxtpattern)		if(! unequal(pat, patp->patval)) return(0);patp = ALLOC(pattern);patp->nxtpattern = firstpat;firstpat = patp;patp->patval = copys(pat);endir = 0;for(p=pat; *p!='\0'; ++p)	if(*p=='/') endir = p;if(endir==0)	{	dirname = ".";	dirpref = "";	filepat = pat;	}else	{	dirname = pat;	*endir = '\0';	dirpref = concat(dirname, "/", temp);	filepat = endir+1;	}dirf = NULL;for(od = firstod ; od; od = od->nxtopendir)	if(! unequal(dirname, od->dirn) )		{		dirf = od->dirfc;		fseek(dirf,0L,0); /* start over at the beginning  */		break;		}if(dirf == NULL)	{	dirf = fopen(dirname, "r");	od = ALLOC(opendir);	od->nxtopendir = firstod;	firstod = od;	od->dirfc = dirf;	od->dirn = copys(dirname);	}if(dirf == NULL)	{	fprintf(stderr, "Directory %s: ", dirname);	fatal("Cannot open");	}else do	{	nread = fread( (char *) &entry[0], sizeof(struct direct), 32, dirf) ;	for(i=0; i<nread; ++i)		if(entry[i].d_ino!= 0)			{			p1 = entry[i].d_name;			p2 = n15;			while( (p2<n15end) &&			  (*p2++ = *p1++)!='\0' );			if( amatch(n15,filepat) )				{				concat(dirpref,n15,fullname);				if( (q=srchname(fullname)) ==0)					q = makename(copys(fullname));				if(mkchain)					{					thisdbl = ALLOC(depblock);					thisdbl->nxtdepblock = nextdbl;					thisdbl->depname = q;					nextdbl = thisdbl;					}				}			}	} while(nread==32);if(endir != 0)  *endir = '/';return(thisdbl);}/* stolen from glob through find */static amatch(s, p)char *s, *p;{	register int cc, scc, k;	int c, lc;	scc = *s;	lc = 077777;	switch (c = *p) {	case '[':		k = 0;		while (cc = *++p) {			switch (cc) {			case ']':				if (k)					return(amatch(++s, ++p));				else					return(0);			case '-':				k |= (lc <= scc)  & (scc <= (cc=p[1]) ) ;			}			if (scc==(lc=cc)) k++;		}		return(0);	case '?':	caseq:		if(scc) return(amatch(++s, ++p));		return(0);	case '*':		return(umatch(s, ++p));	case 0:		return(!scc);	}	if (c==scc) goto caseq;	return(0);}static umatch(s, p)char *s, *p;{	if(*p==0) return(1);	while(*s)		if (amatch(s++,p)) return(1);	return(0);}#ifdef METERFILE#include <pwd.h>int meteron	= 0;	/* default: metering off */meter(file)char *file;{TIMETYPE tvec;char *p, *ctime();FILE * mout;struct passwd *pwd, *getpwuid();if(file==0 || meteron==0) return;pwd = getpwuid(getuid());time(&tvec);if( (mout=fopen(file,"a")) != NULL )	{	p = ctime(&tvec);	p[16] = '\0';	fprintf(mout,"User %s, %s\n",pwd->pw_name,p+4);	fclose(mout);	}}#endif/* look inside archives for notations a(b) and a((b))	a(b)	is file member   b   in archive a	a((b))	is entry point  _b  in object archive a*/#include <ar.h>#include <a.out.h>static struct ar_hdr arhead;FILE *arfd;long int arpos, arlen;static struct exec objhead;static struct nlist objentry;TIMETYPE lookarch(filename)char *filename;{char *p, *q, *send, s[15];int i, nc, nsym, objarch;for(p = filename; *p!= '(' ; ++p)	;*p = '\0';openarch(filename);*p++ = '(';if(*p == '(')	{	objarch = YES;	nc = 8;	++p;	}else	{	objarch = NO;	nc = 14;	}send = s + nc;for( q = s ; q<send && *p!='\0' && *p!=')' ; *q++ = *p++ )	;while(q < send)	*q++ = '\0';while(getarch())	{	if(objarch)		{		getobj();		nsym = objhead.a_syms / sizeof(objentry);		for(i = 0; i<nsym ; ++i)			{			fread( (char *) &objentry, sizeof(objentry),1,arfd);			if( (objentry.n_type & N_EXT)			   && ((objentry.n_type & ~N_EXT) || objentry.n_value)			   && eqstr(objentry.n_name,s,nc))				{				clarch();				return(arhead.ar_date);				}			}		}	else if( eqstr(arhead.ar_name, s, nc))		{		clarch();		return( arhead.ar_date);		}	}clarch();return( 0L);}clarch(){fclose( arfd );}openarch(f)register char *f;{int word;#include <sys/stat.h>struct stat buf;stat(f, &buf);arlen = buf.st_size;arfd = fopen(f, "r");if(arfd == NULL)	fatal1("cannot open %s", f);fread( (char *) &word, sizeof(word), 1, arfd);if(word != ARMAG)	fatal1("%s is not an archive", f);arpos = 0;arhead.ar_size = 2 - sizeof(arhead);}getarch(){arpos += sizeof(arhead);arpos += (arhead.ar_size + 1 ) & ~1L;if(arpos >= arlen)	return(0);fseek(arfd, arpos, 0);fread( (char *) &arhead, sizeof(arhead), 1, arfd);return(1);}getobj(){long int skip;fread( (char *) &objhead, sizeof(objhead), 1, arfd);if( objhead.a_magic != A_MAGIC1 &&    objhead.a_magic != A_MAGIC2 &&    objhead.a_magic != A_MAGIC3 &&    objhead.a_magic != A_MAGIC4 )		fatal1("%s is not an object module", arhead.ar_name);skip = objhead.a_text + objhead.a_data;if(! objhead.a_flag )	skip *= 2;fseek(arfd, skip, 1);}eqstr(a,b,n)register char *a, *b;int n;{register int i;for(i = 0 ; i < n ; ++i)	if(*a++ != *b++)		return(NO);return(YES);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -