Annotation of researchv10no/cmd/dag/draw_dag.c, revision 1.1.1.1

1.1       root        1: #include       "draw_dag.h"
                      2: 
                      3: #include       <sys/types.h>
                      4: #include       <sys/times.h>
                      5: #define TIC 60
                      6: 
                      7: int    N_real_nodes,   // actual number of input nodes
                      8:        N_nodes,        // number of nodes at various phases
                      9:        N_edges,        // total number of edges
                     10:        N_self_edges,   // # of loops detected
                     11:        N_flat_edges,   // # of edges whose ends are at the same level
                     12:        N_repeat_edges, // # of multi-edges deleted
                     13:        N_revert_edges, // # of edges whose direction is reverted
                     14:        N_component;    // # of connected components
                     15: edge_t **Inedges,      // in-edges for each node
                     16:        **Outedges,     // out-edges
                     17:        **Noedges,      // self-edges and flat edges
                     18:        **Istems,       // stem edges
                     19:        **Ostems;
                     20: int    *Stems;
                     21: int    *Root,          // space to store union trees of vertices at same ranks
                     22:        *Component,     // connected component numbers
                     23:        *Invert,        // inversion of nodes in their ranks
                     24:        *Level,         // level assignment of nodes
                     25:        Maxlevel,       // maximum level assigned to any node
                     26:        *N_level,       // number of nodes at each level
                     27:        **Rank;         // array of ordered lists of nodes
                     28: int    *Nodepos,       // node positions
                     29:        *Deleted,       // virtual nodes that were deleted
                     30:        *Width,         // widths of nodes
                     31:        Nodesep,        // minimum separation between nodes
                     32:        *Height,        // height of nodes
                     33:        Levelsep,       // separation between levels
                     34:        *Levelheight,   // height of layers
                     35:        *Levelpos;      // position of levels
                     36: 
                     37: int    Xbound,Ybound;  // if "fill" then size of box to fill, else 0
                     38: 
                     39: int    Verbose;        // say lots of things
                     40: 
                     41: /*
                     42:        Draw any directed graphs.
                     43:        This function works best with directed acyclic graphs.
                     44:        Cycles are broken using a depth-first search.
                     45: */
                     46: 
                     47: void draw_dag(int n_nodes, node_t **nodes, edge_t **edges, options_t options)
                     48: {
                     49:        struct tms begtm, endtm;
                     50:        Verbose = options.verbose;
                     51: 
                     52:        if(options.verbose)
                     53:        {
                     54: #ifndef TIMING
                     55:                fprintf(stderr,"Start graph drawing\n");
                     56: #endif
                     57:                times(&begtm);
                     58:        }
                     59: 
                     60:        // Create Inedges[], Outedges[], Width[], N_nodes, and N_edges
                     61:        dag_start(n_nodes,nodes,edges,options);
                     62: 
                     63:        // remove stem edges
                     64:        if(N_flat_edges <= 0)
                     65:                dag_delstem();
                     66: 
                     67:        // Create Level[], Maxlevel
                     68:        int *srcs = options.source_nodes;
                     69:        int source = (srcs && srcs[0] != -1) ? Root[srcs[0]] : -1;
                     70:        int *sinks = options.sink_nodes;
                     71:        int sink = (sinks && sinks[0] != -1) ? Root[sinks[0]] : -1;
                     72:        if(sink == source)
                     73:                sink = -1;
                     74:        int **same = options.same_nodes;
                     75:        dag_levels(source,sink,same ? 1 : 0);
                     76: 
                     77:        // Make long edges into short edges by inserting dummy nodes
                     78:        dag_unitedges();
                     79: 
                     80:        // Create N_level[], Rank[][]
                     81:        dag_ranks();
                     82: 
                     83:        // reinsert stems
                     84:        if(N_flat_edges <= 0)
                     85:                dag_insstem();
                     86: 
                     87:        // Create Positions[], Maxpos 
                     88:        dag_positions(options.ranksep,!options.quick);
                     89: 
                     90:        // Create splines
                     91:        dag_spline();
                     92: 
                     93:        // Return values to user
                     94:        dag_end(nodes,edges);
                     95: 
                     96:        if(Verbose)
                     97:        {
                     98:                times(&endtm);
                     99:                int total = (endtm.tms_utime-begtm.tms_utime) +
                    100:                                (endtm.tms_stime-begtm.tms_stime);
                    101:                int percent = (total - (total/TIC)*TIC)*100/TIC;
                    102: #ifdef TIMING
                    103:                fprintf(stderr,"%d.%02d\n",total/TIC, percent);
                    104: #else
                    105:                fprintf(stderr,"Total time in graph drawing: %d.%02ds\n",
                    106:                                total/TIC, percent);
                    107: #endif
                    108:        }
                    109: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.