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

📄 main.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <stdio.h>#include <signal.h>#include <math.h>#include <stdlib.h>#include <string.h>#include "grap.h"#include "y.tab.h"int	dbg	= 0;#ifndef GRAPDEFINES#define GRAPDEFINES "/sys/lib/grap.defines"#endifchar	*lib_defines	= GRAPDEFINES;int	lib	= 1;		/* 1 to include lib_defines */FILE	*tfd	= NULL;char	tempfile[L_tmpnam];int	synerr	= 0;int	codegen	= 0;   		/* 1=>output for this picture; 0=>no output */char	*cmdname;Obj	*objlist = NULL;	/* all names stored here */#define	BIG	1e30Point	ptmin	= { NULL, -BIG, -BIG };Point	ptmax	= { NULL, BIG, BIG };char	*version = "version Dec 30, 1995";extern int yyparse(void);extern void setdefaults(void);extern void getdata(void);extern	int	unlink(char *);main(int argc, char *argv[]){	extern void onintr(int), fpecatch(int);	if (signal(SIGINT, SIG_IGN) != SIG_IGN)		signal(SIGINT, onintr);	signal(SIGFPE, fpecatch);	cmdname = argv[0];	tmpnam(tempfile);	while (argc > 1 && *argv[1] == '-') {		switch (argv[1][1]) {		case 'd':			dbg = 1;			tfd = stdout;			strcpy(tempfile, "grap.temp");			unlink(tempfile);			fprintf(stderr, "%s\n", version);			break;		case 'l':	/* turn off /usr/lib inclusion */			lib = 0;			break;		}		argc--;		argv++;	}	setdefaults();	curfile = infile;	if (argc <= 1) {		curfile->fin = stdin;		curfile->fname = tostring("-");		pushsrc(File, curfile->fname);		getdata();	} else		while (argc-- > 1) {			if ((curfile->fin = fopen(*++argv, "r")) == NULL) {				fprintf(stderr, "grap: can't open %s\n", *argv);				onintr(0);			}			curfile->fname = tostring(*argv);			pushsrc(File, curfile->fname);			getdata();			fclose(curfile->fin);			free(curfile->fname);		}	if (!dbg)		unlink(tempfile);	exit(0);}void onintr(int n){	n;	if (!dbg)		unlink(tempfile);	exit(1);}void fpecatch(int n){	ERROR "floating point exception" WARNING;	onintr(n);}char *grow(char *ptr, char *name, int num, int size)	/* make array bigger */{	char *p;	if (ptr == NULL)		p = malloc(num * size);	else		p = realloc(ptr, num * size);	if (p == NULL)		ERROR "can't grow %s to %d", name, num * size FATAL;	return p;}static struct {	char	*name;	double	val;} defaults[] ={	"frameht", FRAMEHT,	"framewid", FRAMEWID,	"ticklen", TICKLEN,	"slop", SLOP,	NULL, 0};void setdefaults(void)	/* set default sizes for variables */{	int i;	Obj *p;	for (i = 0; defaults[i].name != NULL; i++) {		p = lookup(defaults[i].name, 1);		setvar(p, defaults[i].val);	}}void getdata(void)		/* read input */{	register FILE *fin;	char buf[1000], buf1[100];	int ln;	fin = curfile->fin;	curfile->lineno = 0;	printf(".lf 1 %s\n", curfile->fname);	while (fgets(buf, sizeof buf, fin) != NULL) {		curfile->lineno++;		if (*buf == '.' && *(buf+1) == 'G' && *(buf+2) == '1') {			setup();			fprintf(stdout, ".PS%s", &buf[3]);	/* maps .G1 [w] to .PS w */			printf("scale = 1\n");	/* defends against cip users */			printf(".lf %d\n", curfile->lineno+1);			yyparse();			fprintf(stdout, ".PE\n");			printf(".lf %d\n", curfile->lineno+1);			fflush(stdout);		} else if (buf[0] == '.' && buf[1] == 'l' && buf[2] == 'f') {			if (sscanf(buf+3, "%d %s", &ln, buf1) == 2) {				free(curfile->fname);				printf(".lf %d %s\n", curfile->lineno = ln, curfile->fname = tostring(buf1));			} else				printf(".lf %d\n", curfile->lineno = ln);		} else			fputs(buf, stdout);	}}

⌨️ 快捷键说明

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