// ref: 0x10009480
signed int Progress_10009480() { return 0; }
/* {
	signed int result; // eax

	result = 2139095040;
	dword_1002A2EC = 2139095040;
	return result;
} */
// 1002A2EC: using guessed type int dword_1002A2EC;

// ref: 0x1000948B
int __stdcall UiProgressDialog(HWND window, char *msg, int a3, void *fnfunc, int a5) { return 0; }
/* {
	HWND v5; // eax
	BOOL result; // eax

	dword_1002A2E8 = -1;
	dword_1002A2F8 = 0;
	dword_1002A2F4 = a4;
	bEnable = a3;
	dword_1002A2F0 = a5;
	v5 = (HWND)SDlgCreateDialogParam(hInstance, "PROGRESS_DIALOG", a1, Progress_100094F4, a2);
	result = 0;
	if ( v5 )
	{
		Progress_1000991C(v5);
		if ( dword_1002A2E8 != 2 && dword_1002A2E8 != -1 )
			result = 1;
	}
	return result;
} */
// 1001045A: using guessed type int __stdcall SDlgCreateDialogParam(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
// 1002A2E8: using guessed type int dword_1002A2E8;
// 1002A2F0: using guessed type int dword_1002A2F0;
// 1002A2F4: using guessed type int (*dword_1002A2F4)(void);
// 1002A2F8: using guessed type int dword_1002A2F8;

// ref: 0x100094F4
int __stdcall Progress_100094F4(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { return 0; }
/* {
	HWND v4; // eax
	void *v5; // eax
	HWND v7; // eax

	if ( Msg == 2 )
	{
		ShowCursor(0);
		Progress_100095EC();
	}
	else if ( Msg > 0x103 )
	{
		if ( Msg <= 0x105 )
		{
			v7 = (HWND)SDrawGetFrameWindow();
			SendMessageA(v7, Msg, wParam, lParam);
		}
		else
		{
			switch ( Msg )
			{
				case 0x110u:
					Progress_10009675(hWnd, (const CHAR *)lParam);
					v5 = (void *)SDrawGetFrameWindow();
					local_1000812B(v5);
					local_1000812B(hWnd);
					ShowCursor(1);
					return 1;
				case 0x111u:
					if ( (_WORD)wParam == 2 )
					{
						SDlgKillTimer(hWnd, 1);
						v4 = GetParent(hWnd);
						if ( (HWND)SDrawGetFrameWindow() == v4 )
							Fade_100072BE(10);
						Progress_100098B0();
					}
					break;
				case 0x113u:
					Progress_100098C5(hWnd);
					break;
			}
		}
	}
	return SDlgDefDialogProc(hWnd, Msg, wParam, lParam);
} */
// 1001037C: using guessed type int __stdcall SDlgDefDialogProc(_DWORD, _DWORD, _DWORD, _DWORD);
// 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow();
// 10010418: using guessed type int __stdcall SDlgKillTimer(_DWORD, _DWORD);

// ref: 0x100095EC
void *Progress_100095EC() { return 0; }
/* {
	int result; // eax

	if ( dword_1002A318 )
	{
		SMemFree(dword_1002A318, "C:\\Src\\Diablo\\DiabloUI\\Progress.cpp", 88, 0);
		dword_1002A318 = 0;
	}
	if ( dword_1002A31C )
	{
		SMemFree(dword_1002A31C, "C:\\Src\\Diablo\\DiabloUI\\Progress.cpp", 92, 0);
		dword_1002A31C = 0;
	}
	if ( dword_1002A320 )
	{
		SMemFree(dword_1002A320, "C:\\Src\\Diablo\\DiabloUI\\Progress.cpp", 96, 0);
		dword_1002A320 = 0;
	}
	if ( dword_1002A324 )
	{
		SMemFree(dword_1002A324, "C:\\Src\\Diablo\\DiabloUI\\Progress.cpp", 100, 0);
		dword_1002A324 = 0;
	}
	result = dword_1002A328;
	if ( dword_1002A328 )
	{
		result = SMemFree(dword_1002A328, "C:\\Src\\Diablo\\DiabloUI\\Progress.cpp", 104, 0);
		dword_1002A328 = 0;
	}
	return result;
} */
// 10010340: using guessed type int __stdcall SMemFree(_DWORD, _DWORD, _DWORD, _DWORD);
// 1002A318: using guessed type int dword_1002A318;
// 1002A31C: using guessed type int dword_1002A31C;
// 1002A320: using guessed type int dword_1002A320;
// 1002A324: using guessed type int dword_1002A324;
// 1002A328: using guessed type int dword_1002A328;

// ref: 0x10009675
BOOL __fastcall Progress_10009675(HWND hWnd, const CHAR *a2) { return 0; }
/* {
	HWND v2; // ebx
	HWND v3; // esi
	char *v4; // esi
	HWND v5; // eax
	HWND v6; // esi
	struct tagRECT Rect; // [esp+Ch] [ebp-28h]
	char v9; // [esp+1Ch] [ebp-18h]
	int v10; // [esp+24h] [ebp-10h]
	int v11; // [esp+28h] [ebp-Ch]
	LPCSTR lpString; // [esp+2Ch] [ebp-8h]
	HWND v13; // [esp+30h] [ebp-4h]

	v2 = hWnd;
	lpString = a2;
	v10 = 2;
	v11 = 0;
	if ( dword_1002A2F0 )
		SDlgSetTimer(hWnd, 1, 0x3E8u / dword_1002A2F0, 0);
	else
		SDlgSetTimer(hWnd, 1, 50, 0);
	local_10007944((int)v2, 0, &byte_10029448, -1, 1, (int)"ui_art\\spopup.pcx", &dword_1002A318, 0, 0);
	v3 = GetParent(v2);
	if ( (HWND)SDrawGetFrameWindow() == v3 )
		Fade_100073EF(v2);
	v4 = local_10007895(0);
	SDrawUpdatePalette(0, 10, v4, 0);
	SDrawUpdatePalette(112, 144, v4 + 448, 1);
	local_100078BE((int)"ui_art\\but_sml.pcx", &dword_1002A31C, &v9);
	local_10007B1B(v2, &v10, dword_1002A31C, &v9);
	local_100078BE((int)"ui_art\\prog_bg.pcx", &dword_1002A320, &dword_1002A310);
	local_100078BE((int)"ui_art\\prog_fil.pcx", &dword_1002A324, &dword_1002A308);
	v13 = GetDlgItem(v2, 1030);
	GetClientRect(v13, &Rect);
	dword_1002A328 = SMemAlloc(Rect.right * Rect.bottom, "C:\\Src\\Diablo\\DiabloUI\\Progress.cpp", 170, 0);
	dword_1002A300 = Rect.right;
	dword_1002A304 = Rect.bottom;
	SDlgSetBitmapI(v13, 0, 0, -1, 1, dword_1002A328, 0, Rect.right, Rect.bottom, -1);
	Progress_10009805(v2, 0);
	v5 = GetDlgItem(v2, 1031);
	SetWindowTextA(v5, lpString);
	v6 = GetDlgItem(v2, 2);
	ShowWindow(v6, bEnable != 0);
	return EnableWindow(v6, bEnable);
} */
// 10010364: using guessed type int __stdcall SMemAlloc(_DWORD, _DWORD, _DWORD, _DWORD);
// 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow();
// 100103FA: using guessed type int __stdcall SDrawUpdatePalette(_DWORD, _DWORD, _DWORD, _DWORD);
// 10010400: using guessed type int __stdcall SDlgSetBitmapI(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
// 10010412: using guessed type int __stdcall SDlgSetTimer(_DWORD, _DWORD, _DWORD, _DWORD);
// 1002A2F0: using guessed type int dword_1002A2F0;
// 1002A300: using guessed type int dword_1002A300;
// 1002A304: using guessed type int dword_1002A304;
// 1002A308: using guessed type int dword_1002A308;
// 1002A310: using guessed type int dword_1002A310;
// 1002A318: using guessed type int dword_1002A318;
// 1002A31C: using guessed type int dword_1002A31C;
// 1002A320: using guessed type int dword_1002A320;
// 1002A324: using guessed type int dword_1002A324;
// 1002A328: using guessed type int dword_1002A328;

// ref: 0x10009805
BOOL __fastcall Progress_10009805(HWND hWnd, int a2) { return 0; }
/* {
	HWND v2; // edi
	struct tagRECT Rect; // [esp+8h] [ebp-18h]
	HWND hWnda; // [esp+18h] [ebp-8h]
	int v6; // [esp+1Ch] [ebp-4h]

	v2 = hWnd;
	v6 = a2;
	hWnda = GetDlgItem(hWnd, 1030);
	SBltROP3(
		dword_1002A328,
		dword_1002A320,
		dword_1002A300,
		dword_1002A304,
		dword_1002A300,
		dword_1002A310,
		0,
		13369376);
	SBltROP3(
		dword_1002A328,
		dword_1002A324,
		v6 * dword_1002A300 / 100,
		dword_1002A304,
		dword_1002A300,
		dword_1002A308,
		0,
		13369376);
	GetWindowRect(hWnda, &Rect);
	ScreenToClient(v2, (LPPOINT)&Rect);
	ScreenToClient(v2, (LPPOINT)&Rect.right);
	return InvalidateRect(v2, &Rect, 0);
} */
// 100103F4: using guessed type int __stdcall SBltROP3(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
// 1002A300: using guessed type int dword_1002A300;
// 1002A304: using guessed type int dword_1002A304;
// 1002A308: using guessed type int dword_1002A308;
// 1002A310: using guessed type int dword_1002A310;
// 1002A320: using guessed type int dword_1002A320;
// 1002A324: using guessed type int dword_1002A324;
// 1002A328: using guessed type int dword_1002A328;

// ref: 0x100098B0
void Progress_100098B0() { return; }
/* {
	dword_1002A2E8 = 2;
	dword_1002A2F8 = 1;
} */
// 1002A2E8: using guessed type int dword_1002A2E8;
// 1002A2F8: using guessed type int dword_1002A2F8;

// ref: 0x100098C5
void UNKCALL Progress_100098C5(HWND hWnd) { return; }
/* {
	HWND v1; // esi
	int v2; // eax
	HWND v3; // edi
	int v4; // edx

	v1 = hWnd;
	v2 = dword_1002A2F4();
	if ( v2 >= 100 )
	{
		SDlgKillTimer(v1, 1);
		v3 = GetParent(v1);
		if ( (HWND)SDrawGetFrameWindow() == v3 )
			Fade_100072BE(10);
		Progress_100098B0();
		dword_1002A2E8 &= v4;
	}
	else
	{
		Progress_10009805(v1, v2);
	}
} */
// 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow();
// 10010418: using guessed type int __stdcall SDlgKillTimer(_DWORD, _DWORD);
// 1002A2E8: using guessed type int dword_1002A2E8;
// 1002A2F4: using guessed type int (*dword_1002A2F4)(void);

// ref: 0x1000991C
BOOL UNKCALL Progress_1000991C(HWND hWnd) { return 0; }
/* {
	HWND v1; // edi
	BOOL result; // eax
	struct tagMSG Msg; // [esp+Ch] [ebp-1Ch]

	v1 = hWnd;
	for ( result = IsWindow(hWnd); result; result = IsWindow(v1) )
	{
		if ( dword_1002A2F8 )
			goto LABEL_12;
		if ( PeekMessageA(&Msg, 0, 0, 0, 1u) )
		{
			if ( Msg.message == 18 )
			{
				PostQuitMessage(Msg.wParam);
			}
			else if ( !IsDialogMessageA(v1, &Msg) )
			{
				TranslateMessage(&Msg);
				DispatchMessageA(&Msg);
			}
		}
		else
		{
			SDlgCheckTimers();
			SDlgUpdateCursor();
		}
	}
	if ( !dword_1002A2F8 )
		return result;
LABEL_12:
	result = DestroyWindow(v1);
	dword_1002A2F8 = 0;
	return result;
} */
// 10010460: using guessed type _DWORD __stdcall SDlgUpdateCursor();
// 10010466: using guessed type _DWORD __stdcall SDlgCheckTimers();
// 1002A2F8: using guessed type int dword_1002A2F8;
