static int upload_tree(struct test_tree *base, struct gui_tree *tree, struct tree_node *node) { int i = 0, n = 0; enum gui_tree_node_operation op; if (node->count) { i = 0; op = gui_panel_tree_begin_node(tree, node->name, &node->state); while (i < node->count) i += upload_tree(base, tree, node->children[i]); gui_panel_tree_end_node(tree); } else op = gui_panel_tree_leaf(tree, node->name, &node->state); switch (op) { case GUI_NODE_NOP: break; case GUI_NODE_CUT: tree_remove_node(node->parent, node); tree_push_node(base, node); return 0; case GUI_NODE_DELETE: tree_remove_node(node->parent, node); break; return 0; case GUI_NODE_PASTE: i = 0; n = base->count; while (i++ < n) tree_add_node(node, tree_pop_node(base)); case GUI_NODE_CLONE: default:break; } return 1; }
t_tree *create_tree(t_order *commande, t_order *last_order) { t_order *bigger; t_tree *current; static int i = 0; if (last_order == NULL) i = 0; else if (i++ > 500) return (NULL); if (!commande) return (NULL); if ((bigger = get_bigger(commande)) == NULL || bigger == last_order) return (NULL); current = tree_pop_node(bigger); current->left = create_tree(commande, bigger); current->right = create_tree(bigger->next, bigger); return (current); }