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

📄 input.c

📁 window下的c编译器。
💻 C
字号:
#include "c.h"
int strcmpi(char *,char *);
static void pragma ARGS((void));
static void resynch ARGS((void));

static int      bsize;
static unsigned char buffer[MAXLINE + 1 + BUFSIZE + 1];
int             infd;           /* input file descriptor */
unsigned char  *cp;             /* current input character */
char           *file;           /* current input file name */
char           *firstfile;      /* first input file */
unsigned char  *limit;          /* points to last character + 1 */
char           *line;           /* current line */
int             lineno;         /* line number of current line */

void            inputInit(void)
{
	limit = cp = &buffer[MAXLINE + 1];
	bsize = -1;
	lineno = 0;
	file = NULL;
	fillbuf();
	if (cp >= limit)
		cp = limit;
	nextline();
}
void            nextline(void)
{
	do {
		if (cp >= limit) {
			fillbuf();
			if (cp >= limit)
				cp = limit;
			if (cp == limit)
				return;
		}
		else
			lineno++;
		for (line = (char *) cp; *cp == ' ' || *cp == '\t'; cp++);
	} while (*cp == '\n' && cp == limit);
	if (*cp == '#') {
		resynch();
		nextline();
	}
}
void            fillbuf(void)
{
	if (bsize == 0)
		return;
	if (cp >= limit)
		cp = &buffer[MAXLINE + 1];
	else {
		int             n = limit - cp;
		unsigned char  *s = &buffer[MAXLINE + 1] - n;
		assert(s >= buffer);
		line = (char *) s - ((char *) cp - line);
		while (cp < limit)
			*s++ = *cp++;
		cp = &buffer[MAXLINE + 1] - n;
	}
	bsize = ReadFromCpp(&buffer[MAXLINE + 1], BUFSIZE);
	if (bsize < 0) {
		error(StrTab[219]);// <read error\n>
		exit(1);
	}
	limit = &buffer[MAXLINE + 1 + bsize];
	*limit = '\n';
}
/* inputstring - arrange to read str as next input */
void            inputstring(char *str)
{
	limit = cp = &buffer[MAXLINE + 1];
	while ((*limit++ = *str++) != 0);
	*--limit = '\n';
	bsize = 0;
}

/* pragma - handle #pragma ref id... */
static void     pragma(void)
{
	t = gettok();
	if (t != ID) return; /* remain compatible with pragmas for other compilers */
	if (strcmp(token, StrTab[220]) == 0) {// <ref>
		for (;;) {
			while (*cp == ' ' || *cp == '\t')
				cp++;
			if (*cp == '\n' || *cp == 0)
				break;
			if ((t = gettok()) == ID && tsym) {
				tsym->ref++;
				use(tsym, src);
			}
		}
		return;
	}
	if (strcmpi(token,StrTab[221]) == 0) {// <pack>
		ProcessPragmaPack();
	}
	if (strcmpi(token,StrTab[222]) == 0) {// <section>
		ProcessSection();
	}
	if (strcmpi(token,StrTab[223]) == 0) {// <optimize>
		ProcessOptimize();
	}
	if (strcmpi(token,StrTab[435]) == 0) {// <density>
		ProcessPragmaDensity();
	}
}

/* resynch - set line number/file name in # n [ "file" ] and #pragma ... */
static void     resynch(void)
{
	for (cp++; *cp == ' ' || *cp == '\t';)
		cp++;
	if (limit - cp < MAXLINE)
		fillbuf();
	if (strncmp((char *) cp, StrTab[224], 6) == 0) {// <pragma>
		cp += 6;
		pragma();
	}
	else if (*cp >= '0' && *cp <= '9') {
line:  for (lineno = 0; *cp >= '0' && *cp <= '9';)
			lineno = 10 * lineno + *cp++ - '0';
		lineno--;
		while (*cp == ' ' || *cp == '\t')
			cp++;
		if (*cp == '"') {
			file = (char *) ++cp;
			while (*cp && *cp != '"' && *cp != '\n')
				cp++;
			file = stringn(file, (char *) cp - file);
			if (*cp == '\n')
				warning(StrTab[225]);// <missing \" in preprocessor line\n>
			if (firstfile == 0)
				firstfile = file;
		}
	}
	else if (strncmp((char *) cp, StrTab[226], 4) == 0) {// <line>
		for (cp += 4; *cp == ' ' || *cp == '\t';)
			cp++;
		if (*cp >= '0' && *cp <= '9')
			goto line;
		if (Aflag >= 2)
			warning(StrTab[227]);// <unrecognized control line\n>
	}
	else if (Aflag >= 2 && *cp != '\n')
		warning(StrTab[228]);// <unrecognized control line\n>
	while (*cp)
		if (*cp++ == '\n')
			if (cp == limit + 1)
				nextline();
			else
				break;
}

⌨️ 快捷键说明

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