#include "defines.h"
#if OS == MSDOS
# include <dos.h>
# include <string.h>
#else
# include OSBIND
#endif

#define MAX_A_WRITE  0xFFF0

unsigned long  x_write( stream, buffer, size)
int            stream;
char huge      *buffer;
unsigned long  size;
{
   unsigned long  written = 0;
   int            tmp;

   while( size >= MAX_A_WRITE)
   {
      if( (tmp = _write( stream, (void *) buffer, MAX_A_WRITE)) == -1)
         return( written);
      written += (unsigned) tmp;
      buffer  += MAX_A_WRITE;
      size    -= MAX_A_WRITE;
   }
   if( size)
   {
      if( (tmp = _write( stream, (void *) buffer, (unsigned) size)) != -1)
         written += (unsigned) tmp;
   }
   return( written);
}


#define MAX_A_READ   0xFFF0

unsigned long  x_read( stream, buffer, size)
int            stream;
char huge      *buffer;
unsigned long  size;
{
   unsigned long  read = 0;
   int            tmp;

   while( size >= MAX_A_READ)
   {
      if( (tmp = _read( stream, (void *) buffer, MAX_A_READ)) == -1)
         return( read);
      read   += (unsigned) tmp;
      buffer += MAX_A_READ;
      size   -= MAX_A_READ;
   }
   if( size)
   {
      if( (tmp = _read( stream, (void *) buffer, (unsigned) size)) != -1)
         read += (unsigned) tmp;
   }
   return( read);
}

void   x_memset( p, val, size)
char huge *p;
int       val;
long      size;
{
   while( size >= MAX_A_READ)
   {
      memset( (void *) p, val, MAX_A_READ);
      p     += MAX_A_READ;
      size  -= MAX_A_READ;
   }
   if( size)
      memset( (void *) p, val, (unsigned) size);
}


void   x_memcpy( dst, src, size)
char huge *dst;
char huge *src;
long      size;
{
   while( size >= MAX_A_READ)
   {
      memcpy( (void *) dst, (void *) src, MAX_A_READ);
      src   += MAX_A_READ;
      dst   += MAX_A_READ;
      size  -= MAX_A_READ;
   }
   if( size)
      memcpy( (void *) dst, (void *) src, (size_t) size);
}

