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

📄 pcmdtty.c

📁 一个通讯程序源码
💻 C
字号:
/*+-------------------------------------------------------------------------	pcmdtty.c - tty (console) related procedure commands	wht@n4hgf.Mt-Park.GA.US  Defined functions:	ifunc_colors(pvalue)	pcmd_cls(param)	pcmd_color(param)	pcmd_cursor(param)	pcmd_delline(param)	pcmd_eeol(param)	pcmd_fkey(param)	pcmd_fkmap(param)	pcmd_home(param)	pcmd_icolor(param)	pcmd_insline(param)	pcmd_scrdump(param)	pcmd_vidcolor(param)	pcmd_vidnorm(param)	pcmd_vidrev(param)--------------------------------------------------------------------------*//*+:EDITS:*//*:10-18-1992-14:26-wht@n4hgf-add conxon *//*:09-10-1992-14:00-wht@n4hgf-ECU release 3.20 *//*:08-30-1992-23:15-wht@n4hgf-add fkmap *//*:08-22-1992-15:39-wht@n4hgf-ECU release 3.20 BETA *//*:07-25-1991-12:59-wht@n4hgf-ECU release 3.10 *//*:05-21-1991-00:45-wht@n4hgf-added -3 error code to keyset_read *//*:01-23-1991-01:58-wht@n4hgf-illegal color name make hi_white on hi_white *//*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */#include "ecu.h"#include "ecuerror.h"#include "esd.h"#include "ecutty.h"#include "esd.h"#include "proc.h"extern int proctrace;extern ulong colors_current;/*+-------------------------------------------------------------------------	pcmd_color(param)Usage:   color [-r] [argument] [argument]Options:   color color      Set foreground and background normal video colors   -r color color   Set foreground & background reverse video colorsColor names   blue      magenta      brown      black   lt_blue   lt_magenta   yellow     gray   cyan      white        green      red   lt_cyan   hi_white     lt_green   lt_red--------------------------------------------------------------------------*/pcmd_color(param)ESD *param;{	register erc;	char switches[8];	int normal;	char s32[32];	ulong foreground;	ulong background;	get_switches(param,switches,sizeof(switches));	if(!strlen(switches))		normal = 1;	else if(switches[1] == 'r')		normal = 0;		/* reverse */	else	{		pputs("unrecognized switch\n");		return(eFATAL_ALREADY);	}	if((erc = get_alpha_zstr(param,s32,sizeof(s32))) ||			((int)(foreground = color_name_to_num(s32)) < 0))		goto ERROR;	if(erc = get_alpha_zstr(param,s32,sizeof(s32)))	{		if(!end_of_cmd(param))			goto ERROR;		background = 0;	}	else if((int)(background = color_name_to_num(s32)) < 0)		goto ERROR;	if(normal)	{		colors_current &= 0xFFFF0000;		colors_current |= (foreground << 8) | background;		if(proctrace > 1)		{			pprintf("normal %ld,%ld current=0x%08lx\n",				foreground,background,colors_current);		}	}	else	{		colors_current &= 0x0000FFFF;		colors_current |= (foreground << 24) | (background << 16);		if(proctrace > 1)		{			pprintf("reverse %ld,%ld current=0x%08lx\n",				foreground,background,colors_current);		}	}	setcolor(colors_current);	return(0);ERROR:	if(erc)		return(erc);	pputs("invalid color\n");	return(eFATAL_ALREADY);}	/* end of pcmd_color *//*+-------------------------------------------------------------------------	ifunc_colors(pvalue)--------------------------------------------------------------------------*/intifunc_colors(pvalue)ulong *pvalue;{	*pvalue = colors_current;	return(0);}	/* end of ifunc_colors *//*+-------------------------------------------------------------------------	pcmd_icolor(param)--------------------------------------------------------------------------*/pcmd_icolor(param)ESD *param;{	int erc;	ulong new_colors;	if(erc = gint(param,&new_colors))		return(erc);	setcolor(new_colors);	return(0);}	/* end of pcmd_icolor *//*+-------------------------------------------------------------------------	pcmd_cls(param)--------------------------------------------------------------------------*//*ARGSUNUSED*/intpcmd_cls(param)ESD *param;{	tcap_clear_screen();	return(0);}	/* end of pcmd_cls *//*+-------------------------------------------------------------------------	pcmd_cursor(param)--------------------------------------------------------------------------*/intpcmd_cursor(param)ESD *param;{	int erc;	long row;	long col = 0;	if(erc = gint(param,&row))		return(erc);	if(gint(param,&col))	{		/* if something there non-integer */		if(!end_of_cmd(param))			return(eSyntaxError);	}	tcap_cursor((int)row,(int)col);	return(0);}	/* end of pcmd_cursor *//*+-------------------------------------------------------------------------	pcmd_scrdump(param)--------------------------------------------------------------------------*/intpcmd_scrdump(param)ESD *param;{	int erc;	ESD *fname;	FILE *fp;	if((fname = esdalloc(256)) == (ESD *)0)		return(eNoMemory);	if(erc = gstr(param,fname,1))	{		if(!end_of_cmd(param))		{			erc = eSyntaxError;			goto RETURN;		}	}	if(fname->cb)	{		if(!(fp = fopen(fname->pb,"a")))		{			pperror(fname->pb);			erc = eFATAL_ALREADY;			goto RETURN;		}		fclose(fp);	}	screen_dump((fname->cb) ? fname->pb : (char *)0);RETURN:	esdfree(fname);	return(erc);}	/* end of pcmd_scrdump *//*+-------------------------------------------------------------------------	pcmd_vidnorm(param)--------------------------------------------------------------------------*//*ARGSUNUSED*/intpcmd_vidnorm(param)ESD *param;{	tcap_stand_end();	return(0);}	/* end of pcmd_vidnorm *//*+-------------------------------------------------------------------------	pcmd_vidrev(param)--------------------------------------------------------------------------*//*ARGSUNUSED*/intpcmd_vidrev(param)ESD *param;{	tcap_stand_out();	return(0);}	/* end of pcmd_vidrev *//*+-------------------------------------------------------------------------	pcmd_fkey(param)--------------------------------------------------------------------------*/pcmd_fkey(param)ESD *param;{	int erc;	ESD *tesd;	if((tesd = esdalloc(64)) == (ESD *)0)		return(eNoMemory);	if(erc = gstr(param,tesd,0))		goto RETURN;	switch(keyset_read(tesd->pb))	{		case  0:			if(proctrace)				keyset_display();			break;		case -1:			pprintf("cannot find ~/.ecu/keys\n");			erc = eFATAL_ALREADY;			break;		case -2:			pprintf("'%s' not found in ~/.ecu/keys\n",tesd->pb);			erc = eFATAL_ALREADY;			break;		case -3:			pprintf("'%s' has a syntax error\n",tesd->pb);			erc = eFATAL_ALREADY;			break;	}RETURN:	esdfree(tesd);	return(erc);}	/* end of pcmd_fkey *//*+-------------------------------------------------------------------------	pcmd_fkmap(param)--------------------------------------------------------------------------*/pcmd_fkmap(param)ESD *param;{	int erc = 0;	int in_quotes = 0;	char *cmd;	char *cptr;	char ch;#define FKMAP_MAXARGS 36	char *arg[FKMAP_MAXARGS];	int narg;	skip_cmd_break(param);	if(!(cmd = strdup(param->pb + param->index)))		return(eNoMemory);	cptr = cmd;	while(ch = *cptr++)	{		if(ch == '\'')		{			in_quotes = !in_quotes;			continue;		}		else if(ch == '\\')		{			cptr++;			continue;		}		else if(!in_quotes && strchr("#;",ch))			break;	}	param->index += (int)(cptr - cmd);	*cptr = 0;	arg[0] = "fkmap";	build_arg_array(cmd,arg + 1,FKMAP_MAXARGS - 1,&narg);	narg++;	erc = fkmap_command(narg,arg);	free(cmd);	return(erc);}	/* end of pcmd_fkmap *//*+-------------------------------------------------------------------------	pcmd_vidcolor(param)vidcolor normal|reverse|notify|success|alert|error fcolor [bcolor]--------------------------------------------------------------------------*/intpcmd_vidcolor(param)ESD *param;{	int erc;	int ntokens = 0;	char *tokens[3];	int param_index[3];	char tokenbuf[64];	tokens[0] = tokenbuf;	tokens[1] = tokenbuf + 20;	tokens[2] = tokenbuf + 40;	while(ntokens < 3)	{		skip_cmd_break(param);		param_index[ntokens] = param->index;		if(erc = get_word_zstr(param,tokens[ntokens],20))			break;		ntokens++;	}	if(erc && ((erc != eNoParameter) || (ntokens < 2)))		return(erc);	switch(erc = setcolor_internal(ntokens,tokens))	{		case 0:			break;		default:			param->old_index = param->index = param_index[erc - 1];			erc = eBadParameter;	}	return(erc);}	/* end of pcmd_vidcolor *//*+-------------------------------------------------------------------------	pcmd_home(param) - home the cursor--------------------------------------------------------------------------*//*ARGSUNUSED*/intpcmd_home(param)ESD *param;{	tcap_cursor(0,0);	return(0);}	/* end of pcmd_home *//*+-------------------------------------------------------------------------	pcmd_eeol(param) - erase to end of line--------------------------------------------------------------------------*//*ARGSUNUSED*/intpcmd_eeol(param)ESD *param;{	tcap_eeol();	return(0);}	/* end of pcmd_eeol *//*+-------------------------------------------------------------------------	pcmd_insline(param) - insert line in display--------------------------------------------------------------------------*//*ARGSUNUSED*/intpcmd_insline(param)ESD *param;{	tcap_insert_lines(1);	return(0);}	/* end of pcmd_insline *//*+-------------------------------------------------------------------------	pcmd_delline(param) - delete line from display--------------------------------------------------------------------------*//*ARGSUNUSED*/intpcmd_delline(param)ESD *param;{	tcap_delete_lines(1);	return(0);}	/* end of pcmd_delline *//*+-------------------------------------------------------------------------	pcmd_conxon(param)--------------------------------------------------------------------------*/intpcmd_conxon(param)ESD *param;{	int erc;	char new_xonxoff[8];	char *conxon_status();	if(shm->Liofd < 0)		return(eNoLineAttached);	if(erc = get_alpha_zstr(param,new_xonxoff,sizeof(new_xonxoff)))		return(erc);	if(set_console_xon_xoff_by_arg(new_xonxoff))		return(eBadParameter);	if(proctrace)	{		pprintf("console xon/xoff flow control set to %s\n",			console_xon_status());	}	return(erc);}	/* end of pcmd_conxon *//* vi: set tabstop=4 shiftwidth=4: *//* end of pcmdtty.c */

⌨️ 快捷键说明

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