+TreeInfo *cloneTreeNode(TreeInfo **node_top, TreeInfo *node_parent,
+ TreeInfo *node, boolean skip_sets_without_levels)
+{
+ TreeInfo *node_new;
+
+ if (node == NULL)
+ return NULL;
+
+ if (!node->parent_link && !node->level_group &&
+ skip_sets_without_levels && node->levels == 0)
+ return cloneTreeNode(node_top, node_parent, node->next,
+ skip_sets_without_levels);
+
+ node_new = newTreeInfo();
+
+ *node_new = *node; /* copy complete node */
+
+ node_new->node_top = node_top; /* correct top node link */
+ node_new->node_parent = node_parent; /* correct parent node link */
+
+ if (node->level_group)
+ node_new->node_group = cloneTreeNode(node_top, node_new, node->node_group,
+ skip_sets_without_levels);
+
+ node_new->next = cloneTreeNode(node_top, node_parent, node->next,
+ skip_sets_without_levels);
+
+ return node_new;
+}
+
+void cloneTree(TreeInfo **ti_new, TreeInfo *ti, boolean skip_empty_sets)
+{
+ TreeInfo *ti_cloned = cloneTreeNode(ti_new, NULL, ti, skip_empty_sets);
+
+ *ti_new = ti_cloned;
+}
+
+static boolean adjustTreeGraphics(TreeInfo *node)
+{
+ boolean settings_changed = FALSE;
+
+ while (node)
+ {
+#if 1
+ if (node->graphics_ecs_set && !setup.prefer_aga_graphics)
+ {
+ setString(&node->graphics_set, node->graphics_ecs_set);
+#if 0
+ printf("::: setting graphics for set '%s' to '%s' [ECS]\n",
+ node->subdir, node->graphics_set);
+#endif
+
+ settings_changed = TRUE;
+ }
+ else if (node->graphics_aga_set && setup.prefer_aga_graphics)
+ {
+ setString(&node->graphics_set, node->graphics_aga_set);
+#if 0
+ printf("::: setting graphics for set '%s' to '%s' [AGA]\n",
+ node->subdir, node->graphics_set);
+#endif
+
+ settings_changed = TRUE;
+ }
+ else if (node->graphics_set == NULL)
+ {
+#if 0
+ printf("::: cannot set graphics_set for set '%s'\n", node->subdir);
+#endif
+ }
+#else
+ if (node->graphics_ecs_set)
+ printf("::: SET '%s': found ECS set '%s'\n",
+ node->subdir, node->graphics_ecs_set);
+
+ if (node->graphics_aga_set)
+ printf("::: SET '%s': found AGA set '%s'\n",
+ node->subdir, node->graphics_aga_set);
+#endif
+
+ if (node->node_group != NULL)
+ settings_changed |= adjustTreeGraphics(node->node_group);
+
+ node = node->next;
+ }
+
+ return settings_changed;
+}
+