#ifdef __cplusplus
extern "C" {
#endif
-extern int tgetent (const char *, const char *);
-extern int tgetflag (const char *);
-extern int tgetnum (const char *);
-extern char *tgetstr (const char *, char **);
-extern void tputs (const char *, int, void (*)(int));
+extern int tgetent (CONST char *, CONST char *);
+extern int tgetflag (CONST char *);
+extern int tgetnum (CONST char *);
+extern char *tgetstr (CONST char *, char **);
+extern void tputs (CONST char *, int, void (*)(int));
#ifdef __cplusplus
}
#endif
column, so we use emchar_string_displayed_columns().
****************************************************************************/
static int
-tty_text_width (struct frame *f, struct face_cachel *cachel, const Emchar *str,
+tty_text_width (struct frame *f, struct face_cachel *cachel, CONST Emchar *str,
Charcount len)
{
return emchar_string_displayed_columns (str, len);
}
/*****************************************************************************
- tty_frame_output_begin
+ tty_output_begin
Perform any necessary initialization prior to an update.
****************************************************************************/
#ifdef DEBUG_XEMACS
-void tty_frame_output_begin (struct frame *f);
+void tty_output_begin (struct device *d);
void
#else
static void
#endif
-tty_frame_output_begin (struct frame *f)
+tty_output_begin (struct device *d)
{
#ifndef HAVE_TERMIOS
/* Termcap requires `ospeed' to be a global variable so we have to
always set it for whatever tty console we are actually currently
working with. */
- ospeed = DEVICE_TTY_DATA (XDEVICE (FRAME_DEVICE (f)))->ospeed;
+ ospeed = DEVICE_TTY_DATA (d)->ospeed;
#endif
}
/*****************************************************************************
- tty_frame_output_end
+ tty_output_end
Perform any necessary flushing of queues when an update has completed.
****************************************************************************/
#ifdef DEBUG_XEMACS
-void tty_frame_output_end (struct frame *f);
+void tty_output_end (struct device *d);
void
#else
static void
#endif
-tty_frame_output_end (struct frame *f)
+tty_output_end (struct device *d)
{
- struct device *d = XDEVICE (FRAME_DEVICE (f));
struct console *c = XCONSOLE (DEVICE_CONSOLE (d));
CONSOLE_TTY_CURSOR_X (c) = CONSOLE_TTY_FINAL_CURSOR_X (c);
elt++;
}
}
- /* #### RUNE_HLINE is actually a little more complicated than this
+ /* #### RUNE_HLINE is actualy a little more complicated than this
but at the moment it is only used to draw a turned off
modeline and this will suffice for that. */
else if (rb->type == RUNE_BLANK || rb->type == RUNE_HLINE)
window, ERROR_ME_NOT, 1);
if (IMAGE_INSTANCEP (instance))
- {
- switch (XIMAGE_INSTANCE_TYPE (instance))
+ switch (XIMAGE_INSTANCE_TYPE (instance))
+ {
+ case IMAGE_TEXT:
{
- case IMAGE_MONO_PIXMAP:
- case IMAGE_COLOR_PIXMAP:
- case IMAGE_SUBWINDOW:
- case IMAGE_WIDGET:
- /* just do nothing here */
- break;
-
- case IMAGE_NOTHING:
- /* nothing is as nothing does */
- break;
-
- case IMAGE_TEXT:
- case IMAGE_POINTER:
- default:
- abort ();
+ Bufbyte *temptemp;
+ Lisp_Object string =
+ XIMAGE_INSTANCE_TEXT_STRING (instance);
+ Bytecount len = XSTRING_LENGTH (string);
+
+ /* In the unlikely instance that a garbage-collect
+ occurs during encoding, we at least need to
+ copy the string.
+ */
+ temptemp = (Bufbyte *) alloca (len);
+ memcpy (temptemp, XSTRING_DATA (string), len);
+ {
+ int i;
+
+ /* Now truncate the first rb->object.dglyph.xoffset
+ columns. */
+ for (i = 0; i < rb->object.dglyph.xoffset;)
+ {
+#ifdef MULE
+ Emchar ch = charptr_emchar (temptemp);
+ i += XCHARSET_COLUMNS (CHAR_CHARSET (ch));
+#else
+ i++; /* telescope this */
+#endif
+ INC_CHARPTR (temptemp);
+ }
+
+ /* If we truncated one column too many, then
+ add a space at the beginning. */
+ if (i > rb->object.dglyph.xoffset)
+ {
+ assert (i > 0);
+ *--temptemp = ' ';
+ i--;
+ }
+ len -= i;
+ }
+
+ tty_output_bufbyte_string (w, dl, temptemp, len,
+ xpos, findex, 0);
+
+ if (xpos >= cursor_start
+ && (cursor_start <
+ xpos + (bufbyte_string_displayed_columns
+ (temptemp, len))))
+ {
+ cmgoto (f, dl->ypos - 1, cursor_start);
+ }
}
- IMAGE_INSTANCE_OPTIMIZE_OUTPUT
- (XIMAGE_INSTANCE (instance)) = 0;
- }
+ break;
+
+ case IMAGE_MONO_PIXMAP:
+ case IMAGE_COLOR_PIXMAP:
+ case IMAGE_SUBWINDOW:
+ /* just do nothing here */
+ break;
+
+ case IMAGE_POINTER:
+ abort ();
+
+ case IMAGE_NOTHING:
+ /* nothing is as nothing does */
+ break;
+
+ default:
+ abort ();
+ }
xpos += rb->width;
elt++;
Clear the area in the box defined by the given parameters.
****************************************************************************/
static void
-tty_clear_region (Lisp_Object window, struct device* d, struct frame * f,
- face_index findex, int x, int y,
- int width, int height, Lisp_Object fcolor, Lisp_Object bcolor,
- Lisp_Object background_pixmap)
+tty_clear_region (Lisp_Object window, face_index findex, int x, int y,
+ int width, int height)
{
+ struct window *w = XWINDOW (window);
+ struct frame *f = XFRAME (w->frame);
struct console *c = XCONSOLE (FRAME_CONSOLE (f));
int line;
- struct window* w = XWINDOW (window);
+
+ if (!width || !height)
+ return;
tty_turn_on_face (w, findex);
for (line = y; line < y + height; line++)
Lisp_Object window;
XSETWINDOW (window, w);
- redisplay_clear_region (window, DEFAULT_INDEX, x, ypos1, width, ypos2 - ypos1);
+ tty_clear_region (window, DEFAULT_INDEX, x, ypos1, width, ypos2 - ypos1);
}
}
clear_to_end (f);
#else
/* #### Not implemented. */
- stderr_out ("Not yet.\n");
+ fprintf (stderr, "Not yet.\n");
#endif
}
tty_turn_off_frame_face (f, Vdefault_face);
OUTPUT1_IF (c, TTY_SD (c).keypad_off);
OUTPUT1_IF (c, TTY_SD (c).cursor_normal);
OUTPUT1_IF (c, TTY_SD (c).end_motion);
- tty_frame_output_end (XFRAME (CONSOLE_SELECTED_FRAME (c)));
+ tty_output_end (XDEVICE (CONSOLE_SELECTED_DEVICE (c)));
}
/*****************************************************************************
{
Lisp_Object dev = CONSOLE_SELECTED_DEVICE (c);
- if (!NILP (dev))
+ if (!GC_NILP (dev))
{
Lisp_Object frm = DEVICE_SELECTED_FRAME (XDEVICE (dev));
- if (!NILP (frm))
+ if (!GC_NILP (frm))
{
struct frame *f = XFRAME (frm);
/* Clear the bottom line of the frame. */
- redisplay_clear_region (FRAME_SELECTED_WINDOW (f), DEFAULT_INDEX, 0,
+ tty_clear_region (FRAME_SELECTED_WINDOW (f), DEFAULT_INDEX, 0,
f->height, f->width, 1);
/* And then stick the cursor there. */
tty_set_final_cursor_coords (f, f->height, 0);
- tty_frame_output_end (f);
+ tty_output_end (XDEVICE (dev));
}
}
}
/* FLAGS - these don't need to be console local since only one console
- can be being updated at a time. */
+ can be being updated at a time. */
static int insert_mode_on; /* nonzero if in insert mode */
static int standout_mode_on; /* nonzero if in standout mode */
static int underline_mode_on; /* nonzero if in underline mode */
\f
struct fkey_table
{
- const char *cap;
- const char *name;
+ CONST char *cap, *name;
};
/* Termcap capability names that correspond directly to X keysyms.
char *sequence = tgetstr (keys[i].cap, address);
if (sequence)
Fdefine_key (function_key_map,
- build_ext_string (sequence, Qbinary),
+ build_ext_string (sequence, FORMAT_BINARY),
vector1 (intern (keys[i].name)));
}
describes F10, whereas othertimes it describes F0 and "k;" describes F10.
We will attempt to politely accommodate both systems by testing for
"k;", and if it is present, assuming that "k0" denotes F0, otherwise F10.
- */
+ */
{
- const char *k_semi = tgetstr ("k;", address);
- const char *k0 = tgetstr ("k0", address);
+ char *k_semi = tgetstr ("k;", address);
+ char *k0 = tgetstr ("k0", address);
+ CONST char *k0_name = "f10";
if (k_semi)
- Fdefine_key (function_key_map, build_ext_string (k_semi, Qbinary),
- vector1 (intern ("f10")));
+ {
+ Fdefine_key (function_key_map, build_ext_string (k_semi, FORMAT_BINARY),
+ vector1 (intern ("f10")));
+ k0_name = "f0";
+ }
if (k0)
- Fdefine_key (function_key_map, build_ext_string (k0, Qbinary),
- vector1 (intern (k_semi ? "f0" : "f10")));
+ Fdefine_key (function_key_map, build_ext_string (k0, FORMAT_BINARY),
+ vector1 (intern (k0_name)));
}
/* Set up cookies for numbered function keys above f10. */
{
sprintf (fkey, "f%d", i);
Fdefine_key (function_key_map,
- build_ext_string (sequence, Qbinary),
+ build_ext_string (sequence, FORMAT_BINARY),
vector1 (intern (fkey)));
}
}
}
- }
+ }
/*
* Various mappings to try and get a better fit.
*/
-#define CONDITIONAL_REASSIGN(cap1, cap2, keyname) do { \
- if (!tgetstr (cap1, address)) \
- { \
- char *sequence = tgetstr (cap2, address); \
- if (sequence) \
- Fdefine_key (function_key_map, \
- build_ext_string (sequence, Qbinary), \
- vector1 (intern (keyname))); \
- } \
- } while (0)
+ {
+#define CONDITIONAL_REASSIGN(cap1, cap2, sym) \
+ if (!tgetstr (cap1, address)) \
+ { \
+ char *sequence = tgetstr (cap2, address); \
+ if (sequence) \
+ Fdefine_key (function_key_map, \
+ build_ext_string (sequence, FORMAT_BINARY), \
+ vector1 (intern (sym))); \
+ }
- /* if there's no key_next keycap, map key_npage to `next' keysym */
- CONDITIONAL_REASSIGN ("%5", "kN", "next");
- /* if there's no key_prev keycap, map key_ppage to `previous' keysym */
- CONDITIONAL_REASSIGN ("%8", "kP", "prior");
- /* if there's no key_dc keycap, map key_ic to `insert' keysym */
- CONDITIONAL_REASSIGN ("kD", "kI", "insert");
-
- /* IBM has their own non-standard dialect of terminfo.
- If the standard name isn't found, try the IBM name. */
- CONDITIONAL_REASSIGN ("kB", "KO", "backtab");
- CONDITIONAL_REASSIGN ("@4", "kJ", "execute"); /* actually "action" */
- CONDITIONAL_REASSIGN ("@4", "kc", "execute"); /* actually "command" */
- CONDITIONAL_REASSIGN ("%7", "ki", "menu");
- CONDITIONAL_REASSIGN ("@7", "kw", "end");
- CONDITIONAL_REASSIGN ("F1", "k<", "f11");
- CONDITIONAL_REASSIGN ("F2", "k>", "f12");
- CONDITIONAL_REASSIGN ("%1", "kq", "help");
- CONDITIONAL_REASSIGN ("*6", "kU", "select");
+ /* if there's no key_next keycap, map key_npage to `next' keysym */
+ CONDITIONAL_REASSIGN ("%5", "kN", "next");
+ /* if there's no key_prev keycap, map key_ppage to `previous' keysym */
+ CONDITIONAL_REASSIGN ("%8", "kP", "prior");
+ /* if there's no key_dc keycap, map key_ic to `insert' keysym */
+ CONDITIONAL_REASSIGN ("kD", "kI", "insert");
+
+ /* IBM has their own non-standard dialect of terminfo.
+ If the standard name isn't found, try the IBM name. */
+ CONDITIONAL_REASSIGN ("kB", "KO", "backtab");
+ CONDITIONAL_REASSIGN ("@4", "kJ", "execute"); /* actually "action" */
+ CONDITIONAL_REASSIGN ("@4", "kc", "execute"); /* actually "command" */
+ CONDITIONAL_REASSIGN ("%7", "ki", "menu");
+ CONDITIONAL_REASSIGN ("@7", "kw", "end");
+ CONDITIONAL_REASSIGN ("F1", "k<", "f11");
+ CONDITIONAL_REASSIGN ("F2", "k>", "f12");
+ CONDITIONAL_REASSIGN ("%1", "kq", "help");
+ CONDITIONAL_REASSIGN ("*6", "kU", "select");
#undef CONDITIONAL_REASSIGN
+ }
return Qnil;
}
CONSOLE_HAS_METHOD (tty, clear_to_window_end);
CONSOLE_HAS_METHOD (tty, clear_region);
CONSOLE_HAS_METHOD (tty, clear_frame);
- CONSOLE_HAS_METHOD (tty, frame_output_begin);
- CONSOLE_HAS_METHOD (tty, frame_output_end);
+ CONSOLE_HAS_METHOD (tty, output_begin);
+ CONSOLE_HAS_METHOD (tty, output_end);
CONSOLE_HAS_METHOD (tty, flash);
CONSOLE_HAS_METHOD (tty, ring_bell);
CONSOLE_HAS_METHOD (tty, set_final_cursor_coords);