changeset 33:2e564bf8599c

new error code 6; more readable printTree; cleanups
author meillo@marmaro.de
date Sat, 01 Mar 2008 17:36:59 +0100 (2008-03-01)
parents 3903effae5ef
children e986c6abed2b
files baum.1 baum.c
diffstat 2 files changed, 22 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/baum.1	Fri Feb 22 15:58:25 2008 +0100
+++ b/baum.1	Sat Mar 01 17:36:59 2008 +0100
@@ -90,6 +90,10 @@
 indention over more than one level
 
 .TP
+.BI 6
+node name too long, or no value given
+
+.TP
 .BI 127
 invalid command line options
 
--- a/baum.c	Fri Feb 22 15:58:25 2008 +0100
+++ b/baum.c	Sat Mar 01 17:36:59 2008 +0100
@@ -23,8 +23,8 @@
 struct Stackitem* stack = NULL;
 
 
-void printNode(struct Node* node);
-void printTree(struct Node* root);
+void printNode(struct Node* node, int level);
+void printTree(struct Node* root, int level);
 struct Node* lastNode(struct Node* node);
 void delete(struct Node* node);
 
@@ -69,41 +69,29 @@
 	if (node == NULL) {
 		return;
 	}
-	if (node->down != NULL) {
-		delete(node->down);
-	}
-	if (node->right != NULL) {
-		delete(node->right);
-	}
+	delete(node->down);
+	delete(node->right);
 	free(node); node=0;
 }
 
 
 /* print */
-void printNode(struct Node* node) {
+void printNode(struct Node* node, int level) {
 	if (node != NULL) {
-		fprintf(stderr, "Node: %10s (%d|%c)\n", node->name, node->value, node->value);
+		while (level-- > 0) {
+			fprintf(stderr, "\t");
+		}
+		fprintf(stderr, "%s (%d|%c)\n", node->name, node->value, node->value);
 	}
 }
 
-void printTree(struct Node* root) {
+void printTree(struct Node* root, int level) {
 	if (root == NULL) {
 		return;
 	}
-
-	printNode(root);
-	fprintf(stderr, "  down: ");
-	if (root->down != NULL) {
-		printTree(root->down);
-	} else {
-		fprintf(stderr, "NULL\n");
-	}
-	fprintf(stderr, "  right: ");
-	if (root->right != NULL) {
-		printTree(root->right);
-	} else {
-		fprintf(stderr, "NULL\n");
-	}
+	printNode(root, level);
+	printTree(root->down, level+1);
+	printTree(root->right, level);
 }
 
 
@@ -175,7 +163,7 @@
 				node = newNode((char*) name, value);
 				if (indent > last_indent) { /* down */
 					/* if it goes more than one level down -> error */
-					if (indent - last_indent > 1) {
+					if (indent > last_indent + 1) {
 						fprintf(stderr, "error: Indention over more than one level. Only indent by one!\n");
 						exit(5);
 					}
@@ -206,7 +194,8 @@
 				name[i] = (char) c;
 				i++;
 				if (i > 255) {
-					break;
+					fprintf(stderr, "error: node name too long, or no value given\n");
+					exit(6);
 				}
 			}
 			name[i] = '\0';
@@ -270,13 +259,13 @@
 	read_input(argv[0]);
 
 	if (option_verbose) {
-		printTree(root);
+		printTree(root, 0);
 	}
 
 	shell_return = action(root);
 
 	if (option_verbose) {
-		printTree(root);
+		printTree(root, 0);
 	}
 
 	delete(root);