+/* Return a set's root framebox */\r
+union ir_setdata_t* ir_set_framebox\r
+( struct ir_set_t* set )\r
+{ return (union ir_setdata_t*) set->frameboxes; }\r
+\r
+/* Return a set's root audio data */\r
+union ir_setdata_t* ir_set_audio\r
+( struct ir_set_t* set )\r
+{ return (union ir_setdata_t*) set->audio; }\r
+\r
+/* Return a set's root link data */\r
+union ir_setdata_t* ir_set_link\r
+( struct ir_set_t* set )\r
+{ return (union ir_setdata_t*) set->links; }\r
+\r
+/* Return the link type */\r
+enum ltype ir_linkdata_type\r
+( union ir_setdata_t* linkdata )\r
+{ if (linkdata->header.type != LDAT)\r
+ eprintf("Data %s is not a link\n", linkdata->header.data_name);\r
+ return linkdata->link.type;\r
+}\r
+\r
+/* Return the link type */\r
+uint32_t ir_linkdata_ref\r
+( union ir_setdata_t* linkdata )\r
+{ if (linkdata->header.type != LDAT)\r
+ eprintf("Data %s is not a link\n", linkdata->header.data_name);\r
+ return linkdata->link.setld->ref;\r
+}\r
+\r
+/* Get a setdata's next sibling */\r
+union ir_setdata_t* ir_setdata_nextsib\r
+( union ir_setdata_t* setdata )\r
+{ return setdata->header.nextsib; }\r
+\r
+/* Get a setdata's name */\r
+uint8_t* ir_setdata_name\r
+( union ir_setdata_t* setdata )\r
+{ return setdata->header.data_name; }\r
+\r
+/* Get a setdata's filename */\r
+uint8_t* ir_setdata_filename\r
+( union ir_setdata_t* setdata )\r
+{ return setdata->header.src_filename; }\r
+\r
+/* Get a setdata's file position */\r
+long ir_setdata_fpos\r
+( union ir_setdata_t* setdata )\r
+{ return setdata->header.filepos; }\r
+\r
+/* Set a setdata's file position */\r
+void ir_setdata_assign_fpos\r
+( union ir_setdata_t* setdata,\r
+ long newpos\r
+)\r
+{ setdata->header.filepos = newpos; }\r
+\r
+/* Return a framebox's specified framesheet */\r
+union ir_setdata_t* ir_framebox_framesheet\r
+( union ir_setdata_t* fbox,\r
+ apc_facing facing\r
+)\r
+{ if (fbox->header.type != FBDAT)\r
+ eprintf("Data %s is not a framebox\n", fbox->header.data_name);\r
+ return (union ir_setdata_t*) &fbox->framebox.framesheets[facing];\r
+}\r
+\r
+/* Return a framebox's specified mapsheet */\r
+union ir_setdata_t* ir_framebox_mapsheet\r
+( union ir_setdata_t* fbox,\r
+ apc_facing facing\r
+)\r
+{ if (fbox->header.type != FBDAT)\r
+ eprintf("Data %s is not a framebox\n", fbox->header.data_name);\r
+ return (union ir_setdata_t*) &fbox->framebox.mapsheets[facing];\r
+}\r
+\r
+/* Return a framedata's frame info */\r
+struct ir_frameinfo_t* ir_framedata_frameinfo\r
+( union ir_setdata_t* framedata )\r
+{ if (framedata->header.type != MSDAT && framedata->header.type != FSDAT)\r
+ eprintf("Data %s is not a framedata\n", framedata->header.data_name);\r
+ return &framedata->mapsheet.frameinfo;\r
+}\r
+\r