- if (filename == NULL)
- return 0;
-
- if (!(file = fopen(filename, MODE_READ)))
- return 0;
-
- buffer[0] = '\0';
- buffer_len = 0;
-
- while(!feof(file))
- {
- char *line_ptr, *word_ptr;
- boolean last_line_was_empty = TRUE;
-
- /* read next line of input file */
- if (!fgets(line, MAX_LINE_LEN, file))
- break;
-
- /* skip comments (lines directly beginning with '#') */
- if (line[0] == '#')
- continue;
-
- /* cut trailing newline from input line */
- for (line_ptr = line; *line_ptr; line_ptr++)
- {
- if (*line_ptr == '\n' || *line_ptr == '\r')
- {
- *line_ptr = '\0';
- break;
- }
- }
-
- if (strlen(line) == 0) /* special case: force empty line */
- strcpy(line, "\n");
-
- word_ptr = line;
-
-#if 0
- printf("::: got line '%s'...\n", line);
-#endif
-
- while (*word_ptr)
- {
- boolean print_buffer = FALSE;
- int word_len;
-
- /* skip leading whitespaces */
- while (*word_ptr == ' ' || *word_ptr == '\t')
- word_ptr++;
-
- line_ptr = word_ptr;
- word_len = 0;
-
- /* look for end of next word */
- while (*line_ptr != ' ' && *line_ptr != '\t' && *line_ptr != '\0')
- {
- line_ptr++;
- word_len++;
- }
-
- if (word_len == 0)
- {
- continue;
- }
- else if (*word_ptr == '\n') /* special case: force empty line */
- {
- if (buffer_len == 0)
- word_ptr++;
-
- /* prevent printing of multiple empty lines */
- if (buffer_len > 0 || !last_line_was_empty)
- print_buffer = TRUE;
- }
- else if (word_len < max_chars_per_line - buffer_len)
- {
- /* word fits into text buffer -- add word */
-
- if (buffer_len > 0)
- buffer[buffer_len++] = ' ';
-
- strncpy(&buffer[buffer_len], word_ptr, word_len);
- buffer_len += word_len;
- buffer[buffer_len] = '\0';
- word_ptr += word_len;
- }
- else if (buffer_len > 0)
- {
- /* not enough space left for word in text buffer -- print buffer */
-
- print_buffer = TRUE;
- }
- else
- {
- /* word does not fit at all into empty text buffer -- cut word */
-
- strncpy(buffer, word_ptr, max_chars_per_line);
- buffer[max_chars_per_line] = '\0';
- word_ptr += max_chars_per_line;
- print_buffer = TRUE;
- }
-
- if (print_buffer)
- {
-#if 0
- printf("::: printing '%s'...\n", buffer);
-#endif
-
- if (!PrintInfoText(buffer, font_nr, screen_line + lines_printed))
- {
- fclose(file);
-
- return lines_printed;
- }
-
- last_line_was_empty = (buffer_len == 0);
- lines_printed++;
-
- buffer[0] = '\0';
- buffer_len = 0;
- print_buffer = FALSE;
- }
- }
- }
-
- fclose(file);
-
- if (buffer_len > 0)
- if (PrintInfoText(buffer, font_nr, screen_line + lines_printed))
- lines_printed++;
-
- return lines_printed;
-}