#include "pmode.h" long __pascal fileread (WORD handle, PTR buf, long size) { REGSTRUCT rs; long sizeout = 0; int r; rs.flags = rs.sp = rs.ss = 0; rsBX(rs) = handle; if (((DWORD)buf + database) > 0xfffff) { rsDS(rs) = (DWORD)_lowbufptr + database >> 4; rsDX(rs) = (DWORD)_lowbufptr + database & 15; while (size) { rsCX(rs) = min (size, _lowbuflen); rsAH(rs) = 0x3f; if ((r = xlt_simrmint (0x21, &rs, 0)) < 0) return r; if (rs.flags & fCF) return rs.eax | 0xffff0000; memcpy (buf, _lowbufptr, rsAX (rs)); sizeout += rsAX (rs); (STR)buf += rsAX (rs); size -= rsAX(rs); if (rsAX (rs) != rsCX(rs)) break; } } else { while (size) { rsDS(rs) = (DWORD)buf + sizeout + database >> 4; rsDX(rs) = (DWORD)buf + sizeout + database & 15; rsCX(rs) = min (size, 0xfff0); rsAH(rs) = 0x3f; if ((r = xlt_simrmint (0x21, &rs, 0)) < 0) return r; if (rs.flags & fCF) return rs.eax | 0xffff0000; sizeout += rsAX (rs); (STR)buf += rsAX (rs); size -= rsAX(rs); if (rsAX (rs) != rsCX(rs)) break; } } return sizeout; }