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

📄 prep.c

📁 操作系统源代码
💻 C
字号:
/* prep - prepare file for statistics 	Author: Andy Tanenbaum */#include <ctype.h>#include <stdlib.h>#include <stdio.h>#define TROFF_CHAR	'.'	/* troff commands begin with this char */#define EOL		'\n'	/* end of line char */#define APOSTROPHE	047	/* single quote */#define BACKSLASH       '\\'	/* troff code */int lfread;			/* set when last char read was lf */int lfwritten = 1;		/* set when last char written was lf */_PROTOTYPE(int main, (int argc, char **argv));_PROTOTYPE(void skipline, (void));_PROTOTYPE(int backslash, (void));_PROTOTYPE(void usage, (void));int main(argc, argv)int argc;char *argv[];{  int c;  if (argc > 2) usage();  if (argc == 2) {	if (freopen(argv[1], "r", stdin) == NULL) {		printf("prep: cannot open %s\n", argv[1]);		exit(1);	}  }  while ((c = getchar()) != EOF) {	/* Lines beginning with "." are troff commands -- skip them. */	if (lfread && c == TROFF_CHAR) {		skipline();		continue;	}	while (c == BACKSLASH) c = backslash();	/* eat troff stuff */	if (isupper(c)) {		putchar(tolower(c));		lfwritten = 0;		lfread = 0;		continue;	}	if (islower(c)) {		putchar(c);		lfwritten = 0;		lfread = 0;		continue;	}	if (c == APOSTROPHE) {		putchar(c);		lfwritten = 0;		lfread = 0;		continue;	}	lfread = (c == EOL ? 1 : 0);	if (lfwritten) continue;	putchar(EOL);	lfwritten = 1;  }  return(0);}void skipline(){  char c;  while ((c = getchar()) != EOL);}int backslash(){/* A backslash has been seen.  Eat troff stuff. */  int c, c1, c2;  c = getchar();  switch (c) {      case 'f':	c = getchar();	c = getchar();	return(c);      case 's':			/* \s7  or \s14 */	c = getchar();	c = getchar();	if (isdigit(c)) c = getchar();	return(c);      case 'n':			/* \na or \n(xx  */	c = getchar();	if (c == '(') {		c = getchar();		c = getchar();	}	c = getchar();	return(c);      case '*':			/* / * (XX */	c = getchar();	if (c == '(') {		c = getchar();		c = getchar();		c = getchar();		return(c);	}      case '(':			/* troff 4-character escape sequence */	c1 = getchar();	c2 = getchar();	if (c1 == 'e' && c2 == 'm') return(' ');	if (c1 == 'e' && c2 == 'n') return(' ');	c = getchar();	return(c);      case '%':			/* soft hyphen: \% */	c = getchar();	return(c);      default:	return(c);  }}void usage(){  printf("Usage: prep [file]\n");  exit(1);}

⌨️ 快捷键说明

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