+ SetClipMask(src_bitmap, font_clip_gc, font->clip_mask[font_pos]);
+ SetClipOrigin(src_bitmap, font_clip_gc, dst_x, dst_y);
+ }
+#else
+ SetClipOrigin(src_bitmap, src_bitmap->stored_clip_gc,
+ dst_x - src_x, dst_y - src_y);
+#endif
+
+ BlitBitmapMasked(src_bitmap, dst_bitmap, src_x, src_y,
+ font_width, font_height, dst_x, dst_y);
+ }
+ else /* normal, non-masked font blitting */
+ {
+ BlitBitmap(src_bitmap, dst_bitmap, src_x, src_y,
+ font_width, font_height, dst_x, dst_y);
+ }
+
+ dst_x += font_width;
+ }
+}
+
+void DrawTextToTextArea(int x, int y, char *text, int font_nr, int line_length,
+ int area_xsize, int area_ysize, int mask_mode)
+{
+ int area_line = 0;
+ int font_height = getFontHeight(font_nr);
+
+ if (text == NULL)
+ return;
+
+ while (*text && area_line < area_ysize)
+ {
+ char buffer[MAX_OUTPUT_LINESIZE + 1];
+ int i;
+
+ for (i = 0; i < line_length && *text; i++)
+ if ((buffer[i] = *text++) == '\n')
+ break;
+ buffer[MIN(i, area_xsize)] = '\0';
+
+ DrawTextExt(drawto, x, y + area_line * font_height, buffer, font_nr,
+ mask_mode);
+
+ area_line++;
+ }
+
+ redraw_mask |= REDRAW_FIELD;
+}
+
+boolean RenderLineToBuffer(char **src_buffer_ptr, char *dst_buffer,
+ int *dst_buffer_len, boolean last_line_was_empty,
+ int line_length)
+{
+ char *text_ptr = *src_buffer_ptr;
+ char *buffer = dst_buffer;
+ int buffer_len = *dst_buffer_len;
+ boolean buffer_filled = FALSE;
+
+ while (*text_ptr)