void OllyPython_RunScript(char *script) { char userscript[MAX_PATH]; char slashpath[MAX_PATH+1]; char statement[MAX_PATH+13]; int validfile; char *scriptpath; int i; userscript[0] = '\0'; if (script) { scriptpath = script; } else { scriptpath = userscript; validfile = Browsefilename("title", scriptpath, ".py", 1); if (!validfile) { return; } } for (i=0; scriptpath[i]; i++) { if (scriptpath[i] == '\\') { slashpath[i] = '/'; } else { slashpath[i] = scriptpath[i]; } } slashpath[i] = '\0'; snprintf(statement, sizeof(statement), "runscript(\"%s\")", slashpath); PyRun_SimpleString(statement); if (PyErr_Occurred()) { PyErr_Print(); } }
ulong CCmdLog::store(void) { wchar path[MAXPATH] = {0}; int irslt = 0; ::wcsncpy_s(path, _countof(path), text("logger.log"), 10); if ( (irslt = Browsefilename( text("Command Bar Logger File"), path, nullptr, nullptr, text("*.log"), m_Table.hparent, BRO_SAVE )) == 0 ) return 0; HGLOBAL hMem = CopyTab(); if (hMem == nullptr) return 0; wchar *buffer = reinterpret_cast<wchar*>(GlobalLock(hMem)); if (buffer == nullptr) return 0; const std::locale utf8 = std::locale( std::locale(), new std::codecvt_utf8<wchar>() ); std::wfstream file(path, std::fstream::trunc|std::fstream::out); file.imbue(utf8); file << buffer << std::endl; file.close(); GlobalUnlock(hMem); GlobalFree(hMem); return 0; }
LRESULT CALLBACK configwnd_msgproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { HWND wnd; RECT rect; FILE* file; TCHAR buffer[TEXTLEN], errbuf[ERRBUFLEN]; mask_t* msk; mask_t msk_tmp; int counter, index, height, count, result; switch (msg) { case WM_ACTIVATE: SetFocus(g_hwndMaskList); break; case WM_COMMAND: switch (LOWORD(wparam)) { case ID_COMMENTS: if (HIWORD(wparam) == 1) { CheckDlgButton(hwnd, ID_COMMENTS, IsDlgButtonChecked(hwnd, ID_COMMENTS) ^ BST_CHECKED); } break; case ID_LABELS: if (HIWORD(wparam) == 1) { CheckDlgButton(hwnd, ID_LABELS, IsDlgButtonChecked(hwnd, ID_LABELS) ^ BST_CHECKED); } break; case ID_USEMASKS: if (HIWORD(wparam) == 1) { CheckDlgButton(hwnd, ID_USEMASKS, IsDlgButtonChecked(hwnd, ID_USEMASKS) ^ BST_CHECKED); } break; case ID_DEMANGLE: if (HIWORD(wparam) == 1) { CheckDlgButton(hwnd, ID_DEMANGLE, IsDlgButtonChecked(hwnd, ID_DEMANGLE) ^ BST_CHECKED); } break; case ID_SKIP: CheckDlgButton(hwnd, ID_SKIP, BST_CHECKED); CheckDlgButton(hwnd, ID_OVERWRITE, BST_UNCHECKED); break; case ID_OVERWRITE: CheckDlgButton(hwnd, ID_SKIP, BST_UNCHECKED); CheckDlgButton(hwnd, ID_OVERWRITE, BST_CHECKED); break; case ID_MODULE: CheckDlgButton(hwnd, ID_MODULE, BST_CHECKED); CheckDlgButton(hwnd, ID_DEBUGGEE, BST_UNCHECKED); break; case ID_DEBUGGEE: CheckDlgButton(hwnd, ID_DEBUGGEE, BST_CHECKED); CheckDlgButton(hwnd, ID_MODULE, BST_UNCHECKED); break; case ID_ASKTOIMPORT: CheckDlgButton(hwnd, ID_ASKTOIMPORT, BST_CHECKED); CheckDlgButton(hwnd, ID_IMPORTALWAYS, BST_UNCHECKED); CheckDlgButton(hwnd, ID_DONOTHING, BST_UNCHECKED); break; case ID_IMPORTALWAYS: CheckDlgButton(hwnd, ID_ASKTOIMPORT, BST_UNCHECKED); CheckDlgButton(hwnd, ID_IMPORTALWAYS, BST_CHECKED); CheckDlgButton(hwnd, ID_DONOTHING, BST_UNCHECKED); break; case ID_DONOTHING: CheckDlgButton(hwnd, ID_ASKTOIMPORT, BST_UNCHECKED); CheckDlgButton(hwnd, ID_IMPORTALWAYS, BST_UNCHECKED); CheckDlgButton(hwnd, ID_DONOTHING, BST_CHECKED); break; case ID_CANCEL: SendMessage(hwnd, WM_CLOSE, 0, 0); break; case ID_APPLY: if (IsDlgButtonChecked(hwnd, ID_COMMENTS) == BST_CHECKED) { g_Config->comments = TRUE; } else { g_Config->comments = FALSE; } if (IsDlgButtonChecked(hwnd, ID_LABELS) == BST_CHECKED) { g_Config->labels = TRUE; } else { g_Config->labels = FALSE; } if (IsDlgButtonChecked(hwnd, ID_SKIP) == BST_CHECKED) { g_Config->collisionchecks = TRUE; } else { g_Config->collisionchecks = FALSE; } if (IsDlgButtonChecked(hwnd, ID_DEBUGGEE) == BST_CHECKED) { g_Config->applytodebuggee = TRUE; } else { g_Config->applytodebuggee = FALSE; } if (IsDlgButtonChecked(hwnd, ID_ASKTOIMPORT) == BST_CHECKED) { g_Config->aimport = AUTOIMPORT_ASK; } if (IsDlgButtonChecked(hwnd, ID_IMPORTALWAYS) == BST_CHECKED) { g_Config->aimport = AUTOIMPORT_ALWAYS; } if (IsDlgButtonChecked(hwnd, ID_DONOTHING) == BST_CHECKED) { g_Config->aimport = AUTOIMPORT_DISABLED; } if (IsDlgButtonChecked(hwnd, ID_USEMASKS) == BST_CHECKED) { g_Config->usemasks = TRUE; } else { g_Config->usemasks = FALSE; } if (IsDlgButtonChecked(hwnd, ID_DEMANGLE) == BST_CHECKED) { g_Config->demangle = TRUE; } else { g_Config->demangle = FALSE; } list_freemasks(g_Config->masks); g_Config->masks = list_create(); count = SendMessage(g_hwndMaskList, LB_GETCOUNT, 0, 0); for (counter = 0; counter < count; counter++) { SendMessage(g_hwndMaskList, LB_GETTEXT, counter, (LPARAM)buffer); list_addmask(g_Config->masks, buffer); } config_create(config_locate(buffer), g_Config); SendMessage(hwnd, WM_CLOSE, 0, 0); break; case ID_DELETE: index = SendMessage(g_hwndMaskList, LB_GETCURSEL, 0, 0); SendMessage(g_hwndMaskList, LB_DELETESTRING, index, 0); if (SendMessage(g_hwndMaskList, LB_SETCURSEL, index, 0) == LB_ERR) { SendMessage(g_hwndMaskList, LB_SETCURSEL, index - 1, 0); } break; case ID_INCREASE: index = SendMessage(g_hwndMaskList, LB_GETCURSEL, 0, 0); if (index > 0) { SendMessage(g_hwndMaskList, LB_GETTEXT, index, (LPARAM)buffer); SendMessage(g_hwndMaskList, LB_INSERTSTRING, index - 1, (LPARAM)buffer); SendMessage(g_hwndMaskList, LB_DELETESTRING, index + 1, 0); SendMessage(g_hwndMaskList, LB_SETCURSEL, index - 1, 0); } break; case ID_MAXINCREASE: index = SendMessage(g_hwndMaskList, LB_GETCURSEL, 0, 0); if (index > 0) { SendMessage(g_hwndMaskList, LB_GETTEXT, index, (LPARAM)buffer); SendMessage(g_hwndMaskList, LB_INSERTSTRING, 0, (LPARAM)buffer); SendMessage(g_hwndMaskList, LB_DELETESTRING, index + 1, 0); SendMessage(g_hwndMaskList, LB_SETCURSEL, 0, 0); } break; case ID_DECREASE: index = SendMessage(g_hwndMaskList, LB_GETCURSEL, 0, 0); if (index != LB_ERR && index < SendMessage(g_hwndMaskList, LB_GETCOUNT, 0, 0) - 1) { SendMessage(g_hwndMaskList, LB_GETTEXT, index, (LPARAM)buffer); SendMessage(g_hwndMaskList, LB_INSERTSTRING, index + 2, (LPARAM)buffer); SendMessage(g_hwndMaskList, LB_DELETESTRING, index, 0); SendMessage(g_hwndMaskList, LB_SETCURSEL, index + 1, 0); } break; case ID_MAXDECREASE: index = SendMessage(g_hwndMaskList, LB_GETCURSEL, 0, 0); count = SendMessage(g_hwndMaskList, LB_GETCOUNT, 0, 0); if (index != LB_ERR && index < count - 1) { SendMessage(g_hwndMaskList, LB_GETTEXT, index, (LPARAM)buffer); SendMessage(g_hwndMaskList, LB_SETCURSEL, SendMessage(g_hwndMaskList, LB_ADDSTRING, 0, (LPARAM)buffer), 0); SendMessage(g_hwndMaskList, LB_DELETESTRING, index, 0); } break; case ID_SAVE: count = SendMessage(g_hwndMaskList, LB_GETCOUNT, 0, 0); if (count > 0) { EnableWindow(hwnd, FALSE); buffer[0] = '\0'; if (Browsefilename("Save mask list to:", buffer, ".TXT|*.*", 0x80)) { file = fopen(buffer, "w"); if (file) { for (counter = 0; counter < count; counter++) { SendMessage(g_hwndMaskList, LB_GETTEXT, counter, (LPARAM)buffer); strcat(buffer, "\n"); fputs(buffer, file); } fclose(file); } else { MessageBox(hwnd, "Failed to open the file for writing", 0, MB_ICONERROR); } } EnableWindow(hwnd, TRUE); SetFocus(g_hwndMaskList); } break; case ID_LOAD: EnableWindow(hwnd, FALSE); buffer[0] = '\0'; if (Browsefilename("Load mask list from:", buffer, ".TXT|*.*", 0)) { file = fopen(buffer, "r"); if (file) { while (SendMessage(g_hwndMaskList, LB_DELETESTRING, 0, 0) != LB_ERR) {} while (fgets(buffer, TEXTLEN, file)) { strtok(buffer, "\n"); if (!mask_compile(&msk_tmp, buffer)) { SendMessage(g_hwndMaskList, LB_ADDSTRING, 0, (LPARAM)buffer); pcre_free(msk_tmp.regex); if (msk_tmp.extra) { pcre_free(msk_tmp.extra); } } } SendMessage(g_hwndMaskList, LB_SETCURSEL, 0, 0); fclose(file); } else { MessageBox(hwnd, "Failed to open the file", 0, MB_ICONERROR); } } EnableWindow(hwnd, TRUE); SetFocus(g_hwndMaskList); break; case ID_ADD: EnableWindow(hwnd, FALSE); buffer[0] = '\0'; result = TRUE; while (result) { result = Gettextxy("Add new mask:", buffer, 0, INPUTWND_TYPE, Plugingetvalue(VAL_WINDOWFONT), GetSystemMetrics(SM_CXSCREEN) / 2, GetSystemMetrics(SM_CYSCREEN) / 2); if (result > 0) { if (result = mask_compile(&msk_tmp, buffer)) { strcpy(errbuf, buffer); strcat(errbuf, "\n\n"); mask_error(&msk_tmp, strrchr(errbuf, '\n') + 1); MessageBox(hwnd, errbuf, "Mask syntax error", MB_ICONERROR); } else { SendMessage(g_hwndMaskList, LB_SETCURSEL, SendMessage(g_hwndMaskList, LB_ADDSTRING, 0, (LPARAM)buffer), 0); pcre_free(msk_tmp.regex); if (msk_tmp.extra) { pcre_free(msk_tmp.extra); } } } else { break; } } EnableWindow(hwnd, TRUE); SetFocus(g_hwndMaskList); break; case ID_INSERT: EnableWindow(hwnd, FALSE); buffer[0] = '\0'; result = TRUE; while (result) { result = Gettextxy("Insert new mask:", buffer, 0, INPUTWND_TYPE, Plugingetvalue(VAL_WINDOWFONT), GetSystemMetrics(SM_CXSCREEN) / 2, GetSystemMetrics(SM_CYSCREEN) / 2); if (result > 0) { if (result = mask_compile(&msk_tmp, buffer)) { strcpy(errbuf, buffer); strcat(errbuf, "\n\n"); mask_error(&msk_tmp, strrchr(errbuf, '\n') + 1); MessageBox(hwnd, errbuf, "Mask syntax error", MB_ICONERROR); } else { SendMessage(g_hwndMaskList, LB_SETCURSEL, SendMessage(g_hwndMaskList, LB_INSERTSTRING, SendMessage(g_hwndMaskList, LB_GETCURSEL, 0, 0), (LPARAM)buffer), 0); pcre_free(msk_tmp.regex); if (msk_tmp.extra) { pcre_free(msk_tmp.extra); } } } else { break; } } EnableWindow(hwnd, TRUE); SetFocus(g_hwndMaskList); break; case ID_EDIT: index = SendMessage(g_hwndMaskList, LB_GETCURSEL, 0, 0); if (index != LB_ERR) { EnableWindow(hwnd, FALSE); SendMessage(g_hwndMaskList, LB_GETTEXT, index, (LPARAM)buffer); result = TRUE; while (result) { result = Gettextxy("Edit mask:", buffer, 0, INPUTWND_TYPE, Plugingetvalue(VAL_WINDOWFONT), GetSystemMetrics(SM_CXSCREEN) / 2, GetSystemMetrics(SM_CYSCREEN) / 2); if (result > 0) { if (result = mask_compile(&msk_tmp, buffer)) { strcpy(errbuf, buffer); strcat(errbuf, "\n\n"); mask_error(&msk_tmp, strrchr(errbuf, '\n') + 1); MessageBox(hwnd, errbuf, "Mask syntax error", MB_ICONERROR); } else { SendMessage(g_hwndMaskList, LB_DELETESTRING, index, 0); SendMessage(g_hwndMaskList, LB_SETCURSEL, SendMessage(g_hwndMaskList, LB_INSERTSTRING, (WPARAM)index, (LPARAM)buffer), 0); pcre_free(msk_tmp.regex); if (msk_tmp.extra) { pcre_free(msk_tmp.extra); } } } else { break; } } EnableWindow(hwnd, TRUE); SetFocus(g_hwndMaskList); } break; } break; case WM_CREATE: EnableWindow(g_hwndOlly, FALSE); GetClientRect(hwnd, &rect); height = rect.bottom; GetWindowRect(hwnd, &rect); height = rect.bottom - rect.top - height + OPTWND_WINDOW_HEIGHT; SetWindowPos(hwnd, NULL, 0, 0, rect.right - rect.left, height, SWP_NOMOVE | SWP_NOZORDER); wnd = CreateWindowEx(0, "Button", "Import objects:", 0x50020007, 4, 0, 128, 64, hwnd, (HMENU)ID_IMPORT, g_hInstance, NULL); SendMessage(wnd, WM_SETFONT, (WPARAM)g_hFont, TRUE); wnd = CreateWindowEx(0, "Button", "&Comments", 0x50010003, 12, 16, 112, 20, hwnd, (HMENU)ID_COMMENTS, g_hInstance, NULL); SendMessage(wnd, WM_SETFONT, (WPARAM)g_hFont, TRUE); wnd = CreateWindowEx(0, "Button", "&Labels", 0x50010003, 12, 36, 112, 20, hwnd, (HMENU)ID_LABELS, g_hInstance, NULL); SendMessage(wnd, WM_SETFONT, (WPARAM)g_hFont, TRUE); wnd = CreateWindowEx(0, "Button", "Collisions:", 0x50020007, 4, 68, 128, 64, hwnd, (HMENU)ID_COLLISIONS, g_hInstance, NULL); SendMessage(wnd, WM_SETFONT, (WPARAM)g_hFont, TRUE); wnd = CreateWindowEx(0, "Button", "&Skip if collision", 0x50010009, 12, 86, 116, 16, hwnd, (HMENU)ID_SKIP, g_hInstance, NULL); SendMessage(wnd, WM_SETFONT, (WPARAM)g_hFont, TRUE); wnd = CreateWindowEx(0, "Button", "&Overwrite", 0x50000009, 12, 106, 116, 16, hwnd, (HMENU)ID_OVERWRITE, g_hInstance, NULL); SendMessage(wnd, WM_SETFONT, (WPARAM)g_hFont, TRUE); wnd = CreateWindowEx(0, "Button", "Apply names to:", 0x50020007, 4, 136, 128, 64, hwnd, (HMENU)ID_APPLYTO, g_hInstance, NULL); SendMessage(wnd, WM_SETFONT, (WPARAM)g_hFont, TRUE); wnd = CreateWindowEx(0, "Button", "&Viewed module", 0x50010009, 12, 154, 116, 16, hwnd, (HMENU)ID_MODULE, g_hInstance, NULL); SendMessage(wnd, WM_SETFONT, (WPARAM)g_hFont, TRUE); wnd = CreateWindowEx(0, "Button", "&Debuggee", 0x50010009, 12, 174, 116, 16, hwnd, (HMENU)ID_DEBUGGEE, g_hInstance, NULL); SendMessage(wnd, WM_SETFONT, (WPARAM)g_hFont, TRUE); wnd = CreateWindowEx(0, "Button", "If map file found:", 0x50020007, 4, 204, 128, 80, hwnd, (HMENU)ID_AUTOIMPORT, g_hInstance, NULL); SendMessage(wnd, WM_SETFONT, (WPARAM)g_hFont, TRUE); wnd = CreateWindowEx(0, "Button", "&Ask to import", 0x50000009, 12, 222, 116, 16, hwnd, (HMENU)ID_ASKTOIMPORT, g_hInstance, NULL); SendMessage(wnd, WM_SETFONT, (WPARAM)g_hFont, TRUE); wnd = CreateWindowEx(0, "Button", "&Import always", 0x50000009, 12, 242, 116, 16, hwnd, (HMENU)ID_IMPORTALWAYS, g_hInstance, NULL); SendMessage(wnd, WM_SETFONT, (WPARAM)g_hFont, TRUE); wnd = CreateWindowEx(0, "Button", "Do ¬hing", 0x50000009, 12, 262, 116, 16, hwnd, (HMENU)ID_DONOTHING, g_hInstance, NULL); SendMessage(wnd, WM_SETFONT, (WPARAM)g_hFont, TRUE); wnd = CreateWindowEx(0, "Button", "Filter:", 0x50020007, 136, 0, 208, 284, hwnd, (HMENU)ID_FILTER, g_hInstance, NULL); SendMessage(wnd, WM_SETFONT, (WPARAM)g_hFont, TRUE); g_hwndMaskList = CreateWindowEx(0x200, "ListBox", "", WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL, 144, 16, 192, 230, hwnd, (HMENU)ID_MASKS, g_hInstance, NULL); SendMessage(g_hwndMaskList, WM_SETFONT, (WPARAM)g_hFont, TRUE); SetWindowLongPtr(g_hwndMaskList, GWLP_USERDATA, SetWindowLongPtr(g_hwndMaskList, GWLP_WNDPROC, (LONG)listbox_msgproc)); SetFocus(g_hwndMaskList); wnd = CreateWindowEx(0, "Button", "Use &masks", 0x50010003, 144, 242, 116, 16, hwnd, (HMENU)ID_USEMASKS, g_hInstance, NULL); SendMessage(wnd, WM_SETFONT, (WPARAM)g_hFont, TRUE); wnd = CreateWindowEx(0, "Button", "D&emangle names", 0x50010003, 144, 262, 116, 16, hwnd, (HMENU)ID_DEMANGLE, g_hInstance, NULL); SendMessage(wnd, WM_SETFONT, (WPARAM)g_hFont, TRUE); wnd = CreateWindowEx(0, "Button", "Apply", 0x50012F00, 204, 288, 68, 20, hwnd, (HMENU)ID_APPLY, g_hInstance, NULL); SendMessage(wnd, WM_SETFONT, (WPARAM)g_hFont, TRUE); wnd = CreateWindowEx(0, "Button", "Cancel", 0x50012F00, 276, 288, 68, 20, hwnd, (HMENU)ID_CANCEL, g_hInstance, NULL); SendMessage(wnd, WM_SETFONT, (WPARAM)g_hFont, TRUE); if (g_Config->comments) { CheckDlgButton(hwnd, ID_COMMENTS, BST_CHECKED); } else { CheckDlgButton(hwnd, ID_COMMENTS, BST_UNCHECKED); } if (g_Config->labels) { CheckDlgButton(hwnd, ID_LABELS, BST_CHECKED); } else { CheckDlgButton(hwnd, ID_LABELS, BST_UNCHECKED); } if (g_Config->collisionchecks) { CheckDlgButton(hwnd, ID_SKIP, BST_CHECKED); CheckDlgButton(hwnd, ID_OVERWRITE, BST_UNCHECKED); } else { CheckDlgButton(hwnd, ID_SKIP, BST_UNCHECKED); CheckDlgButton(hwnd, ID_OVERWRITE, BST_CHECKED); } if (g_Config->applytodebuggee) { CheckDlgButton(hwnd, ID_DEBUGGEE, BST_CHECKED); CheckDlgButton(hwnd, ID_MODULE, BST_UNCHECKED); } else { CheckDlgButton(hwnd, ID_DEBUGGEE, BST_UNCHECKED); CheckDlgButton(hwnd, ID_MODULE, BST_CHECKED); } if (g_Config->aimport == AUTOIMPORT_ASK) { CheckDlgButton(hwnd, ID_ASKTOIMPORT, BST_CHECKED); CheckDlgButton(hwnd, ID_IMPORTALWAYS, BST_UNCHECKED); CheckDlgButton(hwnd, ID_DONOTHING, BST_UNCHECKED); } else if (g_Config->aimport == AUTOIMPORT_ALWAYS) { CheckDlgButton(hwnd, ID_IMPORTALWAYS, BST_CHECKED); CheckDlgButton(hwnd, ID_ASKTOIMPORT, BST_UNCHECKED); CheckDlgButton(hwnd, ID_DONOTHING, BST_UNCHECKED); } else { CheckDlgButton(hwnd, ID_DONOTHING, BST_CHECKED); CheckDlgButton(hwnd, ID_ASKTOIMPORT, BST_UNCHECKED); CheckDlgButton(hwnd, ID_IMPORTALWAYS, BST_UNCHECKED); } if (g_Config->usemasks) { CheckDlgButton(hwnd, ID_USEMASKS, BST_CHECKED); } else { CheckDlgButton(hwnd, ID_USEMASKS, BST_UNCHECKED); } if (g_Config->demangle) { CheckDlgButton(hwnd, ID_DEMANGLE, BST_CHECKED); } else { CheckDlgButton(hwnd, ID_DEMANGLE, BST_UNCHECKED); } msk = (mask_t*)g_Config->masks->first; while (msk) { SendMessage(g_hwndMaskList, LB_ADDSTRING, 0, (LPARAM)msk->buffer); msk = msk->next; } SendMessage(g_hwndMaskList, LB_SETCURSEL, 0, 0); break; case WM_CLOSE: EnableWindow(g_hwndOlly, TRUE); SetFocus(g_hwndOlly); DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wparam, lparam); } return FALSE; }