#include "mk.h"

static Shell *shells[] = {
	&rcshell,
	&shshell,
};

Shell *shelldefault = &shshell;

Shell *shellt;
Word *shellcmd;

typedef struct Shellstack Shellstack;
struct Shellstack
{
	Shell *t;
	Word *w;
	Shellstack *next;
};

Shellstack *shellstack;

char*
setshell(Word *w)
{
	int i;

	if(w->s == nil)
		return "shell name not found on line";

	for(i=0; i<nelem(shells); i++)
		if(shells[i]->matchname(w->s))
			break;
	if(i == nelem(shells))
		return "cannot determine shell type";
	shellt = shells[i];
	shellcmd = w;
	return nil;
}

void
initshell(void)
{
	shellcmd = stow(shelldefault->name);
	shellt = shelldefault;
	setvar("MKSHELL", shellcmd);
}

void
pushshell(void)
{
	Shellstack *s;

	/* save */
	s = Malloc(sizeof *s);
	s->t = shellt;
	s->w = shellcmd;
	s->next = shellstack;
	shellstack = s;

	initshell();	/* reset to defaults */
}

void
popshell(void)
{
	Shellstack *s;

	if(shellstack == nil){
		fprint(2, "internal shellstack error\n");
		Exit();
	}

	s = shellstack;
	shellstack = s->next;
	shellt = s->t;
	shellcmd = s->w;
	setvar("MKSHELL", shellcmd);
	free(s);
}
