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

📄 main.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
#include "stdio.h"#include "awk.def"#include "awk.h"int	dbg	= 0;int	svargc;char	**svargv, **xargv;extern FILE	*yyin;	/* lex input file */char	*lexprog;	/* points to program argument if it exists */extern	errorflag;	/* non-zero if any syntax errors; set by yyerror */int filefd, iflag, symnum, ansfd;char *filelist;extern int maxsym, errno;main(argc, argv) int argc; char *argv[]; {	if (argc == 1)		error(FATAL, "Usage: awk [-f source | 'cmds'] [files]");	if (strcmp(argv[0], "a.out"))		logit(argc, argv);	syminit();	while (argc > 1) {		argc--;		argv++;		if (argv[0][0] == '-' && argv[0][1] == 'f') {			yyin = fopen(argv[1], "r");			if (yyin == NULL)				error(FATAL, "can't open %s", argv[1]);			argc--;			argv++;			break;		} else if (argv[0][0] == '-' && argv[0][1] == 'F') {	/* set field sep */			if (argv[0][2] == 't')	/* special case for tab */				**FS = '\t';			else				**FS = argv[0][2];			continue;		} else if (argv[0][0] != '-') {			dprintf("cmds=|%s|\n", argv[0], NULL, NULL);			yyin = NULL;			lexprog = argv[0];			argv[0] = argv[-1];	/* need this space */			break;		} else if (strcmp("-d", argv[0])==0)			dbg = 1;		else if (argv[0][0]=='-' && argv[0][1]=='i') {			iflag=1;			sscanf(argv[0], "-i%d, %d", &filefd, &ansfd);		}	}	if (argc <= 1 && !iflag) {		argv[0][0] = '-';		argv[0][1] = '\0';		argc++;		argv--;	}	if (!iflag) {		svargc = --argc;		svargv = ++argv;		dprintf("svargc=%d svargv[0]=%s\n", svargc, svargv[0], NULL);	}	*FILENAME = *svargv;	/* initial file name */iloop:	if (iflag)		msgfiles();	yyparse();	dprintf("errorflag=%d\n", errorflag, NULL, NULL);	if (errorflag)		exit(0);	run();	if (iflag)		write(ansfd, &errorflag, sizeof(errorflag));	else exit(errorflag);/*sym cleanup should go here , followed by another syminit*/	goto iloop;}logit(n, s) char *s[];{	int i, tvec[2];	FILE *f, *g;	char buf[512];	if ((f=fopen("/usr/pjw/awk/awkhist", "a"))==NULL)		return;	time(tvec);	fprintf(f, "%-8s %s", getlogin(), ctime(tvec));	for (i=0; i<n; i++)		fprintf(f, "'%s'", s[i]);	putc('\n', f);	if (strcmp(s[1], "-f")) {		fclose(f);		return;	}	if ((g=fopen(s[2], "r"))==NULL) {		fclose(f);		return;	}	while ((i=fread(buf, 1, 512, g))>0)		fwrite(buf, 1, i, f);	fclose(f);	fclose(g);}yywrap(){	return(1);}msgfiles(){	char buf[512], *p, *q, **s;	int n;	n=read(filefd, buf, 512);	if (n<=0)	/*no one at other end?*/ {		perror("no files");		exit(errno);	}	xfree(filelist);	q=filelist=malloc(n);	for (p=buf; *p==' ' || *p=='\t' || *p=='\n'; p++); 	for (n=0; *p!=';'; )	{		if (*p==' ' || *p=='\t' || *p=='\n') {			n++;			*q++=0;			while (*p==' ' || *p=='\t' || *p=='\n')				p++;		}		else	*q++ = *p++;	}	if (q!=filelist && *(q-1)!=0) {		n++;		*q++ = 0;	}	svargc=n;	xfree(xargv);	xargv=s=svargv=malloc(n*sizeof(char *));	for (p=filelist; n>0; n--)	{		*s++=p;		while (*p++ != 0);	}}

⌨️ 快捷键说明

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