+
+/* giblorb_chunkdesc_t: Describes one chunk of the Blorb file. */
+typedef struct giblorb_chunkdesc_struct {
+ glui32 type;
+ glui32 len;
+ glui32 startpos; /* start of chunk header */
+ glui32 datpos; /* start of data (either startpos or startpos+8) */
+
+ void *ptr; /* pointer to malloc'd data, if loaded */
+ int auxdatnum; /* entry in the auxsound/auxpict array; -1 if none.
+ This only applies to chunks that represent resources; */
+
+} giblorb_chunkdesc_t;
+
+/* giblorb_resdesc_t: Describes one resource in the Blorb file. */
+typedef struct giblorb_resdesc_struct {
+ glui32 usage;
+ glui32 resnum;
+ glui32 chunknum;
+} giblorb_resdesc_t;
+
+/* giblorb_map_t: Holds the complete description of an open Blorb file. */
+struct giblorb_map_struct {
+ glui32 inited; /* holds giblorb_Inited_Magic if the map structure is
+ valid */
+ strid_t file;
+
+ int numchunks;
+ giblorb_chunkdesc_t *chunks; /* list of chunk descriptors */
+
+ int numresources;
+ giblorb_resdesc_t *resources; /* list of resource descriptors */
+ giblorb_resdesc_t **ressorted; /* list of pointers to descriptors
+ in map->resources -- sorted by usage and resource number. */
+};
+
+void
+giblorb_print_contents(giblorb_map_t *map)
+{
+ int i;
+ for(i=0; i<map->numresources; i++) {
+ giblorb_resdesc_t *resource = map->ressorted[i];
+ printf("Resource #%d, chunknum: %d\n", resource->resnum, resource->chunknum);
+ }
+
+ printf("\n-------\n");
+
+ for(i=0; i<map->numresources; i++) {
+ giblorb_chunkdesc_t chunk = map->chunks[i];
+ printf("Chunk #%d, type: %d\n", i, chunk.type);
+ }
+}
+
+gchar*
+giblorb_get_error_message(giblorb_err_t err)
+{
+ switch(err)
+ {
+ case giblorb_err_None:
+ return "not BLORB's fault";
+ case giblorb_err_CompileTime:
+ return "BLORB compile time error";
+ case giblorb_err_Alloc:
+ return "memory allocation failed";
+ case giblorb_err_Read:
+ return "error during reading of file";
+ case giblorb_err_NotAMap:
+ return "invalid resource map supplied";
+ case giblorb_err_Format:
+ return "invalid format of resource";
+ case giblorb_err_NotFound:
+ return "resource not found";
+ default:
+ return "Unknown error code";
+ }
+}