static void write_xdots (char * val, GVJ_t * job, state_t* sp) { xdot* cmds; int i; int not_first = 0; if (!val || (*val == '\0')) return; cmds = parseXDot(val); if (!cmds) { agerr(AGWARN, "Could not parse xdot \"%s\"\n", val); return; } gvputs(job, "\n"); indent(job, sp->Level++); gvputs(job, "[\n"); for (i = 0; i < cmds->cnt; i++) { if (not_first) gvputs(job, ",\n"); else not_first = 1; write_xdot (cmds->ops+i, job, sp); } sp->Level--; gvputs(job, "\n"); indent(job, sp->Level); gvputs(job, "]"); freeXDot(cmds); }
static void scanXdotwithattr(void *p, char *attr) { xdot *xDot; if ((xDot = parseXDotF(agget(p, attr), OpFns, sizeof(sdot_op)))) { scanXdot(xDot, p); freeXDot(xDot); } }
void graph_cleanup(graph_t *g) { if (GD_drawing(g) && GD_drawing(g)->xdots) freeXDot ((xdot*)GD_drawing(g)->xdots); if (GD_drawing(g) && GD_drawing(g)->id) free (GD_drawing(g)->id); free(GD_drawing(g)); GD_drawing(g) = NULL; free_label(GD_label(g)); //FIX HERE , STILL SHALLOW //memset(&(g->u), 0, sizeof(Agraphinfo_t)); agclean(g, AGRAPH,"Agraphinfo_t"); }