+\r
+static\r
+uint8_t* classname_alloc\r
+( const uint8_t* name_src )\r
+{ const uint8_t* iter;\r
+ uint8_t* name;\r
+ int head_mem;\r
+ copy:\r
+ name = (uint8_t*)namepages.head->header.head;\r
+ iter = name_src;\r
+ for (head_mem = PL_HEADMEM(namepages); *iter && head_mem; head_mem--)\r
+ *(namepages.head->header.head)++ = *iter++;\r
+ if (head_mem == 0) //not enough room\r
+ { pagelist_alloc(namepages);\r
+ goto copy;\r
+ }\r
+ *(namepages.head->header.head)++ = '\0';\r
+ return name;\r
+}\r
+\r
+#define pdepth() do { for (i = 0; i < depth * 2; i++) putchar(' '); } while (0)\r
+void ir_test(void)\r
+{ struct ir_class_t* class, * classbuf;\r
+ struct ir_set_t* set, * set_child;\r
+ int depth, i, olddepth;\r
+ depth = olddepth = 0;\r
+ classbuf = NULL;\r
+ for(class = ir_class_root(); class != NULL; class = class->nextchild)\r
+ {handle_class:\r
+ pdepth();\r
+ uprintf("%U\n",class->name);\r
+ old_depth = depth;\r
+ set = class->root_set;\r
+ handle_set:\r
+ while(set != NULL)\r
+ { pdepth();uprintf("|");\r
+ pdepth();\r
+ uprintf("-[%U]",set->name);\r
+ set_child = set->nextchild;\r
+ while (set_child != NULL)\r
+ { depth++;\r
+ uprintf("--[%U]",set_child->name);\r
+ set_child = set_child->nextchild;\r
+ }\r
+ uprintf("\n");\r
+ set = set->nextsib;\r
+ }\r
+ if (class->nextsib != NULL)\r
+ { if (classbuf == NULL)\r
+ classbuf = class;\r
+ class = class->nextsib;\r
+ goto handle_class;\r
+ }\r
+ if (classbuf != NULL)\r
+ class = classbuf;\r
+ classbuf = NULL;\r
+ uprintf("\n");\r
+ depth = olddepth + 1;\r
+ }\r
+}\r