home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1998 #6
/
amigamamagazinepolishissue1998.iso
/
coders
/
biblioteki
/
asyncio
/
src
/
readlineasync.c
< prev
next >
Wrap
C/C++ Source or Header
|
1997-02-18
|
1KB
|
64 lines
#include "async.h"
_LIBCALL LONG
ReadLineAsync( _REG( a0 ) AsyncFile *file, _REG( a1 ) APTR buffer, _REG( d0 ) LONG bufSize )
{
LONG len;
/* First read any data up to the LF or the buffer is full */
if( FGetsLenAsync( file, buffer, bufSize, &len ) )
{
UBYTE *end;
end = ( ( UBYTE * ) buffer ) + len - 1;
if( *end != '\n' )
{
/* We didn't reach EOF yet */
while( 1 )
{
UBYTE *ptr, ch;
LONG i, count;
ptr = ( UBYTE * ) file->af_Offset;
if( count = file->af_BytesLeft )
{
/* Scan for LF char in buffer */
for( i = 0; ( i < count ) && ( *ptr != '\n' ); ++i, ++ptr )
{
}
/* If i < count, then the loop above aborted
* due to LF char.
*/
if( i < count )
{
ch = '\n';
++i;
}
else if( ReadAsync( file, &ch, 1 ) <= 0 )
{
break;
}
file->af_BytesLeft -= i;
file->af_Offset += i;
if( ch == '\n' )
{
/* Overwrite last char with LF */
++end;
*end++ = '\n';
*end = '\0';
break;
}
}
}
}
}
return( len );
}