comparison src/redisplay.h @ 398:74fd4e045ea6 r21-2-29

Import from CVS: tag r21-2-29
author cvs
date Mon, 13 Aug 2007 11:13:30 +0200
parents aabb7f5b1c81
children a86b2b5e0111
comparison
equal deleted inserted replaced
397:f4aeb21a5bad 398:74fd4e045ea6
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */ 21 Boston, MA 02111-1307, USA. */
22 22
23 /* Synched up with: Not in FSF. */ 23 /* Synched up with: Not in FSF. */
24 24
25 #ifndef _XEMACS_REDISPLAY_H_ 25 #ifndef INCLUDED_redisplay_h_
26 #define _XEMACS_REDISPLAY_H_ 26 #define INCLUDED_redisplay_h_
27 27
28 /* Redisplay DASSERT types */ 28 /* Redisplay DASSERT types */
29 #define DB_DISP_POS 1 29 #define DB_DISP_POS 1
30 #define DB_DISP_TEXT_LAYOUT 2 30 #define DB_DISP_TEXT_LAYOUT 2
31 #define DB_DISP_REDISPLAY 4 31 #define DB_DISP_REDISPLAY 4
88 or pixmap. Any single character in a buffer has one or more runes 88 or pixmap. Any single character in a buffer has one or more runes
89 (or zero, if the character is invisible) corresponding to it. 89 (or zero, if the character is invisible) corresponding to it.
90 (Printable characters typically have one rune associated with them, 90 (Printable characters typically have one rune associated with them,
91 but control characters have two -- a ^ and a letter -- and other 91 but control characters have two -- a ^ and a letter -- and other
92 non-printing characters (those displayed in octal) have four. */ 92 non-printing characters (those displayed in octal) have four. */
93
94 /* WARNING! In compare_runes (one of the most heavily used functions)
95 two runes are compared. So please be careful with changes to this
96 structure. See comments in compare_runes.
97
98 #### This should really be made smaller.
99 */
93 100
94 typedef struct rune rune; 101 typedef struct rune rune;
95 struct rune 102 struct rune
96 { 103 {
97 face_index findex; /* face rune is displayed with. The 104 face_index findex; /* face rune is displayed with. The
103 faces that overlap the rune) and 110 faces that overlap the rune) and
104 contains the instance values for 111 contains the instance values for
105 each of the face properties in this 112 each of the face properties in this
106 particular window. */ 113 particular window. */
107 114
108 short xpos; /* horizontal starting position in pixels */
109 short width; /* pixel width of rune */
110
111
112 Bufpos bufpos; /* buffer position this rune is displaying; 115 Bufpos bufpos; /* buffer position this rune is displaying;
113 for the modeline, the value here is a 116 for the modeline, the value here is a
114 Charcount, but who's looking? */ 117 Charcount, but who's looking? */
115 Bufpos endpos; /* if set this rune covers a range of pos */ 118 Bufpos endpos; /* if set this rune covers a range of pos */
116 /* #### Chuck, what does it mean for a rune 119 /* #### Chuck, what does it mean for a rune
117 to cover a range of pos? I don't get 120 to cover a range of pos? I don't get
118 this. */ 121 this. */
119 unsigned int cursor_type :3; /* is this rune covered by the cursor? */ 122 /* #### This isn't used as an rvalue anywhere!
120 unsigned int type :3; /* type of rune object */ 123 remove! */
124
125
126 short xpos; /* horizontal starting position in pixels */
127 short width; /* pixel width of rune */
128
129
130 unsigned char cursor_type; /* is this rune covered by the cursor? */
131 unsigned char type; /* type of rune object */
132 /* We used to do bitfields here, but if I
133 (JV) count correctly that doesn't matter
134 for the size of the structure. All the bit
135 fiddling _does_ slow down redisplay by
136 about 10%. So don't do that */
121 137
122 union /* Information specific to the type of rune */ 138 union /* Information specific to the type of rune */
123 { 139 {
140 /* #### GLyps are are. Is it really necessary to waste 8 bytes on every
141 rune for that?! */
124 /* DGLYPH */ 142 /* DGLYPH */
125 struct 143 struct
126 { 144 {
127 Lisp_Object glyph; 145 Lisp_Object glyph;
128 Lisp_Object extent; /* extent rune is attached to, if any. 146 Lisp_Object extent; /* extent rune is attached to, if any.
143 } chr; 161 } chr;
144 162
145 /* HLINE */ 163 /* HLINE */
146 struct 164 struct
147 { 165 {
148 int thickness; /* how thick to make hline */ 166 short thickness; /* how thick to make hline */
149 int yoffset; /* how far down from top of line to put top */ 167 short yoffset; /* how far down from top of line to put top */
150 } hline; 168 } hline;
151 } object; /* actual rune object */ 169 } object; /* actual rune object */
152 }; 170 };
153 171
154 typedef struct 172 typedef struct
230 248
231 typedef struct 249 typedef struct
232 { 250 {
233 Dynarr_declare (glyph_block); 251 Dynarr_declare (glyph_block);
234 } glyph_block_dynarr; 252 } glyph_block_dynarr;
253
254 /*************************************************************************/
255 /* display lines */
256 /*************************************************************************/
257
258 /* Modeline commentary: IMO the modeline is handled very badly, we
259 special case virtually *everything* in the redisplay routines for
260 the modeline. The fact that dl->bufpos can be either a buffer
261 position or a char count highlights this. There is no abstraction at
262 all that I can find and it means that the code is made very ugly as
263 a result. Either we should treat the modeline *entirely* separately,
264 or we should abstract to something that applies equally well to the
265 modeline and to buffer text, the things are not enormously different
266 after all and handling them identically at some level would
267 eliminate some bugs that still exist (mainly to do with modeline
268 handling). This problem doesn't help trying to implement gutters
269 which are somewhere in between buffer text and modeline text.
270
271 Redisplay commentary: Everything in redisplay is tied very tightly
272 to the things that are being displayed, and the context,
273 e.g. buffers and windows. According to Chuck this is so that we can
274 get speed, which seems fine to me, however this usage is extended
275 too far down the redispay routines IMO. At some level there should
276 be functions that know how to display strings with extents and
277 faces, regardless of buffer etc. After all the window system does
278 not care. <andy@xemacs.org> */
235 279
236 typedef struct display_line display_line; 280 typedef struct display_line display_line;
237 struct display_line 281 struct display_line
238 { 282 {
239 short ypos; /* vertical position in pixels 283 short ypos; /* vertical position in pixels
245 pixels below the baseline. 289 pixels below the baseline.
246 The descent includes the baseline 290 The descent includes the baseline
247 pixel-row itself, I think. */ 291 pixel-row itself, I think. */
248 unsigned short clip; /* amount of bottom of line to clip 292 unsigned short clip; /* amount of bottom of line to clip
249 in pixels.*/ 293 in pixels.*/
294 unsigned short top_clip; /* amount of top of line to clip
295 in pixels.*/
250 Bufpos bufpos; /* first buffer position on line */ 296 Bufpos bufpos; /* first buffer position on line */
251 Bufpos end_bufpos; /* last buffer position on line */ 297 Bufpos end_bufpos; /* last buffer position on line */
252 Charcount offset; /* adjustment to bufpos vals */ 298 Charcount offset; /* adjustment to bufpos vals */
253 Charcount num_chars; /* # of chars on line 299 Charcount num_chars; /* # of chars on line
254 including expansion of tabs 300 including expansion of tabs
266 display_block_dynarr *display_blocks; 312 display_block_dynarr *display_blocks;
267 313
268 /* Dynamic arrays of left and right glyph blocks */ 314 /* Dynamic arrays of left and right glyph blocks */
269 glyph_block_dynarr *left_glyphs; 315 glyph_block_dynarr *left_glyphs;
270 glyph_block_dynarr *right_glyphs; 316 glyph_block_dynarr *right_glyphs;
317
318 face_index left_margin_findex;
319 face_index right_margin_findex;
320 face_index default_findex;
271 }; 321 };
272 322
273 #define DISPLAY_LINE_HEIGHT(dl) \ 323 #define DISPLAY_LINE_HEIGHT(dl) \
274 (dl->ascent + dl->descent - dl->clip) 324 (dl->ascent + dl->descent - (dl->clip + dl->top_clip))
275 #define DISPLAY_LINE_YPOS(dl) \ 325 #define DISPLAY_LINE_YPOS(dl) \
276 (dl->ypos - dl->ascent) 326 (dl->ypos - (dl->ascent - dl->top_clip))
327 #define DISPLAY_LINE_YEND(dl) \
328 ((dl->ypos + dl->descent) - dl->clip)
277 329
278 typedef struct 330 typedef struct
279 { 331 {
280 Dynarr_declare (display_line); 332 Dynarr_declare (display_line);
281 } display_line_dynarr; 333 } display_line_dynarr;
334
335 /* The following two structures are used to represent an area to
336 displayed and where to display it. Using these two structures all
337 combinations of clipping and position can be accommodated. */
338
339 /* This represents an area to be displayed into. */
340 typedef struct display_box display_box;
341 struct display_box
342 {
343 int xpos; /* absolute horizontal position of area */
344 int ypos; /* absolute vertical position of area */
345 int width, height;
346 };
347
348 /* This represents the area from a glyph to be displayed. */
349 typedef struct display_glyph_area display_glyph_area;
350 struct display_glyph_area
351 {
352 int xoffset; /* horizontal offset of the glyph, +ve means
353 display the glyph with x offset by xoffset,
354 -ve means display starting xoffset into the
355 glyph. */
356 int yoffset; /* vertical offset of the glyph, +ve means
357 display the glyph with y offset by yoffset,
358 -ve means display starting xoffset into the
359 glyph. */
360 int width, height; /* width and height of glyph to display. */
361 };
282 362
283 /* It could be argued that the following two structs belong in 363 /* It could be argued that the following two structs belong in
284 extents.h, but they're only used by redisplay and it simplifies 364 extents.h, but they're only used by redisplay and it simplifies
285 the header files to put them here. */ 365 the header files to put them here. */
286 366
313 unsigned int invisible_ellipses:1; 393 unsigned int invisible_ellipses:1;
314 unsigned int previously_invisible:1; 394 unsigned int previously_invisible:1;
315 unsigned int invisible_ellipses_already_displayed:1; 395 unsigned int invisible_ellipses_already_displayed:1;
316 }; 396 };
317 397
398 #define EDGE_TOP 1
399 #define EDGE_LEFT 2
400 #define EDGE_BOTTOM 4
401 #define EDGE_RIGHT 8
402 #define EDGE_ALL (EDGE_TOP | EDGE_LEFT | EDGE_BOTTOM | EDGE_RIGHT)
403
318 404
319 /*************************************************************************/ 405 /*************************************************************************/
320 /* change flags */ 406 /* change flags */
321 /*************************************************************************/ 407 /*************************************************************************/
322 408
358 /* True if any displayed subwindow is in need of updating 444 /* True if any displayed subwindow is in need of updating
359 somewhere. */ 445 somewhere. */
360 extern int subwindows_changed; 446 extern int subwindows_changed;
361 extern int subwindows_changed_set; 447 extern int subwindows_changed_set;
362 448
449 /* True if any displayed subwindow is in need of updating
450 somewhere. */
451 extern int subwindows_state_changed;
452 extern int subwindows_state_changed_set;
453
363 /* True if an icon is in need of updating somewhere. */ 454 /* True if an icon is in need of updating somewhere. */
364 extern int icon_changed; 455 extern int icon_changed;
365 extern int icon_changed_set; 456 extern int icon_changed_set;
366 457
367 /* True if a menubar is in need of updating somewhere. */ 458 /* True if a menubar is in need of updating somewhere. */
384 extern int asynch_device_change_pending; 475 extern int asynch_device_change_pending;
385 476
386 /* non-nil if any toolbar has changed */ 477 /* non-nil if any toolbar has changed */
387 extern int toolbar_changed; 478 extern int toolbar_changed;
388 extern int toolbar_changed_set; 479 extern int toolbar_changed_set;
480
481 /* non-nil if any gutter has changed */
482 extern int gutter_changed;
483 extern int gutter_changed_set;
389 484
390 /* non-nil if any window has changed since the last time redisplay completed */ 485 /* non-nil if any window has changed since the last time redisplay completed */
391 extern int windows_changed; 486 extern int windows_changed;
392 487
393 /* non-nil if any frame's window structure has changed since the last 488 /* non-nil if any frame's window structure has changed since the last
424 #define MARK_ICON_CHANGED MARK_TYPE_CHANGED (icon) 519 #define MARK_ICON_CHANGED MARK_TYPE_CHANGED (icon)
425 #define MARK_MENUBAR_CHANGED MARK_TYPE_CHANGED (menubar) 520 #define MARK_MENUBAR_CHANGED MARK_TYPE_CHANGED (menubar)
426 #define MARK_MODELINE_CHANGED MARK_TYPE_CHANGED (modeline) 521 #define MARK_MODELINE_CHANGED MARK_TYPE_CHANGED (modeline)
427 #define MARK_POINT_CHANGED MARK_TYPE_CHANGED (point) 522 #define MARK_POINT_CHANGED MARK_TYPE_CHANGED (point)
428 #define MARK_TOOLBAR_CHANGED MARK_TYPE_CHANGED (toolbar) 523 #define MARK_TOOLBAR_CHANGED MARK_TYPE_CHANGED (toolbar)
524 #define MARK_GUTTER_CHANGED MARK_TYPE_CHANGED (gutter)
429 #define MARK_GLYPHS_CHANGED MARK_TYPE_CHANGED (glyphs) 525 #define MARK_GLYPHS_CHANGED MARK_TYPE_CHANGED (glyphs)
430 #define MARK_SUBWINDOWS_CHANGED MARK_TYPE_CHANGED (subwindows) 526 #define MARK_SUBWINDOWS_CHANGED MARK_TYPE_CHANGED (subwindows)
527 #define MARK_SUBWINDOWS_STATE_CHANGED MARK_TYPE_CHANGED (subwindows_state)
528
529
530 #define CLASS_RESET_CHANGED_FLAGS(p) do { \
531 (p)->buffers_changed = 0; \
532 (p)->clip_changed = 0; \
533 (p)->extents_changed = 0; \
534 (p)->faces_changed = 0; \
535 (p)->frame_changed = 0; \
536 (p)->icon_changed = 0; \
537 (p)->menubar_changed = 0; \
538 (p)->modeline_changed = 0; \
539 (p)->point_changed = 0; \
540 (p)->toolbar_changed = 0; \
541 (p)->gutter_changed = 0; \
542 (p)->glyphs_changed = 0; \
543 (p)->subwindows_changed = 0; \
544 (p)->subwindows_state_changed = 0; \
545 (p)->windows_changed = 0; \
546 (p)->windows_structure_changed = 0; \
547 } while (0)
548
549 #define GLOBAL_RESET_CHANGED_FLAGS do { \
550 buffers_changed = 0; \
551 clip_changed = 0; \
552 extents_changed = 0; \
553 faces_changed = 0; \
554 frame_changed = 0; \
555 icon_changed = 0; \
556 menubar_changed = 0; \
557 modeline_changed = 0; \
558 point_changed = 0; \
559 toolbar_changed = 0; \
560 gutter_changed = 0; \
561 glyphs_changed = 0; \
562 subwindows_changed = 0; \
563 subwindows_state_changed = 0; \
564 windows_changed = 0; \
565 windows_structure_changed = 0; \
566 } while (0)
567
568 #define CLASS_REDISPLAY_FLAGS_CHANGEDP(p) \
569 ( (p)->buffers_changed || \
570 (p)->clip_changed || \
571 (p)->extents_changed || \
572 (p)->faces_changed || \
573 (p)->frame_changed || \
574 (p)->icon_changed || \
575 (p)->menubar_changed || \
576 (p)->modeline_changed || \
577 (p)->point_changed || \
578 (p)->toolbar_changed || \
579 (p)->gutter_changed || \
580 (p)->glyphs_changed || \
581 (p)->size_changed || \
582 (p)->subwindows_changed || \
583 (p)->subwindows_state_changed || \
584 (p)->windows_changed || \
585 (p)->windows_structure_changed )
586
587 #define GLOBAL_REDISPLAY_FLAGS_CHANGEDP \
588 ( buffers_changed || \
589 clip_changed || \
590 extents_changed || \
591 faces_changed || \
592 frame_changed || \
593 icon_changed || \
594 menubar_changed || \
595 modeline_changed || \
596 point_changed || \
597 toolbar_changed || \
598 gutter_changed || \
599 glyphs_changed || \
600 size_changed || \
601 subwindows_changed || \
602 subwindows_state_changed || \
603 windows_changed || \
604 windows_structure_changed )
605
431 606
432 /* Anytime a console, device or frame is added or deleted we need to reset 607 /* Anytime a console, device or frame is added or deleted we need to reset
433 these flags. */ 608 these flags. */
434 #define RESET_CHANGED_SET_FLAGS \ 609 #define RESET_CHANGED_SET_FLAGS do { \
435 do { \ 610 buffers_changed_set = 0; \
436 buffers_changed_set = 0; \ 611 clip_changed_set = 0; \
437 clip_changed_set = 0; \ 612 extents_changed_set = 0; \
438 extents_changed_set = 0; \ 613 icon_changed_set = 0; \
439 icon_changed_set = 0; \ 614 menubar_changed_set = 0; \
440 menubar_changed_set = 0; \ 615 modeline_changed_set = 0; \
441 modeline_changed_set = 0; \ 616 point_changed_set = 0; \
442 point_changed_set = 0; \ 617 toolbar_changed_set = 0; \
443 toolbar_changed_set = 0; \ 618 gutter_changed_set = 0; \
444 glyphs_changed_set = 0; \ 619 glyphs_changed_set = 0; \
445 subwindows_changed_set = 0; \ 620 subwindows_changed_set = 0; \
446 } while (0) 621 subwindows_state_changed_set = 0; \
622 } while (0)
447 623
448 624
449 /*************************************************************************/ 625 /*************************************************************************/
450 /* redisplay global variables */ 626 /* redisplay global variables */
451 /*************************************************************************/ 627 /*************************************************************************/
483 /* If non-zero, a window-system was specified on the command line. 659 /* If non-zero, a window-system was specified on the command line.
484 Defined in emacs.c. */ 660 Defined in emacs.c. */
485 extern int display_arg; 661 extern int display_arg;
486 662
487 /* Type of display specified. Defined in emacs.c. */ 663 /* Type of display specified. Defined in emacs.c. */
488 extern CONST char *display_use; 664 extern const char *display_use;
489 665
490 /* Nonzero means reading single-character input with prompt 666 /* Nonzero means reading single-character input with prompt
491 so put cursor on minibuffer after the prompt. */ 667 so put cursor on minibuffer after the prompt. */
492 668
493 extern int cursor_in_echo_area; 669 extern int cursor_in_echo_area;
517 Bufpos point); 693 Bufpos point);
518 int line_at_center (struct window *w, int type, Bufpos start, Bufpos point); 694 int line_at_center (struct window *w, int type, Bufpos start, Bufpos point);
519 int window_half_pixpos (struct window *w); 695 int window_half_pixpos (struct window *w);
520 void redisplay_echo_area (void); 696 void redisplay_echo_area (void);
521 void free_display_structs (struct window_mirror *mir); 697 void free_display_structs (struct window_mirror *mir);
522 Bufbyte *generate_formatted_string (struct window *w, Lisp_Object format_str, 698 void free_display_lines (display_line_dynarr *dla);
523 Lisp_Object result_str, face_index findex, 699 void generate_displayable_area (struct window *w, Lisp_Object disp_string,
524 int type); 700 int xpos, int ypos, int width, int height,
701 display_line_dynarr* dl,
702 Bufpos start_pos, face_index default_face);
703 /* `generate_title_string' in frame.c needs this */
704 void generate_formatted_string_db (Lisp_Object format_str,
705 Lisp_Object result_str,
706 struct window *w,
707 struct display_line *dl,
708 struct display_block *db,
709 face_index findex,
710 int min_pixpos, int max_pixpos, int type);
525 int real_current_modeline_height (struct window *w); 711 int real_current_modeline_height (struct window *w);
526 int pixel_to_glyph_translation (struct frame *f, int x_coord, 712 int pixel_to_glyph_translation (struct frame *f, int x_coord,
527 int y_coord, int *col, int *row, 713 int y_coord, int *col, int *row,
528 int *obj_x, int *obj_y, 714 int *obj_x, int *obj_y,
529 struct window **w, Bufpos *bufpos, 715 struct window **w, Bufpos *bufpos,
530 Bufpos *closest, Charcount *modeline_closest, 716 Bufpos *closest, Charcount *modeline_closest,
531 Lisp_Object *obj1, Lisp_Object *obj2); 717 Lisp_Object *obj1, Lisp_Object *obj2);
532 void glyph_to_pixel_translation (struct window *w, int char_x, 718 void glyph_to_pixel_translation (struct window *w, int char_x,
533 int char_y, int *pix_x, int *pix_y); 719 int char_y, int *pix_x, int *pix_y);
534 void mark_redisplay (void (*) (Lisp_Object)); 720 void mark_redisplay (void);
535 int point_in_line_start_cache (struct window *w, Bufpos point, 721 int point_in_line_start_cache (struct window *w, Bufpos point,
536 int min_past); 722 int min_past);
537 int point_would_be_visible (struct window *w, Bufpos startp, 723 int point_would_be_visible (struct window *w, Bufpos startp,
538 Bufpos point); 724 Bufpos point);
539 Bufpos start_of_last_line (struct window *w, Bufpos startp); 725 Bufpos start_of_last_line (struct window *w, Bufpos startp);
557 743
558 /* defined in redisplay-output.c */ 744 /* defined in redisplay-output.c */
559 int get_next_display_block (layout_bounds bounds, 745 int get_next_display_block (layout_bounds bounds,
560 display_block_dynarr *dba, int start_pos, 746 display_block_dynarr *dba, int start_pos,
561 int *next_start); 747 int *next_start);
562 void redisplay_output_subwindow (struct window *w, struct display_line *dl, 748 void redisplay_output_layout (struct window *w,
563 Lisp_Object image_instance, int xpos, 749 Lisp_Object image_instance,
564 int xoffset, int start_pixpos, int width, 750 struct display_box* db, struct display_glyph_area* dga,
565 face_index findex, int cursor_start, 751 face_index findex, int cursor_start, int cursor_width,
566 int cursor_width, int cursor_height); 752 int cursor_height);
753 void redisplay_output_subwindow (struct window *w,
754 Lisp_Object image_instance,
755 struct display_box* db, struct display_glyph_area* dga,
756 face_index findex, int cursor_start, int cursor_width,
757 int cursor_height);
567 void redisplay_unmap_subwindows_maybe (struct frame* f, int x, int y, int width, int height); 758 void redisplay_unmap_subwindows_maybe (struct frame* f, int x, int y, int width, int height);
759 void redisplay_output_pixmap (struct window *w,
760 Lisp_Object image_instance,
761 struct display_box* db, struct display_glyph_area* dga,
762 face_index findex, int cursor_start, int cursor_width,
763 int cursor_height, int offset_bitmap);
764 int redisplay_calculate_display_boxes (struct display_line *dl, int xpos,
765 int xoffset, int start_pixpos, int width,
766 struct display_box* dest,
767 struct display_glyph_area* src);
768 int redisplay_normalize_glyph_area (struct display_box* dest,
769 struct display_glyph_area* glyphsrc);
770 void redisplay_clear_to_window_end (struct window *w, int ypos1, int ypos2);
568 void redisplay_clear_region (Lisp_Object window, face_index findex, int x, 771 void redisplay_clear_region (Lisp_Object window, face_index findex, int x,
569 int y, int width, int height); 772 int y, int width, int height);
570 void redisplay_clear_bottom_of_window (struct window *w, 773 void redisplay_clear_bottom_of_window (struct window *w,
571 display_line_dynarr *ddla, 774 display_line_dynarr *ddla,
572 int min_start, int max_end); 775 int min_start, int max_end);
573 void redisplay_update_line (struct window *w, int first_line, 776 void redisplay_update_line (struct window *w, int first_line,
574 int last_line, int update_values); 777 int last_line, int update_values);
575 void redisplay_output_window (struct window *w); 778 void redisplay_output_window (struct window *w);
779 void bevel_modeline (struct window *w, struct display_line *dl);
576 int redisplay_move_cursor (struct window *w, Bufpos new_point, 780 int redisplay_move_cursor (struct window *w, Bufpos new_point,
577 int no_output_end); 781 int no_output_end);
578 void redisplay_redraw_cursor (struct frame *f, int run_begin_end_meths); 782 void redisplay_redraw_cursor (struct frame *f, int run_begin_end_meths);
579 void output_display_line (struct window *w, display_line_dynarr *cdla, 783 void output_display_line (struct window *w, display_line_dynarr *cdla,
580 display_line_dynarr *ddla, int line, 784 display_line_dynarr *ddla, int line,
581 int force_start, int force_end); 785 int force_start, int force_end);
582 786
583 #endif /* _XEMACS_REDISPLAY_H_ */ 787 #endif /* INCLUDED_redisplay_h_ */