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

📄 ecuxfer.c

📁 一个通讯程序源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*+-------------------------------------------------------------------------	ecuxfer.c - file transfer	wht@n4hgf.Mt-Park.GA.US   000000000011111111112222222222333333333344444444445555555555666666666actually   012345678901234567890123456789012345678901234567890123456789012345678wider00:.--[ Send ZMODEM/CRC32 ]--------------------------------------------.01:|                                                                   |02:|  File? to send:                                                   |03:|  ................................................................ |04:|                                                                   |05:|  Binary: Y (no CR/LF translation)                                 |06:|  Overwrite destination files: Y                                   |07:|  Send full pathnames: N                                           |08:|  Transfer only newer files:   N (if receiver supports)            |09:|  Resume interrupted transfer: N (if receiver supports)            |10:|  ZMODEM window: ______                                            |11:|                                                                   |-1:| TAB:next  ^B:prev  END:perform transfer  ESC:abort                |-0:`-------------------------------------------------------------------'  Defined functions:	file_xfer_done_bell()	file_xfer_start()	receive_files_from_remote(argc,argv)	report_send_status()	send_files_to_remote(argc,argv)	xfer_title_fragment()	xfrw_bot_msg(msg)	xfrw_display_cmd_line()	xfrw_get_single(nondelim_list)	xfrws_display_allvars()	xfrws_display_binary()	xfrws_display_literals()	xfrws_display_name()	xfrws_display_resume()	xfrws_display_xfernew()--------------------------------------------------------------------------*//*+:EDITS:*//*:09-10-1992-13:59-wht@n4hgf-ECU release 3.20 *//*:09-05-1992-15:31-wht@n4hgf-add resume choice  *//*:08-22-1992-15:38-wht@n4hgf-ECU release 3.20 BETA *//*:08-21-1992-15:21-wht@n4hgf-look for ecu xfer programs in ECULIBDIR *//*:09-25-1991-16:26-wht@n4hgf2-flexible C-Kermit filename *//*:09-17-1991-19:41-wht@n4hgf-restore console termio after xfer prog runs *//*:08-28-1991-14:07-wht@n4hgf2-SVR4 cleanup by aega84!lh *//*:08-25-1991-14:39-wht@n4hgf-SVR4 port thanks to aega84!lh *//*:07-25-1991-12:57-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 *//*:06-04-1991-14:18-wht@n4hgf-sometimes I forget 286: zwindw_size now uint *//*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */#include "ecucurses.h"#define STDIO_H_INCLUDED#define OMIT_TERMIO_REFERENCES#include "ecu.h"#include "ecuerror.h"#include "ecukey.h"#include "ecuxkey.h"#include "ecutty.h"#include "pc_scr.h"long atol();char *find_executable();#ifdef M_I286#define ZWINDW_LIMIT 65472#else#define ZWINDW_LIMIT 65536#endif/* -- protocol xfer types -- */#define ECUSZ_X			1#define ECUSZ_Y			2#define ECUSZ_Z			3#define ECUSEA			4#define CKERMIT			5#define ECURZ_X			7#define ECURZ_Y			8#define ECURZ_Z			9/* --------------------- send window ----------------------------------- *//*      SNDW_LINES			calculated (xfrw_lines) */#define SNDW_COLS			79#define SNDW_TLY			2/*      SNDW_TLX			calculated (xfrw_tlx) */#define SNDW_FILE_LY		2#define SNDW_FILE_LX		3#define SNDW_FILE_Y			3#define SNDW_FILE_X			3#define SNDW_FILE_LEN		(SNDW_COLS - SNDW_FILE_X - 2)#define SNDW_BIN_Y			5#define SNDW_BIN_LX			3#define SNDW_BIN_X			11#define SNDW_BIN_LX2		13#define SNDW_OVERW_Y		6#define SNDW_OVERW_LX		3#define SNDW_OVERW_X		32#define SNDW_SENDFULL_Y		7#define SNDW_SENDFULL_LX	3#define SNDW_SENDFULL_X		24#define SNDW_XFERNEW_Y		8#define SNDW_XFERNEW_LX		3#define SNDW_XFERNEW_X		32#define SNDW_RESUME_Y		9#define SNDW_RESUME_LX		3#define SNDW_RESUME_X		32#define SNDW_ZWINDW_Y		10#define SNDW_ZWINDW_LX		3#define SNDW_ZWINDW_X		16#define SNDW_ZWINDW_LEN		6extern char curr_dir[CURR_DIRSIZ];		/* current working directory */extern int protocol_log_packets;extern int last_child_wait_status;long file_xfer_start_time;	/* time() value at beginning of file xfer */char xfertype = -1;		/* file xfer type */WINDOW *xfrw;char xfrw_cols;char xfrw_lines;char xfrw_tlx;char p_binary;		/* xfer options -- not all apply to all protocols */char p_sendfull;char p_overwrite;char p_xfernew;char p_resume;char p_filelist[80];uint zwindw_size;/*+-------------------------------------------------------------------------	file_xfer_start()--------------------------------------------------------------------------*/voidfile_xfer_start(){	time(&file_xfer_start_time);}	/* end of file_xfer_start *//*+-------------------------------------------------------------------------	file_xfer_done_bell()--------------------------------------------------------------------------*/voidfile_xfer_done_bell(){	long xfer_time;	int xbell_count = 0;	time(&xfer_time);	xfer_time -= file_xfer_start_time;	sleep(1);	xbell_count = 1;	if(xfer_time >= 3600L)			/* >= one hour */		xbell_count = 3;	else if(xfer_time >= 1800L)		/* >= 1/2 hour */		xbell_count = 2;	if(shm->bell_notify_state)		bell_notify(XBELL_ATTENTION);	xbell(XBELL_DONE,xbell_count);}	/* end of file_xfer_done_bell *//*+-------------------------------------------------------------------------	xfrw_bot_msg(msg)--------------------------------------------------------------------------*/voidxfrw_bot_msg(msg)char *msg;{	register itmp;	register itmp2;	static last_msglen = 0;	char msg2[80];	wmove(xfrw,xfrw_lines - 1,3);	if((itmp = strlen(msg)) == 0)	{		itmp2 = last_msglen + 2;#if defined(SVR4)		whline(xfrw, (unsigned long)(sHR & 0x00ff), itmp2);#else		for(itmp = 0; itmp < itmp2; itmp++)			waddch(xfrw,(unsigned)sHR);#endif		last_msglen = 0;	}	else	{		waddch(xfrw,' ');		if(itmp > xfrw_cols - 3 - 2)		{			strncpy(msg2,msg,xfrw_cols - 3 - 2);			msg2[xfrw_cols - 3 - 2 + 1] = 0;			waddstr(xfrw,msg2);			itmp = strlen(msg2);		}		else		{			waddstr(xfrw,msg);			itmp = strlen(msg);		}		waddch(xfrw,' ');		if((itmp2 = last_msglen - itmp) > 0)		{#if defined(SVR4)			whline(xfrw, (unsigned long)(sHR & 0x00ff), itmp2);#else			while(itmp2--)				waddch(xfrw,(unsigned)sHR);#endif		}		last_msglen = itmp;		/* remember last message length */	}	wrefresh(xfrw);}	/* end of xfrw_bot_msg *//*+-------------------------------------------------------------------------	xfrw_get_single(nondelim_list)assumes cursor is already positioned--------------------------------------------------------------------------*/intxfrw_get_single(nondelim_list)register char *nondelim_list;{	register uint itmp;	static uchar xfrw_nondelim_list[] =	{		CRET,NL,XFcurup,XFcurdn,CTL_B,TAB,ESC,CTL_L,CTL_R,XFend,(uchar)0	};	itmp = winget_single(xfrw,nondelim_list,xfrw_nondelim_list);	if( (itmp & 0xFF) == CRET)		itmp = NL | 0x1000;	return(itmp);}	/* end of xfrw_get_single *//*+-------------------------------------------------------------------------	xfer_title_fragment()--------------------------------------------------------------------------*/char *xfer_title_fragment(){	register char *cptr = "UNKNOWN";	switch(xfertype)	{		case ECURZ_X:		case ECUSZ_X: cptr = "XMODEM/CRC"; break;		case ECURZ_Y:		case ECUSZ_Y: cptr = "YMODEM/CRC"; break;		case ECURZ_Z:		case ECUSZ_Z: cptr = "ZMODEM/CRC32"; break;		case ECUSEA:  cptr = "SEAlink"; break;		case CKERMIT: cptr = "KERMIT/CRC" ;break;	}	return(cptr);}	/* end of xfer_title_fragment *//*+-------------------------------------------------------------------------	xfrw_display_cmd_line()--------------------------------------------------------------------------*/voidxfrw_display_cmd_line(){	register itmp;	char *cmd_string = "TAB:next  ^B:prev  END:perform transfer  ESC:abort"; 	register left_spaces = ((xfrw_cols - 2) - strlen(cmd_string)) / (unsigned)2;	int x;	int y;	wmove(xfrw,xfrw_lines - 2,1);	wstandout(xfrw);	for(itmp = 0; itmp < left_spaces; itmp++)		waddch(xfrw,' ');	waddstr(xfrw,cmd_string);	getyx(xfrw,y,x);	while(++x < xfrw_cols)		waddch(xfrw,' '); 	wstandend(xfrw);}	/* end of xfrw_display_cmd_line *//*+-------------------------------------------------------------------------	xfrws_display_literals()--------------------------------------------------------------------------*/voidxfrws_display_literals(){	wmove(xfrw,SNDW_FILE_LY,SNDW_FILE_LX);	if(xfertype == ECUSZ_X)		waddstr(xfrw,"File");	else		waddstr(xfrw,"File(s)");	waddstr(xfrw," to send:");	switch(xfertype)	{		case ECUSZ_Z:			wmove(xfrw,SNDW_XFERNEW_Y,SNDW_XFERNEW_LX);			waddstr(xfrw,"Transfer only newer files:");			wmove(xfrw,SNDW_SENDFULL_Y,SNDW_SENDFULL_LX);			waddstr(xfrw,"Send full pathames:");			wmove(xfrw,SNDW_RESUME_Y,SNDW_RESUME_LX);			waddstr(xfrw,"Resume interrupted transfer:");			wmove(xfrw,SNDW_ZWINDW_Y,SNDW_ZWINDW_LX);			waddstr(xfrw,"Window size:");		case CKERMIT:			wmove(xfrw,SNDW_OVERW_Y,SNDW_OVERW_LX);			waddstr(xfrw,"Overwrite destination files:");		case ECUSZ_Y:		case ECUSZ_X:			wmove(xfrw,SNDW_BIN_Y,SNDW_BIN_LX);			waddstr(xfrw,"Binary:");	}}	/* end of xfrws_display_literals *//*+-------------------------------------------------------------------------	xfrws_display_name()--------------------------------------------------------------------------*/voidxfrws_display_name(){	clear_area(xfrw,SNDW_FILE_Y,SNDW_FILE_X,SNDW_FILE_LEN);	waddstr(xfrw,p_filelist);}	/* end of xfrws_display_name *//*+-------------------------------------------------------------------------	xfrws_display_binary()--------------------------------------------------------------------------*/voidxfrws_display_binary(){	wmove(xfrw,SNDW_BIN_Y,SNDW_BIN_X);	waddch(xfrw,(p_binary) ? 'Y' : 'N');	if(p_binary)		waddstr(xfrw," (no NL-CR/LF translation)     ");	else		waddstr(xfrw," (NL-CR/LF translation enabled)");}	/* end of xfrws_display_binary *//*+-------------------------------------------------------------------------	xfrws_display_xfernew()--------------------------------------------------------------------------*/voidxfrws_display_xfernew(){	wmove(xfrw,SNDW_XFERNEW_Y,SNDW_XFERNEW_X);	waddch(xfrw,(p_xfernew) ? 'Y' : 'N');	if(p_xfernew)		waddstr(xfrw," (if receiver supports)");	else		waddstr(xfrw,"                       ");}	/* end of xfrws_display_xfernew *//*+-------------------------------------------------------------------------	xfrws_display_resume()--------------------------------------------------------------------------*/voidxfrws_display_resume(){	wmove(xfrw,SNDW_RESUME_Y,SNDW_RESUME_X);	waddch(xfrw,(p_resume) ? 'Y' : 'N');	if(p_resume)		waddstr(xfrw," (if receiver supports)");	else		waddstr(xfrw,"                       ");}	/* end of xfrws_display_resume *//*+-------------------------------------------------------------------------	xfrws_display_allvars()--------------------------------------------------------------------------*/voidxfrws_display_allvars(){	char s32[32];	xfrws_display_name();	switch(xfertype)	{		case ECUSZ_Z:			xfrws_display_xfernew();			xfrws_display_resume();			wmove(xfrw,SNDW_SENDFULL_Y,SNDW_SENDFULL_X);			waddch(xfrw,(p_sendfull) ? 'Y' : 'N');			wmove(xfrw,SNDW_ZWINDW_Y,SNDW_ZWINDW_X);			sprintf(s32,"%u",zwindw_size);			waddstr(xfrw,s32);		case CKERMIT:			wmove(xfrw,SNDW_OVERW_Y,SNDW_OVERW_X);			waddch(xfrw,(p_overwrite) ? 'Y' : 'N');		case ECUSZ_Y:		case ECUSZ_X:			xfrws_display_binary();	}}	/* end of xfrws_display_allvars *//*+-------------------------------------------------------------------------	report_send_status() - report file transmission resultreturns proc-type ercfor "ecu knowledgeable" protocols only--------------------------------------------------------------------------*/report_send_status(){	int erc = 0;	ushort int ustmp;	ulong colors_at_entry = colors_current;	char *signal_name_text();	ustmp = last_child_wait_status;	if((ustmp & 0xFF) == 0)	/* exit() called */	{		ustmp >>= 8;		if(ustmp == 0)		{			setcolor(colors_notify);			pputs("[transfer successful]");			erc = 0;		}		else if(ustmp == 255)		{			setcolor(colors_error);			pputs("[ecu error: transfer program usage error]");			erc = eFATAL_ALREADY;		}		else if(ustmp == 254)		{			setcolor(colors_error);			pputs(			"[protocol failure: bad line conditions or remote not ready]");			erc = eFATAL_ALREADY;		}		else if(ustmp == 253)		{			setcolor(colors_alert);			pputs("[no requested files exist]");			erc = eFATAL_ALREADY;		}		else if(ustmp < 128)		{			setcolor(colors_alert);			if(ustmp == 127)				pputs("[127 or more files skipped]");			else				pprintf("[%u files rejected]",ustmp);			erc = 0;		}		else		{			setcolor(colors_alert);			pprintf("[transfer aborted by %s]",				signal_name_text(ustmp & 0x7F));			erc = eProcAttn_Interrupt;		}	}	else	{		tcap_curbotleft();		setcolor(colors_error);		pprintf("[transfer killed by %s]",			signal_name_text(ustmp & 0x7F));		erc = eProcAttn_Interrupt;	}	setcolor(colors_at_entry);	pputs("\n");	return(erc);}	/* end of report_send_status *//*+-----------------------------------------------------------------------	send_files_to_remote(argc,argv)------------------------------------------------------------------------*/voidsend_files_to_remote(argc,argv)int argc;char **argv;{	register itmp;	register input_state = 0;	register input_state_mod;	long ltmp;	int input_done;	int used_argv = 0;	char *ckufnm;	char execcmd[256];	char s80[80];	char flst[80];	uchar delim;	/* important to be unsigned to avoid sign extension */	WINDOW *window_create();	char bottom_label[64];	int old_ttymode = get_ttymode();	p_binary = 1;		/* assume p_binary xfer */	p_sendfull = 0;		/* assume no full pathnames */	p_overwrite = 1;	/* assume overwrite */	p_xfernew = 0;		/* assume send only newer */	p_filelist[0] = 0;	/* no filenames yet */#if defined(WHT)	zwindw_size = 65536;					/* my preference */#else#if defined(DEFAULT_SZ_WINDOW)	zwindw_size = DEFAULT_SZ_WINDOW_SIZE;	/* your preference */#else	zwindw_size = 0;						/* default to full streaming sz */#endif /* DEFAULT_SZ_WINDOW */#endif /* WHT */	switch(to_lower(*(argv[0] + 1)))	{		case 'x': xfertype = ECUSZ_X; break;		case 'y': xfertype = ECUSZ_Y; break;		case 'z': xfertype = ECUSZ_Z; break;		case 'k': xfertype = CKERMIT; break;		case 's': xfertype = ECUSEA; break;		default: ff(se,"send command invalid\n");			return;	}	kill_rcvr_process(SIGUSR1);	/* SIGUSR1 gives chance to close log file *//* define and open window */	input_state_mod = 0;	xfrw_tlx = (COLS - SNDW_COLS) / 2;	xfrw_cols = SNDW_COLS;	switch(xfertype)	{		case ECUSEA:			input_state_mod = 1;			xfrw_lines = 7;			break;		case ECUSZ_X:			input_state_mod = 2;			xfrw_lines = 9;			break;		case ECUSZ_Z:			input_state_mod = 7;			xfrw_lines = input_state_mod + 7;			break;		case CKERMIT:			input_state_mod = 3;			xfrw_lines = input_state_mod + 7;			break;		case ECUSZ_Y:			input_state_mod = 2;			xfrw_lines = input_state_mod + 7;			break;		default:			termecu(9999);	}	windows_start();	sprintf(execcmd,"Send %s",xfer_title_fragment());	xfrw = window_create(execcmd,-3,SNDW_TLY,(int)xfrw_tlx,			(int)xfrw_lines,(int)xfrw_cols);	xfrw_display_cmd_line();	xfrws_display_literals();	xfrws_display_allvars();	wmove(xfrw,0,27);	waddstr(xfrw," dir: ");	if(strlen(curr_dir) > (unsigned)(xfrw_cols - 32))

⌨️ 快捷键说明

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