DragonFly On-Line Manual Pages
    
    
	
VCG | XVCG(1l)                                                  VCG | XVCG(1l)
NAME
       VCG tool - visualization of compiler graphs
SYNOPSIS
       vcg [options] [filename]
       xvcg [options] [filename]
SYNOPSIS FOR SEQUENCES OF GRAPH SPECIFICATIONS
       vcg -multi [options] [filename] [options] [filename] ...
       xvcg -multi [options] [filename] [options] [filename] ...
DESCRIPTION
       The VCG tool reads a VCG specification and visualizes the graph.  If
       not all positions of nodes are fixed, the tool lays the graph out using
       several heuristics as reducing the number of crossings, minimizing the
       size of edges, centering of nodes.  The specification language of the
       VCG tool is nearly compatible to GRL, the language of the Edge tool,
       but contains many extensions.  The VCG tool allows folding of
       dynamically or statically specified regions of the graph.  It uses
       colors and runs on X11.  (An older version runs on Sunview.)
GENERAL OPTIONS
       -              The input is stdin instead of a file.
       -h | -?        Print a help message about the usage of the tool.
       -v | -version  Print a version and copyright message.
       -silent        Be silent during the layout.  No messages or warnings
                      are produced.
       -nocolors | -blackwhite
                      Do not use colors on a color screen.  On a monochrom
                      screen the graph is drawn in black & white even if it is
                      specified with colors.  On a color screen, this mode is
                      simulated, if this option is selected.  The option is
                      useful, if the VCG tool conflicts with other programs
                      that need colors.
       -e <num> | -error <num>
                      Stop after <num> errors during parsing of the
                      specification (default: 16).
       -a <num> | -animation <num>
                      Start the tool as animation handler.  This implies that
                      the tool is controlled by signals (USRSIG1, USRSIG2)
                      from an external program.  The signal USRSIG1 causes the
                      VCG tool to open the display window and reload its input
                      file.  The signal USRSIG2 causes the VCG tool to close
                      the display window.  The tool processes the input and
                      indicates the completion of the processing to the
                      controlling program.  If <num> is greater 0, this
                      indication is done by sleeping <num> seconds and
                      touching the input file afterwards such that its time
                      stamp is refreshed.  If <num> is less than 0, this
                      indication is done by sleeping - <num> seconds and
                      sending signal USRSIG1 to the caller process afterwards.
       -m | -multi    Read multiple files one after another to display a
                      sequence of graphs.  Instead of an exit of the tool, the
                      next file is read.  The option -multi must be specified
                      before the first input file.
       -bary          Use bary centering to reduce the number of edge
                      crossings (default).
       -median        Use median centering instead of bary centering to reduce
                      the number of crossings.  On graphs with large average
                      degree of edges, bary centering might be faster.
       -barymedian    Use a hybrid method to reduce the number of edge
                      crossings.  Bary centering is used for all nodes with
                      different bary values.  For nodes with same bary values,
                      the crossing reduction heuristics normally has a random
                      effect.  With this hybrid method, the crossing reduction
                      of nodes with same bary values is done by median
                      centering.
       -medianbary    Use a hybrid method to reduce the number of edge
                      crossings.  Median centering is used for all nodes with
                      different median values.  For nodes with same median
                      values, the crossing reduction heuristics normally has a
                      random effect.  With this hybrid method, the crossing
                      reduction of nodes with same median values is done by
                      bary centering.
       -notune | -nofinetune
                      Switch the fine tuning layout phase off.  Fine tuning is
                      a postprocessing phase after partitioning of nodes into
                      layers.  Fine tuning changes the layers of nodes to
                      minimize the length of edges.  If this phase is switched
                      off, it yield a less compact distribution of nodes in
                      the levels.
       -manhattan | -orthogonal
                      Switch the orthogonal manhattan layout on.  This forces
                      edges of gradient 0 or 90 degree.  The result of this
                      layout might be more aesthetical, if additionally the
                      priority layout phase with straight line tuning is used.
                      Thus, these phases are switched on, too, unless priority
                      layout and straight line tuning is switched explicitly
                      off.
       -nomanhattan | -noorthogonal
                      Switch the orthogonal manhattan layout explicitly off.
       -smanhattan    Use the orthogonal manhattan layout without separation
                      of horizontal line segments.  Horizontal line segments
                      are shared between different edges.  This looks nice for
                      trees but might be confusing in general, because the
                      location of an edge might be ambiguously.
       -nosmanhattan  Switch the orthogonal manhattan layout without
                      separation explicitly off.
       -prio          Switch the priority layout on.  This forces straight
                      long edges with gradient 90 degree during the node
                      placement phase.  The straight line tuning phase can be
                      used to improve the priority layout.  Thus, this phase
                      is switched on, too, unless straight line tuning is
                      switched explicitly off.
       -noprio        Switch the priority layout explicitly off.
       -straight      Switch the straight line tuning phase on. This phase
                      forces straight long edges with gradient 90 degree. It
                      can be used to improve the priority layout.
       -nostraight    Switch the straight line tuning phase explicitly off.
       -nonearedge    Do not allow near edges in the layout.
       -l | -latelabels
                      Create the labels after the partitioning of edges.  This
                      has only an effect if labels are shown in a nondirty
                      way.  If labels are created after the partitioning of
                      edges, the layout will be a little bit wider and may
                      have less crossings.  But note that sometimes this
                      layout may also be worser than the normal layout.
       -hidesingles | -ignoresingles
                      Ignore single nodes (nodes without visible edges)  that
                      are not connected with the remaining graph.  These nodes
                      are sometimes not of interest, but would spread the
                      layout if they were visible.
       -s | -summarize
                      Switch edge summary layout on.  Multiple edges between
                      the same source and target node are summarized if they
                      have the same visible appearance.  This reduces the
                      number of visible edges.
OPTIONS FOR THE LAYOUT SPEED
       The speed of the layout process can be influenced by selecting time
       limits and iteration bounds of the different layout phases.  Optional
       layout phases can completely be skipped.  But note that we need a
       minimal time for each graph, in order to initialize the internal data
       structures.  Furthermore, a fast layout is probably also an ugly
       layout.
       -t <num> | -timelimit <num>
                      Set the time limit to <num> seconds of real time.  If
                      the time limit is exceeded, the fastest possible layout
                      mode is switched on.  This may yield a very ugly layout.
                      Of course, a time limit does not mean that the layout
                      really needs so much time: The layout may be faster,
                      because the graph structure is very simple, or it may be
                      slower, because even the fastest possible layout already
                      exceeds the time limit.  Further note, that the layout
                      depends on the real time, i.e. on the load of the
                      computer. Thus, given a time limit, two identical trys
                      need not to give identical results.
       -f | -fast     Switch the fast and dirty and ugly mode on.  The layout
                      phase will be very fast, but the layout will be ugly.
                      This is helpful on very large graphs where aesthetic
                      visibility is of minor importance.  The option -fast
                      implies -bmax 2 -cmax 2 -pmax 2 -rmax 2 -smax 2.
       -b <num> | -bmax <num> | -bending <num>
                      Set the maximal number of iterations used for the
                      reduction of edge bendings to <num>.  Edge bendings are
                      used to avoid that edges are drawn across nodes.
                      Reducing the number of iterations results in a faster
                      but ugly layout, i.e. to much bendings occur.  The
                      default value is 100.
       -c <num> | -cmax <num> | -crossing <num>
                      Set the maximal number of iterations used for the
                      reduction of edge crossings to <num>.  The edge crossing
                      reduction method is called bary centering or median
                      centering.  These may be very time consuming on large
                      graphs.  Reducing the number of iterations results in a
                      faster but ugly layout.  As default, the method is
                      iterated as long as improvements are possible.
       -cmin <num>    Set the minimal number of iterations used for the
                      reduction of edge crossings to <num>.  The crossing
                      reduction method tries to detect improvements of the
                      layout.  If an iteration of that method does not yield
                      an improvment, the method normally stops.  But this
                      situation might be a local minimum of the quality of the
                      layout, i.e. further iterations might find a better
                      layout.  Thus, the minimal number of iterations can be
                      specified.  The default value is 0.
       -p <num> | -pmax <num> | -pendulum <num>
                      Set the maximal number of iterations used for the
                      balancing  by the pendulum method to <num>.  The
                      pendulum method calculates the x co-ordinates of nodes
                      such that the layout is medium dense and balanced.  It
                      tries to avoid extreme gradients of edges.  It works
                      like a pendulum where the nodes are the balls, the edges
                      are the strings and uppermost nodes are fixed on the
                      ceiling.  Reducing the number of iterations results in a
                      faster but ugly layout.  The default value is 100.
       -pmin <num>    Set the minimal number of iterations used for the
                      balancing  by the pendulum method to <num>.  If an
                      iteration of that method does not yield an improvment,
                      the method normally stops.  But this situation might be
                      a local minimum of the quality of the layout, i.e.
                      further iterations might find a better layout.  Thus,
                      the minimal number of iterations can be specified.  The
                      default value is 0.
       -r <num> | -rmax <num> | -rubberband <num>
                      Set the maximal number of iterations used for the
                      balancing  by the rubberband method to <num>.  The
                      rubberband method calculates the x co-ordinates of nodes
                      such that the nodes are centered relatively to their
                      incoming and outgoing edges.  It works like a network
                      where the edges pull on the nodes like rubberbands.
                      Reducing the number of iterations results in a faster
                      but ugly layout.  The default value is 100.
       -rmin <num>    Set the minimal number of iterations used for the
                      balancing  by the rubberband method to <num>.  If an
                      iteration of that method does not yield an improvment,
                      the method normally stops.  But this situation might be
                      a local minimum of the quality of the layout, i.e.
                      further iterations might find a better layout.  Thus,
                      the minimal number of iterations can be specified.  The
                      default value is 0.
       -smax <num>    Set the maximal number of iterations used for the
                      straight  line tuning phase to <num>.  This phase forces
                      straight long edges with gradient 90 degree.  It can be
                      used to improve the priority layout or the manhattan
                      layout.
       -nocopt | -nocopt2
                      Skip the optimization phase 2 during the crossing
                      reduction.  This phase takes very long time on very
                      large graphs.  Before reducing the number of iterations
                      of the crossing reduction phase (see option -cmax <num>
                      ) you should first try to skip this optimization phase
                      2.
       -nocoptl | -nocoptlocal
                      Switch a local crossing optimization off.  This phase
                      additionally examines pairs of edge polygons and tries
                      to unwind them.  It slows down if the degree of the
                      nodes is large.
OPTIONS FOR THE DISTRIBUTION OF NODES
       The quality of the layout is mainly influenced by the distribution of
       the nodes into the hierarchy levels.  Nodes of the same level will
       appear in the same row.  Since it depends on the application which
       hierarchy is the best, there are different algorithms for this phase.
       -d normal      Normal  distribution  of nodes  into the levels
                      (default).  This algorithm is based on  the calculation
                      of the strongly connected components.
       -d dfs         Depth first search  distribution of nodes  into the
                      levels.  This is the fastest method.
       -d 0 | -d minbackward
                      Reduce the number of backward edges heuristically.  If
                      the graph is acyclic, no backward edges will occur, i.e.
                      all edges point into the same direction.
       -d * | -d maxdepth
                      Maximize the depth of the layout heuristically.  It
                      should be used if the layout is too wide in x direction.
                      This algorithm is very fast.
       -d - | -d mindepth
                      Minimize the depth of the layout heuristically.  It
                      should be used if the layout is too wide in y direction.
                      This algorithm is very fast.
       -d ++ | -d maxdepthslow
                      Maximize the depth of the layout heuristically. See
                      above.  This algorithm is very slow, but may give better
                      results.
       -d -- | -d mindepthslow
                      Minimize the depth of the layout heuristically. See
                      above.  This algorithm is very slow, but may give better
                      results.
       -d minindeg | -d minindegree
                      Prepare the nodes by sorting them according increasing
                      indegree (number of incoming edges).  The nodes with the
                      minimal indegree come first.  This may have various
                      effects on the layout.
       -d maxindeg | -d maxindegree
                      Prepare the nodes by sorting them according decreasing
                      indegree.  The nodes with the maximal indegree come
                      first.  This may have various effects on the layout.
       -d minoutdeg | -d minoutdegree
                      Prepare the nodes by sorting them according increasing
                      outdegree (number of outgoing edges).  The nodes with
                      the minimal outdegree come first.  This may have various
                      effects on the layout.
       -d maxoutdeg | -d maxoutdegree
                      Prepare the nodes by sorting them according decreasing
                      outdegree.  The nodes with the maximal outdegree come
                      first.  This may have various effects on the layout.
       -d mindeg | -d mindegree
                      Prepare the nodes by sorting them according increasing
                      degree (number of incoming and outgoing edges).  The
                      nodes with the minimal degree come first.  This may have
                      various effects on the layout.
       -d maxdeg | -D maxdeg
                      Prepare the nodes by sorting them according decreasing
                      degree.  The nodes with the maximal degree come first.
                      This may have various effects on the layout.
       -d tree        Use a specialized layout for trees. It does not work
                      with non-trees.
OPTIONS FOR THE VIEW
       The view of a graph is the method of the visual appearance  of the
       graph in the window after the layout.  Changing the view does not
       require a relayout of the graph.  Views are transformations that are
       done during the drawing.
       -view normal   Normal view onto the graph. No distortion.
       -view cfish    Cartesian fisheye view.  The graph is  distorted  such
                      that the whole graph is visible.  Horizontal  and
                      vertical lines don't change their direction.
       -view fcfish   Cartesian fisheye view with fixed size focus.  The graph
                      is distorted, but not necessarily the whole graph is
                      visible.
       -view pfish    Polar fisheye view.  The graph is  distorted  such that
                      the whole graph is visible.  Even horizontal and
                      vertical lines might be distorted.
       -view fpfish   Polar fisheye view  with  fixed size  focus.  The  graph
                      is distorted, but not necessarily the whole graph is
                      visible.
       -spline        Use splines instead of polygons to draw edges. This is
                      mainly useful if you want to export the graph into a
                      high quality PostScript picture.  WARNING: Drawing
                      splines is very slow.
       -nonodes       Suppress drawing of nodes.
       -noedges       Suppress drawing of edges.
       -xpos <num>    Set the x-coordinate of the initial point of the graph
                      that appears at the window origin or of the initial
                      focus point to <num>.
       -ypos <num>    Set the y-coordinate of the initial point of the graph
                      that appears at the window origin or of the initial
                      focus point to <num>.
PRINTER DRIVER INTERFACE
       The printer driver interface allows to produce an output file of the
       visualized graph without the need of interaction.  The VCG tool acts as
       a kind of converter program in this case: it converts a VCG file into a
       PostScript or bitmap file.  It is recommended to use the option -silent
       in combination to one of the options -vcgoutput, -psoutput, -pbmoutput,
       or -ppmoutput.  Example:
       xvcg -silent -color -scale 75 -psoutput test.ps test.vcg
       converts the VCG file test.vcg into a PostScript file that contains a
       color picture of the graph scaled by 75 %.  In this case the
       interactive display is suppressed.  If the graph does not fit on the
       page, the output might be nonsense.
PRINTER DRIVER OPTIONS
       -vcgoutput <filename>
                      Produce a VCG file named <filename> that contains the
                      graph laid out, i.e. including information about the co-
                      ordinates of the visible nodes.  The most of the
                      following format options have no effect for the VCG file
                      format.
       -psoutput <filename>
                      Produce a PostScript file named <filename> that contains
                      the graph.
       -pbmoutput <filename>
                      Produce a bitmap file named <filename> in PBM format
                      that contains the graph in black and white.
       -ppmoutput <filename>
                      Produce a bitmap file named <filename> in PPM format
                      that contains the graph in colors.
       -paper <papertype>
                      Select the paper type. Default is a4.  <papertype> is
                      one of:
                      a4        din A4 (21 x 30 cm)
                      A4        din A4 (21 x 30 cm)
                      b5        din B5 (18.5 x 27 cm)
                      B5        din B5 (18.5 x 27 cm)
                      a5        din A5 (15 x 21 cm)
                      A5        din A5 (15 x 21 cm)
                      11x17     tabloid (11 x 17 in)
                      tabloid   tabloid (11 x 17 in)
                      8x11      letter (8.5 x 11 in)
                      letter    letter (8.5 x 11 in)
                      8x14      legal (8.5 x 14 in)
                      legal     legal (8.5 x 14 in)
       -noBoundingBox Suppress the calculation of a BoundingBox (PostScript
                      format).
       -color         Select a color file output.  This option works only with
                      the PostScript format.
       -grey          Select a greyscaled file output.  This option works only
                      with the PostScript format.
       -blackwhite    Select a monochromatic file output.  This is the default
                      color.  This option works only with the PostScript
                      format.
       -portrait      Select the paper orientation `Portrait' (default).
       -landscape     Select the paper orientation `Landscape'.
       -split <num>   Split the graph into <num> pages.  This option works
                      only with the PostScript format.  The number of pages
                      must be one of 1, 4, 9, 16, or 25.
       -xdpi <num>    Set the horizontal resolution for the PPM and PBM
                      format.  This allows to adapt the bitmap formats to the
                      resolutions of the printer.
       -ydpi <num>    Set the vertical resolution for the PPM and PBM format.
                      This allows to adapt the bitmap formats to the
                      resolutions of the printer.
       -scale <num>   Scale the graph to <num> percent for the file output.
                      The default scaling fits the graph with maximal aspect
                      ratio to the paper size.
       -width <float> <units>
                      Fit the graph such that its width is smaller than
                      <float> <units>.  This works only if no scaling is
                      specified.  <units> are:
                      in        Inches
                      inch      Inches
                      ft        Foot
                      foot      Foot
                      feet      Foot
                      mm        Millimeter
                      cm        Centimeter
                      dm        Decimeter
                      m         Meter
       -height <float> <units>
                      Fit the graph such that its height is smaller than
                      <float> <units>.  This works only if no scaling is
                      specified.
       -lm <float> <units>
                      Set the left margin of the output to <float> <units>.
                      This works only if no right margin is specified.  The
                      default position is centered on the page.  In some cases
                      the BoundingBox of the PostScript output meight be
                      wrong.  If a BoundingBox is needed  then we recommend
                      the options -lm 0 cm -bm 0 cm.
       -rm <float> <units>
                      Set the right margin of the output to <float> <units>.
                      This works only if no left margin is specified.  The
                      default position is centered on the page.
       -tm <float> <units>
                      Set the top margin of the output to <float> <units>.
                      This works only if no bottom margin is specified.  The
                      default position is centered on the page.
       -bm <float> <units>
                      Set the bottom margin of the output to <float> <units>.
                      This works only if no top margin is specified.  The
                      default position is centered on the page.
X11 OPTIONS
       -display <host:dpy>
                      Set the remote X11 server to host:dpy.  This is
                      analogous to xterm(1l).
       -geometry <geom>
                      Specify the hint of size and location of the X11 window.
                      This is analogous to xterm(1l).
       -bw <num>      Set the border width of the X11 window to <num> pixels.
                      This is analogous to xterm(1l).
       -font <xfont>  Set the font used for messages and menu items in the X11
                      window.  This is analogous to xterm(1l).
       -grabinputfocus
                      Switch setting of InputFocus on or off (depending on the
                      default).  Cause the VCG tool to execute a
                      XSetInputFocus, or to avoid to execute a XSetInputFocus
                      on initialization.
GRAMMAR
       The grammar of the specification language is the following:
       graph
            ::=  "graph:" '{' graph_entry_list '}'
            ;
       graph_entry_list
            ::=  graph_entry_list graph_entry
            | graph_entry
            ;
       graph_entry
            ::=  graph_attribute
            | node_defaults
            | edge_defaults
            | foldnode_defaults
            | foldedge_defaults
            | graph
            | node
            | edge
            | nearedge
            | bentnearedge
            | backedge
            ;
       graph_attribute
            ::=  "title" ':' string
            | "label" ':' string
            | "info1" ':' string
            | "info2" ':' string
            | "info3" ':' string
            | "color" ':' enum_color
            | "textcolor" ':'enum_color
            | "bordercolor" ':'enum_color
            | "width" ':' integer
            | "height" ':' integer
            | "borderwidth" ':' integer
            | 'x' ':' integer
            | 'y' ':' integer
            | "loc:" '{' 'x' ':' integer 'y' ':' integer '}'
            | "folding" ':' integer
            | "scaling" ':' float
            | "shrink" ':' integer
            | "stretch" ':' integer
            | "textmode" ':' enum_textmode
            | "shape" ':' enum_shape
            | "level" ':' integer
            | "vertical_order" ':' integer
            | "horizontal_order" ':' integer
            | "status" ':' enum_status
            | "xmax" ':' integer
            | "ymax" ':' integer
            | "xbase" ':' integer
            | "ybase" ':' integer
            | "xspace" ':' integer
            | "xlspace" ':' integer
            | "yspace" ':' integer
            | "xraster" ':' integer
            | "xlraster" ':' integer
            | "yraster" ':' integer
            | "invisible" ':' integer
            | "hidden" ':' integer
            | "classname" integer ':' string
            | "infoname" integer ':' string
            | "colorentry" integer ':' integer integer integer
            | "layoutalgorithm" ':' enum_layoutalgorithm
            | "layout_downfactor" ':' integer
            | "layout_upfactor" ':' integer
            | "layout_nearfactor" ':' integer
            | "splinefactor" ':' integer
            | "late_edge_labels" ':' enum_yes_no
            | "display_edge_labels" ':' enum_yes_no
            | "dirty_edge_labels" ':' enum_yes_no
            | "finetuning" ':' enum_yes_no
            | "ignoresingles"  ':' enum_yes_no
            | "straight_phase" ':'  enum_yes_no
            | "priority_phase" ':'  enum_yes_no
            | "manhattan_edges" ':'  enum_yes_no
            | "smanhattan_edges" ':'  enum_yes_no
            | "nearedges" ':' enum_yes_no
            | "orientation" ':' enum_orientation
            | "node_alignment" ':' enum_node_align
            | "port_sharing" ':' enum_yes_no
            | "arrowmode" ':' enum_arrow_mode
            | "spreadlevel" ':' integer
            | "treefactor" ':' float
            | "crossingphase2" ':' enum_yes_no
            | "crossingoptimization" ':' enum_yes_no
            | "crossingweight" ':' enum_cross_weight
            | "view" ':'  enum_view
            | "edges" ':' enum_yes_no
            | "nodes" ':' enum_yes_no
            | "splines" ':' enum_yes_no
            | "bmax" ':' integer
            | "cmax" ':' integer
            | "cmin" ':' integer
            | "pmax" ':' integer
            | "pmin" ':' integer
            | "rmax" ':' integer
            | "rmin" ':' integer
            | "smax" ':' integer
            ;
       enum_color
            ::=  "aquamarine"
            | "black"
            | "blue"
            | "cyan"
            | "darkblue"
            | "darkcyan"
            | "darkgreen"
            | "darkgrey"
            | "darkmagenta"
            | "darkred"
            | "darkyellow"
            | "gold"
            | "green"
            | "khaki"
            | "lightblue"
            | "lightcyan"
            | "lightgreen"
            | "lightgrey"
            | "lightmagenta"
            | "lightred"
            | "lightyellow"
            | "lilac"
            | "magenta"
            | "orange"
            | "orchid"
            | "pink"
            | "purple"
            | "red"
            | "turquoise"
            | "white"
            | "yellow"
            | "yellowgreen"
            | integer
            ;
       enum_orientation
            ::=  "top_to_bottom"
            | "bottom_to_top"
            | "left_to_right"
            | "right_to_left"
            ;
       enum_layoutalgorithm
            ::=
            | "tree"
            | "maxdepth"
            | "mindepth"
            | "maxdepthslow"
            | "mindepthslow"
            | "maxdegree"
            | "mindegree"
            | "maxindegree"
            | "minindegree"
            | "maxoutdegree"
            | "minoutdegree"
            | "minbackward"
            | "dfs"
            ;
       enum_status
            ::=  "black"
            | "grey"
            | "white"
            ;
       enum_yes_no
            ::=  "yes"
            | "no"
            ;
       enum_cross_weight
            ::=  "bary"
            | "median"
            | "barymedian"
            | "medianbary"
            ;
       enum_view
            ::=  "cfish"
            | "fcfish"
            | "pfish"
            | "fpfish"
            ;
       enum_arrow_mode
            ::= "fixed"
            | "free"
            ;
       foldnode_defaults
            ::=  "foldnode." node_attribute
            ;
       foldedge_defaults
            ::=  "foldedge." edge_attribute
            ;
       node_defaults
            ::=  "node." node_attribute
            ;
       edge_defaults
            ::=  "edge." edge_attribute
            ;
       node ::=  "node:" '{' node_attribute_list '}'
            ;
       node_attribute_list
            ::=  node_attribute_list node_attribute
            | node_attribute
            ;
       edge ::=  "edge:" '{' edge_attribute_list '}'
            ;
       nearedge
            ::=  "nearedge:" '{' edge_attribute_list '}'
            ;
       bentnearedge
            ::=  "bentnearedge:" '{' edge_attribute_list '}'
            ;
       backedge
            ::=  "backedge:" '{' edge_attribute_list '}'
            ;
       edge_attribute_list
            ::=  edge_attribute_list edge_attribute
            | edge_attribute
            ;
       node_attribute
            ::=  "title" ':' string
            | "label" ':' string
            | "info1" ':' string
            | "info2" ':' string
            | "info3" ':' string
            | "color" ':' enum_color
            | "textcolor" ':'enum_color
            | "bordercolor" ':'enum_color
            | "width" ':' integer
            | "height" ':' integer
            | "borderwidth" ':' integer
            | "loc:" '{' 'x' ':' integer 'y' ':' integer '}'
            | "folding" ':' integer
            | "scaling" ':' float
            | "shrink" ':' integer
            | "stretch" ':' integer
            | "textmode" ':' enum_textmode
            | "shape" ':' enum_shape
            | "level" ':' integer
            | "vertical_order" ':' integer
            | "horizontal_order" ':' integer
            ;
       enum_textmode
            ::=  "center"
            | "left_justify"
            | "right_justify"
            ;
       enum_shape
            ::=  "box"
            | "rhomb"
            | "ellipse"
            | "triangle"
            ;
       enum_node_align
            ::=  "bottom"
            | "top"
            | "center"
            ;
       edge_attribute
            ::=  "sourcename" ':' string
            | "targetname" ':' string
            | "label" ':' string
            | "textcolor" ':'enum_color
            | "color" ':' enum_color
            | "thickness" ':' integer
            | "class" ':' integer
            | "priority" ':' integer
            | "arrowcolor" ':' enum_color
            | "backarrowcolor" ':' enum_color
            | "arrowsize" ':' integer
            | "backarrowsize" ':' integer
            | "arrowstyle" ':' enum_arrowstyle
            | "backarrowstyle" ':' enum_arrowstyle
            | "linestyle" ':' enum_linestyle
            | "anchor" ':' integer
            | "horizontal_order" ':' integer
            ;
       enum_linestyle
            ::=  "continuous"
            | "solid"
            | "dotted"
            | "dashed"
            | "invisible"
            ;
       enum_arrowstyle
            ::=  none
            | line
            | solid
            ;
WARNINGS
       The VCG tool needs about 200 bytes per edge and node.  Depending on the
       layout, it will produce a lot of additional dummy nodes and dummy
       edges, such that it may run out of memory.  The layout algorithm needs
       exponentially time in the worst case.
ACKNOWLEDGEMENTS
       The Edge tool was developed at the University of Karlsruhe.  GRL was
       described by S. Manke and F.N. Paulisch.
       Our colleagues M. Alt and C. Ferdinand found the most bugs and gave
       many proposals for improvements.
       The Institute of Compiler Construction at the University of Saarland,
       Germany, and the COMPARE Consortium were the first and most important
       users of the VCG tool and gave us the motivation, the time and many
       hints during the development of the tool.
SEE ALSO
       Sunview(1) X11(1l) edge(l)
       vcgdemomaker(l) pbmshift(l) pbmrot90(l) pbm2hp(l)
       VCG - Visualization of Compiler Graphs, Design Report and User
       Documentation, Ref. Compare, USAAR-1049-visual, January 1994, updated
       January 1995
BUGS
       The X11 version has the `InputFocus' problem.  This problem is solved
       for 99 % of all cases, but may still occur.
       If a graph is written to a file and reload from this file, the layout
       may be different and may be ugly.
       The attribute horizontal_order does only works for connected graphs,
       but not for unconnected graphs.
       For some parameters, negative values are inappropriate even if the tool
       does not crashes in such situations.  However the result will be very
       ugly.  For instance, the values of xbase and ybase should always be
       greater than zero.
       The spline routine is still too slow and has some bugs when exporting
       to a multi page PostScript file.
       Currently, no further bugs are known.
AUTHORS
       Georg Sander, University of Saarland, Germany.
       Iris Lemke, University of Saarland, Germany.
Release 1.3                       1995/01/05                    VCG | XVCG(1l)