#ifndef XPKMASTER_FAULT_C
#define XPKMASTER_FAULT_C

/* Routinesheader

	Name:		fault.c
	Main:		xpkmaster
	Versionstring:	$VER: fault.c 1.4 (02.04.97)
	Author:		SDI
	Distribution:	PD
	Description:	Error message generators

 1.0   05.10.96 : first real version
 1.1   27.12.96 : added parts of Fault functions
 1.2   28.12.96 : finished the two Fault functions
 1.3   31.03.97 : added new error (XPKERR_UNKNOWN);
 1.4   02.04.97 : renamed to fault.c, removed geterror
*/

#include <pragma/exec_lib.h>
#include <pragma/dos_lib.h>
#include "xpkmaster.h"
#include "xpk_strings.h"

#ifdef __cplusplus
  extern "C"
#endif

LONG __asm LIBXpkPrintFault(register __d0 LONG code,
register __a0 STRPTR header)
{
  LONG error;
  STRPTR a[2];

  if(code > 0 || code < MINERROR)
    code = XPKERR_UNKNOWN;

  a[1] = XpkErrs[-code];

  if((a[0] = header))
    error = VPrintf("%s: %s\n", a);
  else
    error = VPrintf("%s\n", &a[1]);

  if(error == -1)
    return 0;  /* error */
  else
    return -1; /* ok */
}

#ifdef __cplusplus
  extern "C"
#endif

ULONG __asm LIBXpkFault(register __d0 LONG code, register __a0 STRPTR header,
register __a1 STRPTR buffer, register __d1 ULONG size)
{
  STRPTR string;
  ULONG hsize = 0, ssize;

  if(size <= 1 || !buffer)
    return 0;

  if(code > 0 || code < MINERROR)
    code = XPKERR_UNKNOWN;

  string = XpkErrs[-code];

  if((ssize = strlen(string)) >= size)
    ssize = size - 1;
  size -= ssize + 1;

  if(header && (hsize = strlen(header)) + 2 <= size)
  {
    CopyMem(header, buffer, hsize);
    buffer[hsize] = ':';
    buffer[hsize+1] = ' ';
    buffer += hsize + 2;
  }

  CopyMem(string, buffer, ssize);
  buffer[ssize] = 0;

  return (ssize + hsize);
}

#endif /* XPKMASTER_FAULT_C */
