backspace.c

来自「gcc-2.95.3 Linux下最常用的C编译器」· C语言 代码 · 共 74 行

C
74
字号
#include <sys/types.h>#include "f2c.h"#include "fio.h"#ifdef KR_headersinteger f_back(a) alist *a;#elseinteger f_back(alist *a)#endif{	unit *b;	long v, w, x, y, z;	uiolen n;	FILE *f;	f__curunit = b = &f__units[a->aunit];	/* curunit for error messages */	if (f__init & 2)		f__fatal (131, "I/O recursion");	if(a->aunit >= MXUNIT || a->aunit < 0)		err(a->aerr,101,"backspace");	if(b->useek==0) err(a->aerr,106,"backspace");	if((f = b->ufd) == NULL) {		fk_open(1, 1, a->aunit);		return(0);		}	if(b->uend==1)	{	b->uend=0;		return(0);	}	if(b->uwrt) {		(void) t_runc(a);		f = b->ufd;	/* t_runc might change b->ufd */		if (f__nowreading(b))			err(a->aerr,errno,"backspace");		}	if(b->url>0)	{		x=ftell(f);		y = x % b->url;		if(y == 0) x--;		x /= b->url;		x *= b->url;		(void) fseek(f,x,SEEK_SET);		return(0);	}	if(b->ufmt==0)	{	fseek(f,-(long)sizeof(uiolen),SEEK_CUR);		fread((char *)&n,sizeof(uiolen),1,f);		fseek(f,-(long)n-2*sizeof(uiolen),SEEK_CUR);		return(0);	}	w = x = ftell(f);	z = 0; loop:	while(x) {		x -= x < 64 ? x : 64;		fseek(f,x,SEEK_SET);		for(y = x; y < w; y++) {			if (getc(f) != '\n')				continue;			v = ftell(f);			if (v == w) {				if (z)					goto break2;				goto loop;				}			z = v;			}		err(a->aerr,(EOF),"backspace");		} break2:	fseek(f, z, SEEK_SET);	return 0;}

⌨️ 快捷键说明

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