#include <string.h>
#include <malloc.h>
#include "SubPrograms.h"

SubPrograms::SubPrograms(const char *name)
{
}


SubPrograms::~SubPrograms()
{
}


void SubPrograms::add(const char *name, int pid, 
		      void (*exitCallback)(int status))
{
  _entryList.append(new Entry(name, pid, exitCallback));
}


int SubPrograms::exitProcess(int pid, int status)
{
  // Find subprogram and call its exitCallback
  SListIter<Entry *> entries(_entryList);
  
  entries.reset();

  Entry **entry;
  while (entry = entries.next())
  {
    if ((*entry)->_pid == pid)
    {
      // Do exitCallback for this entry 
      (*entry)->_exitCallback(status);

      // Remove this entry from the table
      entries.remove();

      return 0;
    }
  }

  // Couldn't find pid
  return -1;
}


SubPrograms::Entry::Entry(const char *name, int pid,
                          void (*exitCallback)(int status))
{
  _name = strdup(name);
  _pid = pid;
  _exitCallback = exitCallback;
}


SubPrograms::Entry::~Entry()
{
  free((void *)_name);
}
