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

📄 hailib.c

📁 HGui4.1.rar
💻 C
字号:
//---------------------------------------------------------------------------------
// Copyright (c) Haisoft 2006-9-1
// Copyright jinhailiao 2008-2010
// E-mail:   jinhailiao@163.com
// Project:			HGui
// File:			hailib.h
// Description:		
//-------------------------------------------------------------
// Reversion Histroy:
//-------------------------------------------------------------
// Version		date		operations				by who
// 2.0.0		2006-09-06  create                  Kingsea
// 3.0.0		2008-03-01	update					Kingsea
//---------------------------------------------------------------------------------
#include "haitype.h"


S_BOOL hai_RleDecode(S_BYTE *poutbuf, S_BYTE *pinbuf, S_WORD WidthBytes)
{
	S_BYTE ch;
	S_WORD cnt = 1;
	S_WORD skip = (WidthBytes+3 & ~0x3) - WidthBytes;// 4 bytes align

	while(ch = *pinbuf++)
	{
		if (ch&0x80)
		{
			ch &= 0x7F;
			while (ch--)
			{
				*poutbuf++ = *pinbuf;
				if (cnt++ == WidthBytes) // 4 bytes align 
				{
					cnt = 1;
					poutbuf += skip;
				}
			}
			pinbuf++;
		}
		else
		{
			while (ch--)
			{
				*poutbuf++ = *pinbuf++;
				if (cnt++ == WidthBytes) // 4 bytes align 
				{
					cnt = 1;
					poutbuf += skip;
				}
			}
		}
	}
	return S_TRUE;
}

S_BYTE *hai_strchr(const S_BYTE *pszString, S_BYTE c)
{
	const S_BYTE *p = pszString;
	
	if (pszString == S_NULL)// || c == 0
		return S_NULL;
	
	while (1)
	{
		if (*p & 0x80)
		{
			p += 2;
		}
		else
		{
			if (*p == c)
				return (S_BYTE *)p;
			if (*p == 0)
				return S_NULL;
			++p;
		}
	}
}

S_WORD  hai_strlen(const S_BYTE *pszString)
{
	S_WORD  num = 0;
	
	if (pszString == S_NULL)
		return 0;
	
	while (*pszString)
	{
		if (*pszString & 0x80)
		{
			pszString += 2;
			num += 2;
		}
		else
		{
			pszString++;
			num++;
		}
	}
	
	return num;
}

S_BYTE  *hai_strcpy(S_BYTE *pszDst, const S_BYTE *pszSrc)
{
	S_BYTE *dst = pszDst;
	
	if (pszDst == S_NULL || pszSrc == S_NULL)
		return S_NULL;
	
	while (*pszSrc)
	{
		if (*pszSrc & 0x80)
		{
			*dst++ = *pszSrc++;
			*dst++ = *pszSrc++;
		}
		else
		{
			*dst++ = *pszSrc++;
		}
	}
	*dst = '\0';
	return pszDst;
}

S_VOID hai_CutString(S_BYTE *pszText, S_SHORT AscWidth, S_SHORT DisWidth)
{
	S_WORD w = 0;

	if (!pszText || AscWidth <= 0 || DisWidth <= 0)
		return;

	while (*pszText++)
	{
		if (*pszText & 0x80)
		{
			if (w + AscWidth*2 > DisWidth)
			{
				*(pszText-1) = 0;
				break;
			}
			w += AscWidth * 2;
			pszText++;
		}
		else
		{
			if (w + AscWidth > DisWidth)
			{
				*(pszText-1) = 0;
				break;
			}
			w += AscWidth;
		}
	}
}

S_VOID *HG_memcpy(S_VOID *dest, const S_VOID *src, S_UINT count)
{
	S_BYTE *pDst = (S_BYTE *)dest;
	S_BYTE *pSrc = (S_BYTE *)src;

	if (pDst < pSrc)
	{
		while(count--)
			*pDst++ = *pSrc++;
	}
	else if (pDst > pSrc)
	{
		while(count--)
			*(pDst+count) = *(pSrc+count);
	}

	return dest;
}

S_INT HG_memcmp(const S_VOID *buf1, const S_VOID *buf2, S_UINT count)
{
	S_BYTE *p1 = (S_BYTE *)buf1;
	S_BYTE *p2 = (S_BYTE *)buf2;

	while (count--)
	{
		if (*p1++ != *p2++)
			break;
	}

	return (*(--p1)-*(--p2));
}

S_VOID *HG_memset(S_VOID *dest, S_INT c, S_UINT count)
{
	S_BYTE ch = (S_BYTE)c;
	S_BYTE *pDst = (S_BYTE *)dest;

	while(count--)
		*pDst++ = ch;

	return dest;
}

⌨️ 快捷键说明

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