1
0
Fork 0
mirror of https://github.com/galaxyhaxz/devilution synced 2024-11-14 16:29:02 +00:00
devilution/2020_03_31/DiabloUI/bn_prof.cpp
PrisonOfMirrors b720183846 initial up
2020-11-28 18:24:54 -06:00

1421 lines
32 KiB
C++

// ref: 0x100014E8
signed int bn_prof_100014E8() { return 0; }
/* {
signed int result; // eax
result = 2139095040;
dword_10029404 = 2139095040;
return result;
} */
// 10029404: using guessed type int dword_10029404;
// ref: 0x100014F3
int __stdcall UiProfileGetString() { return 0; }
//const char *UiProfileGetString() { return 0; }
/* {
return "profile\\sex";
} */
// ref: 0x100014F9
void __stdcall UiProfileCallback() { return; }
//BOOL __stdcall UiProfileCallback(int a1, int a2, int a3, int a4, LPARAM a5, int a6, int a7, int a8, int (__stdcall *a9)(_DWORD, _DWORD, _DWORD, _DWORD)) { return 0; }
/* {
const char *v9; // eax
int v10; // eax
lParam = a5;
dword_10029408 = a6;
dword_1002941C = a7;
dword_10029418 = a8;
dword_10029430 = a9;
v9 = "DIALOG_PROFILE";
if ( !a9 )
v9 = "DIALOG_STATIC_PROFILE";
v10 = SDlgDialogBoxParam(hInstance, v9, *(_DWORD *)(a3 + 8), bn_prof_1000155F, 0);
return v10 && v10 != -1;
} */
// 10010370: using guessed type int __stdcall SDlgDialogBoxParam(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
// 10029408: using guessed type int dword_10029408;
// 10029418: using guessed type int dword_10029418;
// 1002941C: using guessed type int dword_1002941C;
// 10029430: using guessed type int (__stdcall *dword_10029430)(_DWORD, _DWORD, _DWORD, _DWORD);
// ref: 0x1000155F
HGDIOBJ __stdcall bn_prof_1000155F(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { return 0; }
/* {
HWND v4; // eax
HWND v6; // edi
if ( Msg <= 0x110 )
{
switch ( Msg )
{
case 0x110u:
bn_prof_10001C0E(hWnd);
break;
case 2u:
bn_prof_10001F29();
break;
case 0x2Bu:
if ( wParam == 1134 )
{
bn_prof_100018CE((int)hWnd, lParam);
return (HGDIOBJ)1;
}
return (HGDIOBJ)SDlgDefDialogProc(hWnd, Msg, wParam, lParam);
default:
if ( Msg > 0x103 && Msg <= 0x105 )
{
v4 = (HWND)SDrawGetFrameWindow();
SendMessageA(v4, Msg, wParam, lParam);
}
return (HGDIOBJ)SDlgDefDialogProc(hWnd, Msg, wParam, lParam);
}
return 0;
}
if ( Msg == 273 )
{
if ( (unsigned short)wParam == 1 )
{
EnableWindow((HWND)lParam, 0);
TitleSnd_10010315();
if ( dword_10029430 )
bn_prof_100016DD(hWnd);
SDlgEndDialog(hWnd, 1);
}
else if ( (unsigned short)wParam == 2 )
{
EnableWindow((HWND)lParam, 0);
TitleSnd_10010315();
SDlgEndDialog(hWnd, 0);
}
else
{
if ( (unsigned short)wParam != 1134 || HIWORD(wParam) || dword_10029430 )
return (HGDIOBJ)SDlgDefDialogProc(hWnd, Msg, wParam, lParam);
bn_prof_10001A10(hWnd, (HWND)lParam);
}
return 0;
}
if ( Msg == 274 )
{
if ( wParam != 61536 )
return (HGDIOBJ)SDlgDefDialogProc(hWnd, Msg, wParam, lParam);
v6 = GetParent(hWnd);
SDlgEndDialog(hWnd, 0);
PostMessageA(v6, 0x112u, 0xF060u, lParam);
return 0;
}
if ( Msg != 312 || GetWindowLongA((HWND)lParam, -12) != 1124 )
return (HGDIOBJ)SDlgDefDialogProc(hWnd, Msg, wParam, lParam);
SetTextColor((HDC)wParam, 0xFFFFu);
return GetStockObject(5);
} */
// 10010376: using guessed type int __stdcall SDlgEndDialog(_DWORD, _DWORD);
// 1001037C: using guessed type int __stdcall SDlgDefDialogProc(_DWORD, _DWORD, _DWORD, _DWORD);
// 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow();
// 10029430: using guessed type int (__stdcall *dword_10029430)(_DWORD, _DWORD, _DWORD, _DWORD);
// ref: 0x100016DD
void UNKCALL bn_prof_100016DD(HWND arg) { return; }
/* {
int v1; // ebx
int v2; // eax
const char **v3; // edi
int v4; // eax
int v5; // ebx
int *v6; // ebx
LRESULT v7; // eax
LPARAM v8; // eax
size_t v9; // eax
char *v10; // eax
int v11; // ebx
_DWORD *v12; // edi
int v13; // eax
int v14; // ebx
size_t v15; // [esp+4h] [ebp-28h]
char *v16; // [esp+8h] [ebp-24h]
HWND hDlg; // [esp+Ch] [ebp-20h]
int v18; // [esp+10h] [ebp-1Ch]
int v19; // [esp+14h] [ebp-18h]
int v20; // [esp+18h] [ebp-14h]
char *v21; // [esp+1Ch] [ebp-10h]
int v22; // [esp+20h] [ebp-Ch]
int v23; // [esp+24h] [ebp-8h]
char *v24; // [esp+28h] [ebp-4h]
size_t v25; // [esp+28h] [ebp-4h]
v1 = 0;
hDlg = arg;
if ( dword_10029430 )
{
v2 = SMemAlloc(4 * dword_10029408, "C:\\Src\\Diablo\\DiabloUI\\bn_prof.cpp", 193, 0);
v3 = (const char **)v2;
v22 = v2;
v4 = SMemAlloc(4 * dword_10029408, "C:\\Src\\Diablo\\DiabloUI\\bn_prof.cpp", 195, 0);
v18 = v4;
v20 = 0;
v23 = 0;
if ( dword_10029408 > 0 )
{
v19 = v4 - (_DWORD)v3;
do
{
v5 = 0;
v24 = byte_1001F37C;
v16 = *(char **)(4 * v23 + dword_10029418);
v21 = *(char **)(4 * v23 + dword_1002941C);
while ( 1 )
{
if ( !_strcmpi(v21, *((const char **)v24 - 1)) )
{
v15 = strlen(v16);
if ( *v24 & 1 )
break;
}
v24 += 16;
++v5;
if ( (signed int)v24 >= (signed int)&unk_1001F3BC )
goto LABEL_13;
}
v6 = &dword_1001F380[4 * v5];
v7 = SendDlgItemMessageA(hDlg, *v6, 0xEu, 0, 0);
v25 = v7;
v8 = SMemAlloc(v7 + 1, "C:\\Src\\Diablo\\DiabloUI\\bn_prof.cpp", 218, 0);
*v3 = (const char *)v8;
SendDlgItemMessageA(hDlg, *v6, 0xDu, v25 + 1, v8);
(*v3)[v25] = 0;
if ( v25 == v15 && !_strnicmp(v16, *v3, v25) )
{
SMemFree(*v3, "C:\\Src\\Diablo\\DiabloUI\\bn_prof.cpp", 236, 0);
}
else
{
v9 = strlen(v21);
v10 = (char *)SMemAlloc(v9 + 1, "C:\\Src\\Diablo\\DiabloUI\\bn_prof.cpp", 232, 0);
*(const char **)((char *)v3 + v19) = v10;
strcpy(v10, v21);
++v20;
++v3;
}
LABEL_13:
++v23;
}
while ( v23 < dword_10029408 );
v1 = v20;
}
dword_10029430(&byte_10029448, v1, v18, v22);
v11 = v1 - 1;
if ( v11 >= 0 )
{
v12 = (_DWORD *)(v22 + 4 * v11);
v13 = v18 - v22;
v14 = v11 + 1;
while ( 1 )
{
SMemFree(*(_DWORD *)((char *)v12 + v13), "C:\\Src\\Diablo\\DiabloUI\\bn_prof.cpp", 250, 0);
SMemFree(*v12, "C:\\Src\\Diablo\\DiabloUI\\bn_prof.cpp", 251, 0);
--v12;
if ( !--v14 )
break;
v13 = v18 - v22;
}
}
SMemFree(v18, "C:\\Src\\Diablo\\DiabloUI\\bn_prof.cpp", 253, 0);
SMemFree(v22, "C:\\Src\\Diablo\\DiabloUI\\bn_prof.cpp", 254, 0);
}
} */
// 10010340: using guessed type int __stdcall SMemFree(_DWORD, _DWORD, _DWORD, _DWORD);
// 10010364: using guessed type int __stdcall SMemAlloc(_DWORD, _DWORD, _DWORD, _DWORD);
// 1001F380: using guessed type int dword_1001F380[];
// 10029408: using guessed type int dword_10029408;
// 10029418: using guessed type int dword_10029418;
// 1002941C: using guessed type int dword_1002941C;
// 10029430: using guessed type int (__stdcall *dword_10029430)(_DWORD, _DWORD, _DWORD, _DWORD);
// ref: 0x100018CE
void __fastcall bn_prof_100018CE(int a1, int a2) { return; }
/* {
int v2; // esi
LRESULT v3; // eax
WPARAM v4; // edi
char *v5; // ebx
v2 = a2;
if ( *(_DWORD *)(a2 + 24) && *(_DWORD *)a2 == 5 )
{
v3 = SendMessageA(*(HWND *)(a2 + 20), 0xEu, 0, 0);
v4 = v3 + 1;
if ( v3 != 0 )
{
v5 = (char *)SMemAlloc(v3 + 1, "C:\\Src\\Diablo\\DiabloUI\\bn_prof.cpp", 362, 0);
SendMessageA(*(HWND *)(v2 + 20), 0xDu, v4, (LPARAM)v5);
bn_prof_10001938(*(HDC *)(v2 + 24), (_DWORD *)(v2 + 28), v5, 0, 0);
SMemFree(v5, "C:\\Src\\Diablo\\DiabloUI\\bn_prof.cpp", 367, 0);
}
}
} */
// 10010340: using guessed type int __stdcall SMemFree(_DWORD, _DWORD, _DWORD, _DWORD);
// 10010364: using guessed type int __stdcall SMemAlloc(_DWORD, _DWORD, _DWORD, _DWORD);
// ref: 0x10001938
int __fastcall bn_prof_10001938(HDC a1, _DWORD *a2, char *a3, int a4, int a5) { return 0; }
/* {
int result; // eax
char *v6; // edi
char *v7; // eax
char *v8; // esi
char v9; // bl
char *v10; // eax
RECT rc; // [esp+Ch] [ebp-14h]
_DWORD *v12; // [esp+1Ch] [ebp-4h]
char *v13; // [esp+28h] [ebp+8h]
result = (int)bn_prof_10002410(a1, a2);
v12 = (_DWORD *)result;
if ( result )
{
v6 = a3;
if ( a3 )
{
v13 = (char *)(a4 != 0 ? (unsigned int)&rc : 0);
while ( 1 )
{
v7 = strstr(v6, "http://");
v8 = v7;
v9 = 0;
if ( v7 )
{
v9 = *v7;
*v7 = 0;
}
if ( !bn_prof_10002456((int)v12, v6, 1, v13) || !v8 )
break;
*v8 = v9;
v10 = strpbrk(v8, " \n\r\t");
v6 = v10;
if ( v10 )
{
v9 = *v10;
*v10 = 0;
}
if ( !bn_prof_10002456((int)v12, v8, 2, v13) )
break;
if ( a4 && PtInRect(&rc, *(POINT *)a4) )
{
if ( a5 )
*(_DWORD *)a5 = v8;
return 1;
}
if ( !v6 )
break;
*v6 = v9;
}
}
bn_prof_100026C4(v12);
result = a4 == 0;
}
return result;
} */
// ref: 0x10001A10
int __fastcall bn_prof_10001A10(HWND a1, HWND a2) { return 0; }
/* {
HWND v2; // esi
int result; // eax
WPARAM v4; // esi
HWND v5; // eax
HDC v6; // edi
HWND v7; // eax
struct tagRECT v8; // [esp+Ch] [ebp-3Ch]
struct tagRECT Rect; // [esp+1Ch] [ebp-2Ch]
struct tagPOINT Point; // [esp+2Ch] [ebp-1Ch]
HWND v11; // [esp+34h] [ebp-14h]
int v12; // [esp+38h] [ebp-10h]
int v13; // [esp+3Ch] [ebp-Ch]
HWND hWnd; // [esp+40h] [ebp-8h]
char *v15; // [esp+44h] [ebp-4h]
v2 = a2;
hWnd = a2;
v11 = a1;
result = GetCursorPos(&Point);
if ( result )
{
result = GetWindowRect(v2, &Rect);
if ( result )
{
result = GetClientRect(v2, &v8);
if ( result )
{
Point.x -= Rect.left;
Point.y -= Rect.top;
result = SendMessageA(v2, 0xEu, 0, 0);
v4 = result + 1;
if ( result + 1 > 1 )
{
v15 = (char *)SMemAlloc(result + 1, "C:\\Src\\Diablo\\DiabloUI\\bn_prof.cpp", 438, 0);
SendMessageA(hWnd, 0xDu, v4, (LPARAM)v15);
v5 = GetDesktopWindow();
v6 = GetDC(v5);
hWnd = (HWND)CreateCompatibleDC(v6);
v13 = bn_prof_10001938((HDC)hWnd, &v8, v15, (int)&Point, (int)&v12);
DeleteDC((HDC)hWnd);
v7 = GetDesktopWindow();
ReleaseDC(v7, v6);
if ( v13 )
bn_prof_10001B0A(v11, (const CHAR *)v12);
result = SMemFree(v15, "C:\\Src\\Diablo\\DiabloUI\\bn_prof.cpp", 450, 0);
}
}
}
}
return result;
} */
// 10010340: using guessed type int __stdcall SMemFree(_DWORD, _DWORD, _DWORD, _DWORD);
// 10010364: using guessed type int __stdcall SMemAlloc(_DWORD, _DWORD, _DWORD, _DWORD);
// ref: 0x10001B0A
HINSTANCE __fastcall bn_prof_10001B0A(HWND a1, const CHAR *a2) { return 0; }
/* {
const CHAR *v2; // ebp
HWND v3; // eax
HWND v4; // eax
HINSTANCE result; // eax
FILE *v6; // eax
HWND v7; // eax
HWND v8; // eax
HWND v9; // eax
HWND hWnd; // [esp+10h] [ebp-348h]
CHAR Caption; // [esp+14h] [ebp-344h]
CHAR Result; // [esp+54h] [ebp-304h]
CHAR Buffer; // [esp+158h] [ebp-200h]
v2 = a2;
hWnd = a1;
v3 = GetDesktopWindow();
SetForegroundWindow(v3);
v4 = (HWND)SDrawGetFrameWindow();
result = ShellExecuteA(v4, "open", v2, 0, 0, 1);
if ( (unsigned int)result <= 0x20 )
{
v6 = fopen("battle.htm", "wb");
if ( v6 )
fclose(v6);
if ( (unsigned int)FindExecutableA("battle.htm", 0, &Result) <= 0x20 )
{
v7 = (HWND)SDrawGetFrameWindow();
if ( (unsigned int)ShellExecuteA(v7, "open", &Result, v2, 0, 1) <= 0x20 )
{
v8 = (HWND)SDrawGetFrameWindow();
SetActiveWindow(v8);
v9 = (HWND)SDrawGetFrameWindow();
ShowWindow(v9, 0);
LoadStringA(hInstance, 0x50u, &Buffer, 512);
LoadStringA(hInstance, 0x51u, &Caption, 64);
UiMessageBoxCallback(hWnd, &Buffer, &Caption, 0x30u);
}
}
result = (HINSTANCE)DeleteFileA("battle.htm");
}
return result;
} */
// 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow();
// ref: 0x10001C0E
HWND UNKCALL bn_prof_10001C0E(HWND hWnd) { return 0; }
/* {
HWND v1; // esi
LPARAM v2; // ST10_4
HWND v3; // eax
HWND v4; // eax
HWND v5; // eax
HWND v6; // eax
v1 = hWnd;
bn_prof_10001CF3(hWnd);
ho = bn_prof_10001D81(v1, 2, (int)&unk_1001F3B8);
dword_10029424 = bn_prof_10001D81(v1, 1, (int)&unk_1001F3D0);
v2 = lParam;
v3 = GetDlgItem(v1, 1126);
SendMessageA(v3, 0xCu, 0, v2);
bn_prof_10001CB9(
(_DWORD *)dword_1002941C,
dword_10029418,
(void (__fastcall *)(_BYTE *, _DWORD, int))bn_prof_10001ED0,
0);
bn_prof_10001E34(v1);
if ( dword_10029430 )
{
v4 = GetDlgItem(v1, 1128);
}
else
{
v5 = GetDlgItem(v1, 1134);
bn_prof_100022A2(v5);
v6 = GetDlgItem(v1, 1);
EnableWindow(v6, 0);
v4 = GetDlgItem(v1, 2);
}
return SetFocus(v4);
} */
// 10029418: using guessed type int dword_10029418;
// 1002941C: using guessed type int dword_1002941C;
// 10029430: using guessed type int (__stdcall *dword_10029430)(_DWORD, _DWORD, _DWORD, _DWORD);
// ref: 0x10001CB9
void __fastcall bn_prof_10001CB9(_DWORD *a1, int a2, void (__fastcall *a3)(_BYTE *, _DWORD, int), int a4) { return; }
/* {
_BYTE *v4; // eax
_DWORD *v5; // esi
int v6; // edi
if ( a1 )
{
if ( a2 )
{
if ( a3 )
{
v4 = (_BYTE *)*a1;
if ( *(_BYTE *)*a1 )
{
v5 = a1;
v6 = a2 - (_DWORD)a1;
do
{
a3(v4, *(_DWORD *)((char *)v5 + v6), a4);
++v5;
v4 = (_BYTE *)*v5;
}
while ( *(_BYTE *)*v5 );
}
}
}
}
} */
// ref: 0x10001CF3
int UNKCALL bn_prof_10001CF3(HWND hWnd) { return 0; }
/* {
HWND v1; // edi
const char *v2; // eax
int v3; // ST10_4
HWND v4; // eax
int v6; // [esp+8h] [ebp-14h]
int v7; // [esp+Ch] [ebp-10h]
int v8; // [esp+10h] [ebp-Ch]
char v9; // [esp+14h] [ebp-8h]
v8 = 0;
v1 = hWnd;
v6 = 1;
v7 = 2;
v2 = "ui_art\\bnprofile.pcx";
if ( !dword_10029430 )
v2 = "ui_art\\bnstaticprofile.pcx";
v3 = (int)v2;
v4 = GetParent(hWnd);
local_10007944((int)v1, (int)v4, "Popup", -1, 1, v3, &dword_10029410, &v9, 1);
local_10007944(0, 0, "Button", -1, 1, (int)"ui_art\\but_xsm.pcx", &dword_10029428, &v9, 1);
return SDlgSetControlBitmaps(v1, &v6, 0, dword_10029428, &v9, 1, -1);
} */
// 10010388: using guessed type int __stdcall SDlgSetControlBitmaps(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
// 10029410: using guessed type int dword_10029410;
// 10029428: using guessed type int dword_10029428;
// 10029430: using guessed type int (__stdcall *dword_10029430)(_DWORD, _DWORD, _DWORD, _DWORD);
// ref: 0x10001D81
HFONT __fastcall bn_prof_10001D81(HWND hWnd, int a2, int a3) { return 0; }
/* {
int v3; // esi
void *v4; // ebx
int v5; // esi
int v6; // eax
const char *v7; // ST10_4
HFONT v8; // ebx
int *v10; // esi
int pv; // [esp+8h] [ebp-40h]
int v12; // [esp+18h] [ebp-30h]
char v13; // [esp+24h] [ebp-24h]
HWND hDlg; // [esp+44h] [ebp-4h]
v3 = a2;
hDlg = hWnd;
v4 = (void *)SendMessageA(hWnd, 0x31u, 0, 0);
if ( !v4 )
return 0;
memset(&pv, 0, 0x3Cu);
if ( !GetObjectA(v4, 60, &pv) )
return 0;
v5 = 3 * v3;
v6 = MulDiv(dword_10022260[v5], 96, 72);
v7 = (&off_10022264)[v5];
pv = -v6;
v12 = dword_10022268[v5];
strcpy(&v13, v7);
v8 = CreateFontIndirectA((const LOGFONTA *)&pv);
if ( !v8 )
return 0;
v10 = (int *)a3;
if ( a3 )
{
while ( *v10 )
{
SendDlgItemMessageA(hDlg, *v10, 0x30u, (WPARAM)v8, 0);
++v10;
}
}
return v8;
} */
// 10022260: using guessed type int dword_10022260[];
// 10022264: using guessed type char *off_10022264;
// 10022268: using guessed type int dword_10022268[];
// ref: 0x10001E34
void UNKCALL bn_prof_10001E34(void *arg) { return; }
/* {
bn_prof_10001CB9(
(_DWORD *)dword_1002941C,
dword_10029418,
(void (__fastcall *)(_BYTE *, _DWORD, int))bn_prof_10001E4C,
(int)arg);
} */
// 10029418: using guessed type int dword_10029418;
// 1002941C: using guessed type int dword_1002941C;
// ref: 0x10001E4C
void __fastcall bn_prof_10001E4C(char *a1, LPARAM lParam, HWND hDlg) { return; }
/* {
int v3; // esi
unsigned char v4; // zf
LPARAM v5; // ebp
char *v6; // ebx
const char **v7; // edi
int v8; // esi
HWND v9; // ebx
v3 = 0;
v4 = dword_10022258 == 0;
v5 = lParam;
v6 = a1;
if ( dword_10022258 > 0 )
{
v7 = (const char **)&off_1001F378;
do
{
if ( !_strcmpi(v6, *v7) )
break;
++v3;
v7 += 4;
}
while ( v3 < dword_10022258 );
v4 = v3 == dword_10022258;
}
if ( !v4 )
{
v8 = 4 * v3;
if ( !(byte_1001F37C[v8 * 4] & 4) )
{
v9 = GetDlgItem(hDlg, dword_1001F380[v8]);
SendMessageA(v9, 0xCu, 0, v5);
if ( dword_10029430 )
SendMessageA(v9, 0xC5u, dword_1001F384[v8], 0);
}
}
} */
// 1001F378: using guessed type char *off_1001F378;
// 1001F380: using guessed type int dword_1001F380[];
// 1001F384: using guessed type int dword_1001F384[];
// 10022258: using guessed type int dword_10022258;
// 10029430: using guessed type int (__stdcall *dword_10029430)(_DWORD, _DWORD, _DWORD, _DWORD);
// ref: 0x10001ED0
void __fastcall bn_prof_10001ED0(char *a1, _BYTE *a2, int a3) { return; }
/* {
int v3; // esi
unsigned char v4; // zf
_BYTE *v5; // edi
char *v6; // ebp
const char **v7; // ebx
v3 = 0;
v4 = dword_10022258 == 0;
v5 = a2;
v6 = a1;
if ( dword_10022258 > 0 )
{
v7 = (const char **)&off_1001F378;
do
{
if ( !_strcmpi(v6, *v7) )
break;
++v3;
v7 += 4;
}
while ( v3 < dword_10022258 );
v4 = v3 == dword_10022258;
}
if ( !v4 )
{
if ( *v5 )
dword_10029438[v3] = (int)v5;
else
dword_10029438[v3] = (int)"0";
}
} */
// 1001F378: using guessed type char *off_1001F378;
// 10022258: using guessed type int dword_10022258;
// ref: 0x10001F29
void *bn_prof_10001F29() { return 0; }
/* {
int result; // eax
bn_prof_100023D8();
bn_prof_10001F84();
if ( ho )
DeleteObject(ho);
ho = 0;
if ( dword_10029424 )
DeleteObject(dword_10029424);
result = dword_10029434;
dword_10029424 = 0;
if ( dword_10029434 )
result = SMemFree(dword_10029434, "C:\\Src\\Diablo\\DiabloUI\\bn_prof.cpp", 509, 0);
dword_10029434 = 0;
return result;
} */
// 10010340: using guessed type int __stdcall SMemFree(_DWORD, _DWORD, _DWORD, _DWORD);
// 10029434: using guessed type int dword_10029434;
// ref: 0x10001F84
BYTE *bn_prof_10001F84() { return 0; }
/* {
int result; // eax
if ( dword_10029410 )
{
SMemFree(dword_10029410, "C:\\Src\\Diablo\\DiabloUI\\bn_prof.cpp", 129, 0);
dword_10029410 = 0;
}
result = dword_10029428;
if ( dword_10029428 )
{
result = SMemFree(dword_10029428, "C:\\Src\\Diablo\\DiabloUI\\bn_prof.cpp", 133, 0);
dword_10029428 = 0;
}
return result;
} */
// 10010340: using guessed type int __stdcall SMemFree(_DWORD, _DWORD, _DWORD, _DWORD);
// 10029410: using guessed type int dword_10029410;
// 10029428: using guessed type int dword_10029428;
// ref: 0x10001FC8
void __stdcall UiProfileDraw() { return; }
//int __stdcall UiProfileDraw(int a1, int a2, int a3, int a4, HGDIOBJ ho, int a6, int a7, int a8, int a9, int a10, int a11) { return 0; }
/* {
int v11; // eax
HFONT v12; // eax
int v14; // eax
CHAR *v15; // edi
int v16; // esi
CHAR v17; // al
int v18; // ecx
int v19; // eax
int v20; // edx
CHAR Buffer[256]; // [esp+Ch] [ebp-150h]
int v22; // [esp+10Ch] [ebp-50h]
int v23; // [esp+110h] [ebp-4Ch]
int v24; // [esp+114h] [ebp-48h]
int v25; // [esp+118h] [ebp-44h]
int v26; // [esp+11Ch] [ebp-40h]
int v27; // [esp+120h] [ebp-3Ch]
int v28; // [esp+124h] [ebp-38h]
int v29; // [esp+128h] [ebp-34h]
int v30; // [esp+12Ch] [ebp-30h]
int v31; // [esp+130h] [ebp-2Ch]
int v32; // [esp+134h] [ebp-28h]
int v33; // [esp+138h] [ebp-24h]
int v34; // [esp+13Ch] [ebp-20h]
int v35; // [esp+140h] [ebp-1Ch]
int v36; // [esp+144h] [ebp-18h]
int v37; // [esp+148h] [ebp-14h]
int v38; // [esp+14Ch] [ebp-10h]
int v39; // [esp+150h] [ebp-Ch]
int v40; // [esp+154h] [ebp-8h]
int v41; // [esp+158h] [ebp-4h]
HFONT hoa; // [esp+174h] [ebp+18h]
int hob; // [esp+174h] [ebp+18h]
if ( ho )
return 0;
if ( !a9 )
return 0;
if ( !a10 )
return 0;
if ( !a11 )
return 0;
v24 = dword_1002940C;
v34 = dword_1002940C;
v30 = 0;
v31 = 0;
v32 = a10;
v33 = a11;
v36 = a10;
v37 = a11;
v22 = 0;
v23 = 0;
v25 = dword_10029414;
v35 = dword_10029414;
if ( !SBltROP3Clipped(a9, &v30, &v36, a10, dword_1002942C, &v22, &v34, dword_1002940C, 0, 13369376) )
return 0;
if ( !LoadStringA(hInstance, 0x4Fu, Buffer, 255) )
return 0;
v11 = MulDiv(12, 96, 72);
v12 = CreateFontA(-v11, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0x20u, "Arial");
hoa = v12;
if ( !v12 )
return 0;
v41 = 0;
if ( !SGdiImportFont(v12, &v41) )
return 0;
DeleteObject(hoa);
if ( !v41 || !SGdiSelectObject(v41) )
return 0;
v26 = 0;
v27 = 0;
v28 = a10;
v29 = a11;
SGdiSetPitch(a10);
v14 = SStrLen(Buffer);
v15 = Buffer;
hob = v14 + 1;
v40 = 8;
Buffer[v14 + 1] = 0;
v16 = v14 + 1;
do
{
if ( v15[v16 - 1] )
{
v17 = v15[v16 - 1];
do
{
if ( v17 == 32 )
break;
if ( v17 == 10 )
break;
if ( v17 == 9 )
break;
if ( v16 <= 1 )
break;
v17 = v15[v16-- - 2];
}
while ( v17 );
}
SGdiGetTextExtent(v15, v16, &v38);
if ( v38 >= a10 - 8 )
{
v20 = a10 * hob % v38;
if ( --v16 >= a10 * hob / v38 )
v16 = a10 * hob / v38;
}
else
{
v19 = v16 - 1;
if ( v15[v16 - 1] )
v19 = v16;
SGdiExtTextOut(a9, 8, v40, &v26, 16777471, 1, 0, v15, v19);
if ( v15[v16] == 32 )
++v16;
v15 += v16;
v40 += v39;
hob -= v16;
v16 = hob;
}
}
while ( v16 && hob && v40 < a11 - 8 );
SGdiDeleteObject(v18, v20, v41);
return 1;
} */
// 1001038E: using guessed type int __fastcall SGdiDeleteObject(_DWORD, _DWORD, _DWORD);
// 10010394: using guessed type int __stdcall SGdiExtTextOut(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
// 1001039A: using guessed type int __stdcall SGdiGetTextExtent(_DWORD, _DWORD, _DWORD);
// 100103A0: using guessed type int __stdcall SStrLen(_DWORD);
// 100103A6: using guessed type int __stdcall SGdiSetPitch(_DWORD);
// 100103AC: using guessed type int __stdcall SGdiSelectObject(_DWORD);
// 100103B2: using guessed type int __stdcall SGdiImportFont(_DWORD, _DWORD);
// 100103B8: using guessed type int __stdcall SBltROP3Clipped(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
// 1002940C: using guessed type int dword_1002940C;
// 10029414: using guessed type int dword_10029414;
// 1002942C: using guessed type int dword_1002942C;
// 10001FC8: using guessed type CHAR Buffer[256];
// ref: 0x100021C4
int bn_prof_100021C4() { return 0; }
/* {
int v0; // edi
int v2; // [esp+4h] [ebp-8h]
int v3; // [esp+8h] [ebp-4h]
v3 = 0;
v2 = 0;
if ( !SBmpLoadImage("ui_Art\\profilebkg.pcx", 0, 0, 0, &v3, &v2, 0) || !v3 || !v2 )
return 0;
v0 = v3 * v2;
dword_1002942C = SMemAlloc(v3 * v2, "C:\\Src\\Diablo\\DiabloUI\\bn_prof.cpp", 760, 0);
dword_1002940C = v3;
dword_10029414 = v2;
return SBmpLoadImage("ui_Art\\profilebkg.pcx", 0, dword_1002942C, v0, &v3, &v2, 0);
} */
// 10010364: using guessed type int __stdcall SMemAlloc(_DWORD, _DWORD, _DWORD, _DWORD);
// 100103BE: using guessed type int __stdcall SBmpLoadImage(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
// 1002940C: using guessed type int dword_1002940C;
// 10029414: using guessed type int dword_10029414;
// 1002942C: using guessed type int dword_1002942C;
// ref: 0x10002247
void *bn_prof_10002247() { return 0; }
/* {
int result; // eax
result = dword_1002942C;
if ( dword_1002942C )
{
result = SMemFree(dword_1002942C, "C:\\Src\\Diablo\\DiabloUI\\bn_prof.cpp", 776, 0);
dword_1002942C = 0;
dword_1002940C = 0;
dword_10029414 = 0;
}
return result;
} */
// 10010340: using guessed type int __stdcall SMemFree(_DWORD, _DWORD, _DWORD, _DWORD);
// 1002940C: using guessed type int dword_1002940C;
// 10029414: using guessed type int dword_10029414;
// 1002942C: using guessed type int dword_1002942C;
// ref: 0x10002278
int j_bn_prof_10002282() { return 0; }
/* {
bn_prof_10002282();
return atexit(bn_prof_10002298);
} */
// ref: 0x10002282
_DWORD *bn_prof_10002282() { return 0; }
/* {
_DWORD *result; // eax
_DWORD *v1; // edx
result = dword_10029460;
v1 = &dword_10029460[1];
*v1 = 0;
v1[1] = 0;
*v1 = v1;
dword_10029460[0] = 0;
dword_10029460[2] = ~(unsigned int)&dword_10029460[1];
return result;
} */
// ref: 0x10002298
void __cdecl bn_prof_10002298() { return; }
/* {
bn_prof_100026F0(dword_10029460);
} */
// ref: 0x100022A2
int UNKCALL bn_prof_100022A2(HWND hWnd) { return 0; }
/* {
HFONT v2; // eax
HFONT v3; // eax
char pv; // [esp+4h] [ebp-40h]
char v5; // [esp+19h] [ebp-2Bh]
HANDLE h; // [esp+40h] [ebp-4h]
if ( !hWnd )
return 0;
h = (HANDLE)SendMessageA(hWnd, 0x31u, 0, 0);
if ( !h )
return 0;
memset(&pv, 0, 0x3Cu);
if ( GetObjectA(h, 60, &pv) )
{
v2 = CreateFontIndirectA((const LOGFONTA *)&pv);
if ( v2 )
{
dword_10029450 = v2;
dword_10029458 = bn_prof_10002353(v2);
}
}
memset(&pv, 0, 0x3Cu);
if ( GetObjectA(h, 60, &pv) )
{
v5 = 1;
v3 = CreateFontIndirectA((const LOGFONTA *)&pv);
if ( v3 )
{
::h = v3;
dword_1002946C = bn_prof_10002353(v3);
}
}
return 1;
} */
// 10029458: using guessed type int dword_10029458;
// 1002946C: using guessed type int dword_1002946C;
// ref: 0x10002353
int UNKCALL bn_prof_10002353(HGDIOBJ h) { return 0; }
/* {
HGDIOBJ v1; // ebx
HWND v2; // eax
HDC v3; // ebp
HDC v4; // esi
HWND v5; // eax
int v7; // [esp+10h] [ebp-10h]
HGDIOBJ ha; // [esp+14h] [ebp-Ch]
struct tagSIZE psizl; // [esp+18h] [ebp-8h]
v1 = h;
v2 = GetDesktopWindow();
v3 = GetDC(v2);
v4 = CreateCompatibleDC(v3);
v7 = 0;
ha = SelectObject(v4, v1);
if ( GetTextExtentPoint32A(v4, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 52, &psizl) )
v7 = (psizl.cx / 26 + 1) / 2;
SelectObject(v4, ha);
DeleteDC(v4);
v5 = GetDesktopWindow();
ReleaseDC(v5, v3);
return v7;
} */
// ref: 0x100023D8
HGDIOBJ bn_prof_100023D8() { return 0; }
/* {
HGDIOBJ result; // eax
int v1; // esi
if ( dword_10029450 )
{
DeleteObject(dword_10029450);
dword_10029450 = 0;
}
result = h;
if ( h )
{
result = (HGDIOBJ)DeleteObject(h);
h = 0;
}
while ( 1 )
{
v1 = dword_10029460[2];
if ( v1 <= 0 )
break;
bn_prof_100027D8((_DWORD *)dword_10029460[2]);
result = (HGDIOBJ)SMemFree(v1, ".?AU_DRAWTEXT@@", -2, 0);
}
return result;
} */
// 10010340: using guessed type int __stdcall SMemFree(_DWORD, _DWORD, _DWORD, _DWORD);
// ref: 0x10002410
_DWORD *__fastcall bn_prof_10002410(HDC hdc, _DWORD *a2) { return 0; }
/* {
HDC v2; // ebp
_DWORD *v3; // esi
_DWORD *v4; // eax
_DWORD *v5; // ebx
_DWORD *v6; // esi
v2 = hdc;
v3 = a2;
v4 = bn_prof_10002782(dword_10029460, 2, 0, 0);
v5 = v4;
v4[2] = v2;
v4[3] = *v3;
++v3;
v4[4] = *v3;
++v3;
v4[5] = *v3;
v4[6] = v3[1];
v4[7] = 0;
v4[8] = 0;
v6 = v4 + 9;
GetTextMetricsA(v2, (LPTEXTMETRICA)(v4 + 9));
v5[23] = *v6 + v5[13];
return v5;
} */
// ref: 0x10002456
signed int __fastcall bn_prof_10002456(int a1, const CHAR *a2, char a3, _DWORD *a4) { return 0; }
/* {
int v4; // esi
HGDIOBJ v6; // edi
int v7; // eax
int v8; // ecx
int v9; // edi
int v10; // eax
int v11; // eax
int v12; // eax
LPCSTR v13; // ebx
LONG v14; // ecx
int v15; // eax
int v16; // eax
int v17; // eax
int v18; // ecx
const CHAR *v19; // eax
int v20; // eax
int v21; // eax
COLORREF v22; // [esp-Ch] [ebp-2Ch]
struct tagSIZE Size; // [esp+4h] [ebp-1Ch]
COLORREF color; // [esp+Ch] [ebp-14h]
HGDIOBJ h; // [esp+10h] [ebp-10h]
int cchString; // [esp+14h] [ebp-Ch]
LPCSTR lpszString; // [esp+18h] [ebp-8h]
int nFit; // [esp+1Ch] [ebp-4h]
int v29; // [esp+28h] [ebp+8h]
v4 = a1;
lpszString = a2;
if ( !a1 )
return 0;
cchString = strlen(a2);
if ( a4 )
memset(a4, 0, 0x10u);
h = 0;
if ( a3 & 2 )
{
v6 = ::h;
v7 = dword_1002946C;
v22 = 16711680;
}
else
{
v6 = dword_10029450;
v7 = dword_10029458;
v22 = 0xFFFFFF;
}
v29 = v7;
color = SetTextColor(*(HDC *)(v4 + 8), v22);
if ( v6 )
h = SelectObject(*(HDC *)(v4 + 8), v6);
if ( a4 )
{
*a4 = *(_DWORD *)(v4 + 28);
a4[1] = *(_DWORD *)(v4 + 32);
}
do
{
while ( cchString > 0 && *(_WORD *)lpszString == 2573 )
{
v8 = *(_DWORD *)(v4 + 92);
cchString -= 2;
*(_DWORD *)(v4 + 32) += v8;
lpszString += 2;
*(_DWORD *)(v4 + 28) = 0;
}
if ( !cchString )
break;
nFit = 0;
GetTextExtentExPointA(
*(HDC *)(v4 + 8),
lpszString,
cchString,
*(_DWORD *)(v4 + 20) - *(_DWORD *)(v4 + 28) - *(_DWORD *)(v4 + 12) - v29 + 1,
&nFit,
0,
&Size);
v9 = nFit;
if ( nFit )
{
if ( nFit < cchString )
{
if ( nFit > 0 )
{
do
{
if ( isspace(lpszString[v9]) )
break;
--v9;
}
while ( v9 > 0 );
if ( v9 > 0 )
{
LABEL_26:
++v9;
goto LABEL_27;
}
}
if ( *(_DWORD *)(v4 + 28) > 0 )
{
if ( isspace(lpszString[v9]) )
goto LABEL_26;
LABEL_27:
nFit = v9;
}
}
v11 = 0;
if ( nFit > 0 )
{
while ( *(_WORD *)&lpszString[v11] != 2573 && lpszString[v11] != 9 )
{
if ( ++v11 >= nFit )
goto LABEL_34;
}
nFit = v11;
}
LABEL_34:
if ( a4 )
{
v12 = *(_DWORD *)(v4 + 28);
if ( v12 < *a4 )
*a4 = v12;
}
else
{
ExtTextOutA(
*(HDC *)(v4 + 8),
*(_DWORD *)(v4 + 28),
*(_DWORD *)(v4 + 32),
4u,
(const RECT *)(v4 + 12),
lpszString,
nFit,
0);
}
v13 = lpszString;
GetTextExtentPoint32A(*(HDC *)(v4 + 8), lpszString, nFit, &Size);
v14 = Size.cx;
if ( a4 )
{
v15 = Size.cx + *(_DWORD *)(v4 + 28);
if ( v15 > a4[2] )
a4[2] = v15;
v16 = Size.cy + *(_DWORD *)(v4 + 32);
if ( v16 > a4[3] )
a4[3] = v16;
}
v17 = nFit;
*(_DWORD *)(v4 + 28) += v14;
v18 = *(_DWORD *)(v4 + 28);
if ( v17 < cchString )
{
v19 = &v13[v17];
if ( *v19 == 9 )
{
++nFit;
*(_DWORD *)(v4 + 28) = 8 * v29 + v18 - v18 % (8 * v29);
}
else
{
if ( *(_WORD *)v19 == 2573 )
nFit += 2;
v20 = *(_DWORD *)(v4 + 92);
*(_DWORD *)(v4 + 28) = 0;
*(_DWORD *)(v4 + 32) += v20;
}
}
cchString -= nFit;
lpszString += nFit;
continue;
}
v10 = *(_DWORD *)(v4 + 92);
*(_DWORD *)(v4 + 28) &= nFit;
*(_DWORD *)(v4 + 32) += v10;
}
while ( cchString > 0 );
if ( *(_DWORD *)(v4 + 28) > *(_DWORD *)(v4 + 20) - *(_DWORD *)(v4 + 12) - v29 + 1 )
{
v21 = *(_DWORD *)(v4 + 92);
*(_DWORD *)(v4 + 28) = 0;
*(_DWORD *)(v4 + 32) += v21;
}
if ( h )
SelectObject(*(HDC *)(v4 + 8), h);
SetTextColor(*(HDC *)(v4 + 8), color);
return 1;
} */
// 10029458: using guessed type int dword_10029458;
// 1002946C: using guessed type int dword_1002946C;
// ref: 0x100026B9
signed int bn_prof_100026B9() { return 0; }
/* {
signed int result; // eax
result = 2139095040;
dword_10029454 = 2139095040;
return result;
} */
// 10029454: using guessed type int dword_10029454;
// ref: 0x100026C4
signed int UNKCALL bn_prof_100026C4(_DWORD *arg) { return 0; }
/* {
if ( !arg )
return 0;
bn_prof_10002749((char *)dword_10029460, arg);
return 1;
} */
// ref: 0x100026F0
void UNKCALL bn_prof_100026F0(_DWORD *arg) { return; }
/* {
_DWORD *v1; // esi
v1 = arg;
bn_prof_1000287D(arg);
bn_prof_10002890(v1 + 1);
} */
// ref: 0x10002749
int UNKCALL bn_prof_10002749(char *arg, _DWORD *a2) { return 0; }
/* {
int v2; // eax
int v3; // eax
int v4; // esi
v2 = (int)a2;
if ( !a2 )
v2 = (int)(arg + 4);
v3 = *(_DWORD *)(v2 + 4);
if ( v3 > 0 )
v4 = v3;
else
v4 = 0;
bn_prof_100027D8(a2);
SMemFree(a2, ".?AU_DRAWTEXT@@", -2, 0);
return v4;
} */
// 10010340: using guessed type int __stdcall SMemFree(_DWORD, _DWORD, _DWORD, _DWORD);
// ref: 0x10002782
_DWORD *UNKCALL bn_prof_10002782(int *arg, int a2, int a3, int a4) { return 0; }
/* {
int v4; // eax
int *v5; // edi
_DWORD *v6; // eax
_DWORD *v7; // esi
v4 = a4;
LOBYTE(v4) = a4 | 8;
v5 = arg;
v6 = (_DWORD *)SMemAlloc(a3 + 96, ".?AU_DRAWTEXT@@", -2, v4);
if ( v6 )
v7 = bn_prof_100027CE(v6);
else
v7 = 0;
if ( a2 )
bn_prof_1000280C(v5, v7, a2, 0);
return v7;
} */
// 10010364: using guessed type int __stdcall SMemAlloc(_DWORD, _DWORD, _DWORD, _DWORD);
// ref: 0x100027CE
_DWORD *UNKCALL bn_prof_100027CE(_DWORD *arg) { return 0; }
/* {
_DWORD *result; // eax
result = arg;
*arg = 0;
arg[1] = 0;
return result;
} */
// ref: 0x100027D8
void UNKCALL bn_prof_100027D8(_DWORD *arg) { return; }
/* {
_DWORD *v1; // ST00_4
v1 = arg;
bn_prof_10002890(arg);
bn_prof_10002890(v1);
} */
// ref: 0x1000280C
_DWORD *UNKCALL bn_prof_1000280C(int *arg, _DWORD *a2, int a3, _DWORD *a4) { return 0; }
/* {
int *v4; // edi
_DWORD *v5; // esi
_DWORD *result; // eax
int v7; // ecx
int v8; // edx
int v9; // ecx
int v10; // edx
v4 = arg;
v5 = a2;
if ( !a2 )
v5 = arg + 1;
if ( *v5 )
bn_prof_10002890(v5);
result = a4;
if ( !a4 )
result = v4 + 1;
if ( a3 == 1 )
{
*v5 = result;
v5[1] = result[1];
v8 = result[1];
v9 = *v4;
if ( v8 > 0 )
{
if ( v9 < 0 )
v9 = (int)result - *(_DWORD *)(*result + 4);
v10 = v9 + v8;
}
else
{
v10 = ~v8;
}
*(_DWORD *)v10 = v5;
result[1] = a2;
}
else if ( a3 == 2 )
{
v7 = *result;
*v5 = *result;
v5[1] = *(_DWORD *)(v7 + 4);
*(_DWORD *)(v7 + 4) = a2;
*result = v5;
}
return result;
} */
// ref: 0x1000287D
void UNKCALL bn_prof_1000287D(_DWORD *arg) { return; }
/* {
_DWORD *v1; // esi
_DWORD *v2; // ecx
v1 = arg;
while ( 1 )
{
v2 = (_DWORD *)v1[2];
if ( (signed int)v2 <= 0 )
break;
bn_prof_10002890(v2);
}
} */
// ref: 0x10002890
void UNKCALL bn_prof_10002890(_DWORD *arg) { return; }
/* {
int v1; // esi
int v2; // edx
int v3; // edx
v1 = *arg;
if ( *arg )
{
v2 = arg[1];
if ( v2 > 0 )
v3 = (int)arg + v2 - *(_DWORD *)(v1 + 4);
else
v3 = ~v2;
*(_DWORD *)v3 = v1;
*(_DWORD *)(*arg + 4) = arg[1];
*arg = 0;
arg[1] = 0;
}
} */