- if (print_inverse) /* special mode for text gadgets */
- {
- /* first step: draw solid colored rectangle (use "cursor" character) */
- BlitBitmap(font_bitmap, bitmap, FONT_CHARS_PER_LINE * font_width,
- 3 * font_height + font_starty,
- font_width, font_height, x, y);
-
- /* second step: draw masked black rectangle (use "space" character) */
- SetClipOrigin(font_bitmap, font_bitmap->stored_clip_gc,
- dest_x - src_x, dest_y - src_y);
- BlitBitmapMasked(font_bitmap, bitmap,
- 0, 0, font_width, font_height, dest_x, dest_y);
- }
- else if (mask_mode == FONT_MASKED)
+ strncpy(&buffer[buffer_len], text_ptr, word_len);
+ buffer_len += word_len;
+ buffer[buffer_len] = '\0';
+ text_ptr += word_len;
+ }
+ else if (buffer_len > 0)
+ {
+ /* not enough space left for word in text buffer -- print buffer */
+
+ buffer_filled = TRUE;
+ }
+ else
+ {
+ /* word does not fit at all into empty text buffer -- cut word */
+
+ 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')