From a4dec308c2fb061b70c32e622378a3877f552a8f Mon Sep 17 00:00:00 2001 From: aomizu Date: Mon, 29 Dec 2025 19:01:26 +0900 Subject: [PATCH] chore(file): add sfile/sfilenative backend selection --- CMakeLists.txt | 3 ++ storm/CMakeLists.txt | 7 +++++ storm/file/SFile.cpp | 58 ++++++++++++++++++++++++++++++++++++++ storm/file/SFileNative.cpp | 58 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 126 insertions(+) create mode 100644 storm/file/SFile.cpp create mode 100644 storm/file/SFileNative.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index a60dd76..7ac1163 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,6 +18,9 @@ project(storm) set(CMAKE_CXX_STANDARD 11) +set(WHOA_SFILE_MODE "NATIVE" CACHE STRING "SFile backend (NATIVE or STORMLIB)") +set_property(CACHE WHOA_SFILE_MODE PROPERTY STRINGS NATIVE STORMLIB) + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/lib/system/cmake" "${CMAKE_CURRENT_SOURCE_DIR}/vendor/cmake-modules" diff --git a/storm/CMakeLists.txt b/storm/CMakeLists.txt index 4cbfc3c..4336957 100644 --- a/storm/CMakeLists.txt +++ b/storm/CMakeLists.txt @@ -39,11 +39,18 @@ if(WHOA_SYSTEM_LINUX) list(APPEND STORM_SOURCES ${STORM_LINUX_SOURCES}) endif() +if(WHOA_SFILE_MODE STREQUAL "STORMLIB") + list(APPEND STORM_SOURCES "file/SFile.cpp") +else() + list(APPEND STORM_SOURCES "file/SFileNative.cpp") +endif() + add_library(storm STATIC ${STORM_SOURCES} ) target_compile_definitions(storm PRIVATE _CRT_SECURE_NO_WARNINGS) +target_compile_definitions(storm PUBLIC WHOA_SFILE_MODE_${WHOA_SFILE_MODE}) target_include_directories(storm PUBLIC diff --git a/storm/file/SFile.cpp b/storm/file/SFile.cpp new file mode 100644 index 0000000..3b26693 --- /dev/null +++ b/storm/file/SFile.cpp @@ -0,0 +1,58 @@ +#include "storm/File.hpp" + +// TODO: implement StormLib-backed SFile functions. + +int32_t STORMAPI SFileOpenArchive(const char* archivename, int32_t priority, uint32_t flags, HSARCHIVE* handle) { + (void)archivename; + (void)priority; + (void)flags; + (void)handle; + return 0; +} + +int32_t STORMAPI SFileCloseArchive(HSARCHIVE handle) { + (void)handle; + return 0; +} + +int32_t STORMAPI SFileOpenFileEx(HSARCHIVE archivehandle, const char* filename, uint32_t flags, HSFILE* handle) { + (void)archivehandle; + (void)filename; + (void)flags; + (void)handle; + return 0; +} + +int32_t STORMAPI SFileReadFile(HSFILE handle, void* buffer, uint32_t bytestoread, uint32_t* bytesread, LPOVERLAPPED overlapped) { + (void)handle; + (void)buffer; + (void)bytestoread; + (void)overlapped; + if (bytesread) { + *bytesread = 0; + } + return 0; +} + +uint32_t STORMAPI SFileGetFileSize(HSFILE handle, uint32_t* filesizehigh) { + (void)handle; + if (filesizehigh) { + *filesizehigh = 0; + } + return 0; +} + +uint32_t STORMAPI SFileSetFilePointer(HSFILE handle, int32_t distancetomove, int32_t* distancetomovehigh, uint32_t movemethod) { + (void)handle; + (void)distancetomove; + (void)movemethod; + if (distancetomovehigh) { + *distancetomovehigh = 0; + } + return 0; +} + +int32_t STORMAPI SFileCloseFile(HSFILE handle) { + (void)handle; + return 0; +} diff --git a/storm/file/SFileNative.cpp b/storm/file/SFileNative.cpp new file mode 100644 index 0000000..c137c8d --- /dev/null +++ b/storm/file/SFileNative.cpp @@ -0,0 +1,58 @@ +#include "storm/File.hpp" + +// TODO: implement native filesystem-backed SFile functions. same functionality as whoa's SFile? + +int32_t STORMAPI SFileOpenArchive(const char* archivename, int32_t priority, uint32_t flags, HSARCHIVE* handle) { + (void)archivename; + (void)priority; + (void)flags; + (void)handle; + return 0; +} + +int32_t STORMAPI SFileCloseArchive(HSARCHIVE handle) { + (void)handle; + return 0; +} + +int32_t STORMAPI SFileOpenFileEx(HSARCHIVE archivehandle, const char* filename, uint32_t flags, HSFILE* handle) { + (void)archivehandle; + (void)filename; + (void)flags; + (void)handle; + return 0; +} + +int32_t STORMAPI SFileReadFile(HSFILE handle, void* buffer, uint32_t bytestoread, uint32_t* bytesread, LPOVERLAPPED overlapped) { + (void)handle; + (void)buffer; + (void)bytestoread; + (void)overlapped; + if (bytesread) { + *bytesread = 0; + } + return 0; +} + +uint32_t STORMAPI SFileGetFileSize(HSFILE handle, uint32_t* filesizehigh) { + (void)handle; + if (filesizehigh) { + *filesizehigh = 0; + } + return 0; +} + +uint32_t STORMAPI SFileSetFilePointer(HSFILE handle, int32_t distancetomove, int32_t* distancetomovehigh, uint32_t movemethod) { + (void)handle; + (void)distancetomove; + (void)movemethod; + if (distancetomovehigh) { + *distancetomovehigh = 0; + } + return 0; +} + +int32_t STORMAPI SFileCloseFile(HSFILE handle) { + (void)handle; + return 0; +}