private static int rgc_do_blit( input_port p, byte[] s, int o, int l )
{
RGC_START_MATCH( p );
while ( ((p.bufpos - p.matchstart) <= l) && !p.eof) {
// MS fix 6 Juillet 2005
int fsize = (p.bufsiz - p.bufpos);
p.forward= p.bufpos;
rgc_fill_buffer( p );
// less characters are available
if( (p.bufpos - p.forward) < fsize ) break;
}
if ((p.bufpos - p.matchstart) <= l)
l= (p.bufpos - p.matchstart - 1);
p.forward= p.matchstart + l;
RGC_STOP_MATCH( p );
RGC_SET_FILEPOS( p );
bcopy( p.buffer, p.matchstart, s, o, l );
return l;
}