aboutsummaryrefslogtreecommitdiff
path: root/libs/bsa_ffi/include
diff options
context:
space:
mode:
authorSulfurNitride <SulfurNitride@users.noreply.github.com>2026-02-11 02:37:39 -0600
committerSulfurNitride <SulfurNitride@users.noreply.github.com>2026-02-11 02:37:39 -0600
commit7ee008e150bc5bcf76082d726f719ee0fdfda982 (patch)
tree27fb39be241fdb5ac2734c574de678977d1856d0 /libs/bsa_ffi/include
Fluorine Manager: full Linux port of Mod Organizer 2
Complete native Linux port with FUSE-based virtual filesystem, Proton/umu-run integration, and Flatpak packaging. Key features: - FUSE VFS replacing Windows USVFS (in-process + standalone helper for Flatpak) - Proton/GE-Proton/umu-run launcher with env var forwarding - Flatpak support (sandbox-aware VFS, NXM handler, umu-run) - Wine prefix management UI - Case-insensitive path resolution for Linux filesystems - QSettings-safe INI handling (avoids Bethesda INI corruption) - Portable instance support with auto-generated launcher scripts Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'libs/bsa_ffi/include')
-rw-r--r--libs/bsa_ffi/include/bsa_ffi.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/libs/bsa_ffi/include/bsa_ffi.h b/libs/bsa_ffi/include/bsa_ffi.h
new file mode 100644
index 0000000..32dcee3
--- /dev/null
+++ b/libs/bsa_ffi/include/bsa_ffi.h
@@ -0,0 +1,54 @@
+#ifndef BSA_FFI_H
+#define BSA_FFI_H
+
+#include <stddef.h>
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+ char **items;
+ size_t count;
+ char *error;
+} BsaFfiStringList;
+
+typedef void (*BsaProgressCallback)(uint32_t done, uint32_t total,
+ const char *current_path);
+
+/* Returns list of paths in archive. On error, error is non-null and must be freed with
+ * bsa_ffi_string_list_free(). */
+BsaFfiStringList bsa_ffi_list_files(const char *archive_path);
+
+void bsa_ffi_string_list_free(BsaFfiStringList list);
+
+/* Returns NULL on success, else an allocated error string (free with bsa_ffi_string_free). */
+char *bsa_ffi_extract_all(const char *archive_path, const char *output_dir,
+ BsaProgressCallback progress_cb, const int *cancel_flag);
+
+/* game_id uses CLI ids from GameVersion::cli_name():
+ * morrowind, oblivion, fo3, fonv, skyrimle, skyrimse,
+ * fo4-fo76, fo4ng-v7, fo4ng-v8, starfield-v2, starfield-v3
+ */
+char *bsa_ffi_pack_dir(const char *input_dir, const char *output_archive,
+ const char *game_id, BsaProgressCallback progress_cb,
+ const int *cancel_flag);
+
+/* include_mode:
+ * 0 = all files
+ * 1 = exclude .dds
+ * 2 = only .dds
+ */
+char *bsa_ffi_pack_dir_filtered(const char *input_dir, const char *output_archive,
+ const char *game_id, int include_mode,
+ BsaProgressCallback progress_cb,
+ const int *cancel_flag);
+
+void bsa_ffi_string_free(char *s);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif