+#ifndef WORKSHOP_H
+#define WORKSHOP_H
+
+#define VG_GAME
+#include "vg/vg.h"
+#include "vg/vg_steam_remote_storage.h"
+
+struct workshop{
+ enum workshop_operation{
+ k_workshop_form_op_none,
+ k_workshop_form_op_loading_model,
+ k_workshop_form_op_downloading_submission,
+ k_workshop_form_op_publishing_update,
+ k_workshop_op_item_scan,
+ k_workshop_op_item_load
+ }
+ operation;
+}
+static workshop;
+
+struct async_workshop_filepath_info{
+ PublishedFileId_t id;
+ char *buf;
+ u32 len;
+};
+
+struct async_workshop_installed_files_info{
+ PublishedFileId_t *buffer;
+ u32 *len; /* inout */
+};
+
+VG_STATIC void async_workshop_get_filepath( void *data, u32 len );
+VG_STATIC void async_workshop_get_installed_files( void *data, u32 len );
+
+/*
+ * Start a new operation and crash if we are already running one.
+ */
+VG_STATIC int workshop_begin_op( enum workshop_operation op )
+{
+ if( workshop.operation != k_workshop_form_op_none ){
+ vg_error( "Workshop form currently executing op(%d), tried to "
+ "start op(%d)\n", workshop.operation, op );
+ return 0;
+ }
+
+ workshop.operation = op;
+ vg_info( "Starting op( %d )\n", op );
+ return 1;
+}
+
+/*
+ * Finished operation, otheres can now run
+ */
+VG_STATIC void workshop_end_op(void)
+{
+ vg_info( "Finishing op( %d )\n", workshop.operation );
+ workshop.operation = k_workshop_form_op_none;
+}
+
+#endif /* WORKSHOP_H */