ItemUpdate_TC::ItemUpdate_TC(position fieldpos, ITEMVECTOR &items) : BasicServerCommand(SC_ITEMUPDATE_TC) { Logger::writeMessage("rot_update", "sending new itemstack for pos("+Logger::toString(fieldpos.x)+", "+Logger::toString(fieldpos.y)+", "+Logger::toString(fieldpos.z)+")",false); addShortIntToBuffer(fieldpos.x); addShortIntToBuffer(fieldpos.y); addShortIntToBuffer(fieldpos.z); int16_t size = static_cast<unsigned char>(items.size()); if (size > 255) { size = 255; } addUnsignedCharToBuffer(static_cast<uint8_t>(size)); for (auto it = items.begin(); it != items.end(); ++it) { //we added 255 items if (size <= 0) { break; } addShortIntToBuffer(it->getId()); addShortIntToBuffer(it->getNumber()); Logger::writeMessage("rot_update", "adding item id: "+Logger::toString(it->getId())+" count: "+Logger::toString(static_cast<int>(it->getNumber())),false); size--; } }
void LV_OnDelete(HWND hwnd, INT iRow = -1) { if (iRow == -1) iRow = ListView_GetNextItem(hwnd, -1, LVNI_SELECTED); if (iRow == -1) return; UINT State = LVIS_SELECTED | LVIS_FOCUSED; ListView_SetItemState(g_hListView, iRow, State, State); WCHAR sz[MAX_STRING]; LoadStringW(g_hInstance, IDS_QUERYDELETE, sz, _countof(sz)); if (IDYES != MessageBoxW(g_hMainWnd, sz, g_szTitle, MB_ICONINFORMATION | MB_YESNO)) { return; } ListView_DeleteItem(hwnd, iRow); g_Items.erase(g_Items.begin() + iRow); g_bModified = TRUE; ListView_SetItemState(g_hListView, iRow, State, State); InvalidateRect(hwnd, NULL, TRUE); }
BOOL DoLoadItems(void) { ITEMVECTOR Items; HKEY hKey = NULL; RegOpenKeyExW(HKEY_LOCAL_MACHINE, g_pszKey, 0, KEY_READ, &hKey); if (hKey == NULL) return FALSE; WCHAR szName[MAX_STRING], szValue[MAX_STRING]; DWORD cbName, cbValue; for (DWORD dwIndex = 0; ; ++dwIndex) { cbName = sizeof(szName); cbValue = sizeof(szValue); LONG Error = RegEnumValueW(hKey, dwIndex, szName, &cbName, NULL, NULL, (LPBYTE)szValue, &cbValue); if (Error != ERROR_SUCCESS) break; BYTE CharSet1 = DEFAULT_CHARSET, CharSet2 = DEFAULT_CHARSET; LPWSTR pch; pch = wcsrchr(szName, L','); if (pch) { *pch = 0; CharSet1 = (BYTE)_wtoi(pch + 1); } pch = wcsrchr(szValue, L','); if (pch) { *pch = 0; CharSet2 = (BYTE)_wtoi(pch + 1); } ITEM Item(szName, szValue, CharSet1, CharSet2); trim(Item.m_Name); trim(Item.m_Substitute); Items.push_back(Item); } RegCloseKey(hKey); g_Items = Items; LV_AddItems(g_hListView); DoSort(0, TRUE); g_bModified = FALSE; g_bNeedsReboot = FALSE; return !g_Items.empty(); }
void DoSort(INT iColumn, BOOL bAscendant = TRUE) { LV_COLUMN Column; ZeroMemory(&Column, sizeof(Column)); Column.mask = LVCF_IMAGE | LVCF_SUBITEM; Column.iImage = 2; Column.iSubItem = 0; ListView_SetColumn(g_hListView, 0, &Column); Column.iSubItem = 1; ListView_SetColumn(g_hListView, 1, &Column); switch (iColumn) { case 0: Column.iSubItem = 0; if (bAscendant) { std::sort(g_Items.begin(), g_Items.end(), ItemCompareByNameAscend); Column.iImage = 0; ListView_SetColumn(g_hListView, 0, &Column); } else { std::sort(g_Items.begin(), g_Items.end(), ItemCompareByNameDescend); Column.iImage = 1; ListView_SetColumn(g_hListView, 0, &Column); } break; case 1: Column.iSubItem = 1; if (bAscendant) { std::sort(g_Items.begin(), g_Items.end(), ItemCompareBySubAscend); Column.iImage = 0; ListView_SetColumn(g_hListView, 1, &Column); } else { std::sort(g_Items.begin(), g_Items.end(), ItemCompareBySubDescend); Column.iImage = 1; ListView_SetColumn(g_hListView, 1, &Column); } break; } g_iSortColumn = iColumn; g_bSortAscendant = bAscendant; InvalidateRect(g_hListView, NULL, TRUE); }
ItemUpdate_TC::ItemUpdate_TC(int16_t px, int16_t py, int16_t pz, ITEMVECTOR &items) : BasicServerCommand(SC_ITEMUPDATE_TC) { addShortIntToBuffer(px); addShortIntToBuffer(py); addShortIntToBuffer(pz); int16_t size = static_cast<unsigned char>(items.size()); if (size > 255) { size = 255; } addUnsignedCharToBuffer(static_cast<uint8_t>(size)); for (auto it = items.begin(); it != items.end(); ++it) { //we added 255 items if (size <= 0) { break; } addShortIntToBuffer(it->getId()); addShortIntToBuffer(it->getNumber()); size--; } }
BOOL MainWnd_OnUpdateRegistry(HWND hwnd) { // open the key HKEY hKey = NULL; RegOpenKeyExW(HKEY_LOCAL_MACHINE, g_pszKey, 0, KEY_ALL_ACCESS, &hKey); if (hKey == NULL) return FALSE; // clear all values WCHAR szName[MAX_STRING], szValue[MAX_STRING]; DWORD cbName, cbValue; for (;;) { cbName = sizeof(szName); cbValue = sizeof(szValue); LONG Error = RegEnumValueW(hKey, 0, szName, &cbName, NULL, NULL, (LPBYTE)szValue, &cbValue); if (Error != ERROR_SUCCESS) break; RegDeleteValueW(hKey, szName); } // set values size_t Count = g_Items.size(); for (size_t i = 0; i < Count; ++i) { DWORD cbData = (g_Items[i].m_Substitute.size() + 1) * sizeof(WCHAR); RegSetValueExW(hKey, g_Items[i].m_Name.c_str(), 0, REG_SZ, (LPBYTE)g_Items[i].m_Substitute.c_str(), cbData); } // close now RegCloseKey(hKey); g_bModified = FALSE; g_bNeedsReboot = TRUE; return TRUE; }
void LV_AddItems(HWND hwnd) { ListView_DeleteAllItems(hwnd); LV_ITEM Item; ZeroMemory(&Item, sizeof(Item)); Item.mask = LVIF_PARAM; const INT Count = INT(g_Items.size()); for (INT i = 0; i < Count; ++i) { Item.iItem = i; Item.iSubItem = 0; Item.lParam = i; ListView_InsertItem(hwnd, &Item); Item.iItem = i; Item.iSubItem = 1; Item.lParam = i; ListView_InsertItem(hwnd, &Item); } }
BOOL DoParseFile(LPVOID pvContents, DWORD dwSize) { ITEMVECTOR Items; LPWSTR pch, pchSep, pchStart = (LPWSTR)pvContents; pchStart[dwSize / sizeof(WCHAR)] = UNICODE_NULL; // check header const DWORD cbHeader = lstrlenW(g_pszFileHeader) * sizeof(WCHAR); if (memcmp(pchStart, g_pszFileHeader, cbHeader) != 0) return FALSE; pchStart += cbHeader / sizeof(WCHAR); // find the key WCHAR szKey[MAX_STRING]; wsprintfW(szKey, L"[HKEY_LOCAL_MACHINE\\%s]", g_pszKey); pch = wcsstr(pchStart, szKey); if (pch == NULL) return FALSE; pchStart = pch + lstrlenW(szKey); for (;;) { pchStart = SkipSpace(pchStart); if (*pchStart == UNICODE_NULL || *pchStart == L'[') break; pch = wcschr(pchStart, L'\n'); if (pch) *pch = UNICODE_NULL; pchSep = SkipQuoted(pchStart); if (*pchSep == L'=') { *pchSep = UNICODE_NULL; STRING key = pchStart; trim(key); key = Unquote(key); STRING value = pchSep + 1; trim(value); value = Unquote(value); BYTE CharSet1 = DEFAULT_CHARSET, CharSet2 = DEFAULT_CHARSET; size_t pos; pos = key.find(L','); if (pos != STRING::npos) { CharSet1 = (BYTE)_wtoi(&key[pos + 1]); key.resize(pos); trim(key); } pos = value.find(L','); if (pos != STRING::npos) { CharSet2 = (BYTE)_wtoi(&value[pos + 1]); value.resize(pos); trim(value); } ITEM Item(key, value, CharSet1, CharSet2); Items.push_back(Item); } if (pch == NULL) break; pchStart = pch + 1; } g_Items = Items; g_bModified = TRUE; LV_AddItems(g_hListView); return TRUE; }
void AddDlg_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { WCHAR szKey[MAX_STRING], szValue[MAX_STRING], sz[MAX_STRING]; INT i, iCharSet1, iCharSet2; BYTE CharSet1, CharSet2; STRING key, value; switch (id) { case IDOK: GetDlgItemTextW(hwnd, cmb1, szKey, _countof(szKey)); key = szKey; trim(key); LoadStringW(g_hInstance, IDS_ENTERNAME, sz, _countof(sz)); if (key.empty() || key == sz) { SendDlgItemMessageW(hwnd, cmb1, CB_SETEDITSEL, 0, MAKELPARAM(0, -1)); SetFocus(GetDlgItem(hwnd, cmb1)); LoadStringW(g_hInstance, IDS_ENTERNAME2, sz, _countof(sz)); MessageBoxW(hwnd, sz, NULL, MB_ICONERROR); return; } GetDlgItemTextW(hwnd, cmb2, szValue, _countof(szValue)); value = szValue; trim(value); if (value.empty()) { SendDlgItemMessageW(hwnd, cmb2, CB_SETEDITSEL, 0, MAKELPARAM(0, -1)); SetFocus(GetDlgItem(hwnd, cmb2)); LoadStringW(g_hInstance, IDS_ENTERNAME2, sz, _countof(sz)); MessageBoxW(hwnd, sz, NULL, MB_ICONERROR); return; } iCharSet1 = SendDlgItemMessageW(hwnd, cmb3, CB_GETCURSEL, 0, 0); if (iCharSet1 == CB_ERR) iCharSet1 = 0; iCharSet2 = SendDlgItemMessageW(hwnd, cmb4, CB_GETCURSEL, 0, 0); if (iCharSet2 == CB_ERR) iCharSet2 = 0; CharSet1 = g_CharSetList[iCharSet1].CharSet; CharSet2 = g_CharSetList[iCharSet2].CharSet; for (i = 0; i < (INT)g_Items.size(); ++i) { if (g_Items[i].m_Name == key && g_Items[i].m_CharSet1 == CharSet1) { WCHAR sz[MAX_STRING]; SendDlgItemMessageW(hwnd, cmb1, CB_SETEDITSEL, 0, MAKELPARAM(0, -1)); SetFocus(GetDlgItem(hwnd, cmb1)); LoadStringW(g_hInstance, IDS_ALREADYEXISTS, sz, _countof(sz)); MessageBoxW(hwnd, sz, NULL, MB_ICONERROR); return; } } { ITEM Item(key, value, CharSet1, CharSet2); g_Items.push_back(Item); g_bModified = TRUE; i = (INT)g_Items.size(); LV_ITEM LvItem; ZeroMemory(&LvItem, sizeof(LvItem)); LvItem.mask = LVIF_PARAM; LvItem.iItem = i; LvItem.lParam = i; LvItem.iSubItem = 0; ListView_InsertItem(g_hListView, &LvItem); LvItem.iSubItem = 1; ListView_InsertItem(g_hListView, &LvItem); } g_bModified = TRUE; EndDialog(hwnd, IDOK); break; case IDCANCEL: EndDialog(hwnd, IDCANCEL); break; } }
BOOL DoExport(HWND hwnd, LPCWSTR pszFile) { HANDLE hFile = CreateFileW(pszFile, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_WRITE_THROUGH, NULL); if (hFile == INVALID_HANDLE_VALUE) return FALSE; BOOL bSuccess; DWORD dwSize, cbWritten; WCHAR szCharSet1[MAX_STRING], szCharSet2[MAX_STRING]; WCHAR szLine[MAX_STRING * 2 + 4]; /* write header */ dwSize = lstrlenW(g_pszFileHeader) * sizeof(WCHAR); bSuccess = WriteFile(hFile, "\xFF\xFE", 2, &cbWritten, NULL) && WriteFile(hFile, g_pszFileHeader, dwSize, &cbWritten, NULL); if (bSuccess) { wsprintfW(szLine, L"\r\n\r\n[HKEY_LOCAL_MACHINE\\%s]\r\n", g_pszKey); dwSize = lstrlenW(szLine) * sizeof(WCHAR); bSuccess = WriteFile(hFile, szLine, dwSize, &cbWritten, NULL); } if (bSuccess) { size_t i, Count = g_Items.size(); for (i = 0; i < Count; ++i) { if (g_Items[i].m_CharSet1 != DEFAULT_CHARSET) wsprintfW(szCharSet1, L",%u", g_Items[i].m_CharSet1); else szCharSet1[0] = UNICODE_NULL; if (g_Items[i].m_CharSet2 != DEFAULT_CHARSET) wsprintfW(szCharSet2, L",%u", g_Items[i].m_CharSet2); else szCharSet2[0] = UNICODE_NULL; STRING Name = Escape(g_Items[i].m_Name); STRING Substitute = Escape(g_Items[i].m_Substitute); wsprintfW(szLine, L"\"%s%s\"=\"%s%s\"\r\n", Name.c_str(), szCharSet1, Substitute.c_str(), szCharSet2); dwSize = lstrlenW(szLine) * sizeof(WCHAR); if (!WriteFile(hFile, szLine, dwSize, &cbWritten, NULL)) { bSuccess = FALSE; break; } } WriteFile(hFile, L"\r\n", 2 * sizeof(WCHAR), &cbWritten, NULL); } CloseHandle(hFile); if (!bSuccess) { DeleteFileW(pszFile); } return bSuccess; }