diff --git a/src/OpenSHC/Util/Timing/Stopwatch/Constructor_Stopwatch.cpp b/src/OpenSHC/Util/Timing/Stopwatch/Constructor_Stopwatch.cpp new file mode 100644 index 000000000..e5cdf3128 --- /dev/null +++ b/src/OpenSHC/Util/Timing/Stopwatch/Constructor_Stopwatch.cpp @@ -0,0 +1,17 @@ +#include "../Stopwatch.func.hpp" + +namespace OpenSHC { +namespace Util { + namespace Timing { + + // FUNCTION: STRONGHOLDCRUSADER 0x0046CEC0 + Stopwatch* Stopwatch::Constructor_Stopwatch() + { + this->running_0x4 = FALSE; + this->duration_0x0 = 0; + return this; + } + + } +} +} diff --git a/src/OpenSHC/Util/Timing/Stopwatch/start.cpp b/src/OpenSHC/Util/Timing/Stopwatch/start.cpp new file mode 100644 index 000000000..8f1feef1d --- /dev/null +++ b/src/OpenSHC/Util/Timing/Stopwatch/start.cpp @@ -0,0 +1,16 @@ +#include "../Stopwatch.func.hpp" + +namespace OpenSHC { +namespace Util { + namespace Timing { + + // FUNCTION: STRONGHOLDCRUSADER 0x0046CED0 + void Stopwatch::start() + { + this->startTime_0x8 = timeGetTime(); + this->running_0x4 = TRUE; + } + + } +} +} diff --git a/src/OpenSHC/Util/Timing/Stopwatch/stop.cpp b/src/OpenSHC/Util/Timing/Stopwatch/stop.cpp new file mode 100644 index 000000000..9d3991d8c --- /dev/null +++ b/src/OpenSHC/Util/Timing/Stopwatch/stop.cpp @@ -0,0 +1,20 @@ +#include "../Stopwatch.func.hpp" + +namespace OpenSHC { +namespace Util { + namespace Timing { + + // FUNCTION: STRONGHOLDCRUSADER 0x0046CEF0 + void Stopwatch::stop() + { + if (!this->running_0x4) { + return; + } + this->stopTime_0xc = timeGetTime(); + this->running_0x4 = FALSE; + this->duration_0x0 = this->stopTime_0xc - this->startTime_0x8; + } + + } +} +} diff --git a/src/OpenSHC/Util/WideCharMultiByteState/multiByteToWideCharWithSize.cpp b/src/OpenSHC/Util/WideCharMultiByteState/multiByteToWideCharWithSize.cpp new file mode 100644 index 000000000..316bcaa93 --- /dev/null +++ b/src/OpenSHC/Util/WideCharMultiByteState/multiByteToWideCharWithSize.cpp @@ -0,0 +1,19 @@ +#include "../WideCharMultiByteState.func.hpp" + +#include "OpenSHC/Globals/DAT_TextManagerObject.hpp" + +namespace OpenSHC { +namespace Util { + + // FUNCTION: STRONGHOLDCRUSADER 0x0046B140 + int WideCharMultiByteState::multiByteToWideCharWithSize( + LPWSTR lpWideCharStr, LPCSTR lpMultiByteStr, int numberOfSymbols) + { + int numberOfCharsWritten = MultiByteToWideChar(DAT_TextManagerObject::instance.codePage, MB_PRECOMPOSED, + lpMultiByteStr, numberOfSymbols, lpWideCharStr, numberOfSymbols); + lpWideCharStr[numberOfSymbols] = L'\0'; + return numberOfCharsWritten; + } + +} +} diff --git a/src/OpenSHC/Util/WideCharMultiByteState/multiByteToWideCharacter.cpp b/src/OpenSHC/Util/WideCharMultiByteState/multiByteToWideCharacter.cpp new file mode 100644 index 000000000..8157347a6 --- /dev/null +++ b/src/OpenSHC/Util/WideCharMultiByteState/multiByteToWideCharacter.cpp @@ -0,0 +1,17 @@ +#include "../WideCharMultiByteState.func.hpp" + +#include "OpenSHC/Globals/DAT_TextManagerObject.hpp" + +namespace OpenSHC { +namespace Util { + + // FUNCTION: STRONGHOLDCRUSADER 0x0046B0D0 + int WideCharMultiByteState::multiByteToWideCharacter(LPWSTR lpWideCharStr, LPCSTR lpMultiByteStr) + { + int const numberOfBytes = strlen(lpMultiByteStr) + 1; // includes null terminator + return MultiByteToWideChar(DAT_TextManagerObject::instance.codePage, MB_PRECOMPOSED, lpMultiByteStr, + numberOfBytes, lpWideCharStr, numberOfBytes); + } + +} +} diff --git a/src/OpenSHC/Util/WideCharMultiByteState/singleMultiByteToWideChar.cpp b/src/OpenSHC/Util/WideCharMultiByteState/singleMultiByteToWideChar.cpp new file mode 100644 index 000000000..de5f99117 --- /dev/null +++ b/src/OpenSHC/Util/WideCharMultiByteState/singleMultiByteToWideChar.cpp @@ -0,0 +1,16 @@ +#include "../WideCharMultiByteState.func.hpp" + +namespace OpenSHC { +namespace Util { + + // FUNCTION: STRONGHOLDCRUSADER 0x0046B1B0 + WCHAR WideCharMultiByteState::singleMultiByteToWideChar(char character) + { + WCHAR buffer[10]; + MACRO_CALL_MEMBER(OpenSHC::Util::WideCharMultiByteState_Func::multiByteToWideCharWithSize, this)( + buffer, &character, 1); + return buffer[0]; + } + +} +} diff --git a/src/OpenSHC/Util/WideCharMultiByteState/singleWideCharToMultiByte.cpp b/src/OpenSHC/Util/WideCharMultiByteState/singleWideCharToMultiByte.cpp new file mode 100644 index 000000000..d12a9b171 --- /dev/null +++ b/src/OpenSHC/Util/WideCharMultiByteState/singleWideCharToMultiByte.cpp @@ -0,0 +1,16 @@ +#include "../WideCharMultiByteState.func.hpp" + +namespace OpenSHC { +namespace Util { + + // FUNCTION: STRONGHOLDCRUSADER 0x0046B170 + char WideCharMultiByteState::singleWideCharToMultiByte(WCHAR wideChar) + { + char _byteBuffer[12]; + MACRO_CALL_MEMBER(OpenSHC::Util::WideCharMultiByteState_Func::wideCharToMultiByteWithSize, this)( + _byteBuffer, &wideChar, 1); + return _byteBuffer[0]; + } + +} +} diff --git a/src/OpenSHC/Util/WideCharMultiByteState/wideCharToMultiByteComplete.cpp b/src/OpenSHC/Util/WideCharMultiByteState/wideCharToMultiByteComplete.cpp new file mode 100644 index 000000000..591dace1f --- /dev/null +++ b/src/OpenSHC/Util/WideCharMultiByteState/wideCharToMultiByteComplete.cpp @@ -0,0 +1,17 @@ +#include "../WideCharMultiByteState.func.hpp" + +#include "OpenSHC/Globals/DAT_TextManagerObject.hpp" + +namespace OpenSHC { +namespace Util { + + // FUNCTION: STRONGHOLDCRUSADER 0x0046B080 + int WideCharMultiByteState::wideCharToMultiByteComplete(LPSTR charOut, LPCWSTR wideCharIn) + { + int numberOfWideChars = wcslen(wideCharIn) + 1; // +1 for null terminator + return WideCharToMultiByte(DAT_TextManagerObject::instance.codePage, NULL, wideCharIn, numberOfWideChars, + charOut, numberOfWideChars, NULL, NULL); + } + +} +} diff --git a/src/OpenSHC/Util/WideCharMultiByteState/wideCharToMultiByteWithSize.cpp b/src/OpenSHC/Util/WideCharMultiByteState/wideCharToMultiByteWithSize.cpp new file mode 100644 index 000000000..c5924f5d6 --- /dev/null +++ b/src/OpenSHC/Util/WideCharMultiByteState/wideCharToMultiByteWithSize.cpp @@ -0,0 +1,19 @@ +#include "../WideCharMultiByteState.func.hpp" + +#include "OpenSHC/Globals/DAT_TextManagerObject.hpp" + +namespace OpenSHC { +namespace Util { + + // FUNCTION: STRONGHOLDCRUSADER 0x0046B110 + int WideCharMultiByteState::wideCharToMultiByteWithSize( + LPSTR lpMultiByteStr, LPWSTR lpWideCharStr, int numOfSymbols) + { + int const _numOfBytesWritten = WideCharToMultiByte(DAT_TextManagerObject::instance.codePage, NULL, + lpWideCharStr, numOfSymbols, lpMultiByteStr, numOfSymbols, NULL, NULL); + lpMultiByteStr[numOfSymbols] = '\0'; + return _numOfBytesWritten; + } + +} +} diff --git a/status/addresses-SHC-3BB0A8C1.txt b/status/addresses-SHC-3BB0A8C1.txt index b80b8635f..f9e104f98 100644 --- a/status/addresses-SHC-3BB0A8C1.txt +++ b/status/addresses-SHC-3BB0A8C1.txt @@ -20729,17 +20729,17 @@ SHC_3BB0A8C1_0x0046AE80 | 100.0% | Reimplemented SHC_3BB0A8C1_0x0046AEC0 | 100.0% | Reimplemented -SHC_3BB0A8C1_0x0046B080 | 0.0% | Pending +SHC_3BB0A8C1_0x0046B080 | 100.0% | Reimplemented -SHC_3BB0A8C1_0x0046B0D0 | 0.0% | Pending +SHC_3BB0A8C1_0x0046B0D0 | 100.0% | Reimplemented -SHC_3BB0A8C1_0x0046B110 | 0.0% | Pending +SHC_3BB0A8C1_0x0046B110 | 100.0% | Reimplemented -SHC_3BB0A8C1_0x0046B140 | 0.0% | Pending +SHC_3BB0A8C1_0x0046B140 | 100.0% | Reimplemented -SHC_3BB0A8C1_0x0046B170 | 0.0% | Pending +SHC_3BB0A8C1_0x0046B170 | 100.0% | Reimplemented -SHC_3BB0A8C1_0x0046B1B0 | 0.0% | Pending +SHC_3BB0A8C1_0x0046B1B0 | 100.0% | Reimplemented SHC_3BB0A8C1_0x0046B1F0 | 0.0% | Pending @@ -20967,11 +20967,11 @@ SHC_3BB0A8C1_0x0046CEAC | 0.0% | Pending SHC_3BB0A8C1_0x0046CEB0 | 0.0% | Pending -SHC_3BB0A8C1_0x0046CEC0 | 0.0% | Pending +SHC_3BB0A8C1_0x0046CEC0 | 100.0% | Reimplemented -SHC_3BB0A8C1_0x0046CED0 | 0.0% | Pending +SHC_3BB0A8C1_0x0046CED0 | 100.0% | Reimplemented -SHC_3BB0A8C1_0x0046CEF0 | 0.0% | Pending +SHC_3BB0A8C1_0x0046CEF0 | 100.0% | Reimplemented SHC_3BB0A8C1_0x0046CF10 | 0.0% | Pending