#include "stdafx.h" #include "TitanScriptGui.h" #include "..\SDK\CPP\TitanEngine.h" #include "TitanScript.h" #define MAX_LOG_LINE_LENGTH 100 #define MAX_LOG_LINE_COUNT 100 //variables static HINSTANCE hInst; static HWND hLogBox; static HWND hRunBtn; static bool bRunning; static TCHAR FileNameTarget[MAX_PATH] = {}; static TCHAR FileNameScript[MAX_PATH] = {}; static TCHAR FileNameIni[MAX_PATH] = {}; //functions static INT_PTR CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); static bool GetFileDialog(TCHAR[MAX_PATH]); static void AddLogMessage(const char* szLogMessage, eLogType Type); static void SettingSet(const TCHAR* name, const TCHAR* value); static void SettingGet(const TCHAR* name, TCHAR* value, int value_size); static bool FileExists(LPCTSTR szPath); static void CreateDummyUnicodeFile(const TCHAR* szFileName); static DWORD WINAPI TitanScriptExecThread(LPVOID lpParam); //TitanScript functions static tScripterLoadFileA load_file = NULL; static tScripterExecuteWithTitanMistA exec = NULL; static tScripterSetLogCallback set_log_callback = NULL; int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); hInst = hInstance; DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAINWINDOW), NULL, &WndProc); ExitProcess(NULL); } INT_PTR CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: { //set icon HICON hIconLarge = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 32, 32, LR_DEFAULTSIZE); SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIconLarge); HICON hIconSmall = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 16, 16, LR_DEFAULTSIZE); SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIconSmall); //initialize variables hLogBox = GetDlgItem(hWnd, IDC_LOG); hRunBtn = GetDlgItem(hWnd, IDC_RUN); int i = GetModuleFileName(hInst, FileNameIni, _countof(FileNameIni)); while(FileNameIni[i] != TCHAR('\\') && i) i--; if(i) { int len = lstrlen(FileNameIni); while(FileNameIni[i] != TCHAR('.') && i < len) i++; if(i+1 < len) FileNameIni[i] = TCHAR('\0'); } lstrcat(FileNameIni, _T(".ini")); CreateDummyUnicodeFile(FileNameIni); //restore last files SettingGet(_T("Target"), FileNameTarget, _countof(FileNameTarget)); if(lstrlen(FileNameTarget)) SetDlgItemText(hWnd, IDC_TARGETPATH, FileNameTarget); SettingGet(_T("Script"), FileNameScript, _countof(FileNameScript)); if(lstrlen(FileNameScript)) SetDlgItemText(hWnd, IDC_SCRIPTPATH, FileNameScript); //make sure TitanScript is available if ( !ExtensionManagerIsPluginLoaded( "TitanScript" ) || !ExtensionManagerIsPluginEnabled( "TitanScript" ) ) { AddLogMessage("TitanScript failed to load", TS_LOG_ERROR); #ifdef _WIN64 AddLogMessage("Ensure plugins\\x64\\TitanScript.dll exists !", TS_LOG_ERROR); #else AddLogMessage("Ensure plugins\\x86\\TitanScript.dll exists !", TS_LOG_ERROR); #endif //_WIN64 EnableWindow(GetDlgItem(hWnd, IDC_RUN ), FALSE); } else { load_file = GetTSFunctionPointer( LoadFileA ); exec = GetTSFunctionPointer( ExecuteWithTitanMistA ); set_log_callback = GetTSFunctionPointer( SetLogCallback ); set_log_callback(&AddLogMessage); } break; } case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_BROWSETARGET: { if(GetFileDialog(FileNameTarget)) { SetDlgItemText(hWnd, IDC_TARGETPATH, FileNameTarget); SettingSet(_T("Target"), FileNameTarget); } break; } case IDC_BROWSESCRIPT: { if(GetFileDialog(FileNameScript)) { SetDlgItemText(hWnd, IDC_SCRIPTPATH, FileNameScript); SettingSet(_T("Script"), FileNameScript); } break; } case IDC_RUN: { if(!bRunning) CreateThread(0, 0, TitanScriptExecThread, 0, 0, 0); else StopDebug(); break; } case IDC_COPY: { //get lines int cnt = SendMessage(hLogBox, LB_GETCOUNT, 0, 0); TCHAR buf[MAX_LOG_LINE_LENGTH] = {0}; TCHAR copy[MAX_LOG_LINE_COUNT*MAX_LOG_LINE_LENGTH] = {0}; for(int i=0; i