+ strncpy(buffer, text_ptr, line_length);
+ buffer[line_length] = '\0';
+ text_ptr += line_length;
+ buffer_filled = TRUE;
+ }
+
+ if (buffer_filled)
+ break;
+ }
+
+ *src_buffer_ptr = text_ptr;
+ *dst_buffer_len = buffer_len;
+
+ return buffer_filled;
+}
+
+void DrawTextWrapped(int x, int y, char *text, int font_nr, int line_length,
+ int max_lines)
+{
+ char *text_ptr = text;
+ char buffer[line_length + 1];
+ int buffer_len;
+ int current_line = 0;
+ int font_height = getFontHeight(font_nr);
+
+ while (*text_ptr && current_line < max_lines)
+ {
+ buffer[0] = '\0';
+ buffer_len = 0;
+
+ RenderLineToBuffer(&text_ptr, buffer, &buffer_len, TRUE, line_length);
+
+ DrawText(x, y + current_line * font_height, buffer, font_nr);
+ current_line++;
+ }
+}
+
+int DrawTextFromFile(int x, int y, char *filename, int font_nr,
+ int line_length, int max_lines)
+{
+ int font_height = getFontHeight(font_nr);
+ char line[MAX_LINE_LEN];
+ char buffer[line_length + 1];
+ int buffer_len;
+ int current_line = 0;
+ FILE *file;
+
+ if (current_line >= max_lines)
+ return 0;
+
+ if (filename == NULL)
+ return 0;
+
+ if (!(file = fopen(filename, MODE_READ)))
+ return 0;
+
+ buffer[0] = '\0';
+ buffer_len = 0;
+
+ while (!feof(file) && current_line < max_lines)
+ {
+ char *line_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')