Beispiel #1
0
void DLL_EXPORT FASTCALL AppendTextSpy(EmptyClass *thisptr, DWORD edx, char* Src, DWORD x, char y)
{
    char *chan;
    char *name;
    char *message;
    char *buf;

    if(!InfoBoxPtr && x == 0xFFFFE0E5)
    {
        InfoBoxPtr = (DWORD)thisptr;
        CTListBoxAppendText(thisptr, edx, Src, x, y);
        initBlacklist();
        return;
    }

    if(!ChatBoxPtr && (x == TRADE || x == SHOUT))
    {
        ChatBoxPtr = (DWORD)thisptr;
    }

    if((x == TRADE || x == SHOUT) && ChatBoxPtr == (DWORD)thisptr)
    {
        buf = new char[strlen(Src) + 1];
        strcpy(buf, Src);

        chan = strtok(buf,"[]>");
        name = strtok(NULL,"[]>");
        message = sizeof(char) + strchr(Src , '>');

        if(blacklist.CheckList(name))
        {
            delete[] buf;
            return;
        }

        if(strlen(message) >= 15)
        {
            MsgQueue.push(name, message);
        }
        delete[] buf;
    }
    else if(x == 0xFFFFFFFF && ChatBoxPtr == (DWORD)thisptr)
    {
        buf = new char[strlen(Src) + 1];
        strcpy(buf, Src);
        name = strtok(buf,"[]>");
        message = sizeof(char) + strchr(Src , '>');

        if(!ChrCmpI(*message, '$') && blacklist.CheckList(name))
        {
            delete[] buf;
            return;
        }
        delete[] buf;
    }


    CTListBoxAppendText(thisptr, edx, Src, x, y);

    return;
}
	// Refer to Figures.pptx/CNumber::Read() state chart for details.
	HRESULT CNumberRange::Read(const wchar_t * pstr, uint_least16_t uiLength)
	{
		HRESULT hr = S_OK;
		int32_t i0 = 0, i1 = 0;
		do {

			// check invalid arguments
			if (uiLength == 0)
			{
				uiLength = (uint_least16_t)lstrlen(pstr);

			}

			if (pstr == nullptr)
			{
				hr = E_POINTER;
				break;
			}

			// start parsing.
			const wchar_t* const pstrEnd = pstr + uiLength;
			int iState = sm_stateInitial;
			int iSign = 1; // sign of numbers, [-1 | +1]
			while (iState != sm_stateExit)
			{
				switch (iState)
				{
				case sm_stateInitial: // waiting for [U | 0-9] and skipping white-spaces
					if (ChrCmpI(*pstr, L'U') == 0)
					{
						iState = sm_stateNegativeUnlimited;
						break;
					}
					else if (*pstr == L'+')
					{
						iSign = 1;
						iState = sm_stateFirstNumber;
						pstr++;
						break;
					}
					else if (*pstr == L'-')
					{
						iSign = -1;
						iState = sm_stateFirstNumber;
						pstr++;
						break;
					}
					else if (IsDigit(pstr)) // is digit
					{
						iSign = 1;
						iState = sm_stateFirstNumber;
						break;
					}
					else if (IsCharSpace(*pstr))
					{
						pstr++;
						break;
					}
					else // invalid case
					{
						hr = E_FAIL;
						iState = sm_stateExit;
						swprintf_s(CTrace::WrPtr(), CTrace::AvailableLength(), L"State=Initial, *pstr=%wc",
							*pstr);
						CTrace::Update2();
						break;
					}
				case sm_stateNegativeUnlimited:
					if (StrCmpNI(pstr, sm_strUnlimited, sm_iLengthOfStrUnLimited) == 0)
					{
						pstr += sm_iLengthOfStrUnLimited;
						i0 = sm_iNoBoundary;
						iState = sm_stateFirstDelim;
						break;
					}
					else
					{ // invalid case
						hr = E_FAIL;
						iState = sm_stateExit;
						swprintf_s(CTrace::WrPtr(), CTrace::AvailableLength(), L"State=NagativeUnlimited, *pstr=%wc",
							*pstr);
						CTrace::Update2();
						break;
					}
				case sm_stateFirstNumber:
					if (IsDigit(pstr))
					{
						i0 = i0 * 10 + static_cast<int32_t>(*pstr - L'0');
						pstr++;
						break;
					}
					else if (IsCharSpace(*pstr))
					{
						pstr++;
						i0 *= iSign;
						iState = sm_stateFirstDelim;
						break;
					}
					else if (*pstr == sm_chBar)
					{
						pstr++;
						i0 *= iSign;
						iState = sm_stateFirstDelim2;
						break;
					}
					else if (pstrEnd == pstr)
					{ // end of parsing with only a single number
						i0 *= iSign;
						i1 = i0;
						iState = sm_stateExit;
						break;
					}
					else
					{ // invalid case
						iState = sm_stateExit;
						hr = E_FAIL;
						swprintf_s(CTrace::WrPtr(), CTrace::AvailableLength(), L"State=FirstNumber, *pstr=%wc",
							*pstr);
						CTrace::Update2();
						break;
					}
				case sm_stateFirstDelim:
					if (pstrEnd == pstr)
					{ // end of parsing with only a single number
						i1 = i0;
						iState = sm_stateExit;
						break;
					}
					else if (IsCharSpace(*pstr))
					{
						pstr++;
						break;
					}
					else if (sm_chBar == *pstr)
					{
						pstr++;
						iState = sm_stateFirstDelim2;
						break;
					}
					else
					{ // invalid case
						iState = sm_stateExit;
						hr = E_FAIL;
						swprintf_s(CTrace::WrPtr(), CTrace::AvailableLength(), L"State=FirstDelim, *pstr=%wc",
							*pstr);
						CTrace::Update2();
						break;
					}
				case sm_stateFirstDelim2:
					if (IsCharSpace(*pstr))
					{
						pstr++;
						break;
					}
					else if (*pstr == L'+')
					{
						iSign = 1;
						pstr++;
						iState = sm_stateSecondNumber;
						break;
					}
					else if (*pstr == L'-')
					{
						iSign = -1;
						pstr++;
						iState = sm_stateSecondNumber;
						break;
					}
					else if (IsDigit(pstr))
					{
						iSign = 1;
						iState = sm_stateSecondNumber;
						break;
					}
					else if (ChrCmpI(*pstr, L'U') == 0)
					{
						iState = sm_statePositiveUnlimited;
						break;
					}
					else
					{ // invalid case
						hr = E_FAIL;
						iState = sm_stateExit;
						swprintf_s(CTrace::WrPtr(), CTrace::AvailableLength(), L"State=FirstDelim2, *pstr=%wc",
							*pstr);
						CTrace::Update2();
						break;
					}
				case sm_statePositiveUnlimited:
					if (StrCmpNI(pstr, sm_strUnlimited, sm_iLengthOfStrUnLimited) == 0)
					{
						i1 = sm_iNoBoundary;
						iState = sm_stateSecondDelim;
						pstr += sm_iLengthOfStrUnLimited;
						break;
					}
					else
					{ // invalid case
						hr = E_FAIL;
						iState = sm_stateExit;
						swprintf_s(CTrace::WrPtr(), CTrace::AvailableLength(), L"State=PositiveUnlimited, *pstr=%wc",
							*pstr);
						CTrace::Update2();
						break;
					}
				case sm_stateSecondNumber:
					if (IsDigit(pstr))
					{
						i1 = (i1 * 10) + static_cast<int>(*pstr - L'0');
						pstr++;
						break;
					}
					else if (IsCharSpace(*pstr))
					{
						i1 *= iSign;
						iState = sm_stateSecondDelim;
						pstr++;
						break;
					}
					else if (pstr == pstrEnd)
					{
						i1 *= iSign;
						iState = sm_stateExit;
						break;
					}
					else
					{
						hr = E_FAIL;
						iState = sm_stateExit;
						swprintf_s(CTrace::WrPtr(), CTrace::AvailableLength(), L"State=SecondNumber, *pstr=%wc",
							*pstr);
						CTrace::Update2();
						break;
					}
				case sm_stateSecondDelim:
					if (IsCharSpace(*pstr))
					{
						pstr++;
						break;
					}
					else if (pstr == pstrEnd)
					{
						iState = sm_stateExit;
						break;
					}
					else
					{
						hr = E_FAIL;
						iState = sm_stateExit;
						swprintf_s(CTrace::WrPtr(), CTrace::AvailableLength(), L"State=SecondDelim, *pstr=%wc",
							*pstr);
						CTrace::Update2();
						break;
					}
				default: // unknown invalid condition
					iState = sm_stateExit;
					hr = E_FAIL;
					break;
				}
			}
		} while (false);
		if (i0 == i1 && i0 == sm_iNoBoundary)
		{
			hr = E_FAIL;
		}
		if (SUCCEEDED(hr))
		{
			first = i0;
			second = (i1 == sm_iNoBoundary) ? i1 : i1 + 1;
		}
		else
		{
			*this = CNumberRange();
		}
		return hr;
	}
Beispiel #3
0
bool WildCmp(WCHAR *lpMask,WCHAR *lpStr,int *dwDataSize)
{
    WCHAR cStr,cMask,*lpNewMaskPos=lpMask,*lpNewPos=lpStr;
    byte bNewStrFlag;
    int dwBufSize=*dwDataSize;

    if ((!lpStr) || (!lpNewMaskPos) || (!dwBufSize))
        return false;

    if (dwBufSize == -1)
        dwBufSize=PAGE_SIZE;

    for (;; lpNewMaskPos++,lpNewPos++,dwBufSize--)
    {
        cStr=*lpNewPos;
        cMask=*lpNewMaskPos;
        if (!dwBufSize)
        {
            if (cMask == '*')
            {
                while ((*lpNewMaskPos == '*') ||  (*lpNewMaskPos == '#'))
                {
                    if (!*lpNewMaskPos++)
                        goto ret_true;
                }
            }

            goto ret_false;
        }


        if (!cMask)
        {
ret_true:   if (dwDataSize)
                *dwDataSize=lpNewPos-lpStr;
            return true;
        }
        if ((cMask != '#') && (!ChrCmpI(cMask,cStr,&bNewStrFlag)))
            break;
        else if (bNewStrFlag)
        {
            if (bNewStrFlag == 0x0A)
            {
                lpNewPos++;
                if (!--dwBufSize)
                    goto ret_false;
            }
            else
                lpNewMaskPos++;
        }
    }
    if (cMask != '*')
    {
ret_false:
        if (dwDataSize)
            *dwDataSize=0;
        return false;
    }

    for (;; lpNewMaskPos++,lpNewPos++,dwBufSize--)
    {
        WCHAR *lpMaskPos;
        while (*lpNewMaskPos == '*')
        {
            lpMaskPos=lpNewMaskPos++;
            if (!*lpNewMaskPos)
                goto ret_true;
        }

        cMask=*lpNewMaskPos;
        if (!cMask)
            goto ret_true;

        cStr=*lpNewPos;
        if (!cStr)
            goto ret_false;

        if (!dwBufSize)
            goto ret_false;

        if ((cMask != '#') && (!ChrCmpI(cMask,cStr,&bNewStrFlag)))
        {
            int dwTmp=(lpNewMaskPos-lpMaskPos)-1;
            lpNewPos-=dwTmp;
            dwBufSize+=dwTmp;
            lpNewMaskPos=lpMaskPos;
        }
        else if (bNewStrFlag)
        {
            if (bNewStrFlag == 0x0A)
            {
                lpNewPos++;
                if (!--dwBufSize)
                    goto ret_false;
            }
            else
                lpNewMaskPos++;
        }
    }
}