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

📄 bsfilt.c

📁 操作系统源代码
💻 C
字号:
/* *	bsfilt.c - a colcrt-like processor for cawf(1) *//* *	Copyright (c) 1991 Purdue University Research Foundation, *	West Lafayette, Indiana 47907.  All rights reserved. * *	Written by Victor A. Abell <abe@mace.cc.purdue.edu>,  Purdue *	University Computing Center.  Not derived from licensed software; *	derived from awf(1) by Henry Spencer of the University of Toronto. * *	Permission is granted to anyone to use this software for any *	purpose on any computer system, and to alter it and redistribute *	it freely, subject to the following restrictions: * *	1. The author is not responsible for any consequences of use of *	   this software, even if they arise from flaws in it. * *	2. The origin of this software must not be misrepresented, either *	   by explicit claim or by omission.  Credits must appear in the *	   documentation. * *	3. Altered versions must be plainly marked as such, and must not *	   be misrepresented as being the original software.  Credits must *	   appear in the documentation. * *	4. This notice may not be removed or altered. */#include <stdio.h>#ifdef UNIX# ifdef USG#include <string.h># else	/* not USG */#include <strings.h># endif	/* USG */#else	/* not UNIX */#include <string.h>#endif	/* UNIX */#include <sys/types.h>#include "ansi.h"#define MAXLL	2048			/* ridiculous maximum line length */int Dash = 1;				/* underline with dashes */int Dp = 0;				/* dash pending */int Lc = 0;				/* line count */char *Pname;				/* program name */unsigned char Ulb[MAXLL];		/* underline buffer */int Ulx = 0;				/* underline buffer index */_PROTOTYPE(void Putchar,(int ch));main(argc, argv)	int argc;	char *argv[];{	int ax = 1;			/* argument index */	unsigned char c;		/* character buffer */	FILE *fs;			/* file stream */	int nf = 0;			/* number of files processed */	unsigned char pc;		/* previous character */	int under = 0;                  /* underline *//* * Save program name. */	if ((Pname = strrchr(argv[0], '/')) != NULL)		Pname++;	else if ((Pname = strrchr(argv[0], '\\')) != NULL)		Pname++;	else		Pname = argv[0];/* * Process options. */	if (argc > 1 && argv[1][0] == '-') {		switch (argv[1][1]) {	/*	 * "-U" - underline with dashes.	 */		case 'U':			Dash = 0;			under = 1;			break;	/*	 * "-" - do no  underlining at all.	 */		case '\0':			Dash = under = 0;			break;		default:			(void) fprintf(stderr,				"%s usage: [-] [-U] [file]\n", Pname);			exit(1);		}		ax++;	}/* * Process files.  Read standard input if no files names. */	while (ax < argc || nf == 0) {		if (ax >= argc)			fs = stdin;		else {#ifdef	UNIX			if ((fs = fopen(argv[ax], "r")) == NULL)#else			if ((fs = fopen(argv[ax], "rt")) == NULL)#endif			{				(void) fprintf(stderr, "%s: can't open %s\n",					Pname, argv[ax]);				exit(1);			}			ax++;		}		nf++;	/*	 * Read input a character at a time.	 */		for (pc = '\0';;) {			c = (unsigned char)fgetc(fs);			if (feof(fs))				break;			switch(c) {			case '\n':				if (pc)					Putchar((int)pc);				Putchar('\n');				pc = '\0';				break;			case '\b':				if (pc == '_') {					if (under) {						putchar(pc);						putchar('\b');					} else if (Dash)						Dp = 1;				}				pc = '\0';				break;			default:				if (pc)					Putchar((int)pc);				pc = c;			}		}		if (pc) {			Putchar((int)pc);			Putchar((int)'\n');		}	}	exit(0);}/* * Putchar(ch) - put a character with possible underlining */voidPutchar(ch)	int ch;{	int i;					/* temporary index */	if ((unsigned char)ch == '\n') {/* * Handle end of line. */		putchar('\n');		if (Ulx) {			while (Ulx && Ulb[Ulx-1] == ' ')				Ulx--;			if (Ulx) {				for (i = 0; i < Ulx; i++)					putchar(Ulb[i]);				putchar('\n');			}		}		Dp = Ulx = 0;		Lc++;		return;	}/* * Put "normal" character. */	putchar((unsigned char)ch);	if (Dash) {	/*	 * Handle dash-type underlining.	 */		if (Ulx >= MAXLL) {			(void) fprintf(stderr,				"%s: underline for line %d > %d characters\n",				Pname, Lc, MAXLL);			exit(1);		}		Ulb[Ulx++] = Dp ? '-' : ' ';		Dp = 0;	}}

⌨️ 快捷键说明

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