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

📄 strtoclr.c

📁 PocketCMD是与pocketconsole配合实用的命令行解释器(Shell)
💻 C
字号:
/* *  STRTOCLR.C - read color (for color command and other) * * *  History: * *    07-Oct-1999 (Paolo Pantaleo) *        Started. * * *//*onlyBOOL StringToColor(LPWORD lpColor, LPTSTR*str)is to be calledother are internal service functions*/#include "cmd.h"#include <ctype.h>#include <tchar.h>#define _B FOREGROUND_BLUE#define _G FOREGROUND_GREEN#define _R FOREGROUND_RED#define _I FOREGROUND_INTENSITY/*return values for chop_blank*/#define CP_OK				0#define CP_BLANK_NOT_FOUND	1#define CP_END_OF_STRING	2#define SC_HEX 0x0100#define SC_TXT 0x0200typedef struct _CLRTABLE{	LPTSTR		name;	WORD		val;} CLRTABLE;CLRTABLE clrtable[] ={	{_T("bla")	,0			},	{_T("blu")	,_B			},	{_T("gre")	,_G			},	{_T("cya")	,_B|_G		},	{_T("red")	,_R			},	{_T("mag")	,_B|_R		},	{_T("yel")	,_R|_G		},	{_T("whi")	,_R|_G|_B	},	{_T("gra")	,_I			},		{_T("0")	,0			},	{_T("2")	,_G			},	{_T("3")	,_B|_G		},	{_T("4")	,_R			},	{_T("5")	,_B|_R		},	{_T("6")	,_R|_G		},	{_T("7")	,_R|_G|_B	},	{_T("8")	,_I			},	{_T("9")	,_I|_B		},	{_T("10")	,_I|_G		},	{_T("11")	,_I|_B|_G	},	{_T("12")	,_I|_R		},	{_T("13")	,_I|_B|_R	},	{_T("14")	,_I|_R|_G	},	{_T("15")	,_I|_R|_G|_B},		/* note that 1 is at the end of list	to avoid to confuse it with 10-15*/	{_T("1")	,_B			},	/*cyan synonimous*/	{_T("aqu")	,_B|_G		},	/*magenta synonimous*/	{_T("pur")	,_B|_R		},		{_T("")   ,0},};/*move string pointer to next word (skip all spaces)on erro retunr nonzero value*/staticINT chop_blank(LPTSTR *arg_str){		LPTSTR str;	str = _tcschr(*arg_str,_T(' '));	if(!str)	{		str = _tcschr (*arg_str, _T('\0'));		if(str != NULL)			*arg_str=str;		return CP_BLANK_NOT_FOUND;	}		while(_istspace(*str))		str++;	if (*str == _T('\0'))	{		*arg_str=str;		return CP_END_OF_STRING;	}	*arg_str = str;	return CP_OK;	}/*read a color value in hex (like win nt's cmd syntax)if an error occurs return -1	*/ staticWORD hex_clr(LPTSTR str){	WORD ret= (WORD)-1;	TCHAR ch;		ch = str[1];		if(_istdigit(ch))		ret = ch-_T('0');	else	{			ch=_totupper(ch);		if(  ch >= _T('A') && ch <= _T('F')  )			ret = ch-_T('A')+10;		else			return (WORD)-1;	}		ch = str[0];		if(_istdigit(ch))		ret |= (ch-_T('0')) << 4;	else	{			ch=_totupper(ch);		if(  ch >= _T('A') && ch <= _T('F')  )			ret |= (ch-_T('A')+10) <<4;		else			return (WORD)-1;	}	return ret;}/*read a color value from a string (like 4nt's syntax)if an error occurs return -1	*/staticWORD txt_clr(LPTSTR str){	INT i;		for(i=0;*(clrtable[i].name);i++)		if(	_tcsnicmp(str,clrtable[i].name,_tcslen(clrtable[i].name)) == 0)						return clrtable[i].val;		return (WORD)-1;}/*search for x on y*/ staticWORD str_to_color(LPTSTR* arg_str){	LPTSTR str;		BOOL bBri=FALSE;	WORD tmp_clr,ret_clr;	str = *arg_str;		if(!(*str))		return (WORD)-1;	/*foreground*/	if(_tcsnicmp(str,_T("bri"),3) == 0 )	{		bBri = TRUE;		if(chop_blank(&str))			return (WORD)-1;	}	if( (tmp_clr = txt_clr(str)) == (WORD)-1 )	{		return (WORD)-1;	}	/*skip spaces and "on"*/		if ( chop_blank(&str) || chop_blank(&str) )		return (WORD)-1;	ret_clr = tmp_clr | (bBri << 3);	/*background*/		if(_tcsnicmp(str,_T("bri"),3) == 0 )	{		bBri = TRUE;		if(chop_blank(&str))			return (WORD)-1;	}				if( (tmp_clr = txt_clr(str)) == (WORD)-1 )		return (WORD)-1;	chop_blank(&str);		*arg_str = str;	return SC_HEX | ret_clr | tmp_clr << 4 | bBri << 7;}/****main function****//*the only parameter is arg_str, a pointer to a string.the string is modified so it will begin to first word aftercolor specification(only the char* is moved, no chars in the string are modfied)it returns the color in the l.o. byte, plus two flags in theh.o. byte, they are:SC_HEX win nt's cmd syntax (for exampl a0)SC_TXT 4nt's syntax ( "bri gre on bla" or "10 on 0")if succedes also move the LPTSTR to end ofstring that specify color*/BOOL StringToColor(LPWORD lpColor, LPTSTR*str){	WORD wRet;	wRet = str_to_color (str);	if (wRet == (WORD)-1)	{		wRet=hex_clr (*str);		chop_blank (str);		if (wRet == (WORD)-1)			return FALSE;	}	*lpColor = wRet;	return TRUE;}/* EOF */

⌨️ 快捷键说明

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