getting stuff working on windows again
[carveJwlIkooP6JGAAIwe30JlM.git] / addon.h
diff --git a/addon.h b/addon.h
new file mode 100644 (file)
index 0000000..d28db0c
--- /dev/null
+++ b/addon.h
@@ -0,0 +1,49 @@
+#ifndef ADDON_H
+#define ADDON_H
+
+#include "workshop.h"
+#include "workshop_types.h"
+#define ADDON_MOUNTED_MAX 128
+#define ADDON_FOLDERNAME_MAX 64
+
+typedef struct addon_reg addon_reg;
+struct {
+   struct addon_reg{
+      PublishedFileId_t workshop_id;
+
+      enum workshop_file_type type;
+      u8 metadata[512];  /* vg_msg buffer */
+      u32 metadata_len;
+
+      char foldername[ ADDON_FOLDERNAME_MAX ];
+      u32 foldername_hash;
+      void *userdata;
+
+      enum addon_state{
+         k_addon_state_none,
+         k_addon_state_indexed,
+         k_addon_state_indexed_absent /* gone but not forgotten */
+      }
+      state;
+   }
+   *registry;
+   u32 registry_count;
+
+   /* deffered: updates in main thread */
+   u32 registry_type_counts[k_workshop_file_type_max]; 
+}
+static addon_system;
+
+static void addon_system_init( void );
+static u32 addon_count( enum workshop_file_type type );
+static addon_reg *get_addon_from_index(enum workshop_file_type type, u32 index);
+static u32 get_index_from_addon( enum workshop_file_type type, addon_reg *a );
+
+/* scanning routines */
+VG_STATIC void addon_mount_local_folder( enum workshop_file_type type,
+                                         const char *base_folder, 
+                                         const char *content_ext );
+VG_STATIC void addon_mount_workshop_items(void);
+VG_STATIC void async_addon_reg_update( void *data, u32 size );
+
+#endif /* ADDON_H */