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

📄 ecuxfer.c

📁 一个通讯程序源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	{		strncpy(s80,curr_dir,xfrw_cols - 32);		s80[xfrw_cols - 32] = 0;		waddstr(xfrw,s80);	}	else		waddstr(xfrw,curr_dir);	waddch(xfrw,' ');	flst[0] = 0;REENTER_INPUT_LOOP:	input_done = 0;	while(!input_done)	{		switch(input_state)		{			case 0:		/* filename(s) */				xfrw_bot_msg("enter file(s) to send");CASE_0_AGAIN:				if(used_argv || (argc == 1))				{					itmp = wingets(xfrw,SNDW_FILE_Y,SNDW_FILE_X,flst,						SNDW_FILE_LEN + 1,&delim,						(p_filelist[0] != 0),(int *)0);				}				else				{					used_argv = 1;					flst[0] = 0;					for(itmp = 1; itmp < argc; itmp++)					{						if((strlen(flst) + strlen(argv[itmp]) + 1) >							sizeof(flst))						{							xfrw_bot_msg("arguments too long ... reenter list");							ring_bell();							goto CASE_0_AGAIN;						}						strcat(flst,argv[itmp]);						if(itmp != (argc - 1))							strcat(flst," ");					}					delim = NL;				}				if(delim == ESC)					break;				if(strlen(flst))				{					strcpy(p_filelist,flst);					xfrws_display_name();					if(find_shell_chars(p_filelist))					{					char *expcmd;						if(expand_wildcard_list(p_filelist,&expcmd))						{							xfrw_bot_msg(expcmd);							ring_bell();							goto CASE_0_AGAIN;						}						expcmd[SNDW_FILE_LEN - 1] = 0;						clear_area(xfrw,SNDW_FILE_Y,SNDW_FILE_X,SNDW_FILE_LEN);						waddstr(xfrw,expcmd);						free(expcmd);					}				}				break;			case 1:		/* binary */				xfrw_bot_msg("Y: no conversion, N: NLs converted to CR/LF");				wmove(xfrw,SNDW_BIN_Y,SNDW_BIN_X);				wrefresh(xfrw);				delim = NL;				switch(itmp = xfrw_get_single("ny"))				{					case 0:					case 1:						p_binary = itmp;						xfrws_display_binary();						break;					default:						delim = itmp & 0xFF;						break;				}				break;			case 2:		/* overwrite */				xfrw_bot_msg("Y: overwrite, N: protect destination files");				wmove(xfrw,SNDW_OVERW_Y,SNDW_OVERW_X);				wrefresh(xfrw);				delim = NL;				switch(itmp = xfrw_get_single("ny"))				{					case 0:					case 1:						p_overwrite = itmp;						break;					default:						delim = itmp & 0xFF;						break;				}				break;			case 3:		/* send full pathnames */				xfrw_bot_msg(					"Y: full pathnames, N: strip directory portion from names");				wmove(xfrw,SNDW_SENDFULL_Y,SNDW_SENDFULL_X);				wrefresh(xfrw);				delim = NL;				switch(itmp = xfrw_get_single("ny"))				{					case 0:					case 1:						p_sendfull = itmp;						break;					default:						delim = itmp & 0xFF;						break;				}				break;			case 4:		/* src newer than dest */				xfrw_bot_msg(				"Y: send only if source newer than destination, N send all");				wmove(xfrw,SNDW_XFERNEW_Y,SNDW_XFERNEW_X);				wrefresh(xfrw);				delim = NL;				switch(itmp = xfrw_get_single("ny"))				{					case 0:					case 1:						p_xfernew = itmp;						xfrws_display_xfernew();						break;					default:						delim = itmp & 0xFF;						break;				}				break;			case 5:		/* resume interrupted transfer */				xfrw_bot_msg(				"Y: resume transfer at remote file EOF, N send all");				wmove(xfrw,SNDW_RESUME_Y,SNDW_RESUME_X);				wrefresh(xfrw);				delim = NL;				switch(itmp = xfrw_get_single("ny"))				{					case 0:					case 1:						p_resume = itmp;						xfrws_display_resume();						break;					default:						delim = itmp & 0xFF;						break;				}				break;			case 6:		/* window size */				xfrw_bot_msg(				"window size (max bytes sent before ACK required) 0 = stream");CASE_5_AGAIN:				sprintf(s80,"%u",zwindw_size);				clear_area(xfrw,SNDW_ZWINDW_Y,SNDW_ZWINDW_X,					SNDW_ZWINDW_LEN + 10);				itmp = wingets(xfrw,SNDW_ZWINDW_Y,SNDW_ZWINDW_X,s80,					SNDW_ZWINDW_LEN + 1,&delim,1,(int *)0);				if((delim == ESC))					break;				if( ((ltmp = atol(s80)) != 0) &&					((ltmp < 256) || (ltmp > ZWINDW_LIMIT)))				{				char xbmsg[80];					ring_bell();					sprintf(xbmsg,"window size must be 0 or 256 <= w <= %u",						ZWINDW_LIMIT);					xfrw_bot_msg(xbmsg);					goto CASE_5_AGAIN;				}				zwindw_size = (uint)(ltmp / 64L) * 64L;				sprintf(s80,"%u%s",zwindw_size,					(zwindw_size != (uint)ltmp) ? " adjusted" : "" );				clear_area(xfrw,SNDW_ZWINDW_Y,SNDW_ZWINDW_X,					SNDW_ZWINDW_LEN + 10);				waddstr(xfrw,s80);				break;		}		switch(delim)		{			case XFcurup:			case CTL_B:				input_state = (input_state) ? input_state - 1 				                            : input_state_mod - 1;				break;			case XFcurdn:			case TAB:			case NL:				input_state++;				input_state %= input_state_mod;				break;			case CTL_L:			case CTL_R:				tcap_clear_screen();				touchwin(stdscr);				wrefresh(stdscr);				touchwin(xfrw);				wrefresh(xfrw);				break;			case ESC:				xfrw_bot_msg("transfer abandoned");				input_done = 1;				break;			case XFend:				input_done = 1;				break;		}	}	if(delim == XFend)	{		if(!p_filelist[0])		{			ring_bell();			xfrw_bot_msg("No filenames entered!  Press <ENTER>");			(void)ttygetc(1);			input_state = 0;			goto REENTER_INPUT_LOOP;		}		xfrw_bot_msg("starting file transfer");	}	wrefresh(xfrw);	delwin(xfrw);	windows_end(0);	tcap_cursor(SNDW_TLY + xfrw_lines + 1,0);	if(delim == ESC)	{		start_rcvr_process(1);		return;	}	bottom_label[0] = 0;	if(shm->Llogical[0])		sprintf(bottom_label,"-C \"'Connected to %s'\" ",shm->Llogical);/* we are going to do a transfer! */	switch(xfertype)	{		case ECUSZ_X:			sprintf(execcmd,"%s/ecusz -X -. %d ",eculibdir,shm->Liofd);			strcat(execcmd,bottom_label);			if(protocol_log_packets)				strcat(execcmd,"-, ");			if(p_binary)				strcat(execcmd,"-b ");			else				strcat(execcmd,"-a ");			strcat(execcmd,p_filelist);			break;		case ECUSZ_Y:			sprintf(execcmd,"%s/ecusz -Y -. %d -k ",eculibdir,shm->Liofd);			strcat(execcmd,bottom_label);			if(protocol_log_packets)				strcat(execcmd,"-, ");			if(p_binary)				strcat(execcmd,"-b ");			else				strcat(execcmd,"-a ");			strcat(execcmd,p_filelist);			break;		case ECUSZ_Z:			sprintf(execcmd,"%s/ecusz -Z -. %d ",eculibdir,shm->Liofd);			strcat(execcmd,bottom_label);			if(zwindw_size)				sprintf(&execcmd[strlen(execcmd)]," -w %u ",zwindw_size);			if(protocol_log_packets)				strcat(execcmd,"-, ");			if(p_overwrite)				strcat(execcmd,"-y ");			else				strcat(execcmd,"-p ");			if(p_binary)				strcat(execcmd,"-b ");			else				strcat(execcmd,"-a ");			if(p_xfernew)				strcat(execcmd,"-n ");	/* overrides -y/-p choice earlier */			if(p_resume)				strcat(execcmd,"-r ");			if(p_sendfull)				strcat(execcmd,"-f ");			strcat(execcmd,p_filelist);			break;		case ECUSEA:			sprintf(execcmd,"%s/ecusea -. %d -/ %s -s ",				eculibdir,shm->Liofd,curr_dir);			if(protocol_log_packets)				strcat(execcmd,"-, ");			strcat(execcmd,p_filelist);			break;		case CKERMIT:	/* flexible kermit filename */#ifdef WHT		if(ckufnm = find_executable("ck5a")) /* private alpha version */			;#else		if(ckufnm = (char *)0)			;#endif		else if(ckufnm = find_executable("kermit"))			;		else if(ckufnm = find_executable("ckermit"))			; /* our old 286 4E hack (and alternate name used by many) */		else		{			ff(se,"Cannot find C-Kermit ('kermit' or 'ckermit')\r\n");			last_child_wait_status = -1;			goto EXIT;		}		sprintf(execcmd,"%s -l %d -b %u -p %c%s%s -s %s",				ckufnm,	/* kermit flexible name */				shm->Liofd,				shm->Lbaud,				(shm->Lparity) ? shm->Lparity : 'n',				(p_binary) ? " -i" : "",				(p_overwrite) ? "" : " -w",				p_filelist);		break;	default:		pprintf("logic error in send_files_to_remote xfertype=%d\n",			xfertype);		termecu(TERMECU_LOGIC_ERROR);		/*NOTREACHED*/}file_xfer_start();if(!find_shell_chars(execcmd))	exec_cmd(execcmd);else{char *expcmd;	if(expand_wildcard_list(execcmd,&expcmd))	{		ff(se,"No files match\r\n");		return;	}	exec_cmd(expcmd);	free(expcmd);}EXIT:lreset_ksr();				/* ensure line termio back to our config */ttymode(old_ttymode);		/* xfer prog may screw up tty too */switch(xfertype){	case ECUSEA:	case ECUSZ_X:	case ECUSZ_Y:	case ECUSZ_Z:		xfertype = 1;		/* was ecusz */		break;	default:		xfertype = 0;		break;}if(xfertype)	/* ecu knowledgable */	report_send_status();else{	tcap_stand_out();	ff(se," transfer status %04x ",last_child_wait_status);	tcap_stand_end();	ff(se,"\r\n");}ff(se,"\r\n");file_xfer_done_bell();start_rcvr_process(1);}	/* end of send_files_to_remote *//*+-------------------------------------------------------------------------receive_files_from_remote(argc,argv)also used by "automatic rz"arg[0] = "rk", "rs", "rx", "ry", or "rz"--------------------------------------------------------------------------*/voidreceive_files_from_remote(argc,argv)int argc;char **argv;{	register itmp;	uchar delim;	char execcmd[256];	char bottom_label[64];	char *ckufnm;	int old_ttymode = get_ttymode();	int restart_rcvr = need_rcvr_restart();	if(!argc)	/* this should never happen, but ... */		return;	sprintf(bottom_label,"-C 'Connected to %s' ",	    (shm->Llogical[0]) ? shm->Llogical : "?");	switch(to_lower(*(argv[0] + 1)))	{		case 'k': xfertype = CKERMIT; break;		case 's': xfertype = ECUSEA; break;		case 'x': xfertype = ECURZ_X; break;		case 'y': xfertype = ECURZ_Y; break;		case 'z': xfertype = ECURZ_Z; break;		default: 			ff(se,"receive command invalid\n");			return;	}	if(xfertype == ECURZ_X)	{		char xfilenam[128];		if(restart_rcvr)			kill_rcvr_process(SIGUSR1);		sprintf(execcmd,"%s/ecurz -X -. %d -c ",eculibdir,shm->Liofd);		strcat(execcmd,bottom_label);		if(protocol_log_packets)			strcat(execcmd,"-, ");		if(argc > 1)		{			strncpy(xfilenam,argv[1],sizeof(xfilenam) - 1);			xfilenam[sizeof(xfilenam) - 1] = 0;		}		else		{			ff(se,"    File name to receive via XMODEM/CRC:  ");			ttygets(xfilenam,sizeof(xfilenam),TG_CRLF,&delim,(int *)0);			if(!xfilenam[0] || (delim == ESC))			{				ff(se,"transfer abandoned\r\n");				if(restart_rcvr)					start_rcvr_process(1);				return;			}		}		/* get xmodem ascii or binary */		ff(se,"Translate CR/LF to NL (y,n)? ");		switch(itmp = to_lower(ttygetc(0)))		{		case 'y': 			strcat(execcmd,"-a "); 			break;		case 'n': 			strcat(execcmd,"-b "); 			break;		default:			ff(se,"transfer abandoned\r\n");			if(restart_rcvr)				start_rcvr_process(1);			return;		}		ff(se,"%s\r\n",(itmp == 'y') ? "yes" : "no");		strcat(execcmd,xfilenam);		file_xfer_start();		exec_cmd(execcmd);	}	else if(xfertype == ECURZ_Y)	{		ff(se,"\r\n");		if(restart_rcvr)			kill_rcvr_process(SIGUSR1);		sprintf(execcmd,"%s/ecurz -Y -. %d -y ",eculibdir,shm->Liofd);		strcat(execcmd,bottom_label);		if(protocol_log_packets)			strcat(execcmd,"-, ");		file_xfer_start();		exec_cmd(execcmd);	}	else if(xfertype == ECURZ_Z)	{		ff(se,"\r\n");		if(restart_rcvr)			kill_rcvr_process(SIGUSR1);		sprintf(execcmd,"%s/ecurz -Z -. %d ",eculibdir,shm->Liofd);		if(protocol_log_packets)			strcat(execcmd,"-, ");		strcat(execcmd,bottom_label);		file_xfer_start();		exec_cmd(execcmd);	}	else if(xfertype == CKERMIT)	{		ckufnm = 0;#ifdef WHT		if(ckufnm = find_executable("ck5a")) /* private alpha version */			;#endif /* WHT */		if(!ckufnm && (ckufnm = find_executable("kermit")))			;		else if(ckufnm = find_executable("ckermit"))			; /* our old 286 4E hack (and alternate name used by many) */		else		{			ff(se,"Cannot find C-Kermit ('kermit' or 'ckermit')\r\n");			last_child_wait_status = 255 << 8;			return;	/* <<=================================== */		}		if(restart_rcvr)			kill_rcvr_process(SIGUSR1);		sprintf(execcmd,"%s -r -e 512 -l %d -b %d -p %c",		    ckufnm,		    shm->Liofd,shm->Lbaud,(shm->Lparity) ? shm->Lparity : 'n');		ff(se,"    Translate CR/LF to NL (y,n)? ");		switch(itmp = to_lower(ttygetc(0)))		{			case 'y': 				strcat(execcmd," -i"); 				break;			case 'n': 				break;			default:				ff(se,"transfer abandoned\r\n");				if(restart_rcvr)					start_rcvr_process(1);				return;		}		ff(se,"%s\r\n",(itmp == 'a') ? "yes" : "no");		file_xfer_start();		exec_cmd(execcmd);	}	else if(xfertype == ECUSEA)	{		if(restart_rcvr)			kill_rcvr_process(SIGUSR1);		sprintf(execcmd,"%s/ecusea -r -. %d -/ %s",		    eculibdir,shm->Liofd,curr_dir);		if(protocol_log_packets)			strcat(execcmd," -,");		file_xfer_start();		exec_cmd(execcmd);	}	lreset_ksr();				/* ensure line termio back to our config */	ttymode(old_ttymode);		/* xfer prog may screw up tty too */	file_xfer_done_bell();	Nap(20L);	if(restart_rcvr)		start_rcvr_process(1);}	/* end of receive_files_from_remote *//* end of ecuxfer.c *//* vi: set tabstop=4 shiftwidth=4: */

⌨️ 快捷键说明

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