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

📄 ascii.c

📁 minix软件源代码
💻 C
字号:
/* ascii - list lines with/without ASCII characters */#include <sys/types.h>#include <fcntl.h>#include <unistd.h>#include <string.h>#include <stdlib.h>#include <minix/minlib.h>#include <stdio.h>#define BUFSIZE 4*1024static char buf[BUFSIZE + 1];	/* input buffer - +1 for sentinel */static char carry[BUFSIZE];	/* buffer for partial line carryover */_PROTOTYPE(int main, (int argc, char **argv));int main(argc, argv)int argc;char **argv;{  int nflag = 0;		/* 1 if invoked with -n */  int ascii_line;		/* set to 1 if line is all ASCII */  int ascii_file = 1;		/* set to 0 if file is not all ASCII */  int count;			/* count of characters in buf */  char *start;			/* points to beginning of line */  register char *end;		/* points to end of line */  char *sentinel;		/* points past last character in buffer */  int carry_count;		/* size of carry over */  --argc;  ++argv;  if (argc > 0 && strcmp(*argv, "-n") == 0) {	nflag = 1;	--argc;	++argv;  }  switch (argc) {      case 0:	break;      case 1:	close(0);	if (open(*argv, O_RDONLY) != 0) {		std_err("ascii: cannot open ");		std_err(*argv);		std_err("\n");		exit(1);	}	break;      default:	std_err("Usage: ascii [-n] file\n");	exit(1);  }  if ((count = read(0, buf, BUFSIZE)) <= 0) exit(0);  *(sentinel = &buf[count]) = '\n';  start = buf;  ascii_line = 1;  carry_count = 0;  while (1) {	for (end = start; *end != '\n'; ++end)		if ((*end & 0x80) != 0) {			ascii_line = 0;			ascii_file = 0;			end = (char *) memchr(end, '\n', (size_t)BUFSIZE);			break;		}	if (end != sentinel) {		++end;		if (ascii_line != nflag) {			if (carry_count != 0)				fwrite(carry, (size_t)carry_count, (size_t)1, stdout);			fwrite(start, (size_t)(end - start), (size_t)1, stdout);		}		carry_count = 0;		start = end;		ascii_line = 1;	} else {		if (carry_count != 0) {			std_err("ascii: line too long\n");			exit(1);		}		if (ascii_line != nflag) {			carry_count = end - start;			memcpy(carry, start, (size_t)carry_count);		}		if ((count = read(0, buf, BUFSIZE)) <= 0) break;		*(sentinel = &buf[count]) = '\n';		start = buf;	}  }  if (ascii_line != nflag && carry_count != 0)	fwrite(carry, (size_t)carry_count, (size_t)1, stdout);  return(ascii_file == 0);}

⌨️ 快捷键说明

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