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; }
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++; } } }