annotate pkg-src/tree-x/tree.h @ 164:4e0740e5aab2

Added tag r20-3b8 for changeset 0132846995bd
author cvs
date Mon, 13 Aug 2007 09:43:39 +0200
parents 0132846995bd
children 85ec50267440
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
163
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
1 /* ----------------------------------------------------------------------------
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
2 * File : tree.h
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
3 * Purpose : Header file for dynamic tree program
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
4 * ----------------------------------------------------------------------------
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
5 */
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
6
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
7 #define INTF 1 /* enable interface-specific code */
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
8
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
9 #define FOREACH_CHILD(child, tree) \
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
10 for ((child) = (tree)->child ; (child) ; (child) = (child)->sibling)
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
11
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
12 #define PT_IN_RECT(p1, p2, x1, y1, x2, y2) \
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
13 ((p1) > (x1) && \
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
14 (p2) > (y1) && \
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
15 (p1) < (x2) && \
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
16 (p2) < (y2))
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
17
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
18 #define PT_IN_EXTENT(p1, p2, extent) \
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
19 ((p1) > (extent).pos.x && \
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
20 (p2) > (extent).pos.y && \
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
21 (p1) < ((extent).pos.x + (extent).width) && \
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
22 (p2) < ((extent).pos.y + (extent).height))
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
23
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
24 #define IS_LEAF(node) \
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
25 ((node)->child == NULL)
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
26
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
27 typedef struct line Polyline;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
28 typedef struct tnode Tree;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
29
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
30 typedef struct point {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
31 int x;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
32 int y;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
33 } Point;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
34
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
35 typedef struct extent {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
36 Point pos; /* top left corner of rectangle */
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
37 int width;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
38 int height;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
39 } Extent;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
40
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
41 struct line {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
42 int dx, dy;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
43 Polyline *link;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
44 };
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
45
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
46 typedef struct polygon {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
47 struct {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
48 Polyline *head;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
49 Polyline *tail;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
50 } lower, upper;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
51 } Polygon;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
52
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
53 typedef struct label {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
54 char *text; /* the actual label text */
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
55 int len; /* length of label text */
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
56 int xoffset; /* the X offset of label inside rectangle */
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
57 int yoffset; /* the Y offset of label inside rectangle */
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
58 } Label;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
59
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
60 struct tnode {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
61 Tree *parent;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
62 Tree *child;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
63 Tree *sibling;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
64 int width;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
65 int height;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
66 int border;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
67 Polygon contour;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
68 Point offset; /* offset is relative to 'predecessor' */
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
69 Point pos; /* position is screen coordinates of node */
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
70 Point old_pos; /* position is screen coordinates of node */
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
71 int node_height; /* height of node in tree */
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
72 /* all fields below are interface-specific */
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
73 Label label;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
74 char* value;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
75 Extent subextent; /* extent of subtree (excluding this node) */
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
76 Polygon old_contour; /* for caching old contour in elision */
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
77 char elision; /* TRUE if this node is collapsed */
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
78 char on_path; /* true if on path to root from node */
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
79 char split; /* flag for drawing subtree contours */
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
80 char show_contour; /* flag to show or hide subtree contour */
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
81 };
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
82
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
83 typedef enum {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
84 Erase,
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
85 Draw
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
86 } DrawMode;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
87
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
88 typedef enum {
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
89 Old,
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
90 New
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
91 } PosMode; /* Position mode */
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
92
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
93 extern Polyline* MakeLine();
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
94 extern Tree* MakeNode();
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
95 extern Tree* ReadTreeFromFile();
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
96 extern void ComputeTreeSize();
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
97 extern void Unzip();
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
98 extern void Zip();
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
99
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
100 extern Tree *TheTree;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
101 extern int NumLines;
0132846995bd Import from CVS: tag r20-3b8
cvs
parents:
diff changeset
102 extern int NumNodes;