⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tree.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include "rc.h"#include "exec.h"#include "io.h"#include "fns.h"tree *treenodes;/* * create and clear a new tree node, and add it * to the node list. */tree*newtree(void){	tree *t = new(tree);	t->iskw = 0;	t->str = 0;	t->child[0] = t->child[1] = t->child[2] = 0;	t->next = treenodes;	treenodes = t;	return t;}voidfreenodes(void){	tree *t, *u;	for(t = treenodes;t;t = u){		u = t->next;		if(t->str)			efree(t->str);		efree((char *)t);	}	treenodes = 0;}tree*tree1(int type, tree *c0){	return tree3(type, c0, (tree *)0, (tree *)0);}tree*tree2(int type, tree *c0, tree *c1){	return tree3(type, c0, c1, (tree *)0);}tree*tree3(int type, tree *c0, tree *c1, tree *c2){	tree *t;	if(type==';'){		if(c0==0)			return c1;		if(c1==0)			return c0;	}	t = newtree();	t->type = type;	t->child[0] = c0;	t->child[1] = c1;	t->child[2] = c2;	return t;}tree*mung1(tree *t, tree *c0){	t->child[0] = c0;	return t;}tree*mung2(tree *t, tree *c0, tree *c1){	t->child[0] = c0;	t->child[1] = c1;	return t;}tree*mung3(tree *t, tree *c0, tree *c1, tree *c2){	t->child[0] = c0;	t->child[1] = c1;	t->child[2] = c2;	return t;}tree*epimung(tree *comp, tree *epi){	tree *p;	if(epi==0)		return comp;	for(p = epi;p->child[1];p = p->child[1]);	p->child[1] = comp;	return epi;}/* * Add a SIMPLE node at the root of t and percolate all the redirections * up to the root. */tree*simplemung(tree *t){	tree *u;	struct io *s;	t = tree1(SIMPLE, t);	s = openstr();	pfmt(s, "%t", t);	t->str = strdup(s->strp);	closeio(s);	for(u = t->child[0];u->type==ARGLIST;u = u->child[0]){		if(u->child[1]->type==DUP		|| u->child[1]->type==REDIR){			u->child[1]->child[1] = t;			t = u->child[1];			u->child[1] = 0;		}	}	return t;}tree*token(char *str, int type){	tree *t = newtree();	t->type = type;	t->str = strdup(str);	return t;}voidfreetree(tree *p){	if(p==0)		return;		freetree(p->child[0]);	freetree(p->child[1]);	freetree(p->child[2]);	if(p->str)		efree(p->str);	efree((char *)p);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -