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

📄 strhandle.cc

📁 五行MMORPG引擎系统V1.0
💻 CC
字号:
// strhandle.cc
/*/////////////////////////////////////////////////////////////////////////////

	李亦
	2006.06.
/*//////////////////////////////////////////////////////////////////////////////

#include "platform/platform.h"


namespace CS
{

char *BreakString(char *svLines, char *svTok)
{
	char	*p,
			*s;
	char	*tok;

	p=svLines;
	if(p==NULL)
		return NULL;

	while(*p != '\0')
	{
		for(s = p, tok = svTok; (*s) && (*tok); s++, tok++) 
		{
			if((*s) != (*tok)) 
				break;
		}
		if((*tok) == '\0') 
		{
			*p = '\0';
			return p + dStrlen(svTok);
		}
		p++;
	}
	return NULL;
}



// What escapestring returns must be FREEd.
char *EscapeString(char *svStr)
{
	// Determine final size
	int	nEscapes = 0,
			i,
			count;

	count = dStrlen(svStr);
	for(i=0; i < count; i++) 
	{
		switch(svStr[i])
		{
		case '\a':
		case '\b':
		case '\f':
		case '\n':
		case '\r':
		case '\t':
		case '\v':
		case '\\':
			nEscapes++;
			break;
		default:
			if(svStr[i] < ' ' || svStr[i] > '~')
				nEscapes+=3;
			break;
		}
		//if(svStr[i] =='\a') nEscapes++;
		//else if(svStr[i]=='\b') nEscapes++;
		//else if(svStr[i]=='\f') nEscapes++;
		//else if(svStr[i]=='\n') nEscapes++;
		//else if(svStr[i]=='\r') nEscapes++;
		//else if(svStr[i]=='\t') nEscapes++;
		//else if(svStr[i]=='\v') nEscapes++;
		//else if(svStr[i]=='\\') nEscapes++;
		//else if(svStr[i]<' ' || svStr[i]>'~') nEscapes+=3;
	}
	
	// Allocate output buffer
	UINT		nLen			= dStrlen(svStr) + nEscapes;
	char		*svOutBuf	= (char*)dMalloc(nLen + 1);

	// Escape things
	int j=0;
	char c;
	for(i = 0;i < count; i++) 
	{
		c = svStr[i];
		switch(svStr[i])
		{
		case '\a':
		case '\b':
		case '\f':
		case '\n':
		case '\r':
		case '\t':
		case '\v':
		case '\\':
			{ 
				svOutBuf[j]		= '\\'; 
				svOutBuf[j+1]	= 'a'; 
				j += 2; 
			}
			break;
		default:
			if(c >= ' ' && c <= '~') 
			{ 
				svOutBuf[j] = c;
				j++; 
			}
			else 
			{
				dSprintf(svOutBuf + j,nLen - j, "\\x%1.1X%1.1X", (c>>4), c&15);
				j+=4;
			}
			break;
		}

		//if(c>=' ' && c<='~') { svOutBuf[j]=c; j++; }
		//else if(c=='\a') { svOutBuf[j]='\\'; svOutBuf[j+1]='a'; j+=2; }
		//else if(c=='\b') { svOutBuf[j]='\\'; svOutBuf[j+1]='b'; j+=2; }
		//else if(c=='\f') { svOutBuf[j]='\\'; svOutBuf[j+1]='f'; j+=2; }
		//else if(c=='\n') { svOutBuf[j]='\\'; svOutBuf[j+1]='n'; j+=2; }
		//else if(c=='\r') { svOutBuf[j]='\\'; svOutBuf[j+1]='r'; j+=2; }
		//else if(c=='\t') { svOutBuf[j]='\\'; svOutBuf[j+1]='t'; j+=2; }
		//else if(c=='\v') { svOutBuf[j]='\\'; svOutBuf[j+1]='v'; j+=2; }
		//else if(c=='\\') { svOutBuf[j]='\\'; svOutBuf[j+1]='\\'; j+=2; }
		//else {
		//	dSprintf(svOutBuf+j,"\\x%1.1X%1.1X",(c>>4),c&15);
		//	j+=4;
		//}
	}
	svOutBuf[j] = '\0';

	return svOutBuf;
}


char *UnescapeString(char *svStr)
{
	int	len	= dStrlen(svStr);
    char *svTemp;

	// Count number of '%' characters
	int nCount;
	nCount	= 0;
	svTemp	= svStr;
	while(*svTemp)
	{
		if(*svTemp == '%')
			nCount++;
		svTemp++;
	}

	// Allocate memory
	UINT		nSize = dStrlen(svStr) + nCount;
	svTemp	= (char *)dMalloc(nSize + 1);

	if(svTemp == NULL)
		return NULL;
	dMemset(svTemp,0,nSize + 1);
	

	// Convert string to preserve '%' chars
	char	*svCvtTo, 
			*svCvtFrom;
	svCvtFrom	= svStr;
	svCvtTo		= svTemp;
	while(*svCvtFrom)
	{
		if(*svCvtFrom == '%')
		{
			*(svCvtTo++) = '%';
		}
		*(svCvtTo++)	= *(svCvtFrom++);
	}


	// Convert escape chars (funky kludge, eh?)
	dSprintf(svStr,len,svTemp);
	dFree(svTemp);
	
	return svStr;
}

};//namespace CS

⌨️ 快捷键说明

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