/* terminal control module for terminals described by TERMCAP
- Copyright (C) 1985, 1986, 1987, 1993, 1994 Free Software Foundation, Inc.
+ Copyright (C) 1985, 86, 87, 93, 94, 95 Free Software Foundation, Inc.
This file is part of GNU Emacs.
int char_ins_del_ok; /* Terminal can insert and delete chars */
int scroll_region_ok; /* Terminal supports setting the
scroll window */
+int scroll_region_cost; /* Cost of setting a scroll window,
+ measured in characters */
int memory_below_frame; /* Terminal remembers lines
scrolled off bottom */
int fast_clear_end_of_line; /* Terminal has a `ce' string */
This should clear mouse_moved until the next motion
event arrives. */
-void (*mouse_position_hook) ( /* FRAME_PTR *f,
+void (*mouse_position_hook) ( /* FRAME_PTR *f, int insist,
Lisp_Object *bar_window,
enum scroll_bar_part *part,
Lisp_Object *x,
/* internal state */
+/* The largest frame width in any call to calculate_costs. */
+int max_frame_width;
+/* The largest frame height in any call to calculate_costs. */
+int max_frame_height;
+
/* Number of chars of space used for standout marker at beginning of line,
or'd with 0100. Zero if no standout marker at all.
+ The length of these vectors is max_frame_height.
Used IFF TN_standout_width >= 0. */
}
}
}
+ cmcheckmagic ();
}
/* If start is zero, insert blanks instead of a string at start */
termscript);
}
- OUTPUT1_IF (TS_pad_inserted_char);
- }
+ OUTPUT1_IF (TS_pad_inserted_char);
+ }
+ cmcheckmagic ();
}
delete_glyphs (n)
#ifndef old
/* char_ins_del_cost[n] is cost of inserting N characters.
- char_ins_del_cost[-n] is cost of deleting N characters. */
+ char_ins_del_cost[-n] is cost of deleting N characters.
+ The length of this vector is based on max_frame_width. */
int *char_ins_del_vector;
FRAME_COST_BAUD_RATE (frame) = baud_rate;
+ scroll_region_cost = string_cost (f);
#ifdef HAVE_X_WINDOWS
if (FRAME_X_P (frame))
{
do_line_insertion_deletion_costs (frame, 0, ".5*", 0, ".5*",
0, 0,
x_screen_planes (frame));
+ scroll_region_cost = 0;
return;
}
#endif
chars_wasted and copybuf are only used here in term.c in cases where
the term hook isn't called. */
+ max_frame_height = max (max_frame_height, FRAME_HEIGHT (frame));
+ max_frame_width = max (max_frame_width, FRAME_WIDTH (frame));
+
if (chars_wasted != 0)
- chars_wasted = (char *) xrealloc (chars_wasted, FRAME_HEIGHT (frame));
+ chars_wasted = (char *) xrealloc (chars_wasted, max_frame_height);
else
- chars_wasted = (char *) xmalloc (FRAME_HEIGHT (frame));
+ chars_wasted = (char *) xmalloc (max_frame_height);
if (copybuf != 0)
- copybuf = (char *) xrealloc (copybuf, FRAME_HEIGHT (frame));
+ copybuf = (char *) xrealloc (copybuf, max_frame_height);
else
- copybuf = (char *) xmalloc (FRAME_HEIGHT (frame));
+ copybuf = (char *) xmalloc (max_frame_height);
if (char_ins_del_vector != 0)
char_ins_del_vector
= (int *) xrealloc (char_ins_del_vector,
(sizeof (int)
- + 2 * FRAME_WIDTH (frame) * sizeof (int)));
+ + 2 * max_frame_width * sizeof (int)));
else
char_ins_del_vector
= (int *) xmalloc (sizeof (int)
- + 2 * FRAME_WIDTH (frame) * sizeof (int));
+ + 2 * max_frame_width * sizeof (int));
- bzero (chars_wasted, FRAME_HEIGHT (frame));
- bzero (copybuf, FRAME_HEIGHT (frame));
+ bzero (chars_wasted, max_frame_height);
+ bzero (copybuf, max_frame_height);
bzero (char_ins_del_vector, (sizeof (int)
- + 2 * FRAME_WIDTH (frame) * sizeof (int)));
+ + 2 * max_frame_width * sizeof (int)));
if (f && (!TS_ins_line && !TS_del_line))
do_line_insertion_deletion_costs (frame,
if (i <= 19)
fcap[1] = '1' + i - 11;
else if (i <= 45)
- fcap[1] = 'A' + i - 11;
+ fcap[1] = 'A' + i - 20;
else
- fcap[1] = 'a' + i - 11;
+ fcap[1] = 'a' + i - 46;
{
char *sequence = tgetstr (fcap, address);
status = tgetent (buffer, terminal_type);
if (status < 0)
- fatal ("Cannot open termcap database file.\n");
+ {
+#ifdef TERMINFO
+ fatal ("Cannot open terminfo database file.\n");
+#else
+ fatal ("Cannot open termcap database file.\n");
+#endif
+ }
if (status == 0)
- fatal ("Terminal type %s is not defined.\n\
+ {
+#ifdef TERMINFO
+ fatal ("Terminal type %s is not defined.\n\
+If that is not the actual type of terminal you have,\n\
+use the Bourne shell command `TERM=... export TERM' (C-shell:\n\
+`setenv TERM ...') to specify the correct type. It may be necessary\n\
+to do `unset TERMINFO' (C-shell: `unsetenv TERMINFO') as well.\n",
+ terminal_type);
+#else
+ fatal ("Terminal type %s is not defined.\n\
If that is not the actual type of terminal you have,\n\
use the Bourne shell command `TERM=... export TERM' (C-shell:\n\
`setenv TERM ...') to specify the correct type. It may be necessary\n\
to do `unset TERMCAP' (C-shell: `unsetenv TERMCAP') as well.\n",
- terminal_type);
-
+ terminal_type);
+#endif
+ }
#ifdef TERMINFO
area = (char *) malloc (2044);
#else
MultiLeft = tgetstr ("LE", address);
MultiRight = tgetstr ("RI", address);
- AutoWrap = tgetflag ("am");
+ MagicWrap = tgetflag ("xn");
+ /* Since we make MagicWrap terminals look like AutoWrap, we need to have
+ the former flag imply the latter. */
+ AutoWrap = MagicWrap || tgetflag ("am");
memory_below_frame = tgetflag ("db");
TF_hazeltine = tgetflag ("hz");
must_write_spaces = tgetflag ("in");
TF_insmode_motion = tgetflag ("mi");
TF_standout_motion = tgetflag ("ms");
TF_underscore = tgetflag ("ul");
- MagicWrap = tgetflag ("xn");
TF_xs = tgetflag ("xs");
TF_teleray = tgetflag ("xt");
if (FRAME_HEIGHT (selected_frame) <= 0)
FRAME_HEIGHT (selected_frame) = tgetnum ("li");
+ if (FRAME_HEIGHT (selected_frame) < 3
+ || FRAME_WIDTH (selected_frame) < 3)
+ fatal ("Screen size %dx%d is too small.\n",
+ FRAME_HEIGHT (selected_frame), FRAME_WIDTH (selected_frame));
+
min_padding_speed = tgetnum ("pb");
TN_standout_width = tgetnum ("sg");
TabWidth = tgetnum ("tw");