diff --git a/include/r3_gvc.h b/include/r3_gvc.h index 6add567..d8bcc0d 100644 --- a/include/r3_gvc.h +++ b/include/r3_gvc.h @@ -11,7 +11,7 @@ #include #include "r3.h" -void r3_tree_build_ag_nodes(Agraph_t * g, Agnode_t * ag_parent_node, const node * n, int node_cnt); +void r3_tree_build_ag_nodes(Agraph_t * g, Agnode_t * ag_parent_node, const node * n, int * node_cnt); int r3_tree_render(const node * tree, const char *layout, const char * format, FILE *fp); diff --git a/src/gvc.c b/src/gvc.c index 96fbcd2..8bd7e21 100644 --- a/src/gvc.c +++ b/src/gvc.c @@ -12,13 +12,13 @@ #include "r3_gvc.h" #include "zmalloc.h" -void r3_tree_build_ag_nodes(Agraph_t * g, Agnode_t * ag_parent_node, const node * n, int node_cnt) { - edge * e; +void r3_tree_build_ag_nodes(Agraph_t * g, Agnode_t * ag_parent_node, const node * n, int * node_cnt) { + if (!n) + return; for ( int i = 0 ; i < n->edge_len ; i++ ) { - e = n->edges[i]; - - node_cnt++; + edge * e = n->edges[i]; + (*node_cnt)++; Agnode_t *agn_child = NULL; Agedge_t *agn_edge = NULL; @@ -27,7 +27,7 @@ void r3_tree_build_ag_nodes(Agraph_t * g, Agnode_t * ag_parent_node, const node if ( e && e->child && e->child->combined_pattern ) { asprintf(&nodename,"%s", e->child->combined_pattern); } else { - asprintf(&nodename,"#%d", node_cnt); + asprintf(&nodename,"#%d", *node_cnt); } agn_child = agnode(g, nodename, 1); @@ -52,11 +52,13 @@ int r3_tree_render(const node * tree, const char *layout, const char * format, F GVC_t *gvc = NULL; gvc = gvContext(); /* Create a simple digraph */ - g = agopen("g", Agdirected, 0); + // g = agopen("g", Agdirected, 0); + g = agopen("g", Agundirected, 0); // create self node Agnode_t *ag_root = agnode(g, "{root}", 1); - r3_tree_build_ag_nodes(g, ag_root, tree, 0); + int n = 0; + r3_tree_build_ag_nodes(g, ag_root, tree, &n); gvLayout(gvc, g, layout); gvRender(gvc, g, format, fp); gvFreeLayout(gvc, g); @@ -96,11 +98,13 @@ int r3_tree_render_file(const node * tree, const char * format, const char * fil */ /* Create a simple digraph */ - g = agopen("g", Agdirected, 0); + // g = agopen("g", Agdirected, 0); + g = agopen("g", Agundirected, 0); // create self node Agnode_t *ag_root = agnode(g, "{root}", 1); - r3_tree_build_ag_nodes(g, ag_root, tree, 0); + int n = 0; + r3_tree_build_ag_nodes(g, ag_root, tree, &n); gvLayout(gvc, g, "dot"); gvRenderFilename(gvc, g, format, filename);