/* !FormText.err.c */
/* Error reporting */

#include <stdlib.h>

#include "wimplib.h"

#include "log.h"
#include "nfstr.h"

static char zak[252];
static char err_taskname[32] = "NewsFind";

void err_set_taskname(const char *name)
{
  strncpycr(err_taskname, name, sizeof(err_taskname));
}

int err_check(const _kernel_oserror *er)
{
  if (!er)
    return 0;
  strncpyC(zak, er->errmess, sizeof(zak));
  log_log("Error: \"%s\"\n", zak);
  if (wimp_report_error((_kernel_oserror *) er,
  		Wimp_ReportError_OK|Wimp_ReportError_Cancel, err_taskname)
  	== Wimp_ReportError_Cancel)
    exit(0);
  return 1;
}

void err_check_fatal(const _kernel_oserror *er)
{
  if (!er)
    return;
  strncpyC(zak, er->errmess, sizeof(zak));
  log_log("Error: \"%s\"\n", zak);
  wimp_report_error((_kernel_oserror *) er, Wimp_ReportError_Cancel,
  		err_taskname);
  exit(0);
}

void err_report(int num, const char *mess)
{
  static _kernel_oserror er;
  er.errnum = num;
  strncpycr(er.errmess, mess, sizeof(er.errmess));
  log_log("Error: \"%s\"\n", er.errmess);
  wimp_report_error(&er, Wimp_ReportError_OK, err_taskname);
}

void err_complain(int num, const char *mess)
{
  static _kernel_oserror er;
  er.errnum = num;
  strncpycr(er.errmess, mess, sizeof(er.errmess));
  log_log("Error: \"%s\"\n", er.errmess);
  if (wimp_report_error(&er,
  		Wimp_ReportError_OK|Wimp_ReportError_Cancel, err_taskname)
  	== Wimp_ReportError_Cancel)
    exit(0);
}

void err_complain_fatal(int num, const char *mess)
{
  _kernel_oserror er;
  er.errnum = num;
  strncpycr(er.errmess, mess, sizeof(er.errmess));
  log_log("Error: \"%s\"\n", er.errmess);
  wimp_report_error(&er, Wimp_ReportError_Cancel, err_taskname);
  exit(0);
}
