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

📄 ecufinsert.c

📁 一个通讯程序源码
💻 C
字号:
#define USE_XON_XOFF/*+-------------------------------------------------------------------------	ecufinsert.c -- insert file onto comm line	wht@n4hgf.Mt-Park.GA.US  Defined functions:	expand_filename(fname,maxlen)	file_insert_clear_xoff()	file_insert_to_line(narg,arg)--------------------------------------------------------------------------*//*+:EDITS:*//*:09-10-1992-13:58-wht@n4hgf-ECU release 3.20 *//*:08-22-1992-15:38-wht@n4hgf-ECU release 3.20 BETA *//*:07-25-1991-12:55-wht@n4hgf-ECU release 3.10 *//*:07-17-1991-07:04-wht@n4hgf-avoid SCO UNIX nap bug *//*:07-14-1991-18:18-wht@n4hgf-new ttygets functions *//*:04-27-1991-01:24-wht@n4hgf-expand_filename was NFG *//*:03-30-1991-12:40-wht@n4hgf-redi!donovan found q does not restart receiver *//*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */#include "ecu.h"#include "ecukey.h"#include "ecutty.h"extern char kbdintr;		/* current input INTR */extern ulong colors_current;extern ulong colors_alert;extern ulong colors_errors;/*+-------------------------------------------------------------------------	expand_filename(fname) - convert fnames with shell charsreturn 0 if no shell characters found       -1 if shell expansion match found       1 if shell expansion found--------------------------------------------------------------------------*/intexpand_filename(fname,maxlen)char *fname;int maxlen;{char *expcmd;	if(!find_shell_chars(fname))		return(0);	if(expand_wildcard_list(fname,&expcmd))	{		fputs("\r\n",se);		fputs(expcmd,se);		fputs("\r\n",se);		return(-1);	}	strncpy(fname,expcmd,maxlen);	fname[maxlen - 1] = 0;	if(strchr(expcmd,' '))	{		fputs("\r\nToo many files:\r\n",se);		fputs(expcmd,se);		fputs("\r\n",se);		free(expcmd);		return(-1);	}	strncpy(fname,expcmd,maxlen - 1);	*(fname + maxlen - 1) = 0;	free(expcmd);	return(0);}	/* end of expand_filename *//*+-------------------------------------------------------------------------	file_insert_clear_xoff()--------------------------------------------------------------------------*/voidfile_insert_clear_xoff(){#ifdef USE_XON_XOFF#ifdef SAY_CLEARED_XOFFulong colors_at_entry = colors_current;	setcolor(colors_alert);	fputs("--> local XOFF cleared\r",se);	setcolor(colors_at_entry);#endif	lclear_xmtr_xoff();#endif}	/* end of file_insert_clear_xoff *//*+-------------------------------------------------------------------------	file_insert_to_line(narg,arg)--------------------------------------------------------------------------*/file_insert_to_line(narg,arg)int narg;char **arg;{int itmp;register rchar;int old_ttymode = get_ttymode();long total_chars = 0L;long total_lines = 0L;ulong colors_at_entry = colors_current;long timeout_msecs;FILE *fp;char file_string[256];char s256[256];char xmit_mode;uchar delim;#ifdef USE_XON_XOFFint ixon;int ixoff;#endifchar *make_char_graphic();	sigint = 0;	if(narg > 1)	{		strncpy(s256,arg[1],sizeof(s256));			s256[sizeof(s256) - 1] = 0;	}	else	{		ff(se,"\r\n--> File to insert on comm line: ");		ttygets(s256,sizeof(s256),TG_CRLF,&delim,(int *)0);		if((delim == ESC) || !strlen(s256)) 		{			ff(se," --> transmission aborted\r\n");			return(0);		}	}	if((itmp = expand_filename(s256,sizeof(s256))) < 0)		return(-1);	else if(itmp)		ff(se,"\r\n--> wild card match: %s",s256);	if((fp = fopen(s256,"r")) == (FILE *)0)	{		ff(se,"\r\n--> ");		pperror(s256);			/* print error if we get one */		return(-1);	}	if(narg > 1)		ff(se,"\r\n");	if(narg > 2)		xmit_mode = *arg[2];	else	{ASK_OPTION:		ff(se,"(S)ingle line at a time\r\n");		ff(se,"(E)cho pacing\r\n");		ff(se,"(F)ull speed transmission\r\n");		ff(se,"(P)aced transmission (20 msec/char)\r\n");		ff(se,"(Q)uit (or ESC)          press a key:   ");		xmit_mode = ttygetc(0) & 0x7F;		if(xmit_mode > 0x20)			fputs(make_char_graphic(xmit_mode,0),se);		fputs("\r\n",se);	}	kill_rcvr_process(SIGUSR1);	switch(xmit_mode = to_lower(xmit_mode))	{		case 's':			setcolor(colors_alert);			fputs("--> press SPACE to continue or ESC/'s' to stop\r\n",se);			setcolor(colors_at_entry);			break;		case 'e':			/* fall through */		case 'f':		case 'p':			setcolor(colors_alert);			ff(se,"--> press %s to abort\r\n",make_char_graphic(kbdintr,0));			setcolor(colors_at_entry);			ttymode(2);			break;		case 'q':		case ESC:			goto INSERT_DONE2;		default:			ring_bell();			fputs("\r\n",se);			goto ASK_OPTION;	}#ifdef USE_XON_XOFF	lget_xon_xoff(&ixon,&ixoff);		/* get current line xon/xoff status */	lxon_xoff(IXON);					/* set it for us */#endif	while(fgets(file_string,sizeof(file_string),fp))	{	int xmit_len = strlen(file_string);	int xmit_cr = xmit_len && (file_string[xmit_len - 1] == NL);		if(xmit_cr)		{			xmit_len--;			file_string[xmit_len] = 0;		}		total_chars += xmit_len;		total_lines++;/* some destinations, like BBS msg entry, take a blank line to meanend of message, so do not send completely blank lines */		if(!xmit_len && xmit_cr)		{			lputc(' ');			xmit_len = 1;		}		else if(xmit_mode == 'p')		{		register char *cptr = file_string;			while(*cptr)			{				lputc(*cptr++);				Nap(20L);				while(rdchk(shm->Liofd))				{					rchar = lgetc_xmtr();					process_xmtr_rcvd_char((char)rchar,1);				}			}		}		else			lputs(file_string);		if(xmit_cr)		{			if(xmit_mode == 'p')				Nap(20L);			lputc('\r');			xmit_len++;		}		if(sigint)			break;		switch(xmit_mode)		{			case 's':				while(1)				{					if(ttyrdchk())						break;					rchar = lgetc_timeout(5 * 1000L);					if(rchar < 0)						file_insert_clear_xoff();					else						process_xmtr_rcvd_char((char)rchar,1);					if(rchar == 0x0A)						break;				}				rchar = to_lower(ttygetc(1));				if((rchar == 's') || (rchar == ESC))					goto INSERT_DONE;				break;			case 'e':				timeout_msecs = 5 * 1000L;				while(1)				{					if(sigint)						break;					rchar = lgetc_timeout(timeout_msecs);					if(rchar < 0)					{						if(!xmit_len)							break;						file_insert_clear_xoff();						timeout_msecs = 1 * 1000L;					}					else					{						process_xmtr_rcvd_char((char)rchar,1);						timeout_msecs = 100L;						if(xmit_len)							xmit_len--;					}					if(rchar == 0x0A)						break;				}				break;			case 'f':			case 'p':				while(rdchk(shm->Liofd))				{					rchar = lgetc_xmtr();					process_xmtr_rcvd_char((char)rchar,1);				}				break;		}		if(sigint)			break;	}INSERT_DONE:	if(sigint)	{		sigint = 0;		setcolor(colors_error);		ff(se,"--> Interrupted\r\n");		setcolor(colors_at_entry);	}INSERT_DONE2:	fclose(fp);	ttymode(old_ttymode);		/* restore old console mode */	sigint = 0;				/* reset SIGINT flag */	while(((rchar = lgetc_timeout(200L)) >= 0) && !sigint)		process_xmtr_rcvd_char((char)rchar,1);	setcolor(colors_success);	ff(se,"\r\n-->  done ... sent %ld lines, %ld characters\r\n",				total_lines,total_chars);	setcolor(colors_at_entry);	lclear_xmtr_xoff();#ifdef USE_XON_XOFF	lxon_xoff(ixon | ixoff);	/* restore old line xon/xoff status */#endif	start_rcvr_process(1);	return(0);}	/* end of file_insert_to_line *//* vi: set tabstop=4 shiftwidth=4: *//* end of ecufinsert.c */

⌨️ 快捷键说明

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