|
|
1.1 root 1: DAG is written in C++. You need a C++ compiler, Version 1.2 or newer.
2: You can get C++ from Valerie Monroe (ulysses!kaiser!vjm, 8-243-4406,
3: LC 4N-E13). Send her your name, address to send paper documentation,
4: department number, name or short description of project, unix mail
5: address, machine type, and version of C++ you are requesting (generally
6: you want the most recent).
7:
8: 1. Decide where you are going to put the DAG shape libraries,
9: and edit the first line of paths.h accordingly.
10: Change DAG_LIB_SUBDIR only if you are installing under EXPTOOLS.
11:
12: 2. 'makefile' is for old make ("make").
13: 'Makefile' is for new make ("nmake").
14: Decide which you are using, and remove the unneeded file.
15:
16: 3. Edit C flags in the makefile.
17: If you have System V, add "-DSYSV".
18: If you have Ninth Edition Unix, add "-DV9".
19: If you are installing DAG under EXPTOOLS, add "-DEXPTOOLS".
20: If you are using C++ 2.0 or later, add -DMICC.
21: If qsort() is declared in the local C++ header file "libc.h"
22: add "-DQSORTDCL". No known release of C++ up to C++ 2.0 beta 5
23: declares qsort() but eventually it will.
24:
25: DAG makes heavy use of floating point arithmetic. The Sun C compiler
26: and others have command line flags that generate object code for
27: optional floating point hardware. Find out which options are appropriate
28: for your computer, and add them to C flags in the makefile.
29:
30: 4. Run make or nmake.
31:
32: 5. Since C++ does not have a standard compilation environment,
33: problems with header files are common. Please contact us or
34: Liberty Corner for help.
35:
36: 6. Install the executable "dag" and the libraries "daglib.*" where
37: they belong, and try some of the files in the directory "examples".
38:
39: 7. If dag dumps core (usually with the message "Bad level assignment")
40: check that static constructors in C++ are not working. We can give
41: you a trivial program that checks this if you need it.
42:
43: Stephen C North
44: 201 582 7392
45: ulysses!north
46:
47:
48: 2/3/88:
49: We changed the default node shape to Ellipse. Edge statements may
50: now be "ordered": this means that the head nodes are placed on the same
51: rank and are ordered left to right (by automatic creation of invisible
52: flat edges). For instance:
53:
54: ordered edge from root to c1, c2, c3;
55:
56: Nodes have a "label" attribute to make it convenient to create many nodes
57: sharing a common label. For example you might specify part of the drawing
58: of a directory hierarchy this way:
59:
60: draw "/usr/include/sys/h" label "h";
61: draw "/usr/local/include/sys/h" label "h";
62:
63: The interface to "<shape>_clip" functions in PostScript has been changed.
64: The clip function now takes two points off the stack and returns an
65: optional point and a boolean. The two points define a ray. If the ray
66: intersects the shape (placed at the origin) then the clip function pushes
67: the point and the boolean value true; otherwise it pushes the boolean
68: value false. We made this change because we don't always aim edges at
69: the centers of nodes. We do ensure that the ray will intersect the
70: bounding box of the shape in the same quadrant (w.r.t. the node center)
71: as the ray's origin.
72:
73: 3/8/88:
74: The front end was rewritten. We added a color attribute for nodes and edges,
75: and generalized the notion labels for nodes and edges. Any label may be
76: either a string, or drawing code in curly braces. The PostScript code
77: generator knows about colors; see the user guide for details or else
78: as usual READ THE CODE.
79:
80: We added an option to "fill" the bounding box of the drawing. For instance:
81:
82: .GS 6 8 fill
83:
84: will make a drawing that exactly fills a 6X8 box.
85:
86: To get node labels to work correctly in Pic, label parameters to shape macros
87: are now quoted. Thus the shape macro body should NOT say "$1". This change
88: is NOT backward compatible.
89:
90: The back end has been improved considerably, especially the heuristics
91: for X coordinate assignment. Because of the quadratic complexity,
92: the time it takes to run the -O option is tolerable only on small graphs,
93: and since the heuristic does nearly as well, we may eventually remove
94: this command line option altogether. The back end does a better job of
95: centering nodes over their descendants (yields better drawings of trees)
96: and also takes less time on graphs with many hundreds of nodes.
97:
98: You can make the documentation by saying:
99:
100: pic dag.doc | tbl | eqn | troff -mm
101:
102: Because of subtleties in the figures of this document, you need a Kernighan
103: pic to print it. If you have trouble, ask us for a paper copy.
104:
105: 4/18/88:
106: The "-Tcip" option is back. Run "dag -Tcip" to generate pic code that
107: can be edited with cip. The issue is that cip does not allow macro
108: definitions, so you can't use it with custom shape macros.
109:
110: 4/21/88:
111: Fixed some little bugs including: pic syntax error in nodes defined
112: with graphics code between curly braces introduced by -Tcip option;
113: coding error in a call to realloc(), failure to find DAG libraries
114: when $TOOLS is set.
115:
116: 5/17/88:
117: The node positioning heuristics try to create "local symmetry."
118: This makes subtrees, chains, and similar structures look more like
119: drawings made by hand. Zero weight edges are now ignored when
120: finding node placement. The -Tsimple driver was modified to use
121: tabs as delimiters between fields, and to not use tabs within node
122: labels, for ease of writing filters using old awk which is not
123: able to do a good job with quoted strings.
124:
125: 6/3/88:
126: Fixed PS line style for dotted edges (had args reversed).
127: Fixed stupidity in .GR x y fill that caused wrong size layout.
128:
129: 6/20/88:
130: In daglib.ps, corrected Diamond_clip and Square procedures.
131: Crude benchmarks show that 50% of the Laserwriter time
132: goes to drawing ellipses, 25% to drawing splines, and 25% to
133: drawing node labels.
134:
135: 11/17/88:
136: Fixed qsort declaration for use with so-called "Fifth Beta Release of C++ 2.0".
137: Some other bug fixes were merged into this version.
138:
139: 12/05/88:
140: Try another qsort declaration and take triegen out of makefiles.
141:
142: 12/28/88:
143: Fix bug involving wrong height and width with .GR and nodes labeled
144: with graphics code. Exchange makefile,Makefile to agree with what
145: old,new-make already expect.
146:
147: 3/28/89:
148: Improved man page, responding to chronic complaints.
149: PostScript pagination now built into dag, bypassing the inefficient
150: Poster program (from CIA). To paginate into 8-1/2 x 11 pages, say:
151:
152: dag -Tps -p8.5x11
153:
154: Margins are half an inch but can be reset in the -p option.
155: To set 1 inch margins:
156:
157: dag -Tps -p8.5x11,1x1
158:
159: Laserwriters have a hard margin so there's no way to make a
160: seamless mosaic, unfortunately.
161:
162: The script dagpsjobs (for new awk) breaks a dag PostScript output
163: file into multiple print jobs. (Read the script to see how the
164: options work-- it's a trivial program.) The awk script gprof2dag.awk
165: converts gprof output to dag input that draws colored Ellipses and edges
166: in PostScript.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.