aboutsummaryrefslogtreecommitdiff
path: root/libs/bsa_ffi/include/bsa_ffi.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/bsa_ffi/include/bsa_ffi.h')
-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