Mercurial > baum
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); }