mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-28 02:31:15 +00:00
WIP
This commit is contained in:
parent
5ee268a36c
commit
58b2902293
@ -266,7 +266,7 @@ void MxDevice::Init(
|
|||||||
// FUNCTION: LEGO1 0x1009bec0
|
// FUNCTION: LEGO1 0x1009bec0
|
||||||
MxDeviceEnumerate::MxDeviceEnumerate()
|
MxDeviceEnumerate::MxDeviceEnumerate()
|
||||||
{
|
{
|
||||||
m_unk0x10 = FALSE;
|
m_initialized = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1009c070
|
// FUNCTION: LEGO1 0x1009c070
|
||||||
@ -388,7 +388,7 @@ HRESULT MxDeviceEnumerate::EnumDevicesCallback(
|
|||||||
// FUNCTION: LEGO1 0x1009c6c0
|
// FUNCTION: LEGO1 0x1009c6c0
|
||||||
MxResult MxDeviceEnumerate::DoEnumerate()
|
MxResult MxDeviceEnumerate::DoEnumerate()
|
||||||
{
|
{
|
||||||
if (m_unk0x10)
|
if (m_initialized)
|
||||||
return FAILURE;
|
return FAILURE;
|
||||||
|
|
||||||
HRESULT ret = DirectDrawEnumerate(DirectDrawEnumerateCallback, this);
|
HRESULT ret = DirectDrawEnumerate(DirectDrawEnumerateCallback, this);
|
||||||
@ -397,7 +397,7 @@ MxResult MxDeviceEnumerate::DoEnumerate()
|
|||||||
return FAILURE;
|
return FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_unk0x10 = TRUE;
|
m_initialized = TRUE;
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -418,9 +418,59 @@ const char* MxDeviceEnumerate::EnumerateErrorToString(HRESULT p_error)
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x1009ce60
|
// FUNCTION: LEGO1 0x1009ce60
|
||||||
MxS32 MxDeviceEnumerate::ParseDeviceName(const char* p_deviceId)
|
MxS32 MxDeviceEnumerate::ParseDeviceName(const char* p_deviceId)
|
||||||
{
|
{
|
||||||
|
if (!m_initialized)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
MxS32 num = -1;
|
||||||
|
MxS32 hex[4];
|
||||||
|
|
||||||
|
if (sscanf(p_deviceId, "%d 0x%x 0x%x 0x%x 0x%x", &num, &hex[0], &hex[1], &hex[2], &hex[3]) != 5)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (num < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
DeviceHex deviceHex;
|
||||||
|
memcpy(&deviceHex, hex, sizeof(deviceHex));
|
||||||
|
|
||||||
|
MxS32 result = ProcessDeviceBytes(num, deviceHex);
|
||||||
|
|
||||||
|
if (result < 0)
|
||||||
|
return ProcessDeviceBytes(-1, deviceHex);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x1009cf20
|
||||||
|
MxS32 MxDeviceEnumerate::ProcessDeviceBytes(MxS32 p_num, DeviceHex& p_deviceHex)
|
||||||
|
{
|
||||||
|
if (!m_initialized)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
MxS32 i = 0;
|
||||||
|
MxS32 j = 0;
|
||||||
|
DeviceHex deviceHex = p_deviceHex;
|
||||||
|
|
||||||
|
for (list<MxDeviceEnumerateElement>::iterator it = m_list.begin(); it != m_list.end(); it++) {
|
||||||
|
if (p_num >= 0 && p_num < i)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
for (list<MxDisplayMode>::iterator it2 = (*it).m_displayModes.begin(); it2 != (*it).m_displayModes.end();
|
||||||
|
it2++) {
|
||||||
|
MxDisplayMode displayMode = *it2;
|
||||||
|
|
||||||
|
if (displayMode.m_width == deviceHex.hex1 && displayMode.m_height == deviceHex.hex2 &&
|
||||||
|
displayMode.m_bitsPerPixel == deviceHex.hex3 && i == p_num)
|
||||||
|
return j;
|
||||||
|
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -150,6 +150,13 @@ struct MxDeviceEnumerateElement {
|
|||||||
// SIZE 0x14
|
// SIZE 0x14
|
||||||
class MxDeviceEnumerate {
|
class MxDeviceEnumerate {
|
||||||
public:
|
public:
|
||||||
|
struct DeviceHex {
|
||||||
|
MxS32 hex1;
|
||||||
|
MxS32 hex2;
|
||||||
|
MxS32 hex3;
|
||||||
|
MxS32 hex4;
|
||||||
|
};
|
||||||
|
|
||||||
MxDeviceEnumerate();
|
MxDeviceEnumerate();
|
||||||
// FUNCTION: LEGO1 0x1009c010
|
// FUNCTION: LEGO1 0x1009c010
|
||||||
~MxDeviceEnumerate() {}
|
~MxDeviceEnumerate() {}
|
||||||
@ -167,6 +174,7 @@ class MxDeviceEnumerate {
|
|||||||
);
|
);
|
||||||
const char* EnumerateErrorToString(HRESULT p_error);
|
const char* EnumerateErrorToString(HRESULT p_error);
|
||||||
MxS32 ParseDeviceName(const char* p_deviceId);
|
MxS32 ParseDeviceName(const char* p_deviceId);
|
||||||
|
MxS32 ProcessDeviceBytes(MxS32 p_num, DeviceHex& p_deviceHex);
|
||||||
MxResult FUN_1009d030(MxS32 p_und1, undefined** p_und2, undefined** p_und3);
|
MxResult FUN_1009d030(MxS32 p_und1, undefined** p_und2, undefined** p_und3);
|
||||||
MxResult FUN_1009d0d0();
|
MxResult FUN_1009d0d0();
|
||||||
MxResult FUN_1009d210();
|
MxResult FUN_1009d210();
|
||||||
@ -186,7 +194,7 @@ class MxDeviceEnumerate {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
list<MxDeviceEnumerateElement> m_list; // 0x04
|
list<MxDeviceEnumerateElement> m_list; // 0x04
|
||||||
MxBool m_unk0x10; // 0x10
|
MxBool m_initialized; // 0x10
|
||||||
};
|
};
|
||||||
|
|
||||||
// VTABLE: LEGO1 0x100d9cc8
|
// VTABLE: LEGO1 0x100d9cc8
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user