1
0
mirror of https://github.com/cc65/cc65.git synced 2024-07-01 08:29:37 +00:00
cc65/libsrc/cbm/cbm_read.c
mrintsch b2e0ed603e cbm_write() added
changed/added some comments
all cbm_* IO functions are using _oserror now


git-svn-id: svn://svn.cc65.org/cc65/trunk@682 b7a2c559-68d2-44c3-8de9-860c34a00d81
2001-03-30 18:18:40 +00:00

36 lines
955 B
C

/*
* Marc 'BlackJack' Rintsch, 19.03.2001
*
* int cbm_read(unsigned char lfn, void* buffer, unsigned int size);
*/
#include <cbm.h>
extern unsigned char _oserror;
int cbm_read(unsigned char lfn, void* buffer, unsigned int size)
{
static unsigned int bytesread;
static unsigned char tmp;
/* if we can't change to the inputchannel #lfn then return an error */
if (_oserror = cbm_k_chkin(lfn)) return -1;
bytesread = 0;
while (bytesread<size && !cbm_k_readst()) {
tmp = cbm_k_basin();
/* the kernal routine BASIN sets ST to EOF if the end of file
* is reached the first time, then we have store tmp.
* every subsequent call returns EOF and READ ERROR in ST, then
* we have to exit the loop here immidiatly. */
if (cbm_k_readst() & 0xBF) break;
((unsigned char*)buffer)[bytesread++] = tmp;
}
cbm_k_clrch();
return bytesread;
}