TCmdLine::TKind TCmdLine::NextToken(bool removeCurrent) { // Done parsing, no more tokens // if (Kind == Done) return Kind; // Move Token ptr to next token, by copying over current token, or by ptr // adjustment. TokenStart stays right past previous token // if (removeCurrent) { ::_tcscpy(TokenStart, Token+TokenLen); Token = TokenStart; } else { Token += TokenLen; TokenStart = Token; } // Adjust token ptr to begining of token & determine kind // Token += _tcsspn(Token, whitespace); // skip leading whitespace switch (*Token) { case 0: Kind = Done; break; case _T('='): Kind = Value; Token++; break; case _T('-'): case _T('/'): Kind = Option; Token++; Token += _tcsspn(Token, whitespace); // skip any more whitespace if (*Token == _T('\"')) { Token++; // skip the quote TokenLen = static_cast<int>(_tcscspn(Token, _T("\""))); Token[TokenLen] = 0; // remove quote TokenLen++; // next char return Kind; } break; case _T('\"'): Kind = Name; Token++; // skip the quote TokenLen = static_cast<int>(_tcscspn(Token, _T("\""))); Token[TokenLen] = 0; // remove quote TokenLen++; // next char return Kind; default: Kind = Name; } Token += _tcsspn(Token, whitespace); // skip any more whitespace TokenLen = static_cast<int>(_tcscspn(Token, terminator)); return Kind; }
size_t CRegExp::regrepeat(TCHAR *node) { size_t count; TCHAR *scan; TCHAR ch; switch (OP(node)) { case ANY: return(_tcslen(reginput)); break; case EXACTLY: ch = *OPERAND(node); count = 0; for (scan = reginput; *scan == ch; scan++) count++; return(count); break; case ANYOF: return(_tcsspn(reginput, OPERAND(node))); break; case ANYBUT: return(_tcscspn(reginput, OPERAND(node))); break; default: // Oh dear. Called inappropriately. TRACE0("internal error: bad call of regrepeat\n"); return(0); // Best compromise. break; } // NOTREACHED }
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // // HandleCommandLineBang // Grabs !bang command and any arguments from a command line and // sends them to a running litestep.exe instance // int HandleCommandLineBang(LPCTSTR pszCommandLine) { ASSERT(pszCommandLine); int nReturn = -1; // Can't just use MAX_BANGCOMMAND + MAX_BANGARGS since // there may be lots of whitespace on the command line TCHAR szBuffer[MAX_LINE_LENGTH] = { 0 }; if (SUCCEEDED(StringCchCopy(szBuffer, COUNTOF(szBuffer), pszCommandLine))) { LPCTSTR pszArgs = NULL; LPTSTR pszBangEnd = _tcschr(szBuffer, _T(' ')); if (pszBangEnd) { pszArgs = pszBangEnd + _tcsspn(pszBangEnd, _T(" ")); // Cut off !bang arguments in szBuffer *pszBangEnd = _T('\0'); } if (SendCommandLineBang(szBuffer, pszArgs)) { nReturn = 0; } } return nReturn; }
CCOMString CCOMString::SpanIncluding(LPCTSTR lpszCharSet) { ATLASSERT(lpszCharSet != NULL); #ifdef _UNICODE ATLASSERT(::IsBadStringPtrW(lpszCharSet, -1) == 0); #else ATLASSERT(::IsBadStringPtrA(lpszCharSet, -1) == 0); #endif return Left(_tcsspn(m_pszString, lpszCharSet)); }
BOOL IsHexStringW(const TCHAR *str) { int nIndex; int nLen; if(NULL == str){ return FALSE; } nLen = _tcslen( str ); if ( 0 == nLen ) { return FALSE; } nIndex = _tcsspn( str, _T("0123456789ABCDEFabcdef")); return ( nLen == nIndex ) ? TRUE : FALSE; }
/************************************************************** * CHAR:0--------9 A-------F a---------f * HEX :30 39 41 46 61--------66 * ***************************************************************/ BOOL IsNumberString(const TCHAR *str) { int nIndex; int nLen; if(NULL == str){ return FALSE; } nLen = _tcslen( str ); if ( 0 == nLen ) { return FALSE; } nIndex = _tcsspn( str, _T("0123456789") ); return ( nLen == nIndex ) ? TRUE : FALSE; }
BOOL IsHighlighted(SESSION_INFO *si, GCEVENT *gce) { if (!g_Settings->bHighlightEnabled || !g_Settings->pszHighlightWords || !gce || !si || !si->pMe) return FALSE; if (gce->ptszText == NULL) return FALSE; TCHAR *buf = RemoveFormatting(NEWTSTR_ALLOCA(gce->ptszText)); int iStart = 0; CMString tszHighlightWords(g_Settings->pszHighlightWords); while (true) { CMString tszToken = tszHighlightWords.Tokenize(_T("\t "), iStart); if (iStart == -1) break; // replace %m with the users nickname if (tszToken == _T("%m")) tszToken = si->pMe->pszNick; if (tszToken.Find('*') == -1) tszToken = '*' + tszToken + '*'; // time to get the next/first word in the incoming text string for (const TCHAR *p = buf; *p != '\0'; p += _tcscspn(p, _T(" "))) { p += _tcsspn(p, _T(" ")); // compare the words, using wildcards if (wildcmpit(p, tszToken)) return TRUE; } } return FALSE; }
// strspn equivalent CString CString::SpanIncluding(LPCTSTR lpszCharSet) const { ASSERT(AfxIsValidString(lpszCharSet)); return Left(_tcsspn(m_pchData, lpszCharSet)); }
/* specified routines */ VOID ExpandAlias (LPTSTR cmd, INT maxlen) { LPTSTR buffer; TCHAR *position, *in, *out; LPTSTR Token; LPTSTR tmp; tmp = cmd_dup(cmd); if (!tmp) return; /* first part is the macro name */ position = tmp + _tcscspn(tmp, _T(" \n")); if (position == tmp) { cmd_free(tmp); return; } *position++ = _T('\0'); position += _tcsspn(position, _T(" ")); buffer = cmd_alloc(maxlen); if (!buffer) { WARN("Cannot allocate memory for alias buffer!\n"); cmd_free(tmp); return; } if (GetConsoleAlias(tmp, buffer, maxlen, _T("cmd.exe")) == 0) { cmd_free(tmp); cmd_free(buffer); return; } in = buffer; out = cmd; while (*in) { if (*in == _T('$')) { Token = position; if (in[1] >= _T('1') && in[1] <= _T('9')) { /* Copy a single space-delimited token from the input line */ INT num; for (num = in[1] - _T('1'); num > 0; num--) { Token += _tcscspn(Token, _T(" \n")); Token += _tcsspn(Token, _T(" ")); } while (!_tcschr(_T(" \n"), *Token)) { if (out >= &cmd[maxlen - 1]) break; *out++ = *Token++; } in += 2; continue; } else if (in[1] == _T('*')) { /* Copy the entire remainder of the line */ while (*Token && *Token != _T('\n')) { if (out >= &cmd[maxlen - 1]) break; *out++ = *Token++; } in += 2; continue; } } if (out >= &cmd[maxlen - 1]) break; *out++ = *in++; } *out++ = _T('\n'); *out = _T('\0'); cmd_free(buffer); cmd_free(tmp); }
/** * name: DlgProc_EditPhone() * desc: dialog procedure * * return: 0 or 1 **/ INT_PTR CALLBACK DlgProc_Phone(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { LPCBEXITEM cbi = (LPCBEXITEM)GetUserData(hDlg); static int noRecursion = 0; switch (msg) { case WM_INITDIALOG: { UINT i, item, countryCount; LPIDSTRLIST pCountries; HWND hCombo = GetDlgItem(hDlg, EDIT_COUNTRY); cbi = (LPCBEXITEM)lParam; if (!cbi) return FALSE; SetUserData(hDlg, lParam); SendDlgItemMessage(hDlg, IDC_HEADERBAR, WM_SETICON, 0, (LPARAM)IcoLib_GetIcon(ICO_DLG_PHONE, TRUE)); if (db_get_b(NULL, MODNAME, SET_ICONS_BUTTONS, 1)) { SendDlgItemMessage(hDlg, IDOK, BM_SETIMAGE, IMAGE_ICON, (LPARAM)IcoLib_GetIcon(ICO_BTN_OK)); SendDlgItemMessage(hDlg, IDCANCEL, BM_SETIMAGE, IMAGE_ICON, (LPARAM)IcoLib_GetIcon(ICO_BTN_CANCEL)); } // translate Userinfo buttons { TCHAR szButton[MAX_PATH]; HWND hBtn; hBtn = GetDlgItem(hDlg, IDOK); GetWindowText(hBtn, szButton, _countof(szButton)); SetWindowText(hBtn, TranslateTS(szButton)); hBtn = GetDlgItem(hDlg, IDCANCEL); GetWindowText(hBtn, szButton, _countof(szButton)); SetWindowText(hBtn, TranslateTS(szButton)); } if (*cbi->pszVal) SetWindowText(hDlg, LPGENT("Edit phone number")); if (cbi->wFlags & CBEXIF_SMS) CheckDlgButton(hDlg, CHECK_SMS, BST_CHECKED); TranslateDialogDefault(hDlg); EnableWindow(GetDlgItem(hDlg, IDOK), *cbi->pszVal); SendDlgItemMessage(hDlg, EDIT_AREA, EM_LIMITTEXT, 31, 0); SendDlgItemMessage(hDlg, EDIT_NUMBER, EM_LIMITTEXT, 63, 0); SendDlgItemMessage(hDlg, EDIT_CATEGORY, EM_LIMITTEXT, cbi->ccCat - 1, 0); SendDlgItemMessage(hDlg, EDIT_PHONE, EM_LIMITTEXT, cbi->ccVal - 1, 0); GetCountryList(&countryCount, &pCountries); for (i = 0; i < countryCount; i++) { if (pCountries[i].nID == 0 || pCountries[i].nID == 0xFFFF) continue; item = SendMessage(hCombo, CB_ADDSTRING, NULL, (LPARAM)pCountries[i].ptszTranslated); SendMessage(hCombo, CB_SETITEMDATA, item, pCountries[i].nID); } SetDlgItemText(hDlg, EDIT_PHONE, cbi->pszVal); SetDlgItemText(hDlg, EDIT_CATEGORY, cbi->pszCat); EnableWindow(GetDlgItem(hDlg, EDIT_CATEGORY), !(cbi->wFlags & CBEXIF_CATREADONLY)); } return TRUE; case WM_CTLCOLORSTATIC: SetBkColor((HDC)wParam, RGB(255, 255, 255)); return (INT_PTR)GetStockObject(WHITE_BRUSH); case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: if (HIWORD(wParam) == BN_CLICKED) { TCHAR szText[MAXDATASIZE]; int errorPos; if (!GetDlgItemText(hDlg, EDIT_PHONE, szText, _countof(szText)) || !CheckPhoneSyntax(szText, cbi->pszVal, cbi->ccVal, errorPos) || errorPos > -1) { MsgErr(hDlg, TranslateT("The phone number should start with a + and consist of\nnumbers, spaces, brackets and hyphens only.")); break; } // save category string GetDlgItemText(hDlg, EDIT_CATEGORY, cbi->pszCat, cbi->ccCat); // save SMS flag if ((int)IsDlgButtonChecked(hDlg, CHECK_SMS) != ((cbi->wFlags & CBEXIF_SMS) == CBEXIF_SMS)) cbi->wFlags ^= CBEXIF_SMS; } //fall through case IDCANCEL: if (HIWORD(wParam) == BN_CLICKED) EndDialog(hDlg, wParam); break; case EDIT_COUNTRY: if (HIWORD(wParam) != CBN_SELCHANGE) break; case EDIT_AREA: case EDIT_NUMBER: if (LOWORD(wParam) != EDIT_COUNTRY && HIWORD(wParam) != EN_CHANGE) break; if (noRecursion) break; EnableWindow(GetDlgItem(hDlg, IDOK), TRUE); { TCHAR szPhone[MAXDATASIZE], szArea[32], szData[64]; int nCurSel = SendDlgItemMessage(hDlg, EDIT_COUNTRY, CB_GETCURSEL, 0, 0); UINT nCountry = (nCurSel != CB_ERR) ? SendDlgItemMessage(hDlg, EDIT_COUNTRY, CB_GETITEMDATA, nCurSel, 0) : 0; GetDlgItemText(hDlg, EDIT_AREA, szArea, _countof(szArea)); GetDlgItemText(hDlg, EDIT_NUMBER, szData, _countof(szData)); mir_sntprintf(szPhone, _T("+%u (%s) %s"), nCountry, szArea, szData); noRecursion = 1; SetDlgItemText(hDlg, EDIT_PHONE, szPhone); noRecursion = 0; } break; case EDIT_PHONE: if (HIWORD(wParam) != EN_UPDATE) break; if (noRecursion) break; noRecursion = 1; { TCHAR szText[MAXDATASIZE], *pText = 0, *pArea, *pNumber; bool isValid = true; GetDlgItemText(hDlg, EDIT_PHONE, szText, _countof(szText)); if (szText[0] != '+') isValid = false; if (isValid) { int country = _tcstol(szText + 1, &pText, 10); if (pText - szText > 4) isValid = false; else { int i; for (i = SendDlgItemMessage(hDlg, EDIT_COUNTRY, CB_GETCOUNT, 0, 0) - 1; i >= 0; i--) { if (country == SendDlgItemMessage(hDlg, EDIT_COUNTRY, CB_GETITEMDATA, i, 0)) { SendDlgItemMessage(hDlg, EDIT_COUNTRY, CB_SETCURSEL, i, 0); break; } } if (i < 0) isValid = false; } } if (isValid) { pArea = pText + _tcscspn(pText, _T("0123456789")); pText = pArea + _tcsspn(pArea, _T("0123456789")); if (*pText) { *pText = '\0'; pNumber = pText + 1 + _tcscspn(pText + 1, _T("0123456789")); SetDlgItemText(hDlg, EDIT_NUMBER, pNumber); } SetDlgItemText(hDlg, EDIT_AREA, pArea); } if (!isValid) { SendDlgItemMessage(hDlg, EDIT_COUNTRY, CB_SETCURSEL, -1, 0); SetDlgItemText(hDlg, EDIT_AREA, _T("")); SetDlgItemText(hDlg, EDIT_NUMBER, _T("")); } } noRecursion = 0; EnableWindow(GetDlgItem(hDlg, IDOK), GetWindowTextLength(GetDlgItem(hDlg, EDIT_PHONE))); break; } break; } return FALSE; }
// strspn equivalent CStrClass CStrClass::SpanIncluding(LPCTSTR lpszCharSet) const { return Left(_tcsspn(m_pchData, lpszCharSet)); }