mirror of
https://github.com/galaxyhaxz/devilution.git
synced 2026-05-03 14:38:50 +00:00
initial up
This commit is contained in:
404
2020_03_31/DiabloUI/doom.cpp
Normal file
404
2020_03_31/DiabloUI/doom.cpp
Normal file
@@ -0,0 +1,404 @@
|
||||
// ref: 0x10006581
|
||||
void __cdecl Doom_cpp_init()
|
||||
{
|
||||
doom_cpp_float = doom_cpp_float_value;
|
||||
}
|
||||
// 1001F41C: using guessed type int doom_cpp_float_value;
|
||||
// 10029854: using guessed type int doom_cpp_float;
|
||||
|
||||
// ref: 0x1000658C
|
||||
void __fastcall Doom_ParseWndProcs(HWND hWnd, int *msgtbl, int a3, int a4)
|
||||
{
|
||||
HWND v6; // eax
|
||||
|
||||
while ( *msgtbl )
|
||||
{
|
||||
v6 = GetDlgItem(hWnd, *msgtbl);
|
||||
Doom_GetSetWndText(hWnd, (int)v6, a3, a4);
|
||||
++msgtbl;
|
||||
}
|
||||
}
|
||||
|
||||
// ref: 0x100065BB
|
||||
void __fastcall Doom_GetSetWndText(HWND hWnd, int msg, int nFont, int a4)
|
||||
{
|
||||
HWND v4; // esi
|
||||
HWND v5; // edi
|
||||
int v6; // eax
|
||||
char String[256]; // [esp+8h] [ebp-100h]
|
||||
|
||||
v4 = (HWND)msg;
|
||||
v5 = hWnd;
|
||||
if ( msg )
|
||||
{
|
||||
Doom_AllocAndSetBMP(hWnd, msg, 1521);
|
||||
Doom_GetWindowROP3(v5, v4);
|
||||
artfont_SetArtFont(nFont);
|
||||
Doom_PrintStrWithSpin(v4, a4);
|
||||
GetWindowTextA(v4, String, 255);
|
||||
if ( strlen(String) )
|
||||
{
|
||||
v6 = GetWindowLongA(v4, -21);
|
||||
local_SetWndLongStr(v6, String);
|
||||
SetWindowTextA(v4, &nullcharacter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ref: 0x1000663F
|
||||
void __fastcall Doom_PrintStrWithSpin(HWND hWnd, BOOL a2)
|
||||
{
|
||||
_DWORD *v3; // eax
|
||||
_DWORD *v4; // esi
|
||||
char *v5; // ebx
|
||||
int v6; // edi
|
||||
size_t v7; // eax
|
||||
char *i; // eax
|
||||
int v9; // kr04_4
|
||||
int v10; // eax
|
||||
char String[256]; // [esp+8h] [ebp-10Ch]
|
||||
char *v12; // [esp+108h] [ebp-Ch]
|
||||
int v14; // [esp+110h] [ebp-4h]
|
||||
|
||||
v3 = (_DWORD *)GetWindowLongA(hWnd, -21);
|
||||
v4 = v3;
|
||||
if ( v3 && *v3 )
|
||||
{
|
||||
GetWindowTextA(hWnd, String, 255);
|
||||
v5 = String;
|
||||
if ( !strlen(String) )
|
||||
v5 = (char *)(v4 + 4);
|
||||
v14 = artfont_GetFontWidth(v5);
|
||||
if ( a2 )
|
||||
{
|
||||
v6 = v4[1] - 2 * Focus_GetSpinWidthOrZero();
|
||||
v7 = strlen(v5);
|
||||
if ( v14 > v6 )
|
||||
{
|
||||
for ( i = &v5[v7]; ; i = v12 )
|
||||
{
|
||||
v12 = i - 1;
|
||||
*v12 = 0;
|
||||
v14 = artfont_GetFontWidth(v5);
|
||||
if ( v14 <= v6 )
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
v9 = v4[1] - v14 - 1;
|
||||
v10 = artfont_GetFontMaxHeight();
|
||||
artfont_PrintFontStr(v5, (DWORD **)v4, v9 / 2, (v4[2] - v10) / 2);
|
||||
InvalidateRect(hWnd, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// ref: 0x10006719
|
||||
void __fastcall Doom_AllocAndSetBMP(HWND hWnd, int a2, int bmp_flags)
|
||||
{
|
||||
DWORD *v4; // esi
|
||||
struct tagRECT Rect; // [esp+8h] [ebp-10h]
|
||||
|
||||
GetClientRect((HWND)a2, &Rect);
|
||||
v4 = local_AllocWndLongData();
|
||||
v4[1] = Rect.right;
|
||||
v4[2] = Rect.bottom;
|
||||
*v4 = (DWORD)SMemAlloc(Rect.right * Rect.bottom, "C:\\Src\\Diablo\\DiabloUI\\Doom.cpp", 139, 0);
|
||||
SetWindowLongA((HWND)a2, -21, (LONG)v4);
|
||||
SDlgSetBitmapI((HWND)a2, 0, &nullcharacter, -1, bmp_flags, (void *)*v4, 0, v4[1], v4[2], -1);
|
||||
}
|
||||
|
||||
// ref: 0x1000678A
|
||||
void __fastcall Doom_GetWindowROP3(HWND hWnd1, HWND hWnd2)
|
||||
{
|
||||
_DWORD *v3; // ebx
|
||||
LONG v4; // eax MAPDST
|
||||
struct tagRECT Rect; // [esp+Ch] [ebp-14h]
|
||||
|
||||
v3 = (_DWORD *)GetWindowLongA(hWnd1, -21);
|
||||
v4 = GetWindowLongA(hWnd2, -21);
|
||||
if ( v3 && *v3 && v4 )
|
||||
{
|
||||
if ( *(_DWORD *)v4 )
|
||||
{
|
||||
GetWindowRect(hWnd2, &Rect);
|
||||
ScreenToClient(hWnd1, (LPPOINT)&Rect);
|
||||
ScreenToClient(hWnd1, (LPPOINT)&Rect.right);
|
||||
SBltROP3(
|
||||
*(void **)v4,
|
||||
(void *)(Rect.left + *v3 + Rect.top * v3[1]),
|
||||
*(_DWORD *)(v4 + 4),
|
||||
*(_DWORD *)(v4 + 8),
|
||||
*(_DWORD *)(v4 + 4),
|
||||
v3[1],
|
||||
0,
|
||||
0xCC0020u);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ref: 0x1000680A
|
||||
void __fastcall Doom_ParseWndProc2(HWND hWnd, int *msgtbl, int a3, int a4)
|
||||
{
|
||||
HWND v6; // eax
|
||||
|
||||
while ( *msgtbl )
|
||||
{
|
||||
v6 = GetDlgItem(hWnd, *msgtbl);
|
||||
Doom_GetSetWndTxt2(hWnd, (int)v6, a3, a4);
|
||||
++msgtbl;
|
||||
}
|
||||
}
|
||||
|
||||
// ref: 0x10006839
|
||||
void __fastcall Doom_GetSetWndTxt2(HWND hWnd, int msg, int nFont, int a4)
|
||||
{
|
||||
HWND v4; // esi
|
||||
int v5; // eax
|
||||
char String[256]; // [esp+4h] [ebp-100h]
|
||||
|
||||
v4 = (HWND)msg;
|
||||
if ( msg )
|
||||
{
|
||||
Doom_GetWindowROP3(hWnd, (HWND)msg);
|
||||
artfont_SetArtFont(nFont);
|
||||
Doom_PrintStrWithSpin(v4, a4);
|
||||
GetWindowTextA(v4, String, 255);
|
||||
if ( strlen(String) )
|
||||
{
|
||||
v5 = GetWindowLongA(v4, -21);
|
||||
local_SetWndLongStr(v5, String);
|
||||
SetWindowTextA(v4, &nullcharacter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ref: 0x100068AB
|
||||
void __fastcall Doom_ParseWndProc3(HWND hWnd, int *msgtbl, int a3)
|
||||
{
|
||||
HWND v5; // eax
|
||||
|
||||
while ( *msgtbl )
|
||||
{
|
||||
v5 = GetDlgItem(hWnd, *msgtbl);
|
||||
Doom_GetSetWndTxt3(hWnd, (int)v5, a3);
|
||||
++msgtbl;
|
||||
}
|
||||
}
|
||||
|
||||
// ref: 0x100068D6
|
||||
void __fastcall Doom_GetSetWndTxt3(HWND hWnd, int msg, int nFont)
|
||||
{
|
||||
HWND v3; // esi
|
||||
HWND v4; // edi
|
||||
int v5; // eax
|
||||
int v6; // eax
|
||||
char String[256]; // [esp+8h] [ebp-100h]
|
||||
|
||||
v3 = (HWND)msg;
|
||||
v4 = hWnd;
|
||||
if ( msg )
|
||||
{
|
||||
Doom_AllocAndSetBMP(hWnd, msg, 1);
|
||||
Doom_GetWindowROP3(v4, v3);
|
||||
artfont_SetArtFont(nFont);
|
||||
v5 = GetWindowLongA(v3, -16);
|
||||
Doom_PrintStrWithSpn2(v3, v5);
|
||||
GetWindowTextA(v3, String, 255);
|
||||
if ( strlen(String) )
|
||||
{
|
||||
v6 = GetWindowLongA(v3, -21);
|
||||
local_SetWndLongStr(v6, String);
|
||||
SetWindowTextA(v3, &nullcharacter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ref: 0x1000695D
|
||||
void __fastcall Doom_PrintStrWithSpn2(HWND hWnd, int justify_type)
|
||||
{
|
||||
_DWORD *v2; // eax
|
||||
_DWORD *v3; // esi
|
||||
char *v4; // edi
|
||||
int v5; // eax
|
||||
char String[256]; // [esp+4h] [ebp-108h]
|
||||
|
||||
v2 = (_DWORD *)GetWindowLongA(hWnd, -21);
|
||||
v3 = v2;
|
||||
if ( v2 && *v2 )
|
||||
{
|
||||
GetWindowTextA(hWnd, String, 255);
|
||||
v4 = String;
|
||||
if ( !strlen(String) )
|
||||
v4 = (char *)(v3 + 4);
|
||||
if ( justify_type & 2 )
|
||||
{
|
||||
v5 = v3[1] - artfont_GetFontWidth(v4) - 1;
|
||||
}
|
||||
else if ( justify_type & 1 )
|
||||
{
|
||||
v5 = (v3[1] - artfont_GetFontWidth(v4) - 1) / 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
v5 = 0;
|
||||
}
|
||||
artfont_PrintFontStr(v4, (DWORD **)v3, v5, 0);
|
||||
InvalidateRect(hWnd, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// ref: 0x10006A13
|
||||
void __fastcall Doom_ParseWndProc4(HWND hWnd, int *msgtbl, int a3)
|
||||
{
|
||||
HWND v5; // eax
|
||||
|
||||
while ( *msgtbl )
|
||||
{
|
||||
v5 = GetDlgItem(hWnd, *msgtbl);
|
||||
Doom_GetSetWndTxt4(hWnd, (int)v5, a3);
|
||||
++msgtbl;
|
||||
}
|
||||
}
|
||||
|
||||
// ref: 0x10006A3E
|
||||
void __fastcall Doom_GetSetWndTxt4(HWND hWnd, int msg, int nFont)
|
||||
{
|
||||
HWND v3; // edi
|
||||
int v4; // eax
|
||||
int v5; // eax
|
||||
char String[256]; // [esp+8h] [ebp-100h]
|
||||
|
||||
v3 = (HWND)msg;
|
||||
if ( msg )
|
||||
{
|
||||
Doom_GetWindowROP3(hWnd, (HWND)msg);
|
||||
artfont_SetArtFont(nFont);
|
||||
v4 = GetWindowLongA(v3, -16);
|
||||
Doom_PrintStrWithSpn2(v3, v4);
|
||||
GetWindowTextA(v3, String, 255);
|
||||
if ( strlen(String) )
|
||||
{
|
||||
v5 = GetWindowLongA(v3, -21);
|
||||
local_SetWndLongStr(v5, String);
|
||||
SetWindowTextA(v3, &nullcharacter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ref: 0x10006AB8
|
||||
void __fastcall Doom_ParseWndProc5(HWND hWnd, int *msgtbl, int a3)
|
||||
{
|
||||
HWND v5; // eax
|
||||
|
||||
while ( *msgtbl )
|
||||
{
|
||||
v5 = GetDlgItem(hWnd, *msgtbl);
|
||||
Doom_GetSetWndTxt5(hWnd, (int)v5, a3);
|
||||
++msgtbl;
|
||||
}
|
||||
}
|
||||
|
||||
// ref: 0x10006AE3
|
||||
void __fastcall Doom_GetSetWndTxt5(HWND hWnd, int msg, int nFont)
|
||||
{
|
||||
HWND v3; // esi
|
||||
|
||||
v3 = (HWND)msg;
|
||||
if ( msg )
|
||||
{
|
||||
Doom_AllocAndSetBMP(hWnd, msg, 1);
|
||||
Doom_GetWindowROP3(hWnd, v3);
|
||||
artfont_SetArtFont(nFont);
|
||||
Doom_PrintTextMsg403(v3);
|
||||
}
|
||||
}
|
||||
|
||||
// ref: 0x10006B12
|
||||
void __fastcall Doom_PrintTextMsg403(HWND hWnd)
|
||||
{
|
||||
BYTE *v2; // eax
|
||||
int v3; // edi
|
||||
int v4; // edi
|
||||
int v5; // esi
|
||||
int v6; // esi
|
||||
char *i; // ebx
|
||||
int v8; // eax
|
||||
//char v9; // [esp+3h] [ebp-11Dh]
|
||||
char String[256]; // [esp+4h] [ebp-11Ch]
|
||||
struct tagRECT Rect; // [esp+104h] [ebp-1Ch]
|
||||
LRESULT v12; // [esp+114h] [ebp-Ch]
|
||||
BYTE *pWidthBin; // [esp+118h] [ebp-8h]
|
||||
size_t v14; // [esp+11Ch] [ebp-4h]
|
||||
|
||||
v2 = (BYTE *)GetWindowLongA(hWnd, -21);
|
||||
pWidthBin = v2;
|
||||
if ( v2 && *(_DWORD *)v2 )
|
||||
{
|
||||
GetWindowTextA(hWnd, String, 255);
|
||||
v14 = strlen(String);
|
||||
v3 = Focus_GetSpinWidthOrZero();
|
||||
v4 = artfont_GetFontDefWidth() + v3;
|
||||
GetClientRect(hWnd, &Rect);
|
||||
v5 = Focus_GetSpinWidthOrZero();
|
||||
v6 = Rect.right - 2 * (artfont_GetFontDefWidth() + v5);
|
||||
v12 = SendMessageA(hWnd, 0x403u, 0, 0);
|
||||
if ( v12 == 1 )
|
||||
String[v14-1] = 0; // *(&v9 + v14) = 0;
|
||||
for ( i = String; *i; ++i )
|
||||
{
|
||||
if ( artfont_GetFontWidth(i) <= v6 )
|
||||
break;
|
||||
}
|
||||
if ( v12 )
|
||||
String[v14-1] = 124; // *(&v9 + v14) = 124;
|
||||
v8 = artfont_GetFontMaxHeight();
|
||||
artfont_PrintFontStr(i, (DWORD **)pWidthBin, v4, (*((_DWORD *)pWidthBin + 2) - v8) / 2);
|
||||
}
|
||||
}
|
||||
|
||||
// ref: 0x10006C08
|
||||
void __fastcall Doom_ParseWndProc6(HWND hWnd, int *msgtbl, int a3)
|
||||
{
|
||||
HWND v5; // eax
|
||||
|
||||
while ( *msgtbl )
|
||||
{
|
||||
v5 = GetDlgItem(hWnd, *msgtbl);
|
||||
Doom_GetSetWndTxt6(hWnd, (int)v5, a3);
|
||||
++msgtbl;
|
||||
}
|
||||
}
|
||||
|
||||
// ref: 0x10006C33
|
||||
void __fastcall Doom_GetSetWndTxt6(HWND hWnd, int msg, int nFont)
|
||||
{
|
||||
HWND v3; // esi
|
||||
|
||||
v3 = (HWND)msg;
|
||||
if ( msg )
|
||||
{
|
||||
Doom_GetWindowROP3(hWnd, (HWND)msg);
|
||||
artfont_SetArtFont(nFont);
|
||||
Doom_PrintTextMsg403(v3);
|
||||
}
|
||||
}
|
||||
|
||||
// ref: 0x10006C53
|
||||
void __fastcall Doom_DeleteFreeProcs(HWND hWnd, int *msgtbl)
|
||||
{
|
||||
int i; // eax
|
||||
HWND v5; // eax MAPDST
|
||||
void **v7; // eax
|
||||
|
||||
for ( i = *msgtbl; *msgtbl; i = *msgtbl )
|
||||
{
|
||||
v5 = GetDlgItem(hWnd, i);
|
||||
if ( v5 )
|
||||
{
|
||||
v7 = (void **)GetWindowLongA(v5, -21);
|
||||
local_FreeMemPtr(v7);
|
||||
SetWindowLongA(v5, -21, 0);
|
||||
}
|
||||
++msgtbl;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user