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

📄 input.c

📁 该代码为unix环境高级编程的源代码
💻 C
字号:
#include	"lprps.h"static int	eof_count;static int	ignore_input;static enum parse_state {	/* state of parsing input from printer */	NORMAL,	HAD_ONE_PERCENT,	HAD_TWO_PERCENT,	IN_MESSAGE,	HAD_RIGHT_BRACKET,	HAD_RIGHT_BRACKET_AND_PERCENT} parse_state;/* Initialize our input machine. */voidinit_input(int job){	in_job = job;		/* only true when send_file() calls us */	parse_state = NORMAL;	ignore_input = 0;}/* Read from the printer until we encounter an EOF. * Whether or not the input is processed depends on "ignore". */voidproc_upto_eof(int ignore){	int		ec;	ignore_input = ignore;	ec = eof_count;		/* proc_input_char() increments eof_count */	while (ec == eof_count)		proc_some_input();}/* Wait for some data then read it. * Call proc_input_char() for every character read. */voidproc_some_input(void){	char	ibuf[IBSIZE];	char	*ptr;	int		nread;	fd_set	rfds;	FD_ZERO(&rfds);	FD_SET(psfd, &rfds);	set_nonblock();	if (intr_flag)		handle_intr();	if (alrm_flag)		handle_alrm();	while (select(psfd + 1, &rfds, NULL, NULL, NULL) < 0) {		if (errno == EINTR) {			if (alrm_flag)				handle_alrm();		/* doesn't return */			else if (intr_flag)				handle_intr();		/* doesn't return */		} else			log_sys("proc_some_input: select error");	}	if ( (nread = read(psfd, ibuf, IBSIZE)) < 0)		log_sys("proc_some_input: read error");	else if (nread == 0)		log_sys("proc_some_input: read returned 0");	ptr = ibuf;	while (--nread >= 0)		proc_input_char(*ptr++);	/* process each character */}/* Called by proc_some_input() above after some input has been read. * Also called by out_buf() whenever asynchronous input appears. */voidproc_input_char(int c){	if (c == '\004') {		eof_count++;	/* just count the EOFs */		return;	} else if (ignore_input)		return;			/* ignore everything except EOFs */	switch (parse_state) {		/* parse the input */	case NORMAL:		if (c == '%')			parse_state = HAD_ONE_PERCENT;		else			mail_char(c);		break;	case HAD_ONE_PERCENT:		if (c == '%')			parse_state = HAD_TWO_PERCENT;		else {			mail_char('%'); mail_char(c);			parse_state = NORMAL;		}		break;	case HAD_TWO_PERCENT:		if (c == '[') {			msg_init();		/* message starting; init buffer */			parse_state = IN_MESSAGE;		} else {			mail_char('%'); mail_char('%'); mail_char(c);			parse_state = NORMAL;		}		break;	case IN_MESSAGE:		if (c == ']')			parse_state = HAD_RIGHT_BRACKET;		else			msg_char(c);		break;	case HAD_RIGHT_BRACKET:		if (c == '%')			parse_state = HAD_RIGHT_BRACKET_AND_PERCENT;		else {			msg_char(']'); msg_char(c);			parse_state = IN_MESSAGE;		}		break;	case HAD_RIGHT_BRACKET_AND_PERCENT:		if (c == '%') {			parse_state = NORMAL;			proc_msg();		/* we have a message; process it */		} else {			msg_char(']'); msg_char('%'); msg_char(c);			parse_state = IN_MESSAGE;		}		break;	default:		abort();	}}

⌨️ 快捷键说明

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