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

📄 ecufkey.c

📁 一个通讯程序源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	register token_number;	register KDE *tkde = (KDE *)0;	int ikde = 0;	char token_separator[8];	char *token;	char *syntax = "syntax error in key definition: %s\n";	if((itmp = strlen(bufptr)) && (bufptr[itmp - 1] == NL))		bufptr[--itmp] = 0;		/* strip trailing NL */	if(!itmp)		return(0);	if((*bufptr != SPACE) && (*bufptr != TAB))	/* if no leading space */		return(0);	while((*bufptr == SPACE) || (*bufptr == TAB))	/* strip lding sp/tab */		bufptr++;	token_number = 0;	strcpy(token_separator,":");	while(token = str_token(bufptr,token_separator))	{		bufptr = (char *)0;	/* further calls to str_token need NULL */		switch(token_number)		{			case 0:		/* first field is key identifier */				if((ikde = kde_name_to_ikde(token)) < 0)				{					pprintf(syntax,keyset_name);					pprintf("  %s is not a legal key identifier\n",token);					return(-1);				}				if(ikde == IKDE_HOME)				{					pprintf(syntax,keyset_name);					pprintf("  HOME cannot be redefined!\n");					return(-1);				}				if(ikde == IKDE_CU5)				{					pprintf(syntax,keyset_name);					pprintf("  CUR5 cannot be redefined!\n");					return(-1);				}				if(ikde == IKDE_BKTAB)				{					pprintf(syntax,keyset_name);					pprintf("  BkTab cannot be redefined!\n");					return(-1);				}				tkde = &keyset_table[ikde];				tkde->logical[0] = 0;				tkde->count = 0;				break;			case 1:		/* second field is logical key name */				strncpy(tkde->logical,token,sizeof(tkde->logical));				tkde->logical[sizeof(tkde->logical) - 1] = 0;				strcpy(token_separator," \t"); /* whitespace is tok sep now */				break;			default:	/* third and subsequent to define key */				if(!strlen(token))					continue;				if(tkde->count == sizeof(tkde->str))				{					pprintf(syntax,keyset_name);					pprintf("  %s: output count too long",						keyset_idstr(ikde));					return(-1);				}				if((itmp = ascii_to_hex(token)) < 0)				{					pprintf(syntax,keyset_name);					pprintf("  %s: '%s' invalid code\n",						keyset_idstr(ikde),token);					return(0);				}				tkde->str[tkde->count] = itmp;				tkde->count++;				break;		}	/* end of switch(token_number) */		token_number++;	}		/* end while not end of record */	return(0);}	/* end of keyset_define_key *//*+-------------------------------------------------------------------------	keyset_read(name)returns 0 on success, -1 if no .ecu/keys, -2 if no 'name', -3 if error--------------------------------------------------------------------------*/intkeyset_read(name)char *name;{	int itmp;	int ikde;	char ecukeys_name[128];	char s128[128];	FILE *fp_keys;	get_home_dir(ecukeys_name);	strcat(ecukeys_name,"/.ecu/keys");	/* someone may core dump here one day */	if(!(fp_keys = fopen(ecukeys_name,"r")))	{		strcpy(ecukeys_name,eculibdir);		strcat(ecukeys_name,"/keys");		if(!(fp_keys = fopen(ecukeys_name,"r")))			return(-1);	}/* find keyset name */	itmp = 0;	while((ikde = kde_fgets(s128,sizeof(s128),fp_keys)) != KDETYPE_EOF)	{		if((ikde == KDETYPE_NAME) && !strcmp(s128,name))		{			itmp = 1; /* success */			break;		}	}	if(!itmp)				/* find match? */	{		fclose(fp_keys);	/* nope */		return(-2);	}/* * read past any other keyset names matching this set * process 1st line of definition when found */	while((ikde = kde_fgets(s128,sizeof(s128),fp_keys)) != KDETYPE_EOF)	{		if((ikde == KDETYPE_NAME) || (ikde == KDETYPE_COMMENT))			continue;		else if(ikde == KDETYPE_ENTRY)		{			if(keyset_define_key(s128) < 0)			{				fclose(fp_keys);				keyset_init();				return(-3);			}			break;		}	}/* * read rest of definition */	while((ikde = kde_fgets(s128,sizeof(s128),fp_keys)) != KDETYPE_EOF)	{		switch(ikde)		{			case KDETYPE_COMMENT:				continue;			case KDETYPE_ENTRY:				if(keyset_define_key(s128) < 0)				{					fclose(fp_keys);					keyset_init();					return(-3);				}				break;			default:				goto DONE;		}	}DONE:	strncpy(keyset_name,name,sizeof(keyset_name));	keyset_name[sizeof(keyset_name) - 1] = 0;	fclose(fp_keys);	return(0);}	/* end of keyset_read *//*+-------------------------------------------------------------------------	ffso(str)--------------------------------------------------------------------------*/voidffso(str)char *str;{	tcap_stand_out();	fputs(str,se);	tcap_stand_end();}	/* end of ffso *//*+-------------------------------------------------------------------------	keyset_display() F1  xxxxx  F2   xxxxx   HOME xxxxx  PGUP xxxxx F3  xxxxx  F4   xxxxx   END  xxxxx  PGDN xxxxx F5  xxxxx  F6   xxxxx   INS  xxxxx  CUR5 xxxxx F7  xxxxx  F8   xxxxx   BkTab xxxxx F9  xxxxx  F10  xxxxx   CUR^ xxxxx  CUR> xxxxx F11 xxxxx  F12  xxxxx   CUR< xxxxx  CURv xxxxx--------------------------------------------------------------------------*/voidkeyset_display(){	int itmp;	int itmp2;	int clen1 = 0;	char cfmt1[32];	int clen2 = 0;	char cfmt2[32];	int clen3 = 0;	char cfmt3[32];	char cfmt4[32];	KDE *tkde;	if(!keyset_name[0])		keyset_init();	for(itmp = 0; itmp < KDE_COUNT; itmp++)	{		tkde = &keyset_table[itmp];		itmp2 = strlen(tkde->logical);#if defined(__GNUC__) && !defined(GCC140)		/*		 * do absolutely nothing except defeat optimization		 * see top of source; function is in ecuutil.c		 * GCC 1.40 fixed the bug		 */		defeat_optimize_to_work_around_bug(&itmp);#endif /* __GNUC__ */		switch(itmp)		{			case IKDE_F1: case IKDE_F3: case IKDE_F5: case IKDE_F7:			case IKDE_F9: case IKDE_F11:				if(clen1 < itmp2)					clen1 = itmp2;				break;			case IKDE_F2: case IKDE_F4: case IKDE_F6: case IKDE_F8:			case IKDE_F10: case IKDE_F12:				if(clen2 < itmp2)					clen2 = itmp2;				break;			case IKDE_HOME: case IKDE_END: case IKDE_INS:			case IKDE_CUU: case IKDE_CUL:				if(clen3 < itmp2)					clen3 = itmp2;				break;			case IKDE_InitStr:	/* initialization string excluded */				break;		}	}	sprintf(cfmt1," %%-%d.%ds",clen1,clen1);	sprintf(cfmt2," %%-%d.%ds",clen2,clen2);	sprintf(cfmt3," %%-%d.%ds",clen3,clen3);	strcpy(cfmt4," %s");	ff(se,"   key definition: %s\r\n\r\n",keyset_name);	ffso(" F1  ");ff(se,cfmt1,keyset_table[IKDE_F1].logical);	fputs("  ",se);	ffso(" F2  ");ff(se,cfmt2,keyset_table[IKDE_F2].logical);	fputs("  ",se);	ffso(" Home ");ff(se,cfmt3,keyset_table[IKDE_HOME].logical);	fputs("  ",se);	ffso(" PgUp ");ff(se,cfmt4,keyset_table[IKDE_PGUP].logical);	fputs("\r\n",se);	ffso(" F3  ");ff(se,cfmt1,keyset_table[IKDE_F3].logical);	fputs("  ",se);	ffso(" F4  ");ff(se,cfmt2,keyset_table[IKDE_F4].logical);	fputs("  ",se);	ffso(" End  ");ff(se,cfmt3,keyset_table[IKDE_END].logical);	fputs("  ",se);	ffso(" PgDn ");ff(se,cfmt4,keyset_table[IKDE_PGDN].logical);	fputs("\r\n",se);	ffso(" F5  ");ff(se,cfmt1,keyset_table[IKDE_F5].logical);	fputs("  ",se);	ffso(" F6  ");ff(se,cfmt2,keyset_table[IKDE_F6].logical);	fputs("  ",se);	ffso(" Ins  ");ff(se,cfmt3,keyset_table[IKDE_INS].logical);	fputs("  ",se);	ffso(" CUR5 ");ff(se,cfmt4,keyset_table[IKDE_CU5].logical);	fputs("\r\n",se);	ffso(" F7  ");ff(se,cfmt1,keyset_table[IKDE_F7].logical);	fputs("  ",se);	ffso(" F8  ");ff(se,cfmt2,keyset_table[IKDE_F8].logical);	fputs("  ",se);	ffso(" BkTab");ff(se,cfmt3,keyset_table[IKDE_BKTAB].logical);	fputs("\r\n",se);	ffso(" F9  ");ff(se,cfmt1,keyset_table[IKDE_F9].logical);	fputs("  ",se);	ffso(" F10 ");ff(se,cfmt2,keyset_table[IKDE_F10].logical);	fputs("  ",se);	ffso(" CUR^ ");ff(se,cfmt3,keyset_table[IKDE_CUU].logical);	fputs("  ",se);	ffso(" CUR> ");ff(se,cfmt4,keyset_table[IKDE_CUR].logical);	fputs("\r\n",se);	ffso(" F11 ");ff(se,cfmt1,keyset_table[IKDE_F11].logical);	fputs("  ",se);	ffso(" F12 ");ff(se,cfmt2,keyset_table[IKDE_F12].logical);	fputs("  ",se);	ffso(" CUR< ");ff(se,cfmt3,keyset_table[IKDE_CUL].logical);	fputs("  ",se);	ffso(" CURv ");ff(se,cfmt4,keyset_table[IKDE_CUD].logical);	fputs("\r\n\r\n",se);}	/* end of keyset_display *//* end of ecufkey.c *//* vi: set tabstop=4 shiftwidth=4: */

⌨️ 快捷键说明

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