+int TRACE_platform_graph_export_graphviz (const char *filename)
+{
+ /* returns 1 if successful, 0 otherwise */
+ if (!TRACE_is_enabled()) return 0;
+ xbt_graph_t g = instr_routing_platform_graph();
+ if (g == NULL) return 0;
+ instr_routing_platform_graph_export_graphviz (g, filename);
+ xbt_graph_free_graph (g, xbt_free, xbt_free, NULL);
+ return 1;
+}
+
+/*
+ * Derived functions that use instr_user_variable and TRACE_user_srcdst_variable.
+ * They were previously defined as pre-processors directives, but were transformed
+ * into functions so the user can track them using gdb.
+ */
+
+/* for host variables */
+void TRACE_host_variable_declare (const char *var)
+{
+ instr_user_variable(0, NULL, var, "HOST", 0, INSTR_US_DECLARE, NULL);
+}
+
+void TRACE_host_variable_declare_with_color (const char *var, const char *color)
+{
+ instr_user_variable(0, NULL, var, "HOST", 0, INSTR_US_DECLARE, color);
+}
+
+void TRACE_host_variable_set (const char *host, const char *variable, double value)
+{
+ TRACE_host_variable_set_with_time (MSG_get_clock(), host, variable, value);
+}
+
+void TRACE_host_variable_add (const char *host, const char *variable, double value)
+{
+ TRACE_host_variable_add_with_time (MSG_get_clock(), host, variable, value);
+}
+
+void TRACE_host_variable_sub (const char *host, const char *variable, double value)
+{
+ TRACE_host_variable_sub_with_time (MSG_get_clock(), host, variable, value);
+}
+
+void TRACE_host_variable_set_with_time (double time, const char *host, const char *variable, double value)
+{
+ instr_user_variable(time, host, variable, "HOST", value, INSTR_US_SET, NULL);
+}
+
+void TRACE_host_variable_add_with_time (double time, const char *host, const char *variable, double value)
+{
+ instr_user_variable(time, host, variable, "HOST", value, INSTR_US_ADD, NULL);
+}
+
+void TRACE_host_variable_sub_with_time (double time, const char *host, const char *variable, double value)
+{
+ instr_user_variable(time, host, variable, "HOST", value, INSTR_US_SUB, NULL);
+}
+
+/* for link variables */
+void TRACE_link_variable_declare (const char *var)
+{
+ instr_user_variable (0, NULL, var, "LINK", 0, INSTR_US_DECLARE, NULL);
+}
+
+void TRACE_link_variable_declare_with_color (const char *var, const char *color)
+{
+ instr_user_variable (0, NULL, var, "LINK", 0, INSTR_US_DECLARE, color);
+}
+
+void TRACE_link_variable_set (const char *link, const char *variable, double value)
+{
+ TRACE_link_variable_set_with_time (MSG_get_clock(), link, variable, value);
+}
+
+void TRACE_link_variable_add (const char *link, const char *variable, double value)
+{
+ TRACE_link_variable_add_with_time (MSG_get_clock(), link, variable, value);
+}
+
+void TRACE_link_variable_sub (const char *link, const char *variable, double value)
+{
+ TRACE_link_variable_sub_with_time (MSG_get_clock(), link, variable, value);
+}
+
+void TRACE_link_variable_set_with_time (double time, const char *link, const char *variable, double value)