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

📄 ecuphdir.c

📁 一个通讯程序源码
💻 C
📖 第 1 页 / 共 4 页
字号:
voidphdir_cmd_remove_oops(){	if(!remove_pde)	{		dirw_bot_msg("no removed entry to restore");		return;	}	phdir_cmd_add(remove_pde);	phdir_list_set_dirty(remove_dirty_flag);	remove_pde = (PDE *)0;}	/* end of phdir_cmd_remove_oops *//*+-------------------------------------------------------------------------	phdir_cmd_remove()--------------------------------------------------------------------------*/voidphdir_cmd_remove(){	char s80[80];	if(!check_curr_pde())		return;	remove_pde = curr_pde;	remove_dirty_flag = phdir_list_dirty;	phdir_list_remove(curr_pde);	phdir_list_set_dirty(1);	if(phdir_list_quan)		scrw_fill_at(scrw_curr_pde_line + 1,curr_pde,&scrw_curr_pde_line);	else		scrw_fill((PDE *)0,&scrw_curr_pde_line);	ring_bell();	sprintf(s80,"if you did not mean to to remove '%s', press 'o' (oops) NOW!",			remove_pde->logical);	dirw_bot_msg(s80);}	/* end of phdir_cmd_remove *//*+-------------------------------------------------------------------------	phdir_cmd_find()--------------------------------------------------------------------------*/voidphdir_cmd_find(){	register PDE *tpde;	char findname[12];	uchar delim = 0;	int y,x;	int wgedit = 0;	int wgpos = -1;	dirw_bot_msg("ESC: abort  ^U: erase input");	dirw_cmd_line_setup("","Directory entry name to find: ");	getyx(dirw,y,x);	wstandout(dirw);	while((delim != ESC) && (delim != NL))	{		(void)wingets(dirw,y,x,findname,DESTREF_LEN+1,&delim,			wgedit,&wgpos);		wgedit = 1;	}	wstandend(dirw);	dirw_bot_msg("");	if((!strlen(findname)) || (delim == ESC))		return;	if(! (tpde = phdir_list_search(findname,0)))	{		dirw_bot_msg(errmsg);		return;	}	curr_pde = tpde;	scrw_fill_at(SCRW_LINES / 2,tpde,&scrw_curr_pde_line);}	/* end of phdir_cmd_find *//*+-------------------------------------------------------------------------	phdir_cmd_change_dir()--------------------------------------------------------------------------*/voidphdir_cmd_change_dir(){	int itmp;	char newdirname[256];	char buf[256];	uchar delim = 0;	int y,x;	int wgedit = 0;	int wgpos = -1;	char *expcmd;	extern char errmsg[];	phdir_list_save_if_dirty();	dirw_bot_msg("ESC: abort  ^U: erase input");	dirw_cmd_line_setup(" Enter new directory name:","");	getyx(dirw,y,x);	wstandout(dirw);	while((delim != ESC) && (delim != NL))	{		(void)wingets(dirw,y,x,buf,70+1,&delim,			wgedit,&wgpos);		wgedit = 1;	}	wstandend(dirw);	dirw_bot_msg("");	if((!strlen(buf)) || (delim == ESC))		return;	if((buf[0] == '~') || (buf[0] == '.') || (buf[0] == '/'))		strcpy(newdirname,buf);	else	{		get_curr_dir(newdirname,sizeof(newdirname));		strcat(newdirname,"/");		strcat(newdirname,buf);	}	if(find_shell_chars(newdirname))	{		if(expand_wildcard_list(newdirname,&expcmd))		{			dirw_bot_msg(expcmd);			ring_bell();			return;		}		strncpy(newdirname,expcmd,sizeof(newdirname) - 1);		newdirname[sizeof(newdirname) - 1] = 0;		free(expcmd);	}	if(access(newdirname,4))	{		if(errno == ENOENT)		{			if(!want_pd_create(newdirname))			{				dirw_bot_msg("non-existent file not created");				return;			}			if((itmp = open(newdirname,O_RDWR | O_CREAT | O_TRUNC,0600)) >= 0)			{				write(itmp,phonedir_trigger,strlen(phonedir_trigger));				close(itmp);				dirw_bot_msg("created new (empty) directory file");				ring_bell();				Nap(1000L);				goto READ_LIST;			}			if(errno == ENOENT)			{				dirw_bot_msg("directory does not exist");				ring_bell();				return;			}		}		dirw_bot_msg(errno_text(errno));		ring_bell();		return;	}READ_LIST:	strcpy(phonedir_name,newdirname);	if(phdir_list_read())	{		dirw_bot_msg(errmsg);		return;	}	curr_pde = phdir_list_head;	scrw_fill(curr_pde,&scrw_curr_pde_line);	if(!phdir_list_quan)	{		dirw_bot_msg("directory empty");		return;	}}	/* end of phdir_cmd_change_dir *//*+-------------------------------------------------------------------------	phdir_dial_cycle() - dial single destination or cycle through listreturn 1 if connect occurs, 0 if cycle expires or interrupted--------------------------------------------------------------------------*/intphdir_dial_cycle(){	register PDE *tpde = phdir_list_head;	uint ans;	int nap_decisec;	int rtn = 0;	int restart_rcvr = need_rcvr_restart();	if(!tpde || !phdir_list_quan)	{		ring_bell();		return(0);	}	if(!pde_marked_for_redial_count)	{		pde_dial(curr_pde);		return(!(int)iv[0]);	}	kill_rcvr_process(SIGUSR1);	ff(se,"\r\nbeginning cycle through %d marked redial entr%s\r\n",		pde_marked_for_redial_count,		(pde_marked_for_redial_count > 1) ? "ies" : "y");	while(1)	/* forever until a connect or interrupt */	{		if(tpde->redial)		{			pde_dial(tpde);			switch((int)iv[0])			{				case 0:		/* CONNECTED */					tpde->redial = 0;					pde_marked_for_redial_count--;					bell_notify(XBELL_C);					rtn = 1;					goto RETURN;				case 2:		/* INTERRUPTED */					ff(se,"\r\ndial interrupted: abort cycle (y,n)?  ");					sigint = 0;					ans = 0;					while(ans == 0)					{						switch(ans = to_lower(ttygetc(1)))						{							case 'y':								ff(se,"YES\r\n");								goto ABORT_CYCLE;							case 'n':								ff(se,"NO\r\n");								break;							default: 								ring_bell();								ans = 0;						}					}					break;				case 1:		/* FAILED TO CONNECT */				case 3:		/* MODEM ERROR */				default:					if(pde_marked_for_redial_count == 1)						nap_decisec = nap_decisec_single;					else						nap_decisec = nap_decisec_multiple;					ff(se,					"waiting %d seconds ... 'c' to cycle, %s to abort\r\n",						nap_decisec/10,						(kbdintr == DEL) ?"DEL":make_char_graphic(kbdintr,0));					while(nap_decisec--)					{						Nap(100L);						if(ttyrdchk())						{							ans = to_lower(ttygetc(1));							ttyflush(0);							if(ans == 'c')								goto CONTINUE_CYCLE;							else if(ans == kbdintr)								goto ABORT_CYCLE;							else								ring_bell();						}						if(sigint)							goto ABORT_CYCLE;					}					break;			}		}CONTINUE_CYCLE:		tpde = tpde->next;		if(!tpde)			tpde = phdir_list_head;	}ABORT_CYCLE:	sigint = 0;	ff(se,"redial cycle ABORTED\r\n");RETURN:	if(restart_rcvr)		start_rcvr_process(1);	return(rtn);}	/* end of phdir_dial_cycle *//*+-------------------------------------------------------------------------	phdir_cmd_set_wait()--------------------------------------------------------------------------*/voidphdir_cmd_set_wait(){	char buf[64];	uchar delim = 0;	int y,x;	int wgpos = -1;	dirw_bot_msg("ESC: abort  ^U: erase input");	sprintf(buf,"(Must be greater than or equal to %d seconds)",		NAP_DECISEC_SINGLE_MIN / 10);	dirw_cmd_line_setup(buf,"Wait between dials when one entry marked:");	getyx(dirw,y,x);	sprintf(buf,"%d",nap_decisec_single / 10);	wstandout(dirw);	wgpos = strlen(buf);	while((delim != ESC) && (delim != NL))		(void)wingets(dirw,y,x,buf,3+1,&delim,1,&wgpos);	wstandend(dirw);	if((!strlen(buf)) || (delim == ESC))	{		dirw_bot_msg("");		return;	}	nap_decisec_single = 0;	sscanf(buf,"%d",&nap_decisec_single);	nap_decisec_single *= 10;	if(nap_decisec_single <  NAP_DECISEC_SINGLE_MIN)		nap_decisec_single = NAP_DECISEC_SINGLE_MIN;	dirw_display_config();	sprintf(buf,"(Must be greater than or equal to %d seconds)",		NAP_DECISEC_MULTIPLE_MIN / 10);	dirw_cmd_line_setup(buf,"Wait between dials when multiple entries marked:");	getyx(dirw,y,x);	sprintf(buf,"%d",nap_decisec_multiple / 10);	wstandout(dirw);	wgpos = strlen(buf);	delim = 0;	while((delim != ESC) && (delim != NL))		(void)wingets(dirw,y,x,buf,3+1,&delim,1,&wgpos);	wstandend(dirw);	if((!strlen(buf)) || (delim == ESC))	{		dirw_bot_msg("");		return;	}	nap_decisec_multiple = 0;	sscanf(buf,"%d",&nap_decisec_multiple);	nap_decisec_multiple *= 10;	if(nap_decisec_multiple <  NAP_DECISEC_MULTIPLE_MIN)		nap_decisec_multiple = NAP_DECISEC_MULTIPLE_MIN;	dirw_display_config();	dirw_bot_msg("");}	/* end of phdir_cmd_set_wait *//*+-------------------------------------------------------------------------	phdir_manager()--------------------------------------------------------------------------*/voidphdir_manager(){	register uchar cmd = 0;	int done;	char s80[80];	int restart_rcvr = need_rcvr_restart();	kill_rcvr_process(SIGUSR1);	windows_start();	dirw = window_create("dialing directory",3,0,0,DIRW_LINES,DIRW_COLS);	phonedir_name_x = 26;	/* must be set before calling dirw_display */	dirw_display();	scrw = subwin(dirw,SCRW_LINES,SCRW_COLS,SCRW_TLY,SCRW_TLX);	scrollok(scrw,0);	if(!phdir_list_quan)	{		if(phdir_list_read())			dirw_bot_msg(errmsg);		else if(!phdir_list_quan)			dirw_bot_msg("directory empty");	}	if(phdir_list_quan)	{		if(curr_pde)			scrw_fill_at(scrw_curr_pde_line,curr_pde,&scrw_curr_pde_line);		else		{			curr_pde = phdir_list_head;			scrw_fill(curr_pde,&scrw_curr_pde_line);		}	}	phdir_list_set_dirty(-1);	done = 0;	while(!done)	{		cmd = dirw_get_cmd();		if((cmd != 'o') && (remove_pde))		{			free((char *)remove_pde);			remove_pde = (PDE *)0;		}		switch(cmd)		{			case XFcurdn:			case 'd':			case 'j': phdir_cmd_down(); break;			case XFcurup:			case 'u':			case 'k': phdir_cmd_up(); break;			case 's': phdir_cmd_save(); break;			case 'm': phdir_cmd_mark(curr_pde); break;			case 'M': phdir_cmd_unmark(curr_pde); break;			case 'U': phdir_cmd_unmark_all(); break;			case 'c': phdir_cmd_change_dir(); break;			case 'w': phdir_cmd_set_wait(); break;			case CRET:			case NL:			case XFend:				cmd = NL;				if(!check_curr_pde())					break;				phdir_list_save_if_dirty();				wrefresh(dirw);				delwin(scrw);				delwin(dirw);				windows_end(1);				dirw = (WINDOW *)0;				scrw = (WINDOW *)0;				phdir_dial_cycle();				done = 1;				if(restart_rcvr)					start_rcvr_process(1);				break;			case ESC:			case CTL_C:				cmd = 'q';			case 'q':				done = 1;				continue;			case '/':			case 'f': phdir_cmd_find(); break;			case 'r': phdir_cmd_remove(); break;			case 'o': phdir_cmd_remove_oops(); break;			case 'a': phdir_cmd_add((PDE *)0); break;			case 'e': phdir_add_or_edit(curr_pde,1); break;			case CTL_L:			case CTL_R:				touchwin(stdscr);				wrefresh(stdscr);				touchwin(dirw);				wrefresh(dirw);				touchwin(scrw);				wrefresh(scrw);				break;			default:				sprintf(s80,"invalid command: %s",					(cmd < 0x80) ? make_char_graphic(cmd,0) : "?");				ring_bell();				dirw_bot_msg(s80);				break;		}	}	sigint = 0;	if(cmd == NL)		return;	phdir_list_save_if_dirty();	wrefresh(dirw);	delwin(scrw);	delwin(dirw);	windows_end(0);	dirw = (WINDOW *)0;	scrw = (WINDOW *)0;	redisplay_rcvr_screen();	if(restart_rcvr)		start_rcvr_process(0);}	/* end of phdir_manager *//* end of ecuphone.c *//* vi: set tabstop=4 shiftwidth=4: */

⌨️ 快捷键说明

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