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

📄 main.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
/* * main routine colldef  *//* static  char *sccsid = "@(#)main.c 1.1 92/07/30 SMI"; */#include "colldef.h"#include "y.tab.h"int lineno = 1;		/* keeping lineno */int numerrs = 0;	/* how many errors ? */int numwarn = 0;	/* how many warning ? */struct colldef colldef;struct _1_to_m _1_to_m[NUM_1_TO_MANY];struct _2_to_1 _2_to_1[NUM_2_TO_ONE];struct charmap *charmap_head = (struct charmap *)NULL;int no_of_1_to_m = 0;	/* number of 1 to many table */int no_of_2_to_1 = 0;	/* number of 1 to many table */int prime_val = DONT_CARE_P+1;	/* primary value */int second_val = DONT_CARE_S+1;	/* secondary value */FILE *ifp =  stdin;	/* source file *//* * main routine */main(argc, argv)short argc;char **argv;{	int init();	int ofd;	/* output file */	/*	 * Preparations	 */	if (argc == 1) {		fprintf(stderr, "usage: %s file\n", PROG);		exit(1);	}	if ((ofd = init(argv[1])) == -1) {		fprintf(stderr, "%s: can't open %s\n", PROG, argv[1]);		exit(2);	}	yyparse();	if (getc(ifp) != EOF)		printf("Warning: any statement after the first order statement is ignored\n");	fclose (ifp);	/*	 * output files	 */#ifdef DEBUG	dump_1_to_m();	dump_2_to_1();	dump_charmap();	dump_table(1);	dump_table(2);#endif	if (numwarn == 0 && numerrs == 0) {		save_table(ofd);		printf("script recognized\n");		}	else			unlink (argv[1]);	close(ofd);	exit(0);}yyerror(s)char *s;{	++numerrs;	warning(s, (char *)0);}warning(s, t)char *s;char *t;{	++numwarn;	fprintf(stderr, "%s: %s", PROG, s);	if (t)		fprintf(stderr, " %s", t);	fprintf(stderr, " near line %d\n", lineno);	exit(1);}/* * initialization */init(s)	char *s;{	int c;	int tfp;	tfp = creat(s, 0644);	if (tfp == -1)		return(-1);	/*	 * initialize tables	 */	for (c = 0; c < TABSIZE; c++) {		colldef.primary_sort[c] = DONT_CARE_P;		colldef.secondary_sort[c] = DONT_CARE_S;	}	return(tfp);}/* * dump to the table */save_table(fd)	int fd;{	int i;	char *p;	char dummy = 0;	static struct _2_to_1 endmark = {0, 0, 0, 0};	struct pat {		unsigned char major_;		unsigned char second;	} pat;	/*	 * write colldef	 */	if (write (fd, (char *)&colldef, sizeof colldef) != sizeof colldef) {		fprintf(stderr, "Could not write data to output file.\n");		exit(3);	}	/*	 * write 1_to_m	 */	for (i = 0; i < no_of_1_to_m; i++) {		write (fd, &_1_to_m[i].one, 1);		p = _1_to_m[i].many;		while (*p) {			pat.major_ = colldef.primary_sort[(unsigned char)*p];			pat.second = colldef.secondary_sort[(unsigned char)*p];			write (fd, (char *)&pat, sizeof pat);			++p;		}		pat.major_ = pat.second = 0;		write (fd, (char *)&pat, sizeof pat);	}	write (fd, &dummy, 1);	pat.major_ = pat.second = 0;	write (fd, (char *)&pat, sizeof pat);	/*	 * write 2_to_1	 */	for (i = 0; i < no_of_2_to_1; i++)		write (fd, (char *)&_2_to_1[i], sizeof (struct _2_to_1));	write (fd, (char *)&endmark, sizeof (struct _2_to_1));}

⌨️ 快捷键说明

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