Mercurial > emacs
diff src/term.c @ 765:e4093444f9f8
*** empty log message ***
author | Jim Blandy <jimb@redhat.com> |
---|---|
date | Mon, 13 Jul 1992 20:53:59 +0000 |
parents | a8d94735277e |
children | ecc182062509 |
line wrap: on
line diff
--- a/src/term.c Mon Jul 13 19:54:34 1992 +0000 +++ b/src/term.c Mon Jul 13 20:53:59 1992 +0000 @@ -26,7 +26,7 @@ #include "cm.h" #undef NULL #include "lisp.h" -#include "screen.h" +#include "frame.h" #include "disptab.h" #include "termhooks.h" #include "keyboard.h" @@ -34,10 +34,10 @@ #define max(a, b) ((a) > (b) ? (a) : (b)) #define min(a, b) ((a) < (b) ? (a) : (b)) -#define OUTPUT(a) tputs (a, SCREEN_HEIGHT (selected_screen) - curY, cmputc) +#define OUTPUT(a) tputs (a, FRAME_HEIGHT (selected_frame) - curY, cmputc) #define OUTPUT1(a) tputs (a, 1, cmputc) #define OUTPUTL(a, lines) tputs (a, lines, cmputc) -#define OUTPUT_IF(a) { if (a) tputs (a, SCREEN_HEIGHT (selected_screen) - curY, cmputc); } +#define OUTPUT_IF(a) { if (a) tputs (a, FRAME_HEIGHT (selected_frame) - curY, cmputc); } #define OUTPUT1_IF(a) { if (a) tputs (a, 1, cmputc); } /* Terminal charateristics that higher levels want to look at. @@ -52,14 +52,14 @@ int char_ins_del_ok; /* Terminal can insert and delete chars */ int scroll_region_ok; /* Terminal supports setting the scroll window */ -int memory_below_screen; /* Terminal remembers lines +int memory_below_frame; /* Terminal remembers lines scrolled off bottom */ int fast_clear_end_of_line; /* Terminal has a `ce' string */ int dont_calculate_costs; /* Nonzero means don't bother computing */ /* various cost tables; we won't use them. */ -/* Nonzero means no need to redraw the entire screen on resuming +/* Nonzero means no need to redraw the entire frame on resuming a suspended Emacs. This is useful on terminals with multiple pages, where one page is used for Emacs and another for all else. */ int no_redraw_on_reenter; @@ -71,7 +71,7 @@ int (*raw_cursor_to_hook) (); int (*clear_to_end_hook) (); -int (*clear_screen_hook) (); +int (*clear_frame_hook) (); int (*clear_end_of_line_hook) (); int (*ins_del_lines_hook) (); @@ -95,17 +95,17 @@ /* Return the current position of the mouse. This should clear mouse_moved until the next motion event arrives. */ -void (*mouse_position_hook) ( /* SCREEN_PTR *s, +void (*mouse_position_hook) ( /* FRAME_PTR *f, Lisp_Object *x, Lisp_Object *y, unsigned long *time */ ); -/* When reading from a minibuffer in a different screen, Emacs wants - to shift the highlight from the selected screen to the minibuffer's - screen; under X, this means it lies about where the focus is. +/* When reading from a minibuffer in a different frame, Emacs wants + to shift the highlight from the selected frame to the minibuffer's + frame; under X, this means it lies about where the focus is. This hook tells the window system code to re-decide where to put the highlight. */ -void (*screen_rehighlight_hook) ( /* SCREEN_PTR s */ ); +void (*frame_rehighlight_hook) ( /* FRAME_PTR f */ ); /* Strings, numbers and flags taken from the termcap entry. */ @@ -114,7 +114,7 @@ char *TS_bell; /* "bl" */ char *TS_clr_to_bottom; /* "cd" */ char *TS_clr_line; /* "ce", clear to end of line */ -char *TS_clr_screen; /* "cl" */ +char *TS_clr_frame; /* "cl" */ char *TS_set_scroll_region; /* "cs" (2 params, first line and last line) */ char *TS_set_scroll_region_1; /* "cS" (4 params: total lines, lines above scroll region, lines below it, @@ -186,24 +186,24 @@ int standout_mode; /* Nonzero when in standout mode. */ /* Size of window specified by higher levels. - This is the number of lines, from the top of screen downwards, + This is the number of lines, from the top of frame downwards, which can participate in insert-line/delete-line operations. - Effectively it excludes the bottom screen_height - specified_window_size + Effectively it excludes the bottom frame_height - specified_window_size lines from those operations. */ int specified_window; -/* Screen currently being redisplayed; 0 if not currently redisplaying. +/* Frame currently being redisplayed; 0 if not currently redisplaying. (Direct output does not count). */ -SCREEN_PTR updating_screen; +FRAME_PTR updating_frame; char *tparam (); ring_bell () { - if (! SCREEN_IS_TERMCAP (selected_screen)) + if (! FRAME_IS_TERMCAP (selected_frame)) { (*ring_bell_hook) (); return; @@ -213,7 +213,7 @@ set_terminal_modes () { - if (! SCREEN_IS_TERMCAP (selected_screen)) + if (! FRAME_IS_TERMCAP (selected_frame)) { (*set_terminal_modes_hook) (); return; @@ -226,7 +226,7 @@ reset_terminal_modes () { - if (! SCREEN_IS_TERMCAP (selected_screen)) + if (! FRAME_IS_TERMCAP (selected_frame)) { (*reset_terminal_modes_hook) (); return; @@ -239,44 +239,44 @@ OUTPUT_IF (TS_end_termcap_modes); /* Output raw CR so kernel can track the cursor hpos. */ /* But on magic-cookie terminals this can erase an end-standout marker and - cause the rest of the screen to be in standout, so move down first. */ + cause the rest of the frame to be in standout, so move down first. */ if (TN_standout_width >= 0) cmputc ('\n'); cmputc ('\r'); } -update_begin (s) - SCREEN_PTR s; +update_begin (f) + FRAME_PTR f; { - updating_screen = s; - if (! SCREEN_IS_TERMCAP (updating_screen)) - (*update_begin_hook) (s); + updating_frame = f; + if (! FRAME_IS_TERMCAP (updating_frame)) + (*update_begin_hook) (f); } -update_end (s) - SCREEN_PTR s; +update_end (f) + FRAME_PTR f; { - if (! SCREEN_IS_TERMCAP (updating_screen)) + if (! FRAME_IS_TERMCAP (updating_frame)) { - (*update_end_hook) (s); - updating_screen = 0; + (*update_end_hook) (f); + updating_frame = 0; return; } turn_off_insert (); background_highlight (); standout_requested = 0; - updating_screen = 0; + updating_frame = 0; } set_terminal_window (size) int size; { - if (! SCREEN_IS_TERMCAP (updating_screen)) + if (! FRAME_IS_TERMCAP (updating_frame)) { (*set_terminal_window_hook) (size); return; } - specified_window = size ? size : SCREEN_HEIGHT (selected_screen); + specified_window = size ? size : FRAME_HEIGHT (selected_frame); if (!scroll_region_ok) return; set_scroll_region (0, specified_window); @@ -293,13 +293,13 @@ else if (TS_set_scroll_region_1) { buf = tparam (TS_set_scroll_region_1, 0, 0, - SCREEN_HEIGHT (selected_screen), start, - SCREEN_HEIGHT (selected_screen) - stop, - SCREEN_HEIGHT (selected_screen)); + FRAME_HEIGHT (selected_frame), start, + FRAME_HEIGHT (selected_frame) - stop, + FRAME_HEIGHT (selected_frame)); } else { - buf = tparam (TS_set_window, 0, 0, start, 0, stop, SCREEN_WIDTH (selected_screen)); + buf = tparam (TS_set_window, 0, 0, start, 0, stop, FRAME_WIDTH (selected_frame)); } OUTPUT (buf); free (buf); @@ -376,7 +376,7 @@ /* Handle standout mode for terminals in which TN_standout_width >= 0. On these terminals, standout is controlled by markers that - live inside the screen memory. TN_standout_width is the width + live inside the terminal's memory. TN_standout_width is the width that the marker occupies in memory. Standout runs from the marker to the end of the line on some terminals, or to the next turn-off-standout marker (TS_end_standout_mode) string @@ -406,7 +406,7 @@ int highlight; int vpos; { - if (! SCREEN_IS_TERMCAP ((updating_screen ? updating_screen : selected_screen))) + if (! FRAME_IS_TERMCAP ((updating_frame ? updating_frame : selected_frame))) { (*reassert_line_highlight_hook) (highlight, vpos); return; @@ -427,7 +427,7 @@ int new_highlight, vpos, first_unused_hpos; { standout_requested = new_highlight; - if (! SCREEN_IS_TERMCAP (updating_screen)) + if (! FRAME_IS_TERMCAP (updating_frame)) { (*change_line_highlight_hook) (new_highlight, vpos, first_unused_hpos); return; @@ -444,7 +444,7 @@ /* On Teleray, make sure to erase the SO marker. */ if (TF_teleray) { - cmgoto (curY - 1, SCREEN_WIDTH (selected_screen) - 4); + cmgoto (curY - 1, FRAME_WIDTH (selected_frame) - 4); OUTPUT ("\033S"); curY++; /* ESC S moves to next line where the TS_standout_mode was */ curX = 0; @@ -462,9 +462,9 @@ cursor_to (row, col) int row, col; { - if (! SCREEN_IS_TERMCAP ((updating_screen - ? updating_screen - : selected_screen)) + if (! FRAME_IS_TERMCAP ((updating_frame + ? updating_frame + : selected_frame)) && cursor_to_hook) { (*cursor_to_hook) (row, col); @@ -486,7 +486,7 @@ raw_cursor_to (row, col) int row, col; { - if (! SCREEN_IS_TERMCAP ((updating_screen ? updating_screen : selected_screen))) + if (! FRAME_IS_TERMCAP ((updating_frame ? updating_frame : selected_frame))) { (*raw_cursor_to_hook) (row, col); return; @@ -502,12 +502,12 @@ /* Erase operations */ -/* clear from cursor to end of screen */ +/* clear from cursor to end of frame */ clear_to_end () { register int i; - if (clear_to_end_hook && SCREEN_IS_TERMCAP (updating_screen)) + if (clear_to_end_hook && FRAME_IS_TERMCAP (updating_frame)) { (*clear_to_end_hook) (); return; @@ -516,33 +516,33 @@ { background_highlight (); OUTPUT (TS_clr_to_bottom); - bzero (chars_wasted + curY, SCREEN_HEIGHT (selected_screen) - curY); + bzero (chars_wasted + curY, FRAME_HEIGHT (selected_frame) - curY); } else { - for (i = curY; i < SCREEN_HEIGHT (selected_screen); i++) + for (i = curY; i < FRAME_HEIGHT (selected_frame); i++) { cursor_to (i, 0); - clear_end_of_line_raw (SCREEN_WIDTH (selected_screen)); + clear_end_of_line_raw (FRAME_WIDTH (selected_frame)); } } } -/* Clear entire screen */ +/* Clear entire frame */ -clear_screen () +clear_frame () { - if (clear_screen_hook - && ! SCREEN_IS_TERMCAP ((updating_screen ? updating_screen : selected_screen))) + if (clear_frame_hook + && ! FRAME_IS_TERMCAP ((updating_frame ? updating_frame : selected_frame))) { - (*clear_screen_hook) (); + (*clear_frame_hook) (); return; } - if (TS_clr_screen) + if (TS_clr_frame) { background_highlight (); - OUTPUT (TS_clr_screen); - bzero (chars_wasted, SCREEN_HEIGHT (selected_screen)); + OUTPUT (TS_clr_frame); + bzero (chars_wasted, FRAME_HEIGHT (selected_frame)); cmat (0, 0); } else @@ -563,7 +563,7 @@ int first_unused_hpos; { static GLYPH buf[1] = {SPACEGLYPH}; - if (SCREEN_IS_TERMCAP (selected_screen) + if (FRAME_IS_TERMCAP (selected_frame) && TN_standout_width == 0 && curX == 0 && chars_wasted[curY] != 0) write_glyphs (buf, 1); clear_end_of_line_raw (first_unused_hpos); @@ -581,9 +581,9 @@ register int i; if (clear_end_of_line_hook - && ! SCREEN_IS_TERMCAP ((updating_screen - ? updating_screen - : selected_screen))) + && ! FRAME_IS_TERMCAP ((updating_frame + ? updating_frame + : selected_frame))) { (*clear_end_of_line_hook) (first_unused_hpos); return; @@ -605,8 +605,8 @@ turn_off_insert (); /* Do not write in last row last col with Autowrap on. */ - if (AutoWrap && curY == SCREEN_HEIGHT (selected_screen) - 1 - && first_unused_hpos == SCREEN_WIDTH (selected_screen)) + if (AutoWrap && curY == FRAME_HEIGHT (selected_frame) - 1 + && first_unused_hpos == FRAME_WIDTH (selected_frame)) first_unused_hpos--; for (i = curX; i < first_unused_hpos; i++) @@ -629,7 +629,7 @@ register Lisp_Object *tbase = GLYPH_TABLE_BASE; if (write_glyphs_hook - && ! SCREEN_IS_TERMCAP ((updating_screen ? updating_screen : selected_screen))) + && ! FRAME_IS_TERMCAP ((updating_frame ? updating_frame : selected_frame))) { (*write_glyphs_hook) (string, len); return; @@ -639,12 +639,12 @@ turn_off_insert (); /* Don't dare write in last column of bottom line, if AutoWrap, - since that would scroll the whole screen on some terminals. */ + since that would scroll the whole frame on some terminals. */ if (AutoWrap - && curY + 1 == SCREEN_HEIGHT (selected_screen) + && curY + 1 == FRAME_HEIGHT (selected_frame) && (curX + len - (chars_wasted[curY] & 077) - == SCREEN_WIDTH (selected_screen))) + == FRAME_WIDTH (selected_frame))) len --; cmplus (len); @@ -696,7 +696,7 @@ register int tlen = GLYPH_TABLE_LENGTH; register Lisp_Object *tbase = GLYPH_TABLE_BASE; - if (insert_glyphs_hook && ! SCREEN_IS_TERMCAP (updating_screen)) + if (insert_glyphs_hook && ! FRAME_IS_TERMCAP (updating_frame)) { (*insert_glyphs_hook) (start, len); return; @@ -751,7 +751,7 @@ char *buf; register int i; - if (delete_glyphs_hook && ! SCREEN_IS_TERMCAP (updating_screen)) + if (delete_glyphs_hook && ! FRAME_IS_TERMCAP (updating_frame)) { (*delete_glyphs_hook) (n); return; @@ -792,7 +792,7 @@ register int i = n > 0 ? n : -n; register char *buf; - if (ins_del_lines_hook && ! SCREEN_IS_TERMCAP (updating_screen)) + if (ins_del_lines_hook && ! FRAME_IS_TERMCAP (updating_frame)) { (*ins_del_lines_hook) (vpos, n); return; @@ -807,7 +807,7 @@ as there will be a matching inslines later that will flush them. */ if (scroll_region_ok && vpos + i >= specified_window) return; - if (!memory_below_screen && vpos + i >= SCREEN_HEIGHT (selected_screen)) + if (!memory_below_frame && vpos + i >= FRAME_HEIGHT (selected_frame)) return; if (multi) @@ -845,7 +845,7 @@ register lower_limit = (scroll_region_ok ? specified_window - : SCREEN_HEIGHT (selected_screen)); + : FRAME_HEIGHT (selected_frame)); if (n < 0) { @@ -861,9 +861,9 @@ bzero (&chars_wasted[vpos], n); } } - if (!scroll_region_ok && memory_below_screen && n < 0) + if (!scroll_region_ok && memory_below_frame && n < 0) { - cursor_to (SCREEN_HEIGHT (selected_screen) + n, 0); + cursor_to (FRAME_HEIGHT (selected_frame) + n, 0); clear_to_end (); } } @@ -916,13 +916,13 @@ int *char_ins_del_vector; -#define char_ins_del_cost(s) (&char_ins_del_vector[SCREEN_WIDTH ((s))]) +#define char_ins_del_cost(f) (&char_ins_del_vector[FRAME_WIDTH ((f))]) #endif /* ARGSUSED */ static void -calculate_ins_del_char_costs (screen) - SCREEN_PTR screen; +calculate_ins_del_char_costs (frame) + FRAME_PTR frame; { int ins_startup_cost, del_startup_cost; int ins_cost_per_char, del_cost_per_char; @@ -968,27 +968,27 @@ } /* Delete costs are at negative offsets */ - p = &char_ins_del_cost (screen)[0]; - for (i = SCREEN_WIDTH (selected_screen); --i >= 0;) + p = &char_ins_del_cost (frame)[0]; + for (i = FRAME_WIDTH (selected_frame); --i >= 0;) *--p = (del_startup_cost += del_cost_per_char); /* Doing nothing is free */ - p = &char_ins_del_cost (screen)[0]; + p = &char_ins_del_cost (frame)[0]; *p++ = 0; /* Insert costs are at positive offsets */ - for (i = SCREEN_WIDTH (screen); --i >= 0;) + for (i = FRAME_WIDTH (frame); --i >= 0;) *p++ = (ins_startup_cost += ins_cost_per_char); } #ifdef HAVE_X_WINDOWS -extern int x_screen_planes; +extern int x_frame_planes; #endif -calculate_costs (screen) - SCREEN_PTR screen; +calculate_costs (frame) + FRAME_PTR frame; { - register char *s = TS_set_scroll_region ? + register char *f = TS_set_scroll_region ? TS_set_scroll_region : TS_set_scroll_region_1; @@ -996,16 +996,16 @@ return; #ifdef HAVE_X_WINDOWS - if (SCREEN_IS_X (screen)) + if (FRAME_IS_X (frame)) { - do_line_insertion_deletion_costs (screen, 0, ".5*", 0, ".5*", - 0, 0, x_screen_planes); + do_line_insertion_deletion_costs (frame, 0, ".5*", 0, ".5*", + 0, 0, x_frame_planes); return; } #endif /* These variables are only used for terminal stuff. They are allocated - once for the terminal screen of X-windows emacs, but not used afterwards. + once for the terminal frame of X-windows emacs, but not used afterwards. char_ins_del_vector (i.e., char_ins_del_cost) isn't used because X turns off char_ins_del_ok. @@ -1014,48 +1014,48 @@ the term hook isn't called. */ if (chars_wasted != 0) - chars_wasted = (char *) xrealloc (chars_wasted, SCREEN_HEIGHT (screen)); + chars_wasted = (char *) xrealloc (chars_wasted, FRAME_HEIGHT (frame)); else - chars_wasted = (char *) xmalloc (SCREEN_HEIGHT (screen)); + chars_wasted = (char *) xmalloc (FRAME_HEIGHT (frame)); if (copybuf != 0) - copybuf = (char *) xrealloc (copybuf, SCREEN_HEIGHT (screen)); + copybuf = (char *) xrealloc (copybuf, FRAME_HEIGHT (frame)); else - copybuf = (char *) xmalloc (SCREEN_HEIGHT (screen)); + copybuf = (char *) xmalloc (FRAME_HEIGHT (frame)); if (char_ins_del_vector != 0) char_ins_del_vector = (int *) xrealloc (char_ins_del_vector, (sizeof (int) - + 2 * SCREEN_WIDTH (screen) * sizeof (int))); + + 2 * FRAME_WIDTH (frame) * sizeof (int))); else char_ins_del_vector = (int *) xmalloc (sizeof (int) - + 2 * SCREEN_WIDTH (screen) * sizeof (int)); + + 2 * FRAME_WIDTH (frame) * sizeof (int)); - bzero (chars_wasted, SCREEN_HEIGHT (screen)); - bzero (copybuf, SCREEN_HEIGHT (screen)); + bzero (chars_wasted, FRAME_HEIGHT (frame)); + bzero (copybuf, FRAME_HEIGHT (frame)); bzero (char_ins_del_vector, (sizeof (int) - + 2 * SCREEN_WIDTH (screen) * sizeof (int))); + + 2 * FRAME_WIDTH (frame) * sizeof (int))); - if (s && (!TS_ins_line && !TS_del_line)) - do_line_insertion_deletion_costs (screen, + if (f && (!TS_ins_line && !TS_del_line)) + do_line_insertion_deletion_costs (frame, TS_rev_scroll, TS_ins_multi_lines, TS_fwd_scroll, TS_del_multi_lines, - s, s, 1); + f, f, 1); else - do_line_insertion_deletion_costs (screen, + do_line_insertion_deletion_costs (frame, TS_ins_line, TS_ins_multi_lines, TS_del_line, TS_del_multi_lines, 0, 0, 1); - calculate_ins_del_char_costs (screen); + calculate_ins_del_char_costs (frame); /* Don't use TS_repeat if its padding is worse than sending the chars */ if (TS_repeat && per_line_cost (TS_repeat) * baud_rate < 9000) RPov = string_cost (TS_repeat); else - RPov = SCREEN_WIDTH (screen) * 2; + RPov = FRAME_WIDTH (frame) * 2; cmcostinit (); /* set up cursor motion costs */ } @@ -1151,7 +1151,7 @@ BackTab = tgetstr ("bt", address); TS_clr_to_bottom = tgetstr ("cd", address); TS_clr_line = tgetstr ("ce", address); - TS_clr_screen = tgetstr ("cl", address); + TS_clr_frame = tgetstr ("cl", address); ColPosition = tgetstr ("ch", address); AbsPosition = tgetstr ("cm", address); CR = tgetstr ("cr", address); @@ -1209,7 +1209,7 @@ MultiRight = tgetstr ("RI", address); AutoWrap = tgetflag ("am"); - memory_below_screen = tgetflag ("db"); + memory_below_frame = tgetflag ("db"); TF_hazeltine = tgetflag ("hz"); must_write_spaces = tgetflag ("in"); meta_key = tgetflag ("km") || tgetflag ("MT"); @@ -1222,13 +1222,13 @@ term_get_fkeys (address); - /* Get screen size from system, or else from termcap. */ - get_screen_size (&SCREEN_WIDTH (selected_screen), - &SCREEN_HEIGHT (selected_screen)); - if (SCREEN_WIDTH (selected_screen) <= 0) - SCREEN_WIDTH (selected_screen) = tgetnum ("co"); - if (SCREEN_HEIGHT (selected_screen) <= 0) - SCREEN_HEIGHT (selected_screen) = tgetnum ("li"); + /* Get frame size from system, or else from termcap. */ + get_frame_size (&FRAME_WIDTH (selected_frame), + &FRAME_HEIGHT (selected_frame)); + if (FRAME_WIDTH (selected_frame) <= 0) + FRAME_WIDTH (selected_frame) = tgetnum ("co"); + if (FRAME_HEIGHT (selected_frame) <= 0) + FRAME_HEIGHT (selected_frame) = tgetnum ("li"); min_padding_speed = tgetnum ("pb"); TN_standout_width = tgetnum ("sg"); @@ -1285,7 +1285,7 @@ if (!strcmp (terminal_type, "supdup")) { - memory_below_screen = 1; + memory_below_frame = 1; Wcm.cm_losewrap = 1; } if (!strncmp (terminal_type, "c10", 3) @@ -1296,7 +1296,7 @@ for windows starting at the upper left corner; but that is all Emacs uses. - This string works only if the screen is using + This string works only if the frame is using the top of the video memory, because addressing is memory-relative. So first check the :ti string to see if that is true. @@ -1330,9 +1330,9 @@ } } - ScreenRows = SCREEN_HEIGHT (selected_screen); - ScreenCols = SCREEN_WIDTH (selected_screen); - specified_window = SCREEN_HEIGHT (selected_screen); + FrameRows = FRAME_HEIGHT (selected_frame); + FrameCols = FRAME_WIDTH (selected_frame); + specified_window = FRAME_HEIGHT (selected_frame); if (Wcm_init () == -1) /* can't do cursor motion */ #ifdef VMS @@ -1350,9 +1350,9 @@ It may be necessary to do `unsetenv TERMCAP' as well.\n", terminal_type); #endif - if (SCREEN_HEIGHT (selected_screen) <= 0 - || SCREEN_WIDTH (selected_screen) <= 0) - fatal ("The screen size has not been specified."); + if (FRAME_HEIGHT (selected_frame) <= 0 + || FRAME_WIDTH (selected_frame) <= 0) + fatal ("The frame size has not been specified."); delete_in_insert_mode = TS_delete_mode && TS_insert_mode @@ -1364,7 +1364,7 @@ /* Remove width of standout marker from usable width of line */ if (TN_standout_width > 0) - SCREEN_WIDTH (selected_screen) -= TN_standout_width; + FRAME_WIDTH (selected_frame) -= TN_standout_width; UseTabs = tabs_safe_p () && TabWidth == 8;