/* 
   errors.c
   Handling "error" objects.

   Datablk is a library that provides a "typeless" type for
   programmable systems.

   (C) Copyright 1999 by Nicholas Rusnov
*/

#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
#include "flags.h"
#include "datablk.h"

Datablk *dblk_mkerr(const DBLK_Err *aerr)
{
  return dblk_mkgenerr(aerr->Code,aerr->Message);
}

Datablk *dblk_mkgenerr(const int code, const char *message)
{
  DBLK_Err *myerr;
  Datablk *myblk;

  DBLK_INIT_ERR(myerr,code,message);
  DBLK_INIT(myblk, DBLK_T_ERR);
  myblk->Data=myerr;
  return myblk;
}

int dblk_geterr(DBLK_Err *aerr, const Datablk *ablk)
{
  if (ablk && aerr && (DBLK_Err *)ablk->Data && (ablk->type == DBLK_T_ERR))
    {
      DBLK_CLONE_ERR(aerr,((DBLK_Err *)ablk->Data));
    }
  else
    return -1;
  return 0;
}

int dblk_seterr(const DBLK_Err *aerr, Datablk *ablk)
{
  if (aerr)
    dblk_setgenerr(aerr->Code,aerr->Message,ablk);
  else
    dblk_setgenerr(0,0,ablk);
}

int dblk_setgenerr(const int code, const char *message, Datablk *ablk)
{
  if (ablk)
    {
      if (ablk->Data)
	dblk_nullify(ablk);

      DBLK_INIT_ERR(((DBLK_Err *)ablk->Data),code,message);

      ablk->type=DBLK_T_ERR;     
    }
}




