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 diff
     1.1 --- a/baum.c	Thu Feb 07 18:05:03 2008 +0100
     1.2 +++ b/baum.c	Fri Feb 08 20:45:17 2008 +0100
     1.3 @@ -15,7 +15,7 @@
     1.4  #include "actions.h"
     1.5  
     1.6  
     1.7 -struct Node* root;
     1.8 +struct Node* root = 0;
     1.9  
    1.10  
    1.11  void logit(char* text) {
    1.12 @@ -58,34 +58,40 @@
    1.13  
    1.14  /* delete */
    1.15  void delete(struct Node* node) {
    1.16 -	if (node->down != NULL) {
    1.17 -		delete(node->down);
    1.18 +	if (node != NULL) {
    1.19 +		if (node->down != NULL) {
    1.20 +			delete(node->down);
    1.21 +		}
    1.22 +		if (node->right != NULL) {
    1.23 +			delete(node->right);
    1.24 +		}
    1.25 +		free(node); node=0;
    1.26  	}
    1.27 -	if (node->right != NULL) {
    1.28 -		delete(node->right);
    1.29 -	}
    1.30 -	free(node); node=0;
    1.31  }
    1.32  
    1.33  
    1.34  /* print */
    1.35  void printNode(struct Node* node) {
    1.36 -	printf("Node: %20s (%d|%c)\n", node->name, node->value, node->value);
    1.37 +	if (node != NULL) {
    1.38 +		fprintf(stderr, "Node: %20s (%d|%c)\n", node->name, node->value, node->value);
    1.39 +	}
    1.40  }
    1.41  
    1.42  void printTree(struct Node* root) {
    1.43 -	printNode(root);
    1.44 -	printf("  down: ");
    1.45 -	if (root->down != NULL) {
    1.46 -		printTree(root->down);
    1.47 -	} else {
    1.48 -		printf("NULL\n");
    1.49 -	}
    1.50 -	printf("  right: ");
    1.51 -	if (root->right != NULL) {
    1.52 -		printTree(root->right);
    1.53 -	} else {
    1.54 -		printf("NULL\n");
    1.55 +	if (root != NULL) {
    1.56 +		printNode(root);
    1.57 +		fprintf(stderr, "  down: ");
    1.58 +		if (root->down != NULL) {
    1.59 +			printTree(root->down);
    1.60 +		} else {
    1.61 +			fprintf(stderr, "NULL\n");
    1.62 +		}
    1.63 +		fprintf(stderr, "  right: ");
    1.64 +		if (root->right != NULL) {
    1.65 +			printTree(root->right);
    1.66 +		} else {
    1.67 +			fprintf(stderr, "NULL\n");
    1.68 +		}
    1.69  	}
    1.70  }
    1.71  
    1.72 @@ -100,7 +106,7 @@
    1.73  /* init */
    1.74  void init() {
    1.75  	/* add some numbers
    1.76 -	root = newNode("print", 0);
    1.77 +	root = newNode("print", 'n');
    1.78  	root->down = newNode("sum", 0);
    1.79  
    1.80  	root->down->down = newNode("number", 60);
    1.81 @@ -112,28 +118,82 @@
    1.82  	root->down->down->right->right->down->right = newNode("number", 5);
    1.83  	*/
    1.84  
    1.85 -	/* input numbers and add them */
    1.86 -	root = newNode("print", 0);
    1.87 +	/* input numbers and add them
    1.88 +	root = newNode("print", 'n');
    1.89  	root->down = newNode("sum", 0);
    1.90  	root->down->down = newNode("input", 0);
    1.91  	root->down->down->right = newNode("input", 0);
    1.92  	root->down->down->right->right = newNode("input", 0);
    1.93 +	*/
    1.94 +
    1.95 +	/* prints HelloWorld
    1.96 +	*/
    1.97 +	struct Node* np = 0;
    1.98 +
    1.99 +	root = newNode("blackhole", 0);
   1.100 +	root->down = newNode("sum", 0);
   1.101 +	root->down->down = newNode("print", 'c');
   1.102 +	np = root->down->down;
   1.103 +	np->down = newNode("number", 'H');
   1.104 +
   1.105 +	np->right = newNode("print", 'c');
   1.106 +	np->right->down = newNode("number", 'e');
   1.107 +	np = np->right;
   1.108 +
   1.109 +	np->right = newNode("print", 'c');
   1.110 +	np->right->down = newNode("number", 'l');
   1.111 +	np = np->right;
   1.112 +
   1.113 +	np->right = newNode("print", 'c');
   1.114 +	np->right->down = newNode("number", 'l');
   1.115 +	np = np->right;
   1.116 +
   1.117 +	np->right = newNode("print", 'c');
   1.118 +	np->right->down = newNode("number", 'o');
   1.119 +	np = np->right;
   1.120 +
   1.121 +	np->right = newNode("print", 'c');
   1.122 +	np->right->down = newNode("number", ' ');
   1.123 +	np = np->right;
   1.124 +
   1.125 +	np->right = newNode("print", 'c');
   1.126 +	np->right->down = newNode("number", 'L');
   1.127 +	np = np->right;
   1.128 +
   1.129 +	np->right = newNode("print", 'c');
   1.130 +	np->right->down = newNode("number", 'y');
   1.131 +	np = np->right;
   1.132 +
   1.133 +	np->right = newNode("print", 'c');
   1.134 +	np->right->down = newNode("number", 'd');
   1.135 +	np = np->right;
   1.136 +
   1.137 +	np->right = newNode("print", 'c');
   1.138 +	np->right->down = newNode("number", 'i');
   1.139 +	np = np->right;
   1.140 +
   1.141 +	np->right = newNode("print", 'c');
   1.142 +	np->right->down = newNode("number", 10);
   1.143 +	np = np->right;
   1.144 +
   1.145 +
   1.146  }
   1.147  
   1.148  
   1.149  /* main */
   1.150  int main(int argc, char* argv[]) {
   1.151 +	unsigned char shell_return;
   1.152  	init();
   1.153  
   1.154  	printTree(root);
   1.155 -	printf("\n\n");
   1.156 +	fprintf(stderr, "\n\n");
   1.157  
   1.158 -	action(root);
   1.159 +	shell_return = action(root);
   1.160  
   1.161 -	printf("\n\n");
   1.162 +	fprintf(stderr, "\n\n");
   1.163  	printTree(root);
   1.164  
   1.165  	delete(root);
   1.166  	
   1.167 -	return(0);
   1.168 +	exit(shell_return);
   1.169  }