home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
BURKS 2
/
BURKS_AUG97.ISO
/
BURKS
/
SOFTWARE
/
LIBS
/
PMC101.ZIP
/
LIBSRC.ZIP
/
FILEREAD.C
(
.txt
)
< prev
next >
Wrap
C/C++ Source or Header
|
1994-06-22
|
1KB
|
65 lines
#include "pmc.h"
long __pascal fileread (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 = 0x3f;
if ((r = xlt_simrmint (0x21, &rs, 0)) < 0)
return r;
if (rs.w.FLAGS & fCF)
return rs.d.EAX | 0xffff0000;
memcpy (buf, _lowbufptr, rs.w.AX );
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 = 0x3f;
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;
}