--- lbbs/src/screen.c 2005/05/06 17:03:02 1.19 +++ lbbs/src/screen.c 2006/01/03 12:34:54 1.20 @@ -231,12 +231,13 @@ int display_file_ex (const char *filename, int begin_line, int wait) { char buffer[260], temp[256]; - int i, ch, input_ok; + int i, ch, input_ok, max_lines; long int line, c_line_begin = 0, c_line_total = 0; long int f_line, f_size, f_offset; FILE *fin; struct stat f_stat; + max_lines = screen_lines - 1; clrline (begin_line, screen_lines); line = begin_line; moveto (line, 0); @@ -256,7 +257,7 @@ display_file_ex (const char *filename, i while (fgets (buffer, 255, fin)) { - if (line >= screen_lines) + if (line >= max_lines) { f_offset = ftell (fin); @@ -302,7 +303,7 @@ display_file_ex (const char *filename, i case KEY_PGUP: case Ctrl ('B'): if (c_line_begin > 0) - c_line_begin -= (screen_lines - begin_line - 1); + c_line_begin -= (max_lines - begin_line - 1); else goto exit; if (c_line_begin < 0) @@ -318,11 +319,11 @@ display_file_ex (const char *filename, i case KEY_PGDN: case Ctrl ('F'): case KEY_SPACE: - c_line_begin += (screen_lines - begin_line - 1); - if (c_line_begin + (screen_lines - begin_line) > + c_line_begin += (max_lines - begin_line - 1); + if (c_line_begin + (max_lines - begin_line) > c_line_total) c_line_begin = - c_line_total - (screen_lines - begin_line); + c_line_total - (max_lines - begin_line); rewind (fin); for (f_line = 0; f_line < c_line_begin; f_line++) {