#include "pmc.h" long __pascal filewrite (WORD handle, PTR buf, long size) { REGSTRUCT rs; long sizeout = 0; int r; rs.w.FLAGS = rs.d.SSSP = 0; rs.w.BX = handle; if (((DWORD)buf + database) > 0xfffff) { rs.w.DS = (DWORD)_lowbufptr + database >> 4; rs.w.DX = (DWORD)_lowbufptr + database & 15; while (size) { rs.w.CX = min (size, _lowbuflen); rs.b.AH = 0x40; memcpy (_lowbufptr, buf, rs.w.CX ); if ((r = xlt_simrmint (0x21, &rs, 0)) < 0) return r; if (rs.w.FLAGS & fCF) return rs.d.EAX | 0xffff0000; sizeout += rs.w.AX ; (STR)buf += rs.w.AX ; size -= rs.w.AX; if (rs.w.AX != rs.w.CX) break; } } else { while (size) { rs.w.DS = (DWORD)buf + sizeout + database >> 4; rs.w.DX = (DWORD)buf + sizeout + database & 15; rs.w.CX = min (size, 0xfff0); 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 ; (STR)buf += rs.w.AX ; size -= rs.w.AX; if (rs.w.AX != rs.w.CX) break; } } return sizeout; }