Mercurial > baum
comparison baum.c @ 33:2e564bf8599c
new error code 6; more readable printTree; cleanups
author | meillo@marmaro.de |
---|---|
date | Sat, 01 Mar 2008 17:36:59 +0100 |
parents | 4e60d96265f0 |
children | e986c6abed2b |
comparison
equal
deleted
inserted
replaced
32:3903effae5ef | 33:2e564bf8599c |
---|---|
21 | 21 |
22 struct Node* root = 0; | 22 struct Node* root = 0; |
23 struct Stackitem* stack = NULL; | 23 struct Stackitem* stack = NULL; |
24 | 24 |
25 | 25 |
26 void printNode(struct Node* node); | 26 void printNode(struct Node* node, int level); |
27 void printTree(struct Node* root); | 27 void printTree(struct Node* root, int level); |
28 struct Node* lastNode(struct Node* node); | 28 struct Node* lastNode(struct Node* node); |
29 void delete(struct Node* node); | 29 void delete(struct Node* node); |
30 | 30 |
31 | 31 |
32 | 32 |
67 /* delete */ | 67 /* delete */ |
68 void delete(struct Node* node) { | 68 void delete(struct Node* node) { |
69 if (node == NULL) { | 69 if (node == NULL) { |
70 return; | 70 return; |
71 } | 71 } |
72 if (node->down != NULL) { | 72 delete(node->down); |
73 delete(node->down); | 73 delete(node->right); |
74 } | |
75 if (node->right != NULL) { | |
76 delete(node->right); | |
77 } | |
78 free(node); node=0; | 74 free(node); node=0; |
79 } | 75 } |
80 | 76 |
81 | 77 |
82 /* print */ | 78 /* print */ |
83 void printNode(struct Node* node) { | 79 void printNode(struct Node* node, int level) { |
84 if (node != NULL) { | 80 if (node != NULL) { |
85 fprintf(stderr, "Node: %10s (%d|%c)\n", node->name, node->value, node->value); | 81 while (level-- > 0) { |
86 } | 82 fprintf(stderr, "\t"); |
87 } | 83 } |
88 | 84 fprintf(stderr, "%s (%d|%c)\n", node->name, node->value, node->value); |
89 void printTree(struct Node* root) { | 85 } |
86 } | |
87 | |
88 void printTree(struct Node* root, int level) { | |
90 if (root == NULL) { | 89 if (root == NULL) { |
91 return; | 90 return; |
92 } | 91 } |
93 | 92 printNode(root, level); |
94 printNode(root); | 93 printTree(root->down, level+1); |
95 fprintf(stderr, " down: "); | 94 printTree(root->right, level); |
96 if (root->down != NULL) { | |
97 printTree(root->down); | |
98 } else { | |
99 fprintf(stderr, "NULL\n"); | |
100 } | |
101 fprintf(stderr, " right: "); | |
102 if (root->right != NULL) { | |
103 printTree(root->right); | |
104 } else { | |
105 fprintf(stderr, "NULL\n"); | |
106 } | |
107 } | 95 } |
108 | 96 |
109 | 97 |
110 | 98 |
111 | 99 |
173 } | 161 } |
174 /* create node */ | 162 /* create node */ |
175 node = newNode((char*) name, value); | 163 node = newNode((char*) name, value); |
176 if (indent > last_indent) { /* down */ | 164 if (indent > last_indent) { /* down */ |
177 /* if it goes more than one level down -> error */ | 165 /* if it goes more than one level down -> error */ |
178 if (indent - last_indent > 1) { | 166 if (indent > last_indent + 1) { |
179 fprintf(stderr, "error: Indention over more than one level. Only indent by one!\n"); | 167 fprintf(stderr, "error: Indention over more than one level. Only indent by one!\n"); |
180 exit(5); | 168 exit(5); |
181 } | 169 } |
182 last_node->down = node; | 170 last_node->down = node; |
183 push(last_node); | 171 push(last_node); |
204 name[0] = (char) c; | 192 name[0] = (char) c; |
205 while ((c = getc(file)) != '(') { | 193 while ((c = getc(file)) != '(') { |
206 name[i] = (char) c; | 194 name[i] = (char) c; |
207 i++; | 195 i++; |
208 if (i > 255) { | 196 if (i > 255) { |
209 break; | 197 fprintf(stderr, "error: node name too long, or no value given\n"); |
198 exit(6); | |
210 } | 199 } |
211 } | 200 } |
212 name[i] = '\0'; | 201 name[i] = '\0'; |
213 } | 202 } |
214 | 203 |
268 } | 257 } |
269 | 258 |
270 read_input(argv[0]); | 259 read_input(argv[0]); |
271 | 260 |
272 if (option_verbose) { | 261 if (option_verbose) { |
273 printTree(root); | 262 printTree(root, 0); |
274 } | 263 } |
275 | 264 |
276 shell_return = action(root); | 265 shell_return = action(root); |
277 | 266 |
278 if (option_verbose) { | 267 if (option_verbose) { |
279 printTree(root); | 268 printTree(root, 0); |
280 } | 269 } |
281 | 270 |
282 delete(root); | 271 delete(root); |
283 exit(shell_return); | 272 exit(shell_return); |
284 } | 273 } |