Metropoli BBS
VIEWER: filecopy.c MODE: TEXT (ASCII)
#include "pmc.h"

long __pascal filecopy (WORD dst, WORD src, long size)
{
  REGSTRUCT rs;
  WORD len;
  long sizeout = 0;
  int r;

  rs.w.FLAGS = rs.d.SSSP = 0;
  rs.w.DS = (DWORD)_lowbufptr + database >> 4;
  rs.w.DX = (DWORD)_lowbufptr + database & 15;

  while (size)
  {
    rs.w.CX = len = min (size, _lowbuflen);
    rs.w.BX = src;
    rs.b.AH = 0x3f;

    if ((r = xlt_simrmint (0x21, &rs, 0)) < 0)
      return r;

    if (rs.w.FLAGS & fCF)
      return rs.d.EAX | 0xffff0000;

    if (!(rs.w.CX = rs.w.AX))
      break;

    rs.w.BX = dst;
    rs.b.AH = 0x40;

    if ((r = xlt_simrmint (0x21, &rs, 0)) < 0)
      return r;

    if (rs.w.FLAGS & fCF)
      return rs.d.EAX | 0xffff0000;

    sizeout += rs.w.AX;
    size -= rs.w.AX;

    if (rs.w.AX != len)
      break;
  }

  return sizeout;
}

[ RETURN TO DIRECTORY ]