home *** CD-ROM | disk | FTP | other *** search
/ BURKS 2 / BURKS_AUG97.ISO / BURKS / SOFTWARE / LIBS / PMC101.ZIP / LIBSRC.ZIP / FILEWRIT.C (.txt) < prev    next >
C/C++ Source or Header  |  1994-07-15  |  1KB  |  65 lines

  1. #include "pmc.h"
  2.  
  3. long __pascal filewrite (WORD handle, PTR buf, long size)
  4. {
  5.   REGSTRUCT rs;
  6.   long sizeout = 0;
  7.   int r;
  8.  
  9.   rs.w.FLAGS = rs.d.SSSP = 0;
  10.   rs.w.BX = handle;
  11.  
  12.   if (((DWORD)buf + database) > 0xfffff)
  13.   {
  14.     rs.w.DS = (DWORD)_lowbufptr + database >> 4;
  15.     rs.w.DX = (DWORD)_lowbufptr + database & 15;
  16.  
  17.     while (size)
  18.     {
  19.       rs.w.CX = min (size, _lowbuflen);
  20.       rs.b.AH = 0x40;
  21.  
  22.       memcpy (_lowbufptr, buf, rs.w.CX );
  23.  
  24.       if ((r = xlt_simrmint (0x21, &rs, 0)) < 0)
  25.         return r;
  26.  
  27.       if (rs.w.FLAGS & fCF)
  28.         return rs.d.EAX | 0xffff0000;
  29.  
  30.       sizeout += rs.w.AX ;
  31.       (STR)buf += rs.w.AX ;
  32.       size -= rs.w.AX;
  33.  
  34.       if (rs.w.AX  != rs.w.CX)
  35.         break;
  36.     }
  37.   }
  38.   else
  39.   {
  40.     while (size)
  41.     {
  42.       rs.w.DS = (DWORD)buf + sizeout + database >> 4;
  43.       rs.w.DX = (DWORD)buf + sizeout + database & 15;
  44.       rs.w.CX = min (size, 0xfff0);
  45.       rs.b.AH = 0x40;
  46.  
  47.       if ((r = xlt_simrmint (0x21, &rs, 0)) < 0)
  48.         return r;
  49.  
  50.       if (rs.w.FLAGS & fCF)
  51.         return rs.d.EAX | 0xffff0000;
  52.  
  53.       sizeout += rs.w.AX ;
  54.       (STR)buf += rs.w.AX ;
  55.       size -= rs.w.AX;
  56.  
  57.       if (rs.w.AX  != rs.w.CX)
  58.         break;
  59.     }
  60.   }
  61.  
  62.   return sizeout;
  63. }
  64.  
  65.