+#include "dolSupport.h"\r
+\r
+/**\r
+ *\r
+ */\r
+unsigned read(void* fifo, void* buf, unsigned len, DOLProcess* p) {\r
+ unsigned int\r
+ pos =\r
+ static_cast<ProcessWrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->readPos;\r
+ pos += ((Fifo*) fifo)->read((char *) buf + pos, len - pos);\r
+\r
+ if (pos == len)\r
+ static_cast<ProcessWrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->readPos\r
+ = 0;\r
+ else\r
+ static_cast<ProcessWrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->readPos\r
+ = pos;\r
+ return pos;\r
+}\r
+\r
+/**\r
+ *\r
+ */\r
+unsigned write(void* fifo, void* buf, unsigned len, DOLProcess* p) {\r
+ unsigned int\r
+ pos =\r
+ static_cast<ProcessWrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->writePos;\r
+ pos += ((Fifo*) fifo)->write((char *) buf + pos, len - pos);\r
+\r
+ if (pos == len)\r
+ static_cast<ProcessWrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->writePos\r
+ = 0;\r
+ else\r
+ static_cast<ProcessWrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->writePos\r
+ = pos;\r
+ return pos;\r
+}\r
+\r
+/**\r
+ *\r
+ */\r
+unsigned reserve(void* fifo, void** destination, unsigned len,\r
+ DOLProcess* p) {\r
+ return ((WindowedFifo*) fifo)->reserve(destination, len);\r
+}\r
+\r
+/**\r
+ *\r
+ */\r
+void release(void* fifo, DOLProcess* p) {\r
+ ((WindowedFifo*) fifo)->release();\r
+}\r
+\r
+/**\r
+ *\r
+ */\r
+unsigned capture(void* fifo, void** destination, unsigned len,\r
+ DOLProcess* p) {\r
+ return ((WindowedFifo*) fifo)->capture(destination, len);\r
+}\r
+\r
+/**\r
+ *\r
+ */\r
+void consume(void* fifo, DOLProcess* p) {\r
+ ((WindowedFifo*) fifo)->consume();\r
+}\r
+\r
+/**\r
+ *\r
+ */\r
+void DOL_detach(DOLProcess* p) {\r
+ static_cast<ProcessWrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->detach();\r
+}\r
+\r
+void createPort(void** port, void* base, int number_of_indices,\r
+ int index0, int range0) {\r
+ *port = (void**) ((void**) base)[index0];\r
+}\r
+\r
+void createPort(void** port, void* base, int number_of_indices,\r
+ int index0, int range0, int index1, int range1) {\r
+ *port = (void**) ((void**) base)[index0 * range1 + index1];\r
+}\r
+\r
+void createPort(void** port, void* base, int number_of_indices,\r
+ int index0, int range0, int index1, int range1, int index2,\r
+ int range2) {\r
+ *port = (void**) ((void**) base)[index0 * range1 * range2 + index1\r
+ * range2 + index2];\r
+}\r
+\r
+void createPort(void** port, void* base, int number_of_indices,\r
+ int index0, int range0, int index1, int range1, int index2,\r
+ int range2, int index3, int range3) {\r
+ *port = (void**) ((void**) base)[index0 * range1 * range2 * range3\r
+ + index1 * range2 * range3 + index2 * range3 + index3];\r
+}\r