~ubuntu-branches/ubuntu/lucid/graphviz/lucid-security

« back to all changes in this revision

Viewing changes to dag/dag.c

  • Committer: Bazaar Package Importer
  • Author(s): Stephen M Moraco
  • Date: 2002-02-05 18:52:12 UTC
  • Revision ID: james.westby@ubuntu.com-20020205185212-8i04c70te00rc40y
Tags: upstream-1.7.16
ImportĀ upstreamĀ versionĀ 1.7.16

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <dag.h>
 
2
 
 
3
#ifdef DMALLOC
 
4
#include "dmalloc.h"
 
5
#endif
 
6
 
 
7
#ifndef offsetof
 
8
#define offsetof(typ,fld)  ((int)(&(((typ*)0)->fld)))
 
9
#endif
 
10
 
 
11
cg_t dd_open_constraint(void)
 
12
{
 
13
        cg_t    rv;
 
14
 
 
15
        rv.g = agopen("nsg",Agstrictdirected, NIL(Agdisc_t*));
 
16
        rv.anchor = agnode(rv.g,"_anchor",TRUE);
 
17
        rv.inconsistent = TRUE; /* onetime initialization to set anchor */
 
18
        return rv;
 
19
}
 
20
 
 
21
/* 
 
22
 * creates and initializes a new graph to contain the layout set,
 
23
 * and creates a pointer from the original graph back to this layout.
 
24
 */
 
25
ilbool DDopen(ILview_t *client)
 
26
{
 
27
        static unsigned int D[] = {
 
28
                sizeof(ddview_t), sizeof(ddmdlnode_t), sizeof(ddmdledge_t)
 
29
        };
 
30
        ddview_t                *rv;
 
31
 
 
32
        rv = (ddview_t*)il_open_view(&DynaDag, client, Agdirected, D);
 
33
        rv->layout = agopen("dd_layout",Agdirected,&IL_graph_id_disc);
 
34
        rv->dirty = agsubg(rv->layout,"updated nodes",TRUE);
 
35
        rv->con[XCON] = dd_open_constraint();
 
36
        rv->con[YCON] = dd_open_constraint();
 
37
        rv->xscale = ROUND(1.0 / client->resolution);
 
38
        rv->prev_low_rank = MAXINT;
 
39
        dd_open_config(rv);
 
40
        return TRUE;
 
41
}
 
42
 
 
43
void DDclose(ILview_t *argview)
 
44
{
 
45
        Agraph_t        *model;
 
46
        Agnode_t        *n, *ln;
 
47
        Agedge_t        *e;
 
48
        ddpath_t        *path;
 
49
        ddview_t        *view;
 
50
 
 
51
        view = (ddview_t*)(argview->pvt);
 
52
        model = DDmodel(argview);
 
53
        for (n = agfstnode(model); n; n = agnxtnode(n)) {
 
54
                for (e = agfstedge(n); e; e = agnxtedge(e,n)) {
 
55
                        path = (ddmdledge_t*)(AGDATA(e));
 
56
                        dd_close_path(view,path);
 
57
                }
 
58
                if ((ln = dd_rep(n)))
 
59
                        dd_close_node(view,ln);
 
60
        }
 
61
        agclose(view->con[XCON].g);
 
62
        agclose(view->con[YCON].g);
 
63
        dd_close_config(view);
 
64
        agclose(view->layout);
 
65
        il_close_view((engview_t*)view);
 
66
}
 
67
 
 
68
Agraph_t *DDmodel(ILview_t *view)
 
69
{
 
70
        return ((engview_t*)(view->pvt))->model.main;
 
71
}
 
72
 
 
73
ILnode_t *DDnodespec(ILview_t *argview, Agnode_t *model_node)
 
74
{
 
75
        return (ILnode_t*)(((engview_t*)(argview->pvt))->engine->mdlobj_to_spec(argview,(Agobj_t*)model_node));
 
76
}
 
77
 
 
78
ILedge_t *DDedgespec(ILview_t *argview, Agedge_t *model_edge)
 
79
{
 
80
        return (ILedge_t*)(((engview_t*)(argview->pvt))->engine->mdlobj_to_spec(argview,(Agobj_t*)model_edge));
 
81
}
 
82
 
 
83
ilbool DDcallback(ILview_t *view)
 
84
{
 
85
        return dd_work((ddview_t*)(view->pvt));
 
86
}
 
87
 
 
88
ILengine_t DynaDag = {
 
89
        DDopen,
 
90
        DDclose,
 
91
                il_batch_ins,
 
92
                il_batch_mod,
 
93
                il_batch_del,
 
94
        DDcallback,
 
95
        ilmdlobj_to_spec,
 
96
        ilspec_to_mdlobj
 
97
};
 
98
 
 
99
#include <stdio.h>
 
100
void ddwrite(Agraph_t *g) {agwrite(g,stderr);}