You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
267 lines
5.8 KiB
267 lines
5.8 KiB
// ref: 0x10005765 |
|
void __fastcall DiabEdit_DoPaintBMP(HWND hWnd) |
|
{ |
|
struct tagPAINTSTRUCT Paint; // [esp+4h] [ebp-40h] |
|
|
|
BeginPaint(hWnd, &Paint); |
|
SDlgDrawBitmap(hWnd, 1, 0, 0, 0, 0, 0); |
|
EndPaint(hWnd, &Paint); |
|
} |
|
|
|
// ref: 0x1000579B |
|
void __cdecl DiabEdit_cpp_init() |
|
{ |
|
DiabEdit_cpp_float = DiabEdit_cpp_float_value; |
|
} |
|
// 1001F40C: using guessed type int DiabEdit_cpp_float_value; |
|
// 1002970C: using guessed type int DiabEdit_cpp_float; |
|
|
|
// ref: 0x100057A6 |
|
void __cdecl DiabEdit_SetupWindow() |
|
{ |
|
WNDCLASSA WndClass; // [esp+0h] [ebp-28h] |
|
|
|
memset(&WndClass, 0, 0x28u); |
|
WndClass.style = 64; |
|
WndClass.lpfnWndProc = DiabEdit_WndProc; |
|
WndClass.hInstance = GetModuleHandleA(0); |
|
WndClass.lpszClassName = "DIABLOEDIT"; |
|
RegisterClassA(&WndClass); |
|
} |
|
|
|
// ref: 0x100057E8 |
|
LRESULT __stdcall DiabEdit_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) |
|
{ |
|
if ( Msg <= 0x113 ) |
|
{ |
|
if ( Msg == 275 ) |
|
{ |
|
DiabEdit_GetCursorProp(hWnd); |
|
return 0; |
|
} |
|
if ( Msg == 1 ) |
|
{ |
|
DiabEdit_SetRestrictTimer(hWnd); |
|
} |
|
else if ( Msg == 2 ) |
|
{ |
|
DiabEdit_RemoveAllProps(hWnd); |
|
} |
|
else |
|
{ |
|
if ( Msg != 7 ) |
|
{ |
|
if ( Msg == 15 ) |
|
{ |
|
DiabEdit_DoPaintBMP(hWnd); |
|
} |
|
else |
|
{ |
|
if ( Msg == 135 ) |
|
return 129; |
|
if ( Msg != 256 ) |
|
{ |
|
if ( Msg == 258 ) |
|
DiabEdit_RestrictAndLimit(hWnd, wParam, lParam); |
|
return DefWindowProcA(hWnd, Msg, wParam, lParam); |
|
} |
|
DiabEdit_SetTextAndProp(hWnd, wParam, lParam); |
|
} |
|
return 0; |
|
} |
|
DiabEdit_SendWndCommand(hWnd, 1u); |
|
} |
|
return DefWindowProcA(hWnd, Msg, wParam, lParam); |
|
} |
|
switch ( Msg ) |
|
{ |
|
case 0x201u: |
|
SetFocus(hWnd); |
|
return DefWindowProcA(hWnd, Msg, wParam, lParam); |
|
case 0x400u: |
|
SetWindowTextA(hWnd, &nullcharacter); |
|
DiabEdit_SendWndCommand(hWnd, 3u); |
|
return 0; |
|
case 0x401u: |
|
SetPropA(hWnd, "LIMIT", (HANDLE)wParam); |
|
return 0; |
|
case 0x402u: |
|
return (LRESULT)GetPropA(hWnd, "LIMIT"); |
|
} |
|
if ( Msg != 1027 ) |
|
{ |
|
if ( Msg == 1028 ) |
|
{ |
|
DiabEdit_SetRestrictString(hWnd, lParam); |
|
return 0; |
|
} |
|
return DefWindowProcA(hWnd, Msg, wParam, lParam); |
|
} |
|
return (LRESULT)GetPropA(hWnd, "CURSOR"); |
|
} |
|
|
|
// ref: 0x1000591C |
|
void __fastcall DiabEdit_SendWndCommand(HWND hWnd, WORD a2) |
|
{ |
|
int v4; // ST08_4 |
|
HWND v5; // eax |
|
|
|
v4 = (a2 << 16) | (unsigned short)GetWindowLongA(hWnd, -12); |
|
v5 = GetParent(hWnd); |
|
SendMessageA(v5, 0x111u, v4, (LPARAM)hWnd); |
|
} |
|
|
|
// ref: 0x1000594E |
|
void __fastcall DiabEdit_GetCursorProp(HWND hWnd) |
|
{ |
|
size_t v2; // eax |
|
char *v3; // esi |
|
char String[256]; // [esp+Ch] [ebp-100h] |
|
|
|
String[0] = nullcharacter; |
|
memset(&String[1], 0, 0xFCu); |
|
*(_WORD *)&String[253] = 0; |
|
String[255] = 0; |
|
if ( GetPropA(hWnd, "CURSOR") ) |
|
{ |
|
SetPropA(hWnd, "CURSOR", 0); |
|
DiabEdit_SendWndCommand(hWnd, 3u); |
|
} |
|
else |
|
{ |
|
SetPropA(hWnd, "CURSOR", (void *)HANDLE_FLAG_INHERIT); |
|
GetWindowTextA(hWnd, String, 255); |
|
String[254] = 0; |
|
v2 = strlen(String); |
|
String[v2 + 1] = 0; |
|
v3 = &String[v2]; |
|
String[v2] = 124; |
|
SetWindowTextA(hWnd, String); |
|
DiabEdit_SendWndCommand(hWnd, 3u); |
|
*v3 = 0; |
|
SetWindowTextA(hWnd, String); |
|
} |
|
} |
|
|
|
// ref: 0x10005A0A |
|
void __fastcall DiabEdit_RestrictAndLimit(HWND hWnd, WPARAM wParam, LPARAM lParam) |
|
{ |
|
unsigned char v3; // bl |
|
char *v4; // eax |
|
char v5; // cl |
|
signed int v6; // eax |
|
signed int v7; // esi |
|
//char v8; // [esp+7h] [ebp-105h] |
|
char String[256]; // [esp+8h] [ebp-104h] |
|
|
|
String[0] = nullcharacter; |
|
v3 = wParam; |
|
memset(&String[1], 0, 0xFCu); |
|
*(_WORD *)&String[253] = 0; |
|
String[255] = 0; |
|
if ( (_BYTE)wParam == 8 ) |
|
goto LABEL_9; |
|
if ( (unsigned char)wParam < 0x20u || (unsigned char)wParam > 0x7Eu && (unsigned char)wParam < 0xC0u ) |
|
return; |
|
v4 = (char *)GetPropA(hWnd, "RESTRICTED"); |
|
if ( !v4 || (v5 = *v4) == 0 ) |
|
{ |
|
LABEL_9: |
|
GetWindowTextA(hWnd, String, 255); |
|
String[254] = 0; |
|
v6 = strlen(String); |
|
v7 = v6; |
|
if ( v3 == 8 ) |
|
{ |
|
if ( v6 ) |
|
{ |
|
String[v6-1] = 0; // *(&v8 + v6) = 0; |
|
goto LABEL_14; |
|
} |
|
} |
|
else if ( v6 < (signed int)GetPropA(hWnd, "LIMIT") ) |
|
{ |
|
String[v7] = v3; |
|
String[v7 + 1] = 0; |
|
LABEL_14: |
|
SetWindowTextA(hWnd, String); |
|
goto LABEL_15; |
|
} |
|
LABEL_15: |
|
DiabEdit_GetCursorProp(hWnd); |
|
return; |
|
} |
|
while ( v3 != v5 ) |
|
{ |
|
v5 = *++v4; |
|
if ( !*v4 ) |
|
goto LABEL_9; |
|
} |
|
} |
|
|
|
// ref: 0x10005AF4 |
|
void __fastcall DiabEdit_SetTextAndProp(HWND hWnd, WPARAM wParam, LPARAM lParam) |
|
{ |
|
WPARAM v4; // ebx |
|
size_t v5; // eax |
|
//char v6; // [esp+Bh] [ebp-101h] |
|
char String[256]; // [esp+Ch] [ebp-100h] |
|
|
|
String[0] = nullcharacter; |
|
memset(&String[1], 0, 0xFCu); |
|
*(_WORD *)&String[253] = 0; |
|
String[255] = 0; |
|
v4 = wParam; |
|
GetWindowTextA(hWnd, String, 255); |
|
String[254] = 0; |
|
v5 = strlen(String); |
|
if ( v4 == 37 ) |
|
{ |
|
if ( v5 ) |
|
{ |
|
String[v5-1] = 0; // *(&v6 + v5) = 0; |
|
SetWindowTextA(hWnd, String); |
|
} |
|
DiabEdit_GetCursorProp(hWnd); |
|
} |
|
} |
|
|
|
// ref: 0x10005B70 |
|
void __fastcall DiabEdit_SetRestrictString(HWND hWnd, LPARAM lParam) |
|
{ |
|
const char *v2; // edi |
|
char *v3; // eax MAPDST |
|
|
|
v2 = (const char *)lParam; |
|
v3 = (char *)GetPropA(hWnd, "RESTRICTED"); |
|
if ( v3 ) |
|
{ |
|
strncpy(v3, v2, 0xFFu); |
|
v3[255] = 0; |
|
} |
|
} |
|
|
|
// ref: 0x10005B9F |
|
void __fastcall DiabEdit_SetRestrictTimer(HWND hWnd) |
|
{ |
|
unsigned char *v2; // eax |
|
|
|
SDlgSetTimer((int)hWnd, 1, 500, 0); |
|
SetPropA(hWnd, "CURSOR", 0); |
|
v2 = (unsigned char *)SMemAlloc(0x100u, "C:\\Src\\Diablo\\DiabloUI\\DiabEdit.cpp", 185, 0); |
|
*v2 = 0; |
|
SetPropA(hWnd, "RESTRICTED", v2); |
|
} |
|
|
|
// ref: 0x10005BE7 |
|
void __fastcall DiabEdit_RemoveAllProps(HWND hWnd) |
|
{ |
|
HANDLE v2; // eax |
|
|
|
SDlgKillTimer((int)hWnd, 1); |
|
RemovePropA(hWnd, "LIMIT"); |
|
RemovePropA(hWnd, "CURSOR"); |
|
v2 = RemovePropA(hWnd, "RESTRICTED"); |
|
if ( v2 ) |
|
SMemFree(v2, "C:\\Src\\Diablo\\DiabloUI\\DiabEdit.cpp", 200, 0); |
|
}
|
|
|