static TCHAR *parseNum(ARGUMENTSINFO *ai) { if (ai->argc != 3) return NULL; int val = ttoi(ai->targv[1]); int padding = ttoi(ai->targv[2]); TCHAR *szVal = itot(val); if (szVal == NULL) return NULL; unsigned zeros = max(padding - (signed int)mir_tstrlen(szVal), 0); TCHAR *res = (TCHAR*)mir_alloc((zeros + mir_tstrlen(szVal) + 1)*sizeof(TCHAR)); if (res == NULL) { mir_free(szVal); return NULL; } memset(res, 0, ((zeros + mir_tstrlen(szVal) + 1) * sizeof(TCHAR))); TCHAR *cur = res; for (unsigned i = 0; i < zeros; i++) *cur++ = '0'; mir_tstrcat(res, szVal); mir_free(szVal); return res; }
static TCHAR *parseGreater(ARGUMENTSINFO *ai) { if (ai->argc != 3) return NULL; if (ttoi(ai->targv[1]) <= ttoi(ai->targv[2])) ai->flags |= AIF_FALSE; return mir_tstrdup(_T("")); }
static TCHAR *parseMuldiv(ARGUMENTSINFO *ai) { if (ai->argc != 4) return NULL; if (ttoi(ai->targv[3]) == 0) return NULL; return itot((ttoi(ai->targv[1])*ttoi(ai->targv[2])) / ttoi(ai->targv[3])); }
static TCHAR *parseMul(ARGUMENTSINFO *ai) { if (ai->argc < 3) return NULL; int result = ttoi(ai->targv[1]); for (unsigned i = 2; i < ai->argc; i++) result *= ttoi(ai->targv[i]); return itot(result); }
static TCHAR *parseMax(ARGUMENTSINFO *ai) { if (ai->argc < 2) return NULL; int maxVal = ttoi(ai->targv[1]); for (unsigned i = 2; i < ai->argc; i++) maxVal = max(ttoi(ai->targv[i]), maxVal); return itot(maxVal); }
static TCHAR *parseMod(ARGUMENTSINFO *ai) { if (ai->argc != 3) return NULL; int val1 = ttoi(ai->targv[1]); int val2 = ttoi(ai->targv[2]); if (val2 == 0) return NULL; return itot(val1 % val2); }
static TCHAR* parseContact(ARGUMENTSINFO *ai) { if (ai->argc < 3 || ai->argc > 4) return NULL; int n = 0; if (ai->argc == 4 && *ai->targv[3] != 'r') n = ttoi(ai->targv[3]) - 1; CONTACTSINFO ci = { 0 }; ci.cbSize = sizeof(ci); ci.tszContact = ai->targv[1]; ci.flags = getContactInfoFlags(ai->targv[2]); int count = getContactFromString(&ci); if (count == 0 || ci.hContacts == NULL) return NULL; if (ai->argc == 4 && *ai->targv[3] == 'r') n = rand() % count; if (count != 1 && ai->argc != 4) { mir_free(ci.hContacts); return NULL; } MCONTACT hContact = ci.hContacts[n]; log_debugA("contact: %x", hContact); mir_free(ci.hContacts); return encodeContactToString(hContact); }
static TCHAR *parseHToA(ARGUMENTSINFO *ai) { if (ai->argc != 2) return NULL; struct in_addr in; in.s_addr = htonl(ttoi(ai->targv[1])); return mir_a2t(inet_ntoa(in)); }
static TCHAR *parseIfequal(ARGUMENTSINFO *ai) { if (ai->argc != 5) return NULL; FORMATINFO fi; memcpy(&fi, ai->fi, sizeof(fi)); fi.szFormat = ai->argv[1]; ptrT tszFirst(formatString(&fi)); fi.szFormat = ai->argv[2]; ptrT tszSecond(formatString(&fi)); if (tszFirst == NULL || tszSecond == NULL) return NULL; if (ttoi(tszFirst) == ttoi(tszSecond)) return mir_tstrdup(ai->targv[3]); return mir_tstrdup(ai->targv[4]); }
static TCHAR *parseAdd(ARGUMENTSINFO *ai) { if (ai->argc < 3) return NULL; int result = 0; for (unsigned int i = 1; i < ai->argc; i++) result += ttoi(ai->targv[i]); return itot(result); }
static TCHAR* parseCodeToStatus(ARGUMENTSINFO *ai) { if (ai->argc != 2) return NULL; unsigned int status = ttoi(ai->targv[1]); TCHAR *szStatus = pcli->pfnGetStatusModeDescription(status, 0); if (szStatus != NULL) return mir_tstrdup(szStatus); return NULL; }
static TCHAR *parseHex(ARGUMENTSINFO *ai) { unsigned int i; TCHAR szVal[34]; if (ai->argc != 3) return NULL; int val = ttoi(ai->targv[1]); int padding = ttoi(ai->targv[2]); mir_sntprintf(szVal, _countof(szVal), _T("%x"), val); unsigned int zeros = max(padding - (signed int)mir_tstrlen(szVal), 0); TCHAR *res = (TCHAR*)mir_alloc((zeros + mir_tstrlen(szVal) + 3)*sizeof(TCHAR)); if (res == NULL) return NULL; memset(res, 0, ((zeros + mir_tstrlen(szVal) + 3) * sizeof(TCHAR))); mir_tstrcpy(res, _T("0x")); for (i = 0; i < zeros; i++) *(res + 2 + i) = '0'; mir_tstrcat(res, szVal); return res; }
long string_cast<long, tstring> (const tstring & value) { return static_cast<long>(ttoi(value.c_str())); }
int32 string_cast<int32, tstring> (const tstring & value) { return ttoi(value.c_str()); }
static bool isMatchTargetOSVersion(const OSVERSIONINFO& osv, const MBCString& target) { const MBCString wildcard = ALITERAL('*'); enum Phase { Phase_Platform = 0, Phase_Major, Phase_Minor, Phase_BuildNo, Phase_End }; SInt32 phase = Phase_Platform; SInt32 ix = 0; while (phase < Phase_End) { if (ix >= target.Length()) { return false; } MBCString elem; SInt32 sep = target.Find(ALITERAL('.'), ix); if (0 > sep) { elem = target.SubString(ix); ix = target.Length(); } else { elem = target.SubString(ix, sep - ix); ix = sep + 1; } if (0 != elem.Compare(wildcard)) { DWORD num = ttoi(elem.CString()); DWORD cmp = 0xffffffff; switch (phase) { case Phase_Platform: cmp = osv.dwPlatformId; break; case Phase_Major: cmp = osv.dwMajorVersion; break; case Phase_Minor: cmp = osv.dwMinorVersion; break; case Phase_BuildNo: cmp = osv.dwBuildNumber; break; } if (num != cmp) { return false; } } ++phase; } return true; }