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

📄 term_mf.c

📁 MOXA 串口驱动编程
💻 C
字号:
/*****************************************************************************//* TERM_MF.C								     *//*									     *//* Copyright (c) Moxa Technologies Co., LTD. 1996. All Rights Reserved.	     *//*									     *//* Revision history:							     *//*	10/95	JOSE							     *//*	03/96	Victor		modified				     *//*	12/96	Hsu		Modify for Linux 2.0.0 (C168/C104 ADM)	     *//*     8/5/99   Casper                                                       *//*****************************************************************************/#include	<sys/time.h>#include	<sys/types.h>#include	<unistd.h>#include	<signal.h>#include	"term.h"#define 	MaxPtnSize	40static char	sfile_string[MaxPtnSize+1];/*****************************************************************************//* STATIC FUNCTIONS							     *//*****************************************************************************/static void	send_file();/*****************************************************************************//* STATIC VARIABLES							     *//*****************************************************************************/static	struct	WEItem	Uitem[] = {	{ F_Active | F_Return, "Filename:", 0}};static	struct	WEdit	Umenu = {	2, -1, 6,	"Send File Name",	{"Ctrl-D:Start to send  Esc:Exit", NULL},	1, 0, 0, 0, Uitem, 1};static	char	filename[80];/*****************************************************************************//*	MAIN FUNCTIONS							     *//*****************************************************************************/void	sfile_setup(){	int	i, len, exit_flag=0;	char	buf[80], *ptr, ch;	Uitem[0].str = sfile_string;	for ( i=0; i<MaxPtnSize; i++ )	    Uitem[0].str[i] = ' ';	Uitem[0].str[i] = 0;	mw_editinit(&Umenu);	while ( exit_flag == 0 ) {	    switch( mw_edit() ) {	    case K_ESC :		exit_flag = 1;		break;	    case K_CTRL_D :		exit_flag = 2;	    case K_ENTER :		ptr = Uitem[0].str;		len = 0;		for ( i=0; i<40; i++ ) {		    ch = *ptr ++;		    if ( ch == ' ' )			continue;		    filename[len++] = ch;		}		filename[len] = 0;		if ( (i = open(filename, O_RDWR)) <= 0 ) {		    sprintf(buf, "File %s does not exist !", filename);		    confirm(buf);		    exit_flag = 0;		}		close(i);		break;	    }	}	mw_editend();	if ( exit_flag == 2 )	    send_file();}static void send_file(){	int		wflag=0, readlen, filefd, key, cx, sendlen=0, fd;	int		times=100, oldslen=0, slen, wlen;	long		FileLen;	fd_set		rfdset, wfdset;	struct timeval	tm;	WINDOW *	wid;	char		temp[81], rbuf[129];	if ( pattern_file_term() < 0 )	    return;	term_menu();	tm.tv_sec = 0;	tm.tv_usec = 10000;	/*	 *	for transmit screen init	 */	wid = mw_wopen(0, 1, 79, 4);	mw_wcolor(wid, D_A_INV);	mw_wdrawbox(wid, L_SINGLE);	mw_wclose(wid);	mw_attr(D_A_Normal);	filefd = open(filename, O_RDWR);	FileLen = lseek(filefd, 0, SEEK_END);	lseek(filefd, 0, SEEK_SET);	mw_cursor(1, 2);	printf("Sending file %s. Press CTRL-X to stop.\n", filename);	get_ttysetup(rbuf);	sprintf(temp, "%s, FileLength=%d, SendLength=", rbuf, FileLen);	cx = strlen(temp) + 1;	mw_cursor(1, 3);	printf("%s\n", temp);	/*	 *	for receive screen init	 */	recvmon_init();	if ( tty_fd > SioFd )	    fd = tty_fd;	else	    fd = SioFd;	fd++;	FD_ZERO(&rfdset);	FD_ZERO(&wfdset);	while ( 1 ) {	    if ( wflag == 0 ) {		if ( (readlen = read(filefd, rbuf, 128)) <= 0 )		    break;		else {		    slen = 0;		    wflag = 1;		}	    }	    FD_SET(tty_fd, &rfdset);	    FD_SET(SioFd, &rfdset);	    FD_SET(SioFd, &wfdset);	    if ( select(fd, &rfdset, &wfdset, NULL, &tm) > 0 ) {		if ( FD_ISSET(tty_fd, &rfdset) ) {		    key = mw_getkey();		    if ( key == K_CTRL_N || key == K_CTRL_X )			    break;		}		if ( FD_ISSET(SioFd, &rfdset) )		    recvmon_disp(0);		if ( wflag == 1 && FD_ISSET(SioFd, &wfdset) ) {		    if ( (wlen = write(SioFd, &rbuf[slen], (readlen - slen)))			 > 0 ) {			sendlen += wlen;			slen += wlen;			if ( slen == readlen )			    wflag = 0;		    }		}	    }	    times ++;	    if ( times >= 100 ) {		times = 0;		if ( oldslen == sendlen )		    continue;		sprintf(temp, "%d", sendlen);		mw_putstr_xy((uchar *)temp, strlen(temp), cx, 3);		oldslen = sendlen;	    }	}	if ( oldslen != sendlen ) {	    sprintf(temp, "%d", sendlen);	    mw_putstr_xy((uchar *)temp, strlen(temp), cx, 3);	}	close(filefd);	recvmon_end();	terminal_end();}

⌨️ 快捷键说明

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