#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>

#include "tw_types.h"
#include "Shell.h"

#ifdef _SunOS
extern "C" {
int system(char *sh);
}
#endif

Shell::Shell(Text *statements)
{	in = out = err = status = 0;
	
	if (statements) sh_exececute(statements);
	}

Shell::~Shell()
{	sh_close();
	}

void Shell::sh_close()
{	if (in || out || err) {
		if (in) close(in);
		if (out) close(out);
		if (err) close(err);
		in = 0;
		out = 0;
		err = 0;
		wait(&status);
		}
	}

void Shell::sh_exececute(Text *statements)
{	char **p;

	sh_close();

	if (!statements || !statements->nlines) return;

	switch (makepipe(&in,&out,&err)) {
		case 0 :
			p = statements->lines;
			while (*p) system(*p++);
		case -1: 
			exit(0);
		}
	}
