# include "pantasks.h"

# define opihi_name "pantasks client shell"
# define opihi_prompt "pantasks: "
# define opihi_description "parallel task scheduler\n"
# define opihi_history ".pantasks"
# define opihi_rcfile ".pantasksrc"

/* program-dependent initialization */
void program_init (int *argc, char **argv) {
  
  auto_break = TRUE;

  /* load the commands used by this implementation */
  InitBasic ();
  InitData ();
  InitAstro ();
  InitPantasksClient ();

  rl_readline_name = opihi_name;
  rl_attempted_completion_function = command_completer;

  set_str_variable ("HISTORY", opihi_history);
  set_str_variable ("PROMPT", opihi_prompt);
  set_str_variable ("RCFILE", opihi_rcfile);

  {
      char *helpdir;
      char *modules;
      static char *datadir = "@DATADIR@";
      ALLOCATE (helpdir, char, strlen(datadir) + strlen("/help") + 2);
      sprintf (helpdir, "%s/help", datadir);
      set_str_variable ("HELPDIR", helpdir);
      free (helpdir);
      ALLOCATE (modules, char, strlen(datadir) + strlen("/modules") + 2);
      sprintf (modules, "%s/modules", datadir);
      set_str_variable ("MODULES:0", modules);
      set_int_variable ("MODULES:n", 1);
      free (modules);
  }

  signal (SIGPIPE, gotsignal);
  signal (SIGTSTP, gotsignal);
  signal (SIGTTIN, gotsignal);
  return;
}

/* standard welcome message */
void welcome () {
  gprint (GP_LOG, "\n");
  gprint (GP_LOG, "Welcome to %s - %s\n\n", opihi_name, opihi_description);
}

/* add program-dependent exit functions here */
void cleanup () {
  QuitKapa ();
  ConfigFree ();

  FreeBasic ();
  FreeData ();
  FreeAstro ();
  FreePantasksClient ();
  return;
}

/* default signal handling */
void gotsignal (int signum) {
  gprint (GP_ERR, "got signal : %d\n", signum);
  return;
}

/* call to client_shell: this opihi tool uses a slightly different
   shell function from the standard tools */
int main (int argc, char **argv) {
  int status;
  status = client_shell (argc, argv);
  exit (status);
}
