1.line.c

来自「<B>Digital的Unix操作系统VAX 4.2源码</B>」· C语言 代码 · 共 125 行

C
125
字号
#ifndef lintstatic char sccsid[] = "@(#)1.line.c	4.1	(Berkeley)	2/11/83";#endif not lint#include <stdio.h>##include "def.h"#define bufsize 1601char buffer[bufsize];int bufcount;extern int errflag;long stchars;			/* counts number of chars at most recent \n read */#ifndef unixlong ostchars;extern long ftell();#endifint newline;			/* counts number of lines read so far in file */extern int rdfree(), comfree(),labfree(), contfree();extern int rdstand(), comstand(), labstand(), contstand();extern int (*rline[])();extern int (*comment[])();extern int (*getlabel[])();extern int (*chkcont[])();flush()	{bufcount = 0; }addchar(c)	{	buffer[bufcount++] = c;	}getline(lastline,lastchar,linecom,charcom)int *lastline, *linecom;long *lastchar, *charcom;	/* set *lastline to number of last line of statement,	   set *lastchar to number of last char of statement,	   set *linecom to number of last line of comment preceding statement	*/	{	int i;	flush();	while ( unput1(input1()) != EOF)		{		while ( (*comment[inputform])(0)  || blankline() )			{			(*rline[inputform])(addchar);			flush();			}		*linecom = newline;		/* set charcom to number of last char of comment, starting at 0		 * if at start of file and no comment, will be -1		 */		*charcom = stchars - 1;		if (unput1(input1()) == EOF)  break;		(*getlabel[inputform])(addchar);		(*rline[inputform])(addchar);			while ( blankline() ||		( !(*comment[inputform])(0) &&  (*chkcont[inputform])() ))			(*rline[inputform])(addchar);			addchar('\0');		*lastline = newline;		*lastchar = stchars - 1;if (debug == 40)fprintf(stderr,"line %d; bufcount: %d\n",newline,bufcount);			for (i = 5; i < bufcount; ++i)			if (buffer[i] == ' ' || buffer[i] == '\t'					     || buffer[i] == '\n')				buffer[i] = '~';		return(bufcount);		}	return(-1);	}int linechars;			/* counts number of chars read so far in current line */long newchar;			/* counts number of chars read so far in file */input1()	{	static int c;	if (c == '\n') linechars = 0;	c = inchar();	++linechars;	++newchar;	if (c == '\n')		{		++newline;#ifdef unix 		stchars = newchar; #else		ostchars=stchars; stchars=ftell(infd);#endif		}	return(c);	}unput1(c)	{	--linechars;	--newchar;	unchar(c);	if (c == '\n')		{#ifdef unix 		stchars = newchar; #else		stchars=ostchars;#endif		--newline;		}	return(c);	}

⌨️ 快捷键说明

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