51 lines
1.1 KiB
C
51 lines
1.1 KiB
C
/*
|
|
* Laboration 2 i C och UNIX
|
|
*
|
|
* Komplett shell
|
|
* =========================================
|
|
*
|
|
* Christian Ohlsson, di7chro@cse.kau.se
|
|
* Stefan Sonesson, di7stes@cse.kau.se
|
|
*
|
|
* Karlstads Universitet, 991209
|
|
*
|
|
*
|
|
*===========================================
|
|
*/
|
|
#include "tree.h"
|
|
|
|
treePtr tree=NULL;
|
|
extern char *symTable[];
|
|
|
|
/*Skapar en nod med ett visst metatecken*/
|
|
treePtr makeNode(int op,treePtr left,treePtr right) {
|
|
treePtr tmp = malloc(sizeof(treeNode));
|
|
tmp->nodeType = op;
|
|
tmp->index = -1;
|
|
tmp->right = right;
|
|
tmp->left = left;
|
|
return tmp;
|
|
}
|
|
/*Skapar ett löv som innehåller ett kommando*/
|
|
treePtr makeLeaf(int index) {
|
|
treePtr tmp = malloc(sizeof(treeNode));
|
|
tmp->nodeType = 0;
|
|
tmp->index = index;
|
|
tmp->right = tmp->left = NULL;
|
|
return tmp;
|
|
}
|
|
/*Skriver ut trädet på skärmen*/
|
|
void printTree(treePtr tPtr){
|
|
char str[10];
|
|
if(tPtr == NULL) ;
|
|
else{
|
|
if(!tPtr->nodeType) /*Om det är ett löv...(kommando eller arg)*/
|
|
sprintf(str,"%s---%d",symTable[tPtr->index],tPtr->nodeType);
|
|
else /*Vi har ett metatecken!*/
|
|
sprintf(str,"%d",tPtr->nodeType);
|
|
puts(str);
|
|
printTree(tPtr->left);
|
|
printTree(tPtr->right);
|
|
}
|
|
}
|