1cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* VCG description handler for Bison.
2cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
4cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   This file is part of Bison, the GNU Compiler Compiler.
6cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   Bison is free software; you can redistribute it and/or modify
8cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   it under the terms of the GNU General Public License as published by
9cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   the Free Software Foundation; either version 2, or (at your option)
10cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   any later version.
11cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
12cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   Bison is distributed in the hope that it will be useful,
13cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   but WITHOUT ANY WARRANTY; without even the implied warranty of
14cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   GNU General Public License for more details.
16cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
17cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   You should have received a copy of the GNU General Public License
18cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   along with Bison; see the file COPYING.  If not, write to
19cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   Boston, MA 02110-1301, USA.  */
21cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
22cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef VCG_H_
23cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define VCG_H_
24cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
25cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* VCG color map. The 32 prime predefined colors. */
26cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectenum color
27cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
28cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  white		= 0,
29cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  blue,
30cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  red,
31cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  green		= 3,
32cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yellow,
33cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  magenta,
34cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  cyan		= 6,
35cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  darkgrey,
36cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  darkblue,
37cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  darkred	= 9,
38cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  darkgreen,
39cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  darkyellow,
40cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  darkmagenta	= 12,
41cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  darkcyan,
42cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  gold,
43cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  lightgrey	= 15,
44cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  lightblue,
45cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  lightred,
46cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  lightgreen	= 18,
47cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  lightyellow,
48cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  lightmagenta,
49cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  lightcyan	= 21,
50cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  lilac,
51cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  turquoise,
52cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  aquamarine	= 24,
53cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  khaki,
54cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  purple,
55cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yellowgreen	= 27,
56cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  pink,
57cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  orange,
58cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  orchid,
59cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  black		= 31
60cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
61cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
62cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* VCG textmode. Specify the adjustement of the text within the border of a summary node. */
63cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectenum textmode
64cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
65cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  centered,
66cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  left_justify,
67cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  right_justify
68cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
69cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
70cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* VCG shapes. Used for nodes shapes. */
71cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectenum shape
72cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
73cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  box,
74cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  rhomb,
75cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ellipse,
76cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  triangle
77cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
78cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
79cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Structure for colorentries.  */
80cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstruct colorentry
81cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
82cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int color_index;
83cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int red_cp;
84cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int green_cp;
85cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int blue_cp;
86cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  struct colorentry *next;
87cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
88cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
89cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Structure to construct lists of classnames. */
90cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstruct classname
91cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
92cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int no; /* Class number */
93cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const char *name; /* Name associated to the class no. */
94cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  struct classname *next; /* next name class association. */
95cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
96cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
97cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Structure is in infoname.  */
98cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstruct infoname
99cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
100cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int integer;
101cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  char const *chars;
102cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  struct infoname *next;
103cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* VCG decision yes/no. */
106cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectenum decision
107cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
108cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yes,
109cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  no
110cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
111cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
112cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* VCG graph orientation. */
113cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectenum orientation
114cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
115cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  top_to_bottom,
116cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  bottom_to_top,
117cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  left_to_right,
118cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  right_to_left
119cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
120cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
121cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* VCG alignment for node alignement. */
122cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectenum alignment
123cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
124cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  center,
125cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  top,
126cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  bottom
127cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
128cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* VCG arrow mode. */
130cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectenum arrow_mode
131cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
132cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fixed,
133cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  free_a
134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
135cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
136cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* VCG crossing weight type. */
137cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectenum crossing_type
138cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
139cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  bary,
140cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  median,
141cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  barymedian,
142cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  medianbary
143cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
144cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
145cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* VCG views. */
146cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectenum view
147cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
148cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  normal_view,
149cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  cfish,
150cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  pfish,
151cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fcfish,
152cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fpfish
153cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
154cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
155cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*------------------------------------------------------.
156cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| Node attributs list. structure that describes a node. |
157cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project`------------------------------------------------------*/
158cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
159cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstruct node
160cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
161cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Title the unique string identifying the node. This attribute is
162cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     mandatory. */
163cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const char *title;
164cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
165cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Label the text displayed inside the node. If no label is specified
166cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     then the title of the node will be used. Note that this text may
167cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     contain control characters like NEWLINE that influences the size of
168cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     the node. */
169cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const char *label;
170cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
171cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* loc is the location as x, y position relatively to the system of
172cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     coordinates of the graph. Locations are specified in the form
173cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     loc: - x: xpos y: ypos "". The locations of nodes are only valid,
174cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     if the whole graph is fully specified with locations and no part is
175cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     folded. The layout algorithm of the tool calculates appropriate x, y
176cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     positions, if at least one node that must be drawn (i.e., is not
177cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     hidden by folding or edge classes) does not have fixed specified
178cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     locations.
179cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is none. */
180cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int locx;
181cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int locy;
182cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
183cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* vertical order is the level position (rank) of the node. We can also
184cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     specify level: int. Level specifications are only valid, if the
185cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     layout is calculated, i.e. if at least one node does not have a
186cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     fixed location specification. The layout algorithm partitioned all
187cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     nodes into levels 0...maxlevel. Nodes at the level 0 are on the
188cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     upper corner. The algorithm is able to calculate appropriate levels
189cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     for the nodes automatically, if no fixed levels are given.
190cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Specifications of levels are additional constraints, that may be
191cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     ignored, if they are in conflict with near edge specifications.
192cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default values are unspecified. */
193cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int vertical_order;
194cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
195cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* horizontal order is the horizontal position of the node within a
196cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     level. The nodes which are specified with horizontal positions are
197cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     ordered according to these positions within the levels. The nodes
198cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     which do not have this attribute are inserted into this ordering by
199cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     the crossing reduction mechanism. Note that connected components are
200cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     handled separately, thus it is not possible to intermix such
201cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     components by specifying a horizontal order. If the algorithm for
202cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     downward laid out trees is used, the horizontal order influences
203cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     only the order of the child nodes at a node, but not the order of
204cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     the whole level.
205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is unspecified. */
206cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int horizontal_order;
207cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
208cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* width, height is the width and height of a node including the border.
209cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     If no value (in pixels) is given then width and height are
210cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     calculated from the size of the label.
211cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default are width and height of the label. */
212cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int width;
213cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int height;
214cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
215cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* shrink, stretch gives the shrinking and stretching factor of the
216cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     node. The values of the attributes width, height, borderwidth and
217cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     the size of the label text is scaled by ((stretch=shrink) \Lambda
218cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     100) percent. Note that the actual scale value is determined by the
219cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     scale value of a node relatively to a scale value of the graph,
220cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     i.e. if (stretch,shrink) = (2,1) for the graph and (stretch,shrink)
221cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     = (2,1) for the node of the graph, then the node is scaled by the
222cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     factor 4 compared to the normal size. The scale value can also be
223cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     specified by scaling: float.
224cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default are 1,1. */
225cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int shrink;
226cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int stretch;
227cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
228cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* folding specifies the default folding of the nodes. The folding k
229cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     (with k ? 0) means that the graph part that is reachable via edges
230cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     of a class less or equal to k is folded and displayed as one node.
231cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     There are commands to unfold such summary nodes, see section 5. If
232cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     no folding is specified for a node, then the node may be folded if
233cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     it is in the region of another node that starts the folding. If
234cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     folding 0 is specified, then the node is never folded. In this case
235cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     the folding stops at the predecessors of this node, if it is
236cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     reachable from another folding node. The summary node inherits some
237cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     attributes from the original node which starts the folding (all
238cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     color attributes, textmode and label, but not the location). A
239cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     folded region may contain folded regions with smaller folding class
240cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     values (nested foldings). If there is more than one node that start
241cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     the folding of the same region (this implies that the folding class
242cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     values are equal) then the attributes are inherited by one of these
243cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     nodes nondeterministically. If foldnode attributes are specified,
244cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     then the summary node attributes are inherited from these attributes.
245cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is none. */
246cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int folding;
247cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
248cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* shape specifies the visual appearance of a node: box, rhomb, ellipse,
249cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     and triangle. The drawing of ellipses is much slower than the drawing
250cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     of the other shapes.
251cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is box. */
252cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum shape shape;
253cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
254cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* textmode specifies the adjustment of the text within the border of a
255cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     node. The possibilities are center, left.justify and right.justify.
256cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is center. */
257cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum textmode textmode;
258cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
259cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* borderwidth specifies the thickness of the node's border in pixels.
260cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     color is the background color of the node. If none is given, the
261cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     node is white. For the possibilities, see the attribute color for
262cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     graphs.
263cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is 2. */
264cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int borderwidth;
265cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
266cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* node color.
267cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is white or transparent, */
268cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum color color;
269cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
270cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* textcolor is the color for the label text. bordercolor is the color
271cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     of the border. Default color is the textcolor. info1, info2, info3
272cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     combines additional text labels with a node or a folded graph. info1,
273cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is black. */
274cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum color textcolor;
275cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
276cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* info2, info3 can be selected from the menu. The corresponding text
277cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     labels can be shown by mouse clicks on nodes.
278cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default are null strings. */
279cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const char *infos[3];
280cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
281cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Node border color.
282cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is textcolor. */
283cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum color bordercolor;
284cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
285cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Next node node... */
286cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  struct node *next;
287cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
288cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
289cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* typedef alias. */
290cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef struct node node;
291cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
292cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*-------------------------------------------------------.
293cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| Edge attributs list. Structure that describes an edge. |
294cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project`-------------------------------------------------------*/
295cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
296cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* VCG Edge type. */
297cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectenum edge_type
298cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
299cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  normal_edge,
300cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  back_edge,
301cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  near_edge,
302cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  bent_near_edge
303cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
304cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
305cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Structs enum definitions for edges. */
306cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectenum linestyle
307cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
308cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  continuous,
309cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  dashed,
310cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  dotted,
311cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  invisible
312cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
313cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
314cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectenum arrowstyle
315cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
316cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  solid,
317cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  line,
318cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  none
319cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
320cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
321cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* The struct edge itself. */
322cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstruct edge
323cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
324cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
325cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Edge type.
326cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is normal edge. */
327cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum edge_type type;
328cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
329cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Sourcename is the title of the source node of the edge.
330cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default: none. */
331cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const char *sourcename; /* Mandatory. */
332cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
333cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Targetname is the title of the target node of the edge.
334cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default: none. */
335cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const char *targetname; /* Mandatory. */
336cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
337cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Label specifies the label of the edge. It is drawn if
338cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     display.edge.labels is set to yes.
339cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default: no label. */
340cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const char *label;
341cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
342cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Linestyle specifies the style the edge is drawn. Possibilities are:
343cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     ffl continuous a solid line is drawn ( -- ) ffl dashed the edge
344cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     consists of single dashes ( - - - ) ffl dotted the edge is made of
345cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     single dots ( \Delta  \Delta  \Delta  ) ffl invisible the edge is not
346cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     drawn. The attributes of its shape (color, thickness) are ignored.
347cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     To draw a dashed or dotted line needs more time than solid lines.
348cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is continuous. */
349cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum linestyle linestyle;
350cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
351cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Thickness is the thickness of an edge.
352cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is 2. */
353cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int thickness;
354cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
355cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Class specifies the folding class of the edge. Nodes reachable by
356cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     edges of a class less or equal to a constant k specify folding
357cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     regions of k. See the node attribute folding and the folding commands.
358cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is 1. */
359cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int class;
360cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
361cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* color is the color of the edge.
362cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is black. */
363cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum color color;
364cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
365cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* textcolor is the color of the label of the edge. arrowcolor,
366cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     backarrowcolor is the color of the arrow head and of the backarrow
367cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     head. priority The positions of the nodes are mainly determined by
368cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     the incoming and outgoing edges. One can think of rubberbands instead
369cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     of edges that pull a node into its position. The priority of an edges
370cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     corresponds to the strength of the rubberband.
371cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is color. */
372cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum color textcolor;
373cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
374cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Arrow color.
375cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is color. */
376cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum color arrowcolor;
377cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
378cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* BackArrow color.
379cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is color. */
380cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum color backarrowcolor;
381cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
382cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* arrowsize, backarrowsize The arrow head is a right-angled, isosceles
383cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     triangle and the cathetuses have length arrowsize.
384cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is 10. */
385cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int arrowsize;
386cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
387cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Backarrow size
388cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is 0. */
389cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int backarrowsize;
390cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
391cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* arrowstyle, backarrowstyle Each edge has two arrow heads: the one
392cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     appears at the target node (the normal arrow head), the other appears
393cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     at the source node (the backarrow head). Normal edges only have the
394cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     normal solid arrow head, while the backarrow head is not drawn, i.e.
395cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     it is none. Arrowstyle is the style of the normal arrow head, and
396cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     backarrowstyle is the style of the backarrow head. Styles are none,
397cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     i.e. no arrow head, solid, and line.
398cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is solid. */
399cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum arrowstyle arrowstyle;
400cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
401cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Default is none. */
402cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum arrowstyle backarrowstyle;
403cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
404cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Default is 1. */
405cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int priority;
406cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
407cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Anchor. An anchor point describes the vertical position in a node
408cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     where an edge goes out. This is useful, if node labels are several
409cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     lines long, and outgoing edges are related to label lines. (E.g.,
410cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     this allows a nice visualization of structs containing pointers as
411cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     fields.).
412cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is none. */
413cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int anchor;
414cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
415cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Horizontal order is the horizontal position the edge. This is of
416cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     interest only if the edge crosses several levels because it specifies
417cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     the point where the edge crosses the level. within a level. The nodes
418cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     which are specified with horizontal positions are ordered according
419cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     to these positions within a level. The horizontal position of a long
420cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     edge that crosses the level specifies between which two node of that
421cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     level the edge has to be drawn. Other edges which do not have this
422cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     attribute are inserted into this ordering by the crossing reduction
423cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     mechanism. Note that connected components are handled separately,
424cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     thus it is not possible to intermix such components by specifying a
425cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     horizontal order.
426cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is unspcified. */
427cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int horizontal_order;
428cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
429cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /*
430cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ** Next edge node...
431cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  */
432cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  struct edge *next;
433cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
434cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
435cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
436cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*
437cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project** typedef alias.
438cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project*/
439cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef struct edge edge;
440cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
441cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*--------------------------------------------------------.
442cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| Graph attributs list. Structure that describes a graph. |
443cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project`--------------------------------------------------------*/
444cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
445cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstruct graph
446cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
447cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Graph title or name.
448cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Title specifies the name (a string) associated with the graph. The
449cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     default name of a subgraph is the name of the outer graph, and the
450cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     name of the outmost graph is the name of the specification input
451cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     file. The name of a graph is used to identify this graph, e.g., if
452cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     we want to express that an edge points to a subgraph. Such edges
453cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     point to the root of the graph, i.e. the first node of the graph or
454cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     the root of the first subgraph in the graph, if the subgraph is
455cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     visualized explicitly.
456cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     By default, it's the name of the vcg graph file description. */
457cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const char *title;
458cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
459cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Graph label.
460cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Label the text displayed inside the node, when the graph is folded
461cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     to a node. If no label is specified then the title of the graph will
462cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     be used. Note that this text may contain control characters like
463cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     NEWLINE that influences the size of the node.
464cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     By default, it takes the title value */
465cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const char *label;
466cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
467cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Any informations.
468cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Info1, info2, info3 combines additional text labels with a node or a
469cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     folded graph. info1, info2, info3 can be selected from the menu
470cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     interactively. The corresponding text labels can be shown by mouse
471cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     clicks on nodes.
472cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default values are empty strings (here NULL pointers) */
473cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const char *infos[3];
474cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
475cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Background color and summary node colors
476cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Color specifies the background color for the outermost graph, or the
477cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     color of the summary node for subgraphs. Colors are given in the enum
478cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     declared above. If more than these default colors are needed, a
479cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     color map with maximal 256 entries can be used. The first 32 entries
480cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     correspond to the colors just listed. A color of the color map can
481cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     selected by the color map index, an integer, for instance red has
482cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     index 2, green has index 3, etc.
483cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is white for background and white or transparent for summary
484cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     nodes. */
485cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum color color;
486cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
487cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Textcolor.
488cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     need explanations ???
489cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     default is black for summary nodes. */
490cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum color textcolor;
491cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
492cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Bordercolor is the color of the summary node's border. Default color
493cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     is the textcolor. width, height are width and height of the
494cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     displayed part of the window of the outermost graph in pixels, or
495cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     width and height of the summary node of inner subgraphs.
496cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is the default of the textcolor. */
497cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum color bordercolor;
498cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
499cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Width, height are width and height of the displayed part of the
500cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     window of the outermost graph in pixels, or width and height of the
501cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     summary node of inner subgraphs.
502cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default value is 100. */
503cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int width;
504cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int height;
505cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
506cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Specify the thickness if summary node's border in pixels.
507cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     default value is 2. */
508cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int borderwidth;
509cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
510cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* x, y are the x-position and y-position of the graph's window in
511cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     pixels, relatively to the root screen, if it is the outermost graph.
512cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     The origin of the window is upper, left hand. For inner subgraphs,
513cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     it is the position of the folded summary node. The position can also
514cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     be specified in the form loc: fx:int y:intg.
515cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     The default value is 0. */
516cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int x;
517cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int y;
518cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
519cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* folding of a subgraph is 1, if the subgraph is fused, and 0, if the
520cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     subgraph is visualized explicitly. There are commands to unfold such
521cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     summary nodes.
522cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default value is 0 */
523cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int folding;
524cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
525cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Shrink, stretch gives the shrinking and stretching factor for the
526cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     graph's representation (default is 1, 1). ((stretch=shrink) \Lambda
527cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     100) is the scaling of the graph in percentage, e.g.,
528cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     (stretch,shrink) = (1,1) or (2,2) or (3,3) : : : is normal size,
529cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     (stretch,shrink) = (1,2) is half size, (stretch,shrink) = (2,1) is
530cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     double size. For subgraphs, it is also the scaling factor of the
531cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     summary node. The scaling factor can also be specified by scaling:
532cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     float (here, scaling 1.0 means normal size). */
533cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int shrink;
534cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int stretch;
535cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
536cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* textmode specifies the adjustment of the text within the border of a
537cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     summary node. The possibilities are center, left.justify and
538cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     right.justify.
539cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default value is center.*/
540cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum textmode textmode;
541cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
542cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Shape can be specified for subgraphs only. It is the shape of the
543cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     subgraph summary node that appears if the subgraph is folded: box,
544cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     rhomb, ellipse, and triangle. vertical order is the level position
545cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     (rank) of the summary node of an inner subgraph, if this subgraph is
546cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     folded. We can also specify level: int. The level is only
547cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     recognized, if an automatical layout is calculated. horizontal order
548cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     is the horizontal position of the summary node within a level. The
549cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     nodes which are specified with horizontal positions are ordered
550cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     according to these positions within the levels. The nodes which do
551cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     not have this attribute are inserted into this ordering by the
552cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     crossing reduction mechanism. Note that connected
553cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     components are handled separately, thus it is not possible to
554cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     intermix such components by specifying a horizontal order. If the
555cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     algorithm for downward laid out trees is used, the horizontal order
556cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     influences only the order of the child nodes at a node, but not the
557cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     order of the whole level.
558cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is box, other: rhomb, ellipse, triangle. */
559cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum shape shape;
560cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
561cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Vertical order is the level position (rank) of the summary node of an
562cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     inner subgraph, if this subgraph is folded. We can also specify
563cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     level: int. The level is only recognized, if an automatical layout is
564cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     calculated.  */
565cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int vertical_order;
566cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
567cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Horizontal order is the horizontal position of the summary node within
568cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     a level. The nodes which are specified with horizontal positions are
569cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     ordered according to these positions within the levels. The nodes which
570cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     do not have this attribute are inserted into this ordering by the
571cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     crossing reduction mechanism. Note that connected components are
572cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     handled separately, thus it is not possible to intermix such components
573cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     by specifying a horizontal order. If the algorithm for downward laid
574cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     out trees is used, the horizontal order influences only the order of
575cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     the child nodes at a node, but not the order of the whole level.  */
576cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int horizontal_order;
577cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
578cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* xmax, ymax specify the maximal size of the virtual window that is
579cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     used to display the graph. This is usually larger than the displayed
580cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     part, thus the width and height of the displayed part cannot be
581cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     greater than xmax and ymax. Only those parts of the graph are drawn
582cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     that are inside the virtual window. The virtual window can be moved
583cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     over the potential infinite system of coordinates by special
584cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     positioning commands.
585cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Defaults are 90 and 90. */
586cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int xmax;
587cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int ymax;
588cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
589cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* xy-base: specify the upper left corner coordinates of the graph
590cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     relatively to the root window.
591cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Defaults are 5, 5. */
592cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int xbase;
593cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int ybase;
594cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
595cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* xspace, yspace the minimum horizontal and vertical distance between
596cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     nodes. xlspace is the horizontal distance between lines at the
597cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     points where they cross the levels. (At these points, dummy nodes
598cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     are used. In fact, this is the horizontal distance between dummy
599cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     nodes.) It is recommended to set xlspace to a larger value, if
600cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     splines are used to draw edges, to prevent sharp bendings.
601cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default are 20 and 70. */
602cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int xspace;
603cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int yspace;
604cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
605cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* The horizontal space between lines at the point where they cross
606cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     the levels.
607cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     defaults value is 1/2 xspace (polygone) and 4/5 xspace (splines)*/
608cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int xlspace;
609cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
610cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* xraster, yraster specifies the raster distance for the position of
611cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     the nodes. The center of a node is aligned to this raster. xlraster
612cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     is the horizontal raster for the positions of the line control
613cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     points (the dummy nodes). It should be a divisor of xraster.
614cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     defaults are 1,1. */
615cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int xraster;
616cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int yraster;
617cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
618cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* xlraster is the horizontal raster for the positions of the line
619cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     control points (the dummy nodes). It should be a divisor of xraster.
620cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     defaults is 1. */
621cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int xlraster;
622cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
623cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* hidden specifies the classes of edges that are hidden.
624cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Edges that are within such a class are not laid out nor drawn.
625cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Nodes that are only reachable (forward or backward) by edges of an
626cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     hidden class are not drawn. However, nodes that are not reachable
627cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     at all are drawn. (But see attribute ignore.singles.) Specification
628cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     of classes of hidden edges allows to hide parts of a graph, e.g.,
629cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     annotations of a syntax tree. This attribute is only allowed at the
630cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     outermost level. More than one settings are possible to specify
631cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     exactly the set of classes that are hidden. Note the important
632cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     difference between hiding of edges and the edge line style invisible.
633cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Hidden edges are not existent in the layout. Edges with line style
634cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     invisible are existent in the layout; they need space and may
635cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     produce crossings and influence the layout, but you cannot see
636cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     them.
637cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     No default value. */
638cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int hidden;
639cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
640cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Classname allows to introduce names for the edge classes. The names
641cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     are used in the menus. infoname allows to introduce names for the
642cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     additional text labels. The names are used in the menus.
643cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     defaults are 1,2,3...
644cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     By default, no class names. */
645cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  struct classname *classname;
646cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
647cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Infoname allows to introduce names for the additional text labels.
648cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     The names are used in the menus.
649cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Infoname is given by an integer and a string.
650cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     The default value is NULL.  */
651cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  struct infoname *infoname;
652cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
653cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Colorentry allows to fill the color map. A color is a triplet of integer
654cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     values for the red/green/blue-part. Each integer is between 0 (off) and
655cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     255 (on), e.g., 0 0 0 is black and 255 255 255 is white. For instance
656cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     colorentry 75 : 70 130 180 sets the map entry 75 to steel blue. This
657cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     color can be used by specifying just the number 75.
658cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default id NULL.  */
659cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  struct colorentry *colorentry;
660cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
661cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Layout downfactor, layout upfactor, layout nearfactor The layout
662cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     algorithm partitions the set of edges into edges pointing upward,
663cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     edges pointing downward, and edges pointing sidewards. The last type
664cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     of edges is also called near edges. If the layout.downfactor is
665cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     large compared to the layout.upfactor and the layout.nearfactor,
666cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     then the positions of the nodes is mainly determined by the edges
667cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     pointing downwards. If the layout.upfactor is large compared to the
668cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     layout.downfactor and the layout.nearfactor, then the positions of
669cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     the nodes is mainly determined by the edges pointing upwards. If the
670cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     layout.nearfactor is large, then the positions of the nodes is
671cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     mainly determined by the edges pointing sidewards. These attributes
672cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     have no effect, if the method for downward laid out trees is used.
673cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is normal. */
674cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int layout_downfactor;
675cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int layout_upfactor;
676cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int layout_nearfactor;
677cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Layout splinefactor determines the bending at splines. The factor
678cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     100 indicates a very sharp bending, a factor 1 indicates a very flat
679cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     bending. Useful values are 30 : : : 80. */
680cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int layout_splinefactor;
681cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
682cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Late edge labels yes means that the graph is first partitioned and
683cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     then, labels are introduced. The default algorithm first creates
684cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     labels and then partitions the graph, which yield a more compact
685cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     layout, but may have more crossings.
686cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is no. */
687cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum decision late_edge_labels;
688cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
689cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Display edge labels yes means display labels and no means don't
690cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     display edge labels.
691cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default vaule is no. */
692cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum decision display_edge_labels;
693cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
694cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Dirty edge labels yes enforces a fast layout of edge labels, which
695cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     may very ugly because several labels may be drawn at the same place.
696cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Dirty edge labels cannot be used if splines are used.
697cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is no.
698cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  */
699cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum decision dirty_edge_labels;
700cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
701cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Finetuning no switches the fine tuning phase of the graph layout
702cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     algorithm off, while it is on as default. The fine tuning phase
703cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     tries to give all edges the same length.
704cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is yes. */
705cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum decision finetuning;
706cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
707cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Ignore singles yes hides all nodes which would appear single and
708cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     unconnected from the remaining graph. Such nodes have no edge at all
709cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     and are sometimes very ugly. Default is to show all nodes.
710cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is no. */
711cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum decision ignore_singles;
712cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
713cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* priority phase yes replaces the normal pendulum method by a
714cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     specialized method: It forces straight long edges with 90 degree,
715cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     just as the straight phase. In fact, the straight phase is a fine
716cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     tune phase of the priority method. This phase is also recommended,
717cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     if an orthogonal layout is selected (see manhattan.edges).
718cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is no. */
719cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum decision priority_phase;
720cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
721cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* manhattan edges yes switches the orthogonal layout on. Orthogonal
722cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     layout (or manhattan layout) means that all edges consist of line
723cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     segments with gradient 0 or 90 degree. Vertical edge segments might
724cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     by shared by several edges, while horizontal edge segments are never
725cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     shared. This results in very aesthetical layouts just for flowcharts.
726cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     If the orthogonal layout is used, then the priority phase and
727cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     straight phase should be used. Thus, these both phases are switched
728cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     on, too, unless priority layout and straight line tuning are
729cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     switched off explicitly.
730cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is no. */
731cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum decision manhattan_edges;
732cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
733cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Smanhattan edges yes switches a specialized orthogonal layout on:
734cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Here, all horizontal edge segments between two levels share the same
735cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     horizontal line, i.e. not only vertical edge segments are shared,
736cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     but horizontal edge segments are shared by several edges, too. This
737cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     looks nice for trees but might be too confusing in general, because
738cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     the location of an edge might be ambiguously.
739cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is no. */
740cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum decision smanhattan_edges;
741cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
742cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Near edges no suppresses near edges and bent near edges in the
743cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     graph layout.
744cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is yes. */
745cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum decision near_edges;
746cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
747cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Orientation specifies the orientation of the graph: top.to.bottom,
748cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     bottom.to.top, left.to.right or right.to.left. Note: the normal
749cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     orientation is top.to.bottom. All explanations here are given
750cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     relatively to the normal orientation, i.e., e.g., if the orientation
751cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     is left to right, the attribute xlspace is not the horizontal but
752cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     the vertical distance between lines, etc.
753cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is to_to_bottom. */
754cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum orientation orientation;
755cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
756cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Node alignment specified the vertical alignment of nodes at the
757cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     horizontal reference line of the levels. If top is specified, the
758cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     tops of all nodes of a level have the same y-coordinate; on bottom,
759cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     the bottoms have the same y-coordinate, on center the nodes are
760cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     centered at the levels.
761cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is center. */
762cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum alignment node_alignment;
763cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
764cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Port sharing no suppresses the sharing of ports of edges at the
765cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     nodes. Normally, if multiple edges are adjacent to the same node,
766cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     and the arrow head of all these edges has the same visual appearance
767cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     (color, size, etc.), then these edges may share a port at a node,
768cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     i.e. only one arrow head is draw, and all edges are incoming into
769cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     this arrow head. This allows to have many edges adjacent to one node
770cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     without getting confused by too many arrow heads. If no port sharing
771cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     is used, each edge has its own port, i.e. its own place where it is
772cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     adjacent to the node.
773cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is yes. */
774cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum decision port_sharing;
775cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
776cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Arrow mode fixed (default) should be used, if port sharing is used,
777cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     because then, only a fixed set of rotations for the arrow heads are
778cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     used. If the arrow mode is free, then each arrow head is rotated
779cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     individually to each edge. But this can yield to a black spot, where
780cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     nothing is recognizable, if port sharing is used, since all these
781cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     qdifferently rotated arrow heads are drawn at the same place. If the
782cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     arrow mode is fixed, then the arrow head is rotated only in steps of
783cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     45 degree, and only one arrow head occurs at each port.
784cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is fixed. */
785cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum arrow_mode arrow_mode;
786cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
787cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Treefactor The algorithm tree for downward laid out trees tries to
788cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     produce a medium dense, balanced tree-like layout. If the tree
789cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     factor is greater than 0.5, the tree edges are spread, i.e. they
790cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     get a larger gradient. This may improve the readability of the tree.
791cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Note: it is not obvious whether spreading results in a more dense or
792cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     wide layout. For a tree, there is a tree factor such that the whole
793cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     tree is minimal wide.
794cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is 0.5. */
795cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  float treefactor;
796cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
797cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Spreadlevel This parameter only influences the algorithm tree, too.
798cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     For large, balanced trees, spreading of the uppermost nodes would
799cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     enlarge the width of the tree too much, such that the tree does not
800cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     fit anymore in a window. Thus, the spreadlevel specifies the minimal
801cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     level (rank) where nodes are spread. Nodes of levels upper than
802cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     spreadlevel are not spread.
803cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is 1. */
804cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int spreadlevel;
805cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
806cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Crossing weight specifies the weight that is used for the crossing
807cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     reduction: bary (default), median, barymedian or medianbary. We
808cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     cannot give a general recommendation, which is the best method. For
809cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     graphs with very large average degree of edges (number of incoming
810cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     and outgoing edges at a node), the weight bary is the fastest
811cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     method. With the weights barymedian and medianbary, equal weights of
812cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     different nodes are not very probable, thus the crossing reduction
813cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     phase 2 might be very fast.
814cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is bary. */
815cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum crossing_type crossing_weight;
816cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
817cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Crossing phase2 is the most time consuming phase of the crossing
818cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     reduction. In this phase, the nodes that happen to have equal
819cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     crossing weights are permuted. By specifying no, this phase is
820cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     suppressed.
821cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is yes. */
822cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum decision crossing_phase2;
823cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
824cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Crossing optimization is a postprocessing phase after the normal
825cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     crossing reduction: we try to optimize locally, by exchanging pairs
826cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     of nodes to reduce the crossings. Although this phase is not very
827cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     time consuming, it can be suppressed by specifying no.
828cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is yes. */
829cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum decision crossing_optimization;
830cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
831cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* View allows to select the fisheye views. Because
832cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     of the fixed size of the window that shows the graph, we normally
833cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     can only see a small amount of a large graph. If we shrink the graph
834cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     such that it fits into the window, we cannot recognize any detail
835cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     anymore. Fisheye views are coordinate transformations: the view onto
836cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     the graph is distort, to overcome this usage deficiency. The polar
837cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     fisheye is easy to explain: assume a projection of the plane that
838cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     contains the graph picture onto a spheric ball. If we now look onto
839cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     this ball in 3 D, we have a polar fisheye view. There is a focus
840cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     point which is magnified such that we see all details. Parts of the
841cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     plane that are far away from the focus point are demagnified very
842cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     much. Cartesian fisheye have a similar effect; only the formula for
843cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     the coordinate transformation is different. Selecting cfish means
844cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     the cartesian fisheye is used which demagnifies such that the whole
845cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     graph is visible (self adaptable cartesian fisheye). With fcfish,
846cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     the cartesian fisheye shows the region of a fixed radius around the
847cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     focus point (fixed radius cartesian fisheye). This region might be
848cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     smaller than the whole graph, but the demagnification needed to show
849cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     this region in the window is also not so large, thus more details
850cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     are recognizable. With pfish the self adaptable polar fisheye is
851cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     selected that shows the whole graph, and with fpfish the fixed
852cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     radius polar fisheye is selected.
853cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is normal view.  */
854cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum view view;
855cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
856cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Edges no suppresses the drawing of edges.
857cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is yes. */
858cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum decision edges;
859cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
860cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Nodes no suppresses the drawing of nodes.
861cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is yes. */
862cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum decision nodes;
863cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
864cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Splines specifies whether splines are used to draw edges (yes or no).
865cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     As default, polygon segments are used to draw edges, because this is
866cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     much faster. Note that the spline drawing routine is not fully
867cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     validated, and is very slow. Its use is mainly to prepare high
868cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     quality PostScript output for very small graphs.
869cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is no. */
870cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  enum decision splines;
871cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
872cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Bmax set the maximal number of iterations that are done for the
873cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     reduction of edge bendings.
874cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   Default is 100. */
875cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int bmax;
876cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
877cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Cmin set the minimal number of iterations that are done for the
878cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     crossing reduction with the crossing weights. The normal method
879cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     stops if two consecutive checks does not reduce the number of
880cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     crossings anymore. However, this increasing of the number of
881cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     crossings might be locally, such that after some more iterations,
882cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     the crossing number might decrease much more.
883cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is 0. */
884cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int cmin;
885cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
886cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Cmax set the maximal number of interactions for crossing reduction.
887cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     This is helpful for speeding up the layout process.
888cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is -1, which represents infinity.  */
889cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int cmax;
890cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
891cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Pmin set the minimal number of iterations that is done with the
892cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     pendulum method. Similar to the crossing reduction, this method
893cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     stops if the `imbalancement weight' does not decreases anymore.
894cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     However, the increasing of the imbalancement weight might be locally,
895cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     such that after some more iterations, the imbalancement weight might
896cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     decrease much more.
897cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is 0. */
898cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int pmin;
899cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
900cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Pmax set the maximal number of iterations of the pendulum method.
901cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     This is helpful for speedup the layout process.
902cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is 100. */
903cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int pmax;
904cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
905cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Rmin set the minimal number of iterations that is done with the
906cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     rubberband method. This is similar as for the pendulum method.
907cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is 0. */
908cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int rmin;
909cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
910cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Rmax set the maximal number of iterations of the rubberband method.
911cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     This is helpful for speedup the layout process.
912cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is 100. */
913cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int rmax;
914cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
915cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Smax set the maximal number of iterations of the straight line
916cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     recognition phase (useful only, if the straight line recognition
917cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     phase is switched on, see attribute straight.phase).
918cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Default is 100. */
919cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int smax;
920cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
921cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Generic values.
922cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   */
923cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  node node;
924cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  edge edge;
925cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
926cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* List of nodes declared.
927cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Pointer. */
928cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  node *node_list;
929cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
930cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* List of edges declared.
931cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     Pointer. */
932cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  edge *edge_list;
933cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
934cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
935cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
936cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Graph typedefs. */
937cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef struct graph graph;
938cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
939cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid new_graph (graph *g);
940cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid new_node (node *n);
941cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid new_edge (edge *e);
942cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
943cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid add_node (graph *g, node *n);
944cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid add_edge (graph *g, edge *e);
945cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
946cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid add_colorentry (graph *g, int color_idx, int red_cp,
947cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		     int green_cp, int blue_cp);
948cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid add_classname (graph *g, int val, const char *name);
949cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid add_infoname (graph *g, int val, const char *name);
950cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
951cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid open_node (FILE *fout);
952cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid output_node (node *n, FILE *fout);
953cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid close_node (FILE *fout);
954cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
955cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid open_edge (edge *e, FILE *fout);
956cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid output_edge (edge *e, FILE *fout);
957cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid close_edge (FILE *fout);
958cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
959cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid open_graph (FILE *fout);
960cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid output_graph (graph *g, FILE *fout);
961cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid close_graph (graph *g, FILE *fout);
962cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
963cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif /* VCG_H_ */
964