From 982a89b6da153019a3e37ebf1920b11a831ed10f Mon Sep 17 00:00:00 2001 From: Adam Heinermann Date: Tue, 23 Sep 2025 17:22:03 -0700 Subject: [PATCH] feat(test): add support for testing against storm.dll --- CMakeLists.txt | 7 +- CONTRIBUTING.md | 23 ++ storm/String.cpp | 2 +- storm/String.hpp | 2 +- test/CMakeLists.txt | 21 +- test/String.cpp | 9 + test/stormdll/CMakeLists.txt | 3 + test/stormdll/storm.def | 471 +++++++++++++++++++++++++++++++++++ test/stormdll/stormstubs.cpp | 117 +++++++++ 9 files changed, 648 insertions(+), 7 deletions(-) create mode 100644 CONTRIBUTING.md create mode 100644 test/stormdll/CMakeLists.txt create mode 100644 test/stormdll/storm.def create mode 100644 test/stormdll/stormstubs.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 295cb6f..76729bb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -79,5 +79,10 @@ if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_BUILD_TYPE STREQUAL "Debug") ) endif() -add_subdirectory(storm) +if(WHOA_TEST_STORMDLL) + add_definitions(-DWHOA_TEST_STORMDLL) + add_subdirectory(test/stormdll) +else() + add_subdirectory(storm) +endif() add_subdirectory(test) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..9b4e5e5 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,23 @@ +## Running Tests + +### Coverage +Only runnable with GCC. + +1. `sudo apt install lcov` +2. `mkdir build` +3. `cd build` +4. `cmake -DCMAKE_BUILD_TYPE=Debug ..` +5. `make StormCoverage` + +Open the resulting `html` file for the report. + + +### Against an original copy of Storm.dll +Only runnable on Windows. Allows running tests against the original `storm.dll` rather than against the recreated code, to test accuracy. + +1. `mkdir build` +2. `cd build` +2. `cmake -DWHOA_TEST_STORMDLL=1 -DWHOA_STORM_FLAVOR=SC1 -A Win32 ..`. +3. `cmake --build .` +4. Copy `storm.dll` from your Starcraft 1.17 installation folder to the same directory as `StormTest.exe`. +5. Run `StormTest.exe` from the command line. diff --git a/storm/String.cpp b/storm/String.cpp index b8a6fbb..33116cd 100644 --- a/storm/String.cpp +++ b/storm/String.cpp @@ -500,7 +500,7 @@ size_t STORMCDECL SStrPrintf(char* dest, size_t maxchars, const char* format, .. return ISStrVPrintf(dest, maxchars, format, va); } -size_t STORMAPI SStrVPrintf(char* dest, size_t maxchars, const char* format, va_list arglist) { +size_t STORMCDECL SStrVPrintf(char* dest, size_t maxchars, const char* format, va_list arglist) { STORM_VALIDATE_BEGIN; STORM_VALIDATE(dest); STORM_VALIDATE(format); diff --git a/storm/String.hpp b/storm/String.hpp index 7a0cc73..f48cb72 100644 --- a/storm/String.hpp +++ b/storm/String.hpp @@ -38,7 +38,7 @@ uint32_t STORMAPI SStrPack(char* dest, const char* source, uint32_t destsize); size_t STORMCDECL SStrPrintf(char* dest, size_t maxchars, const char* format, ...); -size_t STORMAPI SStrVPrintf(char* dest, size_t maxchars, const char* format, va_list arglist); +size_t STORMCDECL SStrVPrintf(char* dest, size_t maxchars, const char* format, va_list arglist); char* STORMAPI SStrStr(char* string, const char* search); diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 572e4ed..7e07469 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,7 +1,20 @@ -file(GLOB_RECURSE TEST_SOURCES - "*.cpp" - "big/*.cpp" -) + +if(WHOA_TEST_STORMDLL) + set(TEST_SOURCES + #Big.cpp + #Event.cpp + Memory.cpp + Region.cpp + String.cpp + Test.cpp + Unicode.cpp + ) +else() + file(GLOB TEST_SOURCES + "*.cpp" + "big/*.cpp" + ) +endif() if(WHOA_SYSTEM_MAC) set_source_files_properties(${TEST_SOURCES} diff --git a/test/String.cpp b/test/String.cpp index 437fa86..7d83288 100644 --- a/test/String.cpp +++ b/test/String.cpp @@ -41,6 +41,7 @@ TEST_CASE("SStrChr const", "[string]") { } } +#if !defined(WHOA_TEST_STORMDLL) TEST_CASE("SStrChr", "[string]") { char string[] = "foobar"; @@ -77,6 +78,7 @@ TEST_CASE("SStrChr", "[string]") { REQUIRE(result == nullptr); } } +#endif TEST_CASE("SStrChrR const", "[string]") { const char* string = "ffoobbaarr"; @@ -120,6 +122,7 @@ TEST_CASE("SStrChrR const", "[string]") { } } +#if !defined(WHOA_TEST_STORMDLL) TEST_CASE("SStrChrR", "[string]") { char string[] = "ffoobbaarr"; @@ -162,6 +165,7 @@ TEST_CASE("SStrChrR", "[string]") { REQUIRE(result == nullptr); } } +#endif TEST_CASE("SStrCmp", "[string]") { SECTION("compares two strings that exactly match correctly") { @@ -221,6 +225,8 @@ TEST_CASE("SStrCmpI", "[string]") { } } +#if !defined(WHOA_TEST_STORMDLL) +// TODO: SStrDup in SC only has 1 arg TEST_CASE("SStrDupA", "[string]") { SECTION("duplicates string correctly") { auto string1 = "foo bar"; @@ -244,6 +250,7 @@ TEST_CASE("SStrDupA", "[string]") { REQUIRE(newPtr == true); } } +#endif struct TestHash { const char *str; @@ -346,6 +353,7 @@ TEST_CASE("SStrHash", "[string]") { } } +#if !defined(WHOA_TEST_STORMDLL) TEST_CASE("SStrHashHT", "[string]") { SECTION("hashes simple string correctly") { auto hash = SStrHashHT("foo"); @@ -363,6 +371,7 @@ TEST_CASE("SStrHashHT", "[string]") { REQUIRE(hashForwardSlash == hashBackSlash); } } +#endif TEST_CASE("SStrLen", "[string]") { SECTION("calculates string length correctly") { diff --git a/test/stormdll/CMakeLists.txt b/test/stormdll/CMakeLists.txt new file mode 100644 index 0000000..549a4ea --- /dev/null +++ b/test/stormdll/CMakeLists.txt @@ -0,0 +1,3 @@ + +add_library(storm SHARED stormstubs.cpp storm.def) +target_include_directories(storm PRIVATE "../..") diff --git a/test/stormdll/storm.def b/test/stormdll/storm.def new file mode 100644 index 0000000..f3744eb --- /dev/null +++ b/test/stormdll/storm.def @@ -0,0 +1,471 @@ +LIBRARY "Storm" + +EXPORTS + ; Networking + ;SNetCreateGame @101 NONAME + ;SNetDestroy @102 NONAME + ;SNetEnumDevices @103 NONAME + ;SNetEnumGames @104 NONAME + ;SNetEnumProviders @105 NONAME + ;SNetDropPlayer @106 NONAME + ;SNetGetGameInfo @107 NONAME + ;SNetGetNetworkLatency @108 NONAME + ;SNetGetNumPlayers @109 NONAME + ;SNetGetOwnerTurnsWaiting @110 NONAME + ;SNetGetPerformanceData @111 NONAME + ;SNetGetPlayerCaps @112 NONAME + ;SNetGetPlayerName @113 NONAME + ;SNetGetProviderCaps @114 NONAME + ;SNetGetTurnsInTransit @115 NONAME + ;SNetInitializeDevice @116 NONAME + ;SNetInitializeProvider @117 NONAME + ;SNetJoinGame @118 NONAME + ;SNetLeaveGame @119 NONAME + ;SNetPerformUpgrade @120 NONAME + ;SNetReceiveMessage @121 NONAME + ;SNetReceiveTurns @122 NONAME + ;SNetRegisterEventHandler @123 NONAME + ;SNetResetLatencyMeasurements @124 NONAME + ;SNetSelectGame @125 NONAME + ;SNetSelectProvider @126 NONAME + ;SNetSendMessage @127 NONAME + ;SNetSendTurn @128 NONAME + ;SNetSetBasePlayer @129 NONAME + ;SNetSetGameMode @130 NONAME + ;SNetUnregisterEventHandler @131 NONAME + ;SNetGetOwnerId @132 NONAME + ;SNetEnumGamesEx @133 NONAME + ;SNetSendServerChatCommand @134 NONAME + ;SNetSendDatagram @135 NONAME + ;SNetReceiveDatagram @136 NONAME + ;SNetDisconnectAll @137 NONAME + ;SNetCreateLadderGame @138 NONAME + ;SNetReportGameResult @139 NONAME + ;SNetCheckDataFile @140 NONAME + ;SNetSendLeagueCommand @141 NONAME + ;SNetSendReplayPath @142 NONAME + ;SNetGetLeagueName @143 NONAME + ;SNetGetPlayerNames @144 NONAME + ;SNetLeagueLogout @145 NONAME + ;SNetGetLeaguePlayerName @146 NONAME + + ; Dlg + ;SDlgBeginPaint @201 NONAME + ;SDlgBltToWindowI @202 NONAME + ;SDlgCheckTimers @203 NONAME + ;SDlgCreateDialogIndirectParam @204 NONAME + ;SDlgCreateDialogParam @205 NONAME + ;SDlgDefDialogProc @206 NONAME + ;SDlgDestroy @207 NONAME + ;SDlgDialogBoxIndirectParam @208 NONAME + ;SDlgDialogBoxParam @209 NONAME + ;SDlgDrawBitmap @210 NONAME + ;SDlgEndDialog @211 NONAME + ;SDlgEndPaint @212 NONAME + ;SDlgKillTimer @213 NONAME + ;SDlgSetBaseFont @214 NONAME + ;SDlgSetBitmapI @215 NONAME + ;SDlgSetControlBitmaps @216 NONAME + ;SDlgSetCursor @217 NONAME + ;SDlgSetSystemCursor @218 NONAME + ;SDlgSetTimer @219 NONAME + ;SDlgUpdateCursor @220 NONAME + ;SDlgBltToWindowE @221 NONAME + ;SDlgSetBitmapE @222 NONAME + ;SDlgSetLocale @223 NONAME + ;SDlgSetThrottle @224 NONAME + + ; File + ;SFileAuthenticateArchive @251 NONAME + ;SFileCloseArchive @252 NONAME + ;SFileCloseFile @253 NONAME + ;SFileDdaBegin @254 NONAME + ;SFileDdaBeginEx @255 NONAME + ;SFileDdaDestroy @256 NONAME + ;SFileDdaEnd @257 NONAME + ;SFileDdaGetPos @258 NONAME + ;SFileDdaGetVolume @259 NONAME + ;SFileDdaInitialize @260 NONAME + ;SFileDdaSetVolume @261 NONAME + ;SFileDestroy @262 NONAME + ;SFileEnableDirectAccess @263 NONAME + ;SFileGetFileArchive @264 NONAME + ;SFileGetFileSize @265 NONAME + ;SFileOpenArchive @266 NONAME + ;SFileOpenFile @267 NONAME + ;SFileOpenFileEx @268 NONAME + ;SFileReadFile @269 NONAME + ;SFileSetBasePath @270 NONAME + ;SFileSetFilePointer @271 NONAME + ;SFileSetLocale @272 NONAME + ;SFileGetBasePath @273 NONAME + ;SFileSetIoErrorMode @274 NONAME + ;SFileGetArchiveName @275 NONAME + ;SFileGetFileName @276 NONAME + ;SFileGetArchiveInfo @277 NONAME + ;SFileSetPlatform @278 NONAME + ;SFileLoadFile @279 NONAME + ;SFileUnloadFile @280 NONAME + ;SFileLoadFileEx @281 NONAME + ;SFilePrioritizeRequest @282 NONAME + ;SFileCancelRequest @283 NONAME + ;SFileSetAsyncBudget @284 NONAME + ;SFileSetDataChunkSize @285 NONAME + ;SFileEnableSeekOptimization @286 NONAME + ;SFileReadFileEx @287 NONAME + ;SFileFileExists @288 NONAME + ;SFileFileExistsEx @289 NONAME + ;SFileReadFileEx2 @290 NONAME + ;SFileReadFile2 @291 NONAME + ;SFileLoadFile2 @292 NONAME + ;SFileOpenFileAsArchive @293 NONAME + ;SFileGetLocale @294 NONAME + ;SFileGetInstancePath @295 NONAME + ;SFileGetSavePath @296 NONAME + ;SFileSetSavePath @297 NONAME + ;SFileAuthenticateArchiveEx @299 NONAME + ;SFileOpenPathAsArchive @300 NONAME + + ; Main + ; This is the only *Destroy function exported, tests will need to use it instead + ;StormDestroy @301 NONAME + ;StormGetInstance @302 NONAME + ;StormGetOption @303 NONAME + ;StormSetOption @304 NONAME + + ; Blit + ;SBltDestroy @311 NONAME + ;SBltGetSCode @312 NONAME + ;SBltROP3 @313 NONAME + ;SBltROP3Clipped @314 NONAME + ;SBltROP3Tiled @315 NONAME + + ; BMP + ;SBmpDecodeImage @321 NONAME + ;SBmpLoadImage @323 NONAME + ;SBmpSaveImage @324 NONAME + ;SBmpAllocLoadImage @325 NONAME + ;SBmpSaveImageEx @326 NONAME + ;SBmpRealign @327 NONAME + ;SBmpGetAligned @328 NONAME + + ; SCode + ;SCodeCompile @331 NONAME + ;SCodeDelete @332 NONAME + ;SCodeDestroy @333 NONAME + ;SCodeExecute @334 NONAME + ;SCodeGetPseudocode @335 NONAME + + ; Draw + ;SDrawAutoInitialize @341 NONAME + ;SDrawCaptureScreen @342 NONAME + ;SDrawClearSurface @343 NONAME + ;SDrawDestroy @344 NONAME + ;SDrawFlipPage @345 NONAME + ;SDrawGetFrameWindow @346 NONAME + ;SDrawGetObjects @347 NONAME + ;SDrawGetScreenSize @348 NONAME + ;SDrawGetServiceLevel @349 NONAME + ;SDrawLockSurface @350 NONAME + ;SDrawManualInitialize @351 NONAME + ;SDrawMessageBox @352 NONAME + ;SDrawPostClose @353 NONAME + ;SDrawRealizePalette @354 NONAME + ;SDrawSelectGdiSurface @355 NONAME + ;SDrawUnlockSurface @356 NONAME + ;SDrawUpdatePalette @357 NONAME + ;SDrawUpdateScreen @358 NONAME + ;SDrawWaitForVerticalBlank @359 NONAME + + ; Event + ;SEvtDestroy @371 NONAME + SEvtDispatch @372 NONAME + SEvtRegisterHandler @373 NONAME + SEvtUnregisterHandler @374 NONAME + SEvtUnregisterType @375 NONAME + SEvtPopState @376 NONAME + SEvtPushState @377 NONAME + SEvtBreakHandlerChain @378 NONAME + + ; GDI + ;SGdiBitBlt @381 NONAME + ;SGdiCreateFont @382 NONAME + ;SGdiDeleteObject @383 NONAME + ;SGdiDestroy @384 NONAME + ;SGdiExtTextOut @385 NONAME + ;SGdiImportFont @386 NONAME + ;SGdiLoadFont @387 NONAME + ;SGdiRectangle @388 NONAME + ;SGdiSelectObject @389 NONAME + ;SGdiSetPitch @390 NONAME + ;SGdiTextOut @391 NONAME + ;SGdiSetTargetDimensions @392 NONAME + ;SGdiGetTextExtent @393 NONAME + + ; Memory + SMemAlloc @401 NONAME + ;SMemDestroy @402 NONAME + SMemFree @403 NONAME + ;SMemGetSize @404 NONAME + SMemReAlloc @405 NONAME + ;SMemGetAllocated @406 NONAME + + ; Message handling + ;SMsgDestroy @411 NONAME + ;SMsgDispatchMessage @412 NONAME + ;SMsgDoMessageLoop @413 NONAME + ;SMsgRegisterCommand @414 NONAME + ;SMsgRegisterKeyDown @415 NONAME + ;SMsgRegisterKeyUp @416 NONAME + ;SMsgRegisterMessage @417 NONAME + ;SMsgPopRegisterState @418 NONAME + ;SMsgPushRegisterState @419 NONAME + ;SMsgRegisterSysCommand @420 NONAME + + ; Registry + ;SRegLoadData @421 NONAME + ;SRegLoadString @422 NONAME + ;SRegLoadValue @423 NONAME + ;SRegSaveData @424 NONAME + ;SRegSaveString @425 NONAME + ;SRegSaveValue @426 NONAME + ;SRegGetBaseKey @427 NONAME + ;SRegDeleteValue @428 NONAME + ;SRegEnumKey @429 NONAME + ;SRegGetNumSubKeys @430 NONAME + + ; Transparency + ;STransBlt @431 NONAME + ;STransBltUsingMask @432 NONAME + ;STransCreateI @433 NONAME + ;STransDelete @434 NONAME + ;STransDestroy @435 NONAME + ;STransDuplicate @436 NONAME + ;STransIntersectDirtyArray @437 NONAME + ;STransInvertMask @438 NONAME + ;STransLoadI @439 NONAME + ;STransSetDirtyArrayInfo @440 NONAME + ;STransUpdateDirtyArray @441 NONAME + ;STransIsPixelInMask @442 NONAME + ;STransCombineMasks @443 NONAME + ;STransCreateMaskI @444 NONAME + ;STransCreateE @445 NONAME + ;STransCreateMaskE @446 NONAME + ;STransLoadE @447 NONAME + + ; Video + ;SVidDestroy @451 NONAME + ;SVidGetSize @452 NONAME + ;SVidInitialize @453 NONAME + ;SVidPlayBegin @454 NONAME + ;SVidPlayBeginFromMemory @455 NONAME + ;SVidPlayContinue @456 NONAME + ;SVidPlayContinueSingle @457 NONAME + ;SVidPlayEnd @458 NONAME + ;SVidSetVolume @459 NONAME + + ; Error + ;SErrDestroy @460 NONAME + SErrDisplayError @461 NONAME + ;SErrGetErrorStr @462 NONAME + SErrGetLastError @463 NONAME + ;SErrRegisterMessageSource @464 NONAME + ;SErrSetLastError @465 NONAME + ;SErrReportNamedResourceLeak @466 NONAME + ;SErrReportResourceLeak @467 NONAME + SErrSuppressErrors @468 NONAME + ;SErrRegisterHandler @469 NONAME + ;SErrUnregisterHandler @470 NONAME + + ; Command line + ;SCmdGetBool @472 NONAME + ;SCmdGetNum @473 NONAME + ;SCmdGetString @474 NONAME + ;SCmdProcess @475 NONAME + ;SCmdRegisterArgList @476 NONAME + ;SCmdRegisterArgument @477 NONAME + ;SCmdCheckId @478 NONAME + ;SCmdProcessCommandLine @479 NONAME + ;SCmdStringExists @480 NONAME + + ; Memory extended + ;SMemFindNextBlock @481 NONAME + ;SMemFindNextHeap @482 NONAME + ;SMemGetHeapByCaller @483 NONAME + ;SMemGetHeapByPtr @484 NONAME + ;SMemHeapAlloc @485 NONAME + ;SMemHeapCreate @486 NONAME + ;SMemHeapDestroy @487 NONAME + ;SMemHeapFree @488 NONAME + ;SMemHeapRealloc @489 NONAME + ;SMemHeapSize @490 NONAME + SMemCopy @491 NONAME + SMemFill @492 NONAME + SMemMove @493 NONAME + SMemZero @494 NONAME + ;SMemCmp @495 NONAME + ;SMemSetDebugFlags @496 NONAME + ;SMemDumpState @497 NONAME + + ; Strings + SStrCopy @501 NONAME + SStrHash @502 NONAME + SStrPack @503 NONAME + SStrTokenize @504 NONAME + ;SStrChr @505 NONAME + SStrLen @506 NONAME + SStrDupA @507 NONAME + SStrCmp @508 NONAME + SStrCmpI @509 NONAME + SStrUpper @510 NONAME + + ; Messages extended + ;SMsgBreakHandlerChain @511 NONAME + ;SMsgUnregisterCommand @512 NONAME + ;SMsgUnregisterKeyDown @513 NONAME + ;SMsgUnregisterKeyUp @514 NONAME + ;SMsgUnregisterMessage @515 NONAME + ;SMsgGetDispatcher @516 NONAME + ;SMsgSetDefaultWindow @517 NONAME + ;SMsgGetDefaultWindow @518 NONAME + ;SMsgUnregisterSysCommand @519 NONAME + + ; Regions + SRgnClear @521 NONAME + SRgnCombineRecti @523 NONAME + SRgnCreate @524 NONAME + SRgnDelete @525 NONAME + ;SRgnDestroy @526 NONAME + SRgnDuplicate @527 NONAME + SRgnGetRectParamsi @528 NONAME + SRgnGetRectsi @529 NONAME + SRgnGetBoundingRecti @530 NONAME + SRgnIsPointInRegioni @531 NONAME + SRgnIsRectInRegioni @532 NONAME + SRgnOffseti @533 NONAME + SRgnCombineRectf @534 NONAME + SRgnGetRectParamsf @535 NONAME + SRgnGetRectsf @536 NONAME + SRgnGetBoundingRectf @537 NONAME + SRgnIsPointInRegionf @538 NONAME + SRgnIsRectInRegionf @539 NONAME + SRgnOffsetf @540 NONAME + + ; Logging + ;SLogClose @541 NONAME + ;SLogCreate @542 NONAME + ;SLogSetTimestamp @543 NONAME + ;SLogDump @544 NONAME + ;SLogFlush @545 NONAME + ;SLogFlushAll @546 NONAME + ;SLogPend @547 NONAME + ;SLogWrite @548 NONAME + ;SLogSetAbsIndent @549 NONAME + ;SLogSetIndent @550 NONAME + + ; Compression + ;SCompCompress @551 NONAME + ;SCompDecompress @552 NONAME + + ; Errors extended + ;SLogVWrite @553 NONAME + ;SErrCheckDebugSymbolLibrary @561 NONAME + SErrDisplayErrorFmt @562 NONAME + ;SErrIsDisplayingError @563 NONAME + SErrPrepareAppFatal @564 NONAME + ;SErrSetLogTitleString @565 NONAME + SErrDisplayAppFatal @566 NONAME + ;SErrCatchUnhandledExceptions @567 NONAME + ;SErrSetLogCallback @568 NONAME + + ; Strings extended + ;?SStrChr@@YGPADPADD@Z @569 NONAME ; Not offered in SC 1.17 + ;?SStrChrR@@YGPADPADD@Z @570 NONAME ; Not offered in SC 1.17 + ?SStrChr@@YGPBDPBDD@Z @571 NONAME + ?SStrChrR@@YGPBDPBDD@Z @572 NONAME + SStrToDouble @573 NONAME + SStrToFloat @574 NONAME + SStrToInt @575 NONAME + SStrToUnsigned @576 NONAME + ;SStrToInt64 @577 NONAME + SStrPrintf @578 NONAME + SStrLower @579 NONAME + ;SStrHash64 @580 NONAME + SStrVPrintf @581 NONAME + + ; More drawing + ;SDrawSetClientRect @582 NONAME + ;SDrawGetClientRect @583 NONAME + + ; More strings + ?SStrStr@@YGPADPADPBD@Z @584 NONAME + ?SStrStr@@YGPBDPBD0@Z @585 NONAME + ?SStrStrI@@YGPADPADPBD@Z @586 NONAME + ?SStrStrI@@YGPBDPBD0@Z @587 NONAME + ;SStrHashHT @595 NONAME ; Not offered in SC 1.17 + + ; Big numbers + SBigAdd @601 NONAME + SBigAnd @602 NONAME + SBigCompare @603 NONAME + SBigCopy @604 NONAME + SBigDec @605 NONAME + SBigDel @606 NONAME + SBigDiv @607 NONAME + ;SBigFindPrime @608 NONAME + SBigFromBinary @609 NONAME + SBigFromStr @610 NONAME + ;SBigFromStream @611 NONAME + SBigFromUnsigned @612 NONAME + ;SBigGcd @613 NONAME + SBigInc @614 NONAME + ;SBigInvMod @615 NONAME + SBigIsEven @616 NONAME + SBigIsOdd @617 NONAME + SBigIsOne @618 NONAME + ;SBigIsPrime @619 NONAME + SBigIsZero @620 NONAME + SBigMod @621 NONAME + SBigMul @622 NONAME + ;SBigMulMod @623 NONAME + SBigNew @624 NONAME + SBigNot @625 NONAME + SBigOr @626 NONAME + ;SBigPow @627 NONAME + SBigPowMod @628 NONAME + ;SBigRand @629 NONAME + ;SBigSet2Exp @630 NONAME + ;SBigSetOne @631 NONAME + ;SBigSetZero @632 NONAME + SBigShl @633 NONAME + SBigShr @634 NONAME + SBigSquare @635 NONAME + SBigSub @636 NONAME + ;SBigToBinaryArray @637 NONAME + SBigToBinaryBuffer @638 NONAME + ;SBigToBinaryPtr @639 NONAME + ;SBigToStrArray @640 NONAME + ;SBigToStrBuffer @641 NONAME + ;SBigToStrPtr @642 NONAME + ;SBigToStreamArray @643 NONAME + ;SBigToStreamBuffer @644 NONAME + ;SBigToStreamPtr @645 NONAME + SBigToUnsigned @646 NONAME + SBigXor @647 NONAME + + ; Unicode + ;SUniConvertUTF16to8Len @901 NONAME + ;SUniConvertUTF16to8 @902 NONAME + ;SUniConvertUTF8to16Len @903 NONAME + ;SUniConvertUTF8to16 @904 NONAME + SUniSGetUTF8 @905 NONAME + SUniSPutUTF8 @906 NONAME + ;SUniFindAfterUTF8Chr @907 NONAME + ;SUniFindUTF8ChrStart @908 NONAME + ;SUniConvertUTF16ToWin @909 NONAME + ;SUniConvertUTF16ToMac @910 NONAME + ;SUniConvertUTF16ToDos @911 NONAME + ;SUniConvertWinToUTF16 @912 NONAME + ;SUniConvertMacToUTF16 @913 NONAME + ;SUniConvertDosToUTF16 @914 NONAME + ;SUniConvertUTF8ToWin @915 NONAME diff --git a/test/stormdll/stormstubs.cpp b/test/stormdll/stormstubs.cpp new file mode 100644 index 0000000..0c56037 --- /dev/null +++ b/test/stormdll/stormstubs.cpp @@ -0,0 +1,117 @@ +#include + +void STORMAPI SBigAdd(BigData*, BigData*, BigData*) {} +void STORMAPI SBigAnd(BigData*, BigData*, BigData*) {} +void STORMAPI SBigBitLen(BigData*, uint32_t*) {} +int32_t STORMAPI SBigCompare(BigData*, BigData*) { return 0; } +void STORMAPI SBigCopy(BigData*, BigData*) {} +void STORMAPI SBigDec(BigData*, BigData*) {} +void STORMAPI SBigDel(BigData*) {} +void STORMAPI SBigDiv(BigData*, BigData*, BigData*) {} +void STORMAPI SBigFromBinary(BigData*, const void*, uint32_t) {} +void STORMAPI SBigFromStr(BigData*, const char*) {} +void STORMAPI SBigFromUnsigned(BigData*, uint32_t) {} +void STORMAPI SBigInc(BigData*, BigData*) {} +int32_t STORMAPI SBigIsEven(BigData*) {return 0;} +int32_t STORMAPI SBigIsOdd(BigData*) {return 0;} +int32_t STORMAPI SBigIsOne(BigData*) {return 0;} +int32_t STORMAPI SBigIsZero(BigData*) {return 0;} +void STORMAPI SBigMod(BigData*, BigData*, BigData*) {} +void STORMAPI SBigMul(BigData*, BigData*, BigData*) {} +void STORMAPI SBigNew(BigData**) {} +void STORMAPI SBigNot(BigData*, BigData*) {} +void STORMAPI SBigOr(BigData*, BigData*, BigData*) {} +void STORMAPI SBigPowMod(BigData*, BigData*, BigData*, BigData*) {} +void STORMAPI SBigShl(BigData*, BigData*, uint32_t) {} +void STORMAPI SBigShr(BigData*, BigData*, uint32_t) {} +void STORMAPI SBigSquare(BigData*, BigData*) {} +void STORMAPI SBigSub(BigData*, BigData*, BigData*) {} +void STORMAPI SBigToBinaryBuffer(BigData*, uint8_t*, uint32_t, uint32_t*) {} +void STORMAPI SBigXor(BigData*, BigData*, BigData*) {} +void STORMAPI SBigToUnsigned(BigData*, uint32_t*) {} + +#include + +void STORMCDECL SErrDisplayAppFatal(const char* format, ...) {} +int32_t STORMAPI SErrDisplayError(uint32_t, const char*, int32_t, const char*, int32_t, uint32_t, uint32_t) { return 0; } +int32_t STORMCDECL SErrDisplayErrorFmt(uint32_t, const char*, int32_t, int32_t, uint32_t, const char*, ...) { return 0; } +void STORMAPI SErrPrepareAppFatal(const char*, int32_t) {} +void STORMAPI SErrSetLastError(uint32_t) {} +uint32_t STORMAPI SErrGetLastError() { return 0; } +void STORMAPI SErrSuppressErrors(uint32_t) {} + + +#include + +int32_t STORMAPI SEvtBreakHandlerChain(void*) { return 0; } +int32_t STORMAPI SEvtDestroy() { return 0; } +int32_t STORMAPI SEvtDispatch(uint32_t, uint32_t, uint32_t, void*) { return 0; } +int32_t STORMAPI SEvtPopState(uint32_t, uint32_t) { return 0; } +int32_t STORMAPI SEvtPushState(uint32_t, uint32_t) { return 0; } +int32_t STORMAPI SEvtRegisterHandler(uint32_t, uint32_t, uint32_t, uint32_t, SEVTHANDLER) { return 0; } +int32_t STORMAPI SEvtUnregisterHandler(uint32_t, uint32_t, uint32_t, SEVTHANDLER) { return 0; } +int32_t STORMAPI SEvtUnregisterType(uint32_t, uint32_t) { return 0; } + +#include + +void* STORMAPI SMemAlloc(size_t, const char*, int32_t, uint32_t) { return 0; } +void STORMAPI SMemCopy(void*, void*, size_t) {} +void STORMAPI SMemFill(void*, size_t, uint8_t) {} +void STORMAPI SMemFree(void*, const char*, int32_t, uint32_t) {} +void STORMAPI SMemMove(void*, void*, size_t) {} +void* STORMAPI SMemReAlloc(void*, size_t, const char*, int32_t, uint32_t) { return 0; } +void STORMAPI SMemZero(void*, size_t) {} + +#include + +void STORMAPI SRgnClear(HSRGN) {} +void STORMAPI SRgnCombineRectf(HSRGN, const RECTF*, void*, int32_t) {} +void STORMAPI SRgnCombineRecti(HSRGN, const RECT*, void*, int32_t) {} +void STORMAPI SRgnCreate(HSRGN*, uint32_t) {} +void STORMAPI SRgnDelete(HSRGN) {} +void STORMAPI SRgnDuplicate(HSRGN, HSRGN*, uint32_t) {} +void STORMAPI SRgnGetBoundingRectf(HSRGN, RECTF*) {} +void STORMAPI SRgnGetBoundingRecti(HSRGN, RECT*) {} +void STORMAPI SRgnGetRectParamsf(HSRGN, const RECTF*, uint32_t*, void**) {} +void STORMAPI SRgnGetRectParamsi(HSRGN, const RECT*, uint32_t*, void**) {} +void STORMAPI SRgnGetRectsf(HSRGN, uint32_t*, RECTF*) {} +void STORMAPI SRgnGetRectsi(HSRGN, uint32_t*, RECT*) {} +int32_t STORMAPI SRgnIsPointInRegionf(HSRGN, float, float) { return 0; } +int32_t STORMAPI SRgnIsPointInRegioni(HSRGN, int32_t, int32_t) { return 0; } +int32_t STORMAPI SRgnIsRectInRegionf(HSRGN, const RECTF*) { return 0; } +int32_t STORMAPI SRgnIsRectInRegioni(HSRGN, const RECT*) { return 0; } +void STORMAPI SRgnOffsetf(HSRGN, float, float) {} +void STORMAPI SRgnOffseti(HSRGN, int32_t, int32_t) {} + +#include + +char* STORMAPI SStrChr(char*, char) { return 0; } +const char* STORMAPI SStrChr(const char*, char) { return 0; } +char* STORMAPI SStrChrR(char*, char) { return 0; } +const char* STORMAPI SStrChrR(const char*, char) { return 0; } +int32_t STORMAPI SStrCmp(const char*, const char*, size_t) { return 0; } +int32_t STORMAPI SStrCmpI(const char*, const char*, size_t) { return 0; } +size_t STORMAPI SStrCopy(char*, const char*, size_t) { return 0; } +char* STORMAPI SStrDupA(const char*, const char*, uint32_t) { return 0; } +uint32_t STORMAPI SStrHash(const char*, uint32_t, uint32_t) { return 0; } +uint32_t STORMAPI SStrHashHT(const char*) { return 0; } +size_t STORMAPI SStrLen(const char*) { return 0; } +void STORMAPI SStrLower(char*) {} +uint32_t STORMAPI SStrPack(char*, const char*, uint32_t) { return 0; } +size_t STORMCDECL SStrPrintf(char*, size_t, const char*, ...) { return 0; } +size_t STORMCDECL SStrVPrintf(char*, size_t, const char*, va_list) { return 0; } +char* STORMAPI SStrStr(char*, const char*) { return 0; } +const char* STORMAPI SStrStr(const char*, const char*) { return 0; } +char* STORMAPI SStrStrI(char*, const char*) { return 0; } +const char* STORMAPI SStrStrI(const char*, const char*) { return 0; } +void STORMAPI SStrTokenize(const char**, char*, size_t, const char*, int32_t*) {} +double STORMAPI SStrToDouble(const char*) { return 0; } +float STORMAPI SStrToFloat(const char*) { return 0; } +int32_t STORMAPI SStrToInt(const char*) { return 0; } +uint32_t STORMAPI SStrToUnsigned(const char*) { return 0; } +void STORMAPI SStrUpper(char*) {} + +#include + +uint32_t STORMAPI SUniSGetUTF8(const uint8_t*, int32_t*) {return 0; } +void STORMAPI SUniSPutUTF8(uint32_t, char*) {}