/*
** vbcc-PowerOpen/WarpOS Lowlevel write() function
**
** v0.2 29.10.98 phx
**      disabled errno usage
** v0.1 31.07.98 phx
*/

#include <stdio.h>
#ifdef _ERRNO_
#include <errno.h>
#endif

#include <powerpc/powerpc.h>
#include <clib/powerpc_protos.h>

extern APTR DOSBase;


long _write(char *fh,void *buf,long size)
{
  struct PPCArgs pa;
  long n;

#ifdef _ERRNO_
  if (!fh) {
    errno = EBADF;
    return (EOF);
  }
  if (size <= 0) {
    errno = EINVAL;
    return (EOF);
  }
#endif

  pa.PP_Code = DOSBase;
  pa.PP_Offset = -48;  /* _LVOWrite */
  pa.PP_Flags = pa.PP_StackSize = 0;
  pa.PP_Stack = NULL;
  pa.PP_Regs[PPREG_D1] = (ULONG)fh;
  pa.PP_Regs[PPREG_D2] = (ULONG)buf;
  pa.PP_Regs[PPREG_D3] = (ULONG)size;
  pa.PP_Regs[PPREG_A6] = (ULONG)DOSBase;
  Run68K(&pa);

#ifdef _ERRNO_
  if ((n = (long)pa.PP_Regs[PPREG_D0]) == -1) {
    errno = EIO;
    return (EOF);
  }
  return (n);
#else
  return ((long)pa.PP_Regs[PPREG_D0]);
#endif
}
