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

📄 pcmd.c

📁 一个通讯程序源码
💻 C
📖 第 1 页 / 共 3 页
字号:
int erc;long int2;long int3;ESD *tesd1 = (ESD *)0;ESD *svptr;LRWT lr;char switches[8];ESD *esdalloc();char ctmp;	if(shm->Liofd < 0)		return(eNoLineAttached);	get_switches(param,switches,sizeof(switches));	skip_cmd_char(param,'$');	if(erc = get_cmd_char(param,&ctmp))		return(erc);	if(to_lower(ctmp) != 's')		return(eIllegalVarType);	if(erc = get_svptr(param,&svptr,1))		return(erc);	if(erc = gint(param,&int2))		return(erc);	if(erc = gint(param,&int3))		return(erc);	if((tesd1 = esdalloc(64)) == (ESD *)0)		return(eNoMemory);	if(gstr(param,tesd1,1))	/* optional delimiter */	{		esdfree(tesd1);		tesd1 = (ESD *)0;	}		esdzero(svptr);	lr.to1 = int2 * 100L;	lr.to2 = int3 * 100L;	/* allow interrupts + raw read per -r */	lr.raw_flag = (strchr(switches,'r')) ? 0x81 : 0x80;	lr.buffer = svptr->pb;	lr.bufsize = svptr->maxcb;	lr.delim = (tesd1) ? tesd1->pb : (char *)0;	lr.echo_flag = (strchr(switches,'e') != (char *)0);	(void)lgets_timeout(&lr);	if(tesd1)		esdfree(tesd1);	svptr->cb = lr.count;	esd_null_terminate(svptr);	iv[0] = (long)lr.count;	if(zero_length_read_detected)	{		zero_length_read_detected = 0;		erc = eProcAttn_DCDloss;	}	if(proctrace)		pprintf("lgets read %d chars\n",lr.count);	return(erc);}	/* end of pcmd_lgets *//*+-------------------------------------------------------------------------	pcmd_flush(param)--------------------------------------------------------------------------*//*ARGSUSED*/intpcmd_flush(param)ESD *param;{	if(shm->Liofd < 0)		return(eNoLineAttached);	lflush(2);	if(proctrace)		pputs("line flushed\n");	return(0);}	/* end of pcmd_flush *//*+-------------------------------------------------------------------------	pcmd_hangup(param)--------------------------------------------------------------------------*//*ARGSUSED*/intpcmd_hangup(param)ESD *param;{	if(shm->Liofd < 0)	{		if(proctrace)			pputs("no line attached ... hangup ignored\n");		DCE_now_on_hook();		return(0);	}	if(proctrace)		pputs("hanging up ... ");	DCE_hangup();	if(proctrace)		pputs("line on hook\n");	return(0);}	/* end of pcmd_hangup *//*+-------------------------------------------------------------------------	pcmd_hexdump(param)hexdump [-s] <str>hexdump -t[s] <str1> <str><str> buf to dump<str1> title (if -t)-s short (terse) dump--------------------------------------------------------------------------*/intpcmd_hexdump(param)ESD *param;{int erc;ESD *title = (ESD *)0;ESD *buf;char switches[8];extern FILE *plog_fp;	if((buf = esdalloc(256)) == (ESD *)0)		return(eNoMemory);	get_switches(param,switches,sizeof(switches));	if(strchr(switches,'t'))	/* if -t */	{		if((title = esdalloc(256)) == (ESD *)0)		{			erc = eNoMemory;			goto RETURN;		}		if(erc = gstr(param,title,0))			goto RETURN;	}	if(erc = gstr(param,buf,1))		goto RETURN;	hex_dump(buf->pb,buf->cb,(title) ? title->pb : "",		(strchr(switches,'s')) ? 1 : 0);	if(plog_fp)		hex_dump_fp(plog_fp,buf->pb,buf->cb,(title) ? title->pb : "",			(strchr(switches,'s')) ? 1 : 0);RETURN:	esdfree(buf);	if(title)		esdfree(title);	return(erc);}	/* end of pcmd_hexdump *//*+-------------------------------------------------------------------------	pcmd_lbreak(param)--------------------------------------------------------------------------*//*ARGSUSED*/intpcmd_lbreak(param)ESD *param;{	if(shm->Liofd < 0)		return(eNoLineAttached);	lbreak();	return(0);}	/* end of pcmd_lbreak *//*+-------------------------------------------------------------------------	pcmd_logevent(param)logevent 'cmd'--------------------------------------------------------------------------*/intpcmd_logevent(param)ESD *param;{int erc;ESD *eventstr;char switches[8];	if((eventstr = esdalloc(256)) == (ESD *)0)		return(eNoMemory);	get_switches(param,switches,sizeof(switches));/* a hack */	strcpy(eventstr->pb,"PROC ");	eventstr->pb += 5;	eventstr->maxcb -= 5;	if(erc = gstr(param,eventstr,0))	{		eventstr->pb -= 5;		/* be nice */		eventstr->maxcb += 5;	/* or surely this will haunt us one day */		esdfree(eventstr);		return(erc);	}/* rehack */	eventstr->pb -= 5;	eventstr->maxcb += 5;	eventstr->cb += 5;	ecu_log_event(getpid(),eventstr->pb);	esdfree(eventstr);	return(0);}	/* end of eventstr_logevent *//*+-------------------------------------------------------------------------	pcmd_lookfor(param)lookfor [-e] [quiet | <str>] [<int>]-e echo to screen while lookingquiet means look for quiet<str> means look for string<int> number 1/10ths secs (default 5.0 second) for timeoutin case of lookfor <str>, $i0 plugged 1 if found, else 0--------------------------------------------------------------------------*/intpcmd_lookfor(param)ESD *param;{int erc;char switches[8];char *cptr = (char *)0;ESD *tesd = (ESD *)0;ulong decisecs = 50; /* default wait is 5 seconds */int echo_flag;char s8[8];long start_secs;	if(shm->Liofd < 0)		return(eNoLineAttached);	get_switches(param,switches,sizeof(switches));	echo_flag = (strchr(switches,'e') != (char *)0);	if(!get_alpha_zstr(param,s8,sizeof(s8)))	{		if(strcmp(s8,"quiet"))			return(eSyntaxError);	} 	else	{		if((tesd = esdalloc(64)) == (ESD *)0)			return(eNoMemory);		if(erc = gstr(param,tesd,0))			goto RETURN;		if(!tesd->cb)		{			pputs("lookfor null string\n");			erc = eFATAL_ALREADY;			goto RETURN;		}		cptr = tesd->pb;	}	if(erc = gint(param,&decisecs))	{		/* if something there non-integer */		if(!end_of_cmd(param))		{			erc = eSyntaxError;			goto RETURN;		}	}	erc = 0;	if(proctrace)		time(&start_secs);	if(cptr)	{		iv[0] = (long)llookfor(cptr,decisecs * 100L,echo_flag);		if(proctrace)			pprintf("lookfor set $i00 = %ld\n",iv[0]);	}	else		lquiet(decisecs * 100L,echo_flag);	if(proctrace)		pprintf("waited %ld secs\n",time((long *)0) - start_secs);RETURN:	if(tesd)		esdfree(tesd);	if(zero_length_read_detected)	{		zero_length_read_detected = 0;		erc = eProcAttn_DCDloss;	}	return(erc);}	/* end of pcmd_lookfor *//*+-------------------------------------------------------------------------	pcmd_nap(param)nap [-m] <int><int> number 1/10ths secs, except if -m, nap <int> milliseconds--------------------------------------------------------------------------*/intpcmd_nap(param)ESD *param;{int erc;char switches[8];ulong interval;	get_switches(param,switches,sizeof(switches));	if(erc = gint(param,&interval))		return(erc);	if(interval)	{		if(!strchr(switches,'m'))			interval *= 100L;		if(interval < hzmsec)		/* SCO nap bug */			interval = hzmsec;		/* SCO nap bug */		if(proctrace && (interval > 100))	/* short naps hurt by pprintf */			pprintf("nap %ld msec\n",interval);		if(Nap(interval) == -1)		/* EINTR is the only error returned ... */		{							/* but check anyway */			if(errno == EINTR)				erc = eCONINT;		}	}	return(erc);}	/* end of pcmd_nap *//*+-------------------------------------------------------------------------	pcmd_nice(param)--------------------------------------------------------------------------*/intpcmd_nice(param)ESD *param;{long new_nice;int erc;int old_nice;int nice();	if(shm->Liofd < 0)		return(eNoLineAttached);	if(erc = gint(param,&new_nice))		return(erc);	if((new_nice < 0) || (new_nice > 39))	{		pprintf("warning: invalid nice %ld ignored (valid range 0-39)\n",			new_nice);		return(0);	}	old_nice = nice(0) + 20;	nice(-old_nice + (int)new_nice);	if(proctrace)		pprintf("nice desired %u, set to %u\n",(uint)new_nice,nice(0) + 20);	return(0);}	/* end of pcmd_nice *//*+-------------------------------------------------------------------------	pcmd_parity(param)parity [e | o | n]parity ['e' | 'o' | 'n']--------------------------------------------------------------------------*/intpcmd_parity(param)ESD *param;{int erc;int new_parity = 0;ESD *tesd;char s64[64];	if(erc = skip_cmd_break(param))		return(erc);	if(!(tesd = esdalloc(64)))		return(eNoMemory);	if(!gstr(param,tesd,0))		new_parity = to_lower(*tesd->pb);	else if(!get_alpha_zstr(param,s64,sizeof(s64)))		new_parity = to_lower(s64[0]);	else	{		erc = eSyntaxError;		goto RETURN;	}	esdfree(tesd);	switch(new_parity)	{		case 'n':			new_parity = 0;		case 'e':		case 'o':			shm->Lparity = new_parity;			if(shm->Liofd < 0)				lset_parity(1);			break;		default:			erc = eBadParameter;	}	if(proctrace && !erc)	{		pprintf("parity set to %s\n",			(shm->Lparity) ? ((shm->Lparity == 'e') ? "even" : "odd")			               : "none");	}RETURN:	esdfree(tesd);	return(erc);}	/* end of pcmd_parity *//*+-------------------------------------------------------------------------	pcmd_prompt(param)--------------------------------------------------------------------------*/intpcmd_prompt(param)ESD *param;{extern ESD *icmd_prompt;	return(gstr(param,icmd_prompt,0));}	/* end of pcmd_prompt *//*+-------------------------------------------------------------------------	pcmd_ptrace(param)--------------------------------------------------------------------------*/intpcmd_ptrace(param)ESD *param;{char s8[8];	if(get_alpha_zstr(param,s8,sizeof(s8)))		return(eSyntaxError);	if(isdigit(s8[0]))		proctrace = atoi(s8);	if(!strcmp(s8,"on"))		proctrace = 1;	else if(!strcmp(s8,"off"))		proctrace = 0;	else		return(eSyntaxError);	return(0);}	/* end of pcmd_ptrace *//*+-------------------------------------------------------------------------	pcmd_rname(param) - set remote name--------------------------------------------------------------------------*/intpcmd_rname(param)ESD *param;{int erc;ESD *rname;	if(shm->Liofd < 0)		return(eNoLineAttached);	if(!shm->Lconnected)	{		pputs("Not connected\n");		return(eFATAL_ALREADY);	}	if((rname = esdalloc(sizeof(shm->Lrname) - 1)) == (ESD *)0)		return(eNoMemory);	if(!(erc = gstr(param,rname,0)))

⌨️ 快捷键说明

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