+static void output_types (const char *name, xbt_dynar_t types, FILE *file)
+{
+ unsigned int i;
+ fprintf (file, " %s = (", name);
+ for (i = xbt_dynar_length(types); i > 0; i--) {
+ char *type = *(char**)xbt_dynar_get_ptr(types, i - 1);
+ fprintf (file, "\"%s\"", type);
+ if (i - 1 > 0){
+ fprintf (file, ",");
+ }else{
+ fprintf (file, ");\n");
+ }
+ }
+ xbt_dynar_free (&types);
+}
+
+static void output_categories (const char *name, xbt_dynar_t cats, FILE *file)
+{
+ unsigned int i;
+ fprintf (file, " values = (");
+ for (i = xbt_dynar_length(cats); i > 0; i--) {
+ char *cat = *(char**)xbt_dynar_get_ptr(cats, i - 1);
+ fprintf (file, "\"%s%s\"", name, cat);
+ if (i - 1 > 0){
+ fprintf (file, ",");
+ }else{
+ fprintf (file, ");\n");
+ }
+ }
+ xbt_dynar_free (&cats);
+}
+
+static void uncat_configuration (FILE *file)
+{
+ //register NODE and EDGE types
+ output_types ("node", TRACE_get_node_types(), file);
+ output_types ("edge", TRACE_get_edge_types(), file);
+ fprintf (file, "\n");
+
+ //configuration for all nodes
+ fprintf (file,
+ " host = {\n"
+ " type = \"square\";\n"
+ " size = \"power\";\n"
+ " values = (\"power_used\");\n"
+ " };\n"
+ " link = {\n"
+ " type = \"rhombus\";\n"
+ " size = \"bandwidth\";\n"
+ " values = (\"bandwidth_used\");\n"
+ " };\n");
+ //close
+}
+
+static void cat_configuration (FILE *file)
+{
+ //register NODE and EDGE types
+ output_types ("node", TRACE_get_node_types(), file);
+ output_types ("edge", TRACE_get_edge_types(), file);
+ fprintf (file, "\n");
+
+ //configuration for all nodes
+ fprintf (file,
+ " host = {\n"
+ " type = \"square\";\n"
+ " size = \"power\";\n");
+ output_categories ("p", TRACE_get_categories(), file);
+ fprintf (file,
+ " };\n"
+ " link = {\n"
+ " type = \"rhombus\";\n"
+ " size = \"bandwidth\";\n");
+ output_categories ("b", TRACE_get_categories(), file);
+ fprintf (file, " };\n");
+ //close
+}
+
+static void generate_uncat_configuration (const char *output, const char *name, int brackets)