FUNCTION freadln

PARAM handle, buffer, max_line
PRIVATE ch, line_size, num_read

    ch = " "
    buffer = ""
    line_size = 0 

    num_read = fread(handle, @ch, 1)
   
    DO WHILE num_read = 1 .AND. ch != chr(13) .AND. line_size < max_line

        buffer = buffer + ch
        line_size = line_size + 1
        num_read = fread(handle, @ch, 1)

    ENDDO

    * if we terminated on CR, skip (assumed) lf
    IF ch = chr(13)
        num_read = fread(handle, @ch, 1)
    ENDIF

RETURN num_read != 0        && If last read failed, eof
