aboutsummaryrefslogtreecommitdiff
path: root/libs/libbsarch/examples
diff options
context:
space:
mode:
Diffstat (limited to 'libs/libbsarch/examples')
-rw-r--r--libs/libbsarch/examples/libbsarch-visualstudio-test.cpp190
-rw-r--r--libs/libbsarch/examples/libbsarch-visualstudio-test.sln31
-rw-r--r--libs/libbsarch/examples/test_read.ba2bin0 -> 5592601 bytes
-rw-r--r--libs/libbsarch/examples/test_read.bsabin0 -> 5592685 bytes
4 files changed, 221 insertions, 0 deletions
diff --git a/libs/libbsarch/examples/libbsarch-visualstudio-test.cpp b/libs/libbsarch/examples/libbsarch-visualstudio-test.cpp
new file mode 100644
index 0000000..1183ee9
--- /dev/null
+++ b/libs/libbsarch/examples/libbsarch-visualstudio-test.cpp
@@ -0,0 +1,190 @@
+#include <iostream>
+#include <windows.h>
+
+#include <libbsarch/libbsarch.h>
+
+// #pragma comment(lib, "libbsarch")
+
+static const std::wstring separators(L"\\/");
+
+std::wstring dirname(const std::wstring &path)
+{
+ size_t slash_pos = path.find_last_of(separators);
+ return path.substr(0, slash_pos);
+}
+
+std::wstring basename(const std::wstring &path)
+{
+ size_t slash_pos = path.find_last_of(separators);
+ return path.substr(slash_pos + 1);
+}
+
+bool mkdirp(const std::wstring &directory, bool basedir = true)
+{
+ DWORD attributes = ::GetFileAttributesW(directory.c_str());
+ if (attributes == INVALID_FILE_ATTRIBUTES)
+ {
+ std::size_t slash_pos = directory.find_last_of(separators);
+ if (slash_pos != std::wstring::npos)
+ {
+ mkdirp(directory.substr(0, slash_pos));
+ }
+ return ::CreateDirectoryW(directory.c_str(), nullptr);
+ }
+ else
+ {
+ return true;
+ }
+}
+
+void dds_info(bsa_archive_t archive, const wchar_t *file_path, bsa_dds_info_t *dds_info, void *context)
+{
+ // Mock result
+ dds_info->width = 2048;
+ dds_info->height = 2048;
+ dds_info->mipmaps = 12;
+
+ printf("ba2 dds_info callback file: %ls, context: %s\n", file_path, (char *) context);
+}
+
+int main()
+{
+ bsa_result_message_t result = {0};
+ bsa_archive_t archive = bsa_create();
+
+ {
+ result = bsa_load_from_file(archive, L"test_read.bsa");
+ if (result.code < 0)
+ printf("ba1 %ls\n", result.text);
+
+ bsa_entry_list_t entries = bsa_entry_list_create();
+ bsa_get_resource_list(archive, entries, L"");
+
+ for (size_t index = 0; index < bsa_entry_list_count(entries); index++)
+ {
+ wchar_t filename[2048];
+ wchar_t dest_filename[2048] = L"test_ba1\\";
+
+ bsa_entry_list_get(entries, index, 2048, filename);
+ wcscat_s(dest_filename, 2048, filename);
+
+ printf("ba1 file: %ls %ls\n", filename, dest_filename);
+
+ if (mkdirp(dirname(dest_filename)))
+ {
+ result = bsa_extract_file(archive, filename, dest_filename);
+ if (result.code < 0)
+ printf("ba1 %ls\n", result.text);
+ }
+ else
+ {
+ printf("ba1 could not create: %ls\n", dirname(dest_filename).c_str());
+ }
+ }
+
+ bsa_entry_list_free(entries);
+
+ bsa_close(archive);
+ }
+
+ {
+ bsa_entry_list_t entries = bsa_entry_list_create();
+ bsa_entry_list_add(entries, L"textures\\grass\\test.dds");
+ bsa_entry_list_add(entries, L"textures\\grass\\test2.dds");
+
+ bsa_create_archive(archive, L"test_write.bsa", baSSE, entries);
+ bsa_add_file_from_disk_root(archive, L"test_ba1\\", L"test_ba1\\textures\\grass\\test.dds");
+ result = bsa_add_file_from_disk(archive, L"textures\\grass\\test2.dds", L"test_ba1\\textures\\grass\\test.dds");
+ if (result.code < 0)
+ printf("ba1 %ls\n", result.text);
+ bsa_save(archive);
+ bsa_close(archive);
+
+ bsa_entry_list_free(entries);
+ }
+
+ bsa_file_dds_info_callback_set(archive, dds_info, (void *) "I was shared");
+
+ {
+ result = bsa_load_from_file(archive, L"test_read.ba2");
+ if (result.code < 0)
+ printf("ba2 %ls\n", result.text);
+
+ bsa_entry_list_t entries = bsa_entry_list_create();
+ bsa_get_resource_list(archive, entries, L"");
+
+ for (size_t index = 0; index < bsa_entry_list_count(entries); index++)
+ {
+ wchar_t filename[2048];
+ wchar_t dest_filename[2048] = L"test_ba2\\";
+
+ bsa_entry_list_get(entries, index, 2048, filename);
+ wcscat_s(dest_filename, 2048, filename);
+
+ printf("ba2 file: %ls %ls\n", filename, dest_filename);
+
+ if (mkdirp(dirname(dest_filename)))
+ {
+ result = bsa_extract_file(archive, filename, dest_filename);
+ if (result.code < 0)
+ printf("ba2 %ls\n", result.text);
+ }
+ else
+ {
+ printf("ba2 could not create: %ls\n", dirname(dest_filename).c_str());
+ }
+ }
+
+ bsa_entry_list_free(entries);
+
+ bsa_close(archive);
+ }
+
+ {
+ bsa_entry_list_t entries = bsa_entry_list_create();
+ bsa_entry_list_add(entries, L"textures\\grass\\test.dds");
+ bsa_entry_list_add(entries, L"textures\\grass\\test2.dds");
+
+ bsa_create_archive(archive, L"test_write.ba2", baFO4dds, entries);
+ bsa_add_file_from_disk_root(archive, L"test_ba2\\", L"test_ba2\\textures\\grass\\test.dds");
+ result = bsa_add_file_from_disk(archive, L"textures\\grass\\test2.dds", L"test_ba2\\textures\\grass\\test.dds");
+ if (result.code < 0)
+ printf("ba2 %ls\n", result.text);
+ bsa_save(archive);
+ bsa_close(archive);
+
+ bsa_entry_list_free(entries);
+ }
+
+ /*
+ {
+ result = bsa_load_from_file(archive, L"test_large.ba2");
+ if (result.code < 0)
+ printf("ba2 large %ls\n", result.text);
+
+ bsa_entry_list_t entries = bsa_entry_list_create();
+ bsa_get_resource_list(archive, entries, L"");
+
+ for (size_t index = 0; index < bsa_entry_list_count(entries); index++) {
+ wchar_t filename[2048];
+ wchar_t dest_filename[2048] = L"test_ba2_large\\";
+
+ bsa_entry_list_get(entries, index, 2048, filename);
+ wcscat_s(dest_filename, 2048, filename);
+
+ printf("ba2 file large: %ls %ls\n", filename, dest_filename);
+
+ if (mkdirp(dirname(dest_filename))) {
+ result = bsa_extract_file(archive, filename, dest_filename);
+ if (result.code < 0)
+ printf("ba2 large %ls\n", result.text);
+ }
+ else {
+ printf("ba2 large could not create: %ls\n", dirname(dest_filename).c_str());
+ }
+ }
+ }
+ */
+
+ bsa_free(archive);
+}
diff --git a/libs/libbsarch/examples/libbsarch-visualstudio-test.sln b/libs/libbsarch/examples/libbsarch-visualstudio-test.sln
new file mode 100644
index 0000000..8f105e4
--- /dev/null
+++ b/libs/libbsarch/examples/libbsarch-visualstudio-test.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.28803.156
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbsarch-visualstudio-test", "libbsarch-visualstudio-test.vcxproj", "{8F73F848-939D-4862-B58B-26572CF20A5F}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {8F73F848-939D-4862-B58B-26572CF20A5F}.Debug|x64.ActiveCfg = Debug|x64
+ {8F73F848-939D-4862-B58B-26572CF20A5F}.Debug|x64.Build.0 = Debug|x64
+ {8F73F848-939D-4862-B58B-26572CF20A5F}.Debug|x86.ActiveCfg = Debug|Win32
+ {8F73F848-939D-4862-B58B-26572CF20A5F}.Debug|x86.Build.0 = Debug|Win32
+ {8F73F848-939D-4862-B58B-26572CF20A5F}.Release|x64.ActiveCfg = Release|x64
+ {8F73F848-939D-4862-B58B-26572CF20A5F}.Release|x64.Build.0 = Release|x64
+ {8F73F848-939D-4862-B58B-26572CF20A5F}.Release|x86.ActiveCfg = Release|Win32
+ {8F73F848-939D-4862-B58B-26572CF20A5F}.Release|x86.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {F05F0FBF-790B-4443-B2EC-E7033074D9E0}
+ EndGlobalSection
+EndGlobal
diff --git a/libs/libbsarch/examples/test_read.ba2 b/libs/libbsarch/examples/test_read.ba2
new file mode 100644
index 0000000..16162ca
--- /dev/null
+++ b/libs/libbsarch/examples/test_read.ba2
Binary files differ
diff --git a/libs/libbsarch/examples/test_read.bsa b/libs/libbsarch/examples/test_read.bsa
new file mode 100644
index 0000000..e493003
--- /dev/null
+++ b/libs/libbsarch/examples/test_read.bsa
Binary files differ