V9/jtools/src/pi/master.c

#include "master.pri"
#include "process.pri"
SRCFILE("master.c")

char *Master::kbd(char*s)		{ return PadRcv::kbd(s); }
char *Master::help()			{ return PadRcv::help(); }

Master::Master()
{
	trace( "%d.Master()", this );
	child = 0;
	core = 0;
}

Process *Master::makeproc(char* proc, char *stab, char *comment)
{
	Process *p;

	for( p = child; p; p = p->sibling )
		if( !p->isdead
		 && eqstr(proc,p->procpath)
		 && eqstr(stab,p->stabpath) ){
			p->comment = comment?sf("%s", comment):(char *)0;
			insert(p);
			return p;
		}
	child = domakeproc(proc, stab, comment);
	child->master = this;
	insert(child);
	return child;
}

void Master::insert(Process *p)
{
	trace( "%d.insert(%d)", this, p ); VOK;
	IF_LIVE( !p || p->disc()!=U_PROCESS ) return;
	if( p->isdead ){
		pad->removeline( (long)p );
		return;
	}
	char *pp = p->procpath;
	char *sp = p->stabpath;
	char *ct = p->comment;
	pad->insert( (long)p, SELECTLINE, (PadRcv*)p, p->carte(),
		"%s %s %s", pp?pp:"", sp?sp:"", ct?ct:"");
}

Process *Master::search(char *path)
{
	Process *p;
	OK(0);
	for( p = child; p; p = p->sibling )
		if( eqstr(path, p->procpath) && p->core ) return p;
	return 0;
}