diff baum.c @ 5:c202ccccedb5

added checks for null pointer; print echoes as char or number now (depends on value); all logging goes to stderr now; new nodes blackhole and times (not implemented yet)
author meillo@marmaro.de
date Fri, 08 Feb 2008 20:45:17 +0100
parents 24a697f37e7c
children ab87b154a96b
line wrap: on
line diff
--- a/baum.c	Thu Feb 07 18:05:03 2008 +0100
+++ b/baum.c	Fri Feb 08 20:45:17 2008 +0100
@@ -15,7 +15,7 @@
 #include "actions.h"
 
 
-struct Node* root;
+struct Node* root = 0;
 
 
 void logit(char* text) {
@@ -58,34 +58,40 @@
 
 /* delete */
 void delete(struct Node* node) {
-	if (node->down != NULL) {
-		delete(node->down);
+	if (node != NULL) {
+		if (node->down != NULL) {
+			delete(node->down);
+		}
+		if (node->right != NULL) {
+			delete(node->right);
+		}
+		free(node); node=0;
 	}
-	if (node->right != NULL) {
-		delete(node->right);
-	}
-	free(node); node=0;
 }
 
 
 /* print */
 void printNode(struct Node* node) {
-	printf("Node: %20s (%d|%c)\n", node->name, node->value, node->value);
+	if (node != NULL) {
+		fprintf(stderr, "Node: %20s (%d|%c)\n", node->name, node->value, node->value);
+	}
 }
 
 void printTree(struct Node* root) {
-	printNode(root);
-	printf("  down: ");
-	if (root->down != NULL) {
-		printTree(root->down);
-	} else {
-		printf("NULL\n");
-	}
-	printf("  right: ");
-	if (root->right != NULL) {
-		printTree(root->right);
-	} else {
-		printf("NULL\n");
+	if (root != NULL) {
+		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");
+		}
 	}
 }
 
@@ -100,7 +106,7 @@
 /* init */
 void init() {
 	/* add some numbers
-	root = newNode("print", 0);
+	root = newNode("print", 'n');
 	root->down = newNode("sum", 0);
 
 	root->down->down = newNode("number", 60);
@@ -112,28 +118,82 @@
 	root->down->down->right->right->down->right = newNode("number", 5);
 	*/
 
-	/* input numbers and add them */
-	root = newNode("print", 0);
+	/* input numbers and add them
+	root = newNode("print", 'n');
 	root->down = newNode("sum", 0);
 	root->down->down = newNode("input", 0);
 	root->down->down->right = newNode("input", 0);
 	root->down->down->right->right = newNode("input", 0);
+	*/
+
+	/* prints HelloWorld
+	*/
+	struct Node* np = 0;
+
+	root = newNode("blackhole", 0);
+	root->down = newNode("sum", 0);
+	root->down->down = newNode("print", 'c');
+	np = root->down->down;
+	np->down = newNode("number", 'H');
+
+	np->right = newNode("print", 'c');
+	np->right->down = newNode("number", 'e');
+	np = np->right;
+
+	np->right = newNode("print", 'c');
+	np->right->down = newNode("number", 'l');
+	np = np->right;
+
+	np->right = newNode("print", 'c');
+	np->right->down = newNode("number", 'l');
+	np = np->right;
+
+	np->right = newNode("print", 'c');
+	np->right->down = newNode("number", 'o');
+	np = np->right;
+
+	np->right = newNode("print", 'c');
+	np->right->down = newNode("number", ' ');
+	np = np->right;
+
+	np->right = newNode("print", 'c');
+	np->right->down = newNode("number", 'L');
+	np = np->right;
+
+	np->right = newNode("print", 'c');
+	np->right->down = newNode("number", 'y');
+	np = np->right;
+
+	np->right = newNode("print", 'c');
+	np->right->down = newNode("number", 'd');
+	np = np->right;
+
+	np->right = newNode("print", 'c');
+	np->right->down = newNode("number", 'i');
+	np = np->right;
+
+	np->right = newNode("print", 'c');
+	np->right->down = newNode("number", 10);
+	np = np->right;
+
+
 }
 
 
 /* main */
 int main(int argc, char* argv[]) {
+	unsigned char shell_return;
 	init();
 
 	printTree(root);
-	printf("\n\n");
+	fprintf(stderr, "\n\n");
 
-	action(root);
+	shell_return = action(root);
 
-	printf("\n\n");
+	fprintf(stderr, "\n\n");
 	printTree(root);
 
 	delete(root);
 	
-	return(0);
+	exit(shell_return);
 }