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

📄 zreadline.c

📁 Linux下ztelnet 的rz、sz源码
💻 C
字号:
/*  zreadline.c - line reading stuff for lrzsz  Copyright (C) until 1998 Chuck Forsberg (OMEN Technology Inc)  Copyright (C) 1994 Matt Porter  Copyright (C) 1996, 1997 Uwe Ohse  This program is free software; you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by  the Free Software Foundation; either version 2, or (at your option)  any later version.  This program is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  GNU General Public License for more details.  You should have received a copy of the GNU General Public License  along with this program; if not, write to the Free Software  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  originally written by Chuck Forsberg*//* once part of lrz.c, taken out to be useful to lsz.c too */#include "zglobal.h"#include <stdlib.h>#include <stdio.h>#include <signal.h>#include <ctype.h>#include <errno.h>#include "error.h"/* Ward Christensen / CP/M parameters - Don't change these! */#define TIMEOUT (-2)static size_t readline_readnum;static int readline_fd;static char *readline_buffer;int readline_left=0;char *readline_ptr;static RETSIGTYPEzreadline_alarm_handler(int dummy LRZSZ_ATTRIB_UNUSED){	/* doesn't need to do anything */}/* * This version of readline is reasonably well suited for * reading many characters. * * timeout is in tenths of seconds */int readline_internal(unsigned int timeout){	if (!no_timeout)	{		unsigned int n;		n = timeout/10;		if (n < 2 && timeout!=1)			n = 3;		else if (n==0)			n=1;		if (Verbose > 5)			vstringf("Calling read: alarm=%d  Readnum=%d ",			  n, readline_readnum);		signal(SIGALRM, zreadline_alarm_handler); 		alarm(n);	}	else if (Verbose > 5)		vstringf("Calling read: Readnum=%d ",		  readline_readnum);	readline_ptr=readline_buffer;	readline_left=read(readline_fd, readline_ptr, readline_readnum);	if (!no_timeout)		alarm(0);	if (readline_left>0 && bytes_per_error) {		static long ct=0;		static int mod=1;		ct+=readline_left;		while (ct>bytes_per_error) {			readline_ptr[ct % bytes_per_error]^=mod;			ct-=bytes_per_error;			mod++;			if (mod==256)				mod=1;		}	}	if (Verbose > 5) {		vstringf("Read returned %d bytes\n", readline_left);		if (readline_left==-1)			vstringf("errno=%d:%s\n", errno,strerror(errno));		if (Verbose > 9 && readline_left>0) {			int i,j;			j=readline_left > 48 ? 48 : readline_left;			vstring("    ");			for (i=0;i<j;i++) {				if (i%24==0 && i)					vstring("\n    ");				vstringf("%02x ", readline_ptr[i] & 0377);			}			vstringf("\n");		}	}	if (readline_left < 1)		return TIMEOUT;	--readline_left;	return (*readline_ptr++ & 0377);}voidreadline_setup(int fd, size_t readnum, size_t bufsize){	readline_fd=fd;	readline_readnum=readnum;	readline_buffer=malloc(bufsize > readnum ? bufsize : readnum);	if (!readline_buffer)		error(1,0,_("out of memory"));}voidreadline_purge(void){	readline_left=0;	return;}

⌨️ 快捷键说明

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