invoking them correctly. */
/* # include <curses.h> */
/* # include <term.h> */
-#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));
-#ifdef __cplusplus
-}
-#endif
+EXTERN_C int tgetent (const char *, const char *);
+EXTERN_C int tgetflag (const char *);
+EXTERN_C int tgetnum (const char *);
+EXTERN_C char *tgetstr (const char *, char **);
+EXTERN_C void tputs (const char *, int, void (*)(int));
+
#define FORCE_CURSOR_UPDATE(c) send_string_to_tty_console (c, 0, 0)
#define OUTPUTN(c, a, n) \
do { \
} while (0)
#define OUTPUT1_IF(c, a) OUTPUTN_IF (c, a, 1)
-static void tty_output_emchar_dynarr (struct window *w,
- struct display_line *dl,
- Emchar_dynarr *buf, int xpos,
- face_index findex,
- int cursor);
+static void tty_output_charc_dynarr (struct window *w,
+ struct display_line *dl,
+ Charc_dynarr *buf, int xpos,
+ face_index findex,
+ int cursor);
static void tty_output_bufbyte_string (struct window *w,
struct display_line *dl,
Bufbyte *str, Bytecount len,
Non-Mule tty's don't have fonts (that we use at least), so everything
is considered to be fixed width -- in other words, we return LEN.
Under Mule, however, a character can still cover more than one
- column, so we use emchar_string_displayed_columns().
+ column, so we use charc_string_displayed_columns().
****************************************************************************/
static int
-tty_text_width (struct frame *f, struct face_cachel *cachel, const Emchar *str,
- Charcount len)
+tty_text_width (struct frame *f, struct face_cachel *cachel,
+ const Charc *str, Charcount len)
{
- return emchar_string_displayed_columns (str, len);
+ return charc_string_displayed_columns (str, len);
}
/*****************************************************************************
}
/*****************************************************************************
- tty_output_begin
+ tty_frame_output_begin
Perform any necessary initialization prior to an update.
****************************************************************************/
#ifdef DEBUG_XEMACS
-void tty_output_begin (struct device *d);
+void tty_frame_output_begin (struct frame *f);
void
#else
static void
#endif
-tty_output_begin (struct device *d)
+tty_frame_output_begin (struct frame *f)
{
#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 (d)->ospeed;
+ ospeed = DEVICE_TTY_DATA (XDEVICE (FRAME_DEVICE (f)))->ospeed;
#endif
}
/*****************************************************************************
- tty_output_end
+ tty_frame_output_end
Perform any necessary flushing of queues when an update has completed.
****************************************************************************/
#ifdef DEBUG_XEMACS
-void tty_output_end (struct device *d);
+void tty_frame_output_end (struct frame *f);
void
#else
static void
#endif
-tty_output_end (struct device *d)
+tty_frame_output_end (struct frame *f)
{
- struct console *c = XCONSOLE (DEVICE_CONSOLE (d));
+ struct console *c = XCONSOLE (FRAME_CONSOLE (f));
CONSOLE_TTY_CURSOR_X (c) = CONSOLE_TTY_FINAL_CURSOR_X (c);
CONSOLE_TTY_CURSOR_Y (c) = CONSOLE_TTY_FINAL_CURSOR_Y (c);
int cursor_height)
{
struct frame *f = XFRAME (w->frame);
- Emchar_dynarr *buf = Dynarr_new (Emchar);
+ Charc_dynarr *buf = Dynarr_new (Charc);
struct display_block *db = Dynarr_atp (dl->display_blocks, block);
rune_dynarr *rba = db->runes;
rb = Dynarr_atp (rba, elt);
if (rb->findex == findex && rb->type == RUNE_CHAR
- && rb->object.chr.ch != '\n'
+ && (!CHARC_ASCII_EQ (rb->object.cglyph, '\n'))
&& (rb->cursor_type != CURSOR_ON
|| NILP (w->text_cursor_visible_p)))
{
- Dynarr_add (buf, rb->object.chr.ch);
+ Dynarr_add (buf, rb->object.cglyph);
elt++;
}
else
{
if (Dynarr_length (buf))
{
- tty_output_emchar_dynarr (w, dl, buf, xpos, findex, 0);
+ tty_output_charc_dynarr (w, dl, buf, xpos, findex, 0);
xpos = rb->xpos;
}
Dynarr_reset (buf);
findex = rb->findex;
xpos = rb->xpos;
- if (rb->object.chr.ch == '\n')
+ if (CHARC_ASCII_EQ (rb->object.cglyph, '\n'))
{
/* Clear in case a cursor was formerly here. */
-
- Dynarr_add (buf, ' ');
- tty_output_emchar_dynarr (w, dl, buf, rb->xpos,
- DEFAULT_INDEX, 0);
+ Dynarr_add (buf, ASCII_TO_CHARC (' '));
+ tty_output_charc_dynarr (w, dl, buf, rb->xpos,
+ DEFAULT_INDEX, 0);
Dynarr_reset (buf);
cmgoto (f, dl->ypos - 1, rb->xpos);
{
/* There is not a distinct eol cursor on tty's. */
- Dynarr_add (buf, rb->object.chr.ch);
- tty_output_emchar_dynarr (w, dl, buf, xpos, findex, 0);
+ Dynarr_add (buf, rb->object.cglyph);
+ tty_output_charc_dynarr (w, dl, buf, xpos, findex, 0);
Dynarr_reset (buf);
cmgoto (f, dl->ypos - 1, xpos);
modeline and this will suffice for that. */
else if (rb->type == RUNE_BLANK || rb->type == RUNE_HLINE)
{
- Emchar ch_to_add;
+ Charc ec_to_add;
int size = rb->width;
if (rb->type == RUNE_BLANK)
- ch_to_add = ' ';
+ ec_to_add = ASCII_TO_CHARC (' ');
else
- ch_to_add = '-';
+ ec_to_add = ASCII_TO_CHARC ('-');
while (size--)
- Dynarr_add (buf, ch_to_add);
- tty_output_emchar_dynarr (w, dl, buf, rb->xpos, findex, 0);
+ Dynarr_add (buf, ec_to_add);
+ tty_output_charc_dynarr (w, dl, buf, rb->xpos, findex, 0);
if (xpos >= cursor_start
&& cursor_start < xpos + Dynarr_length (buf))
{
switch (XIMAGE_INSTANCE_TYPE (instance))
{
- case IMAGE_TEXT:
- {
- 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);
- }
- }
- break;
-
case IMAGE_MONO_PIXMAP:
case IMAGE_COLOR_PIXMAP:
case IMAGE_SUBWINDOW:
case IMAGE_WIDGET:
- case IMAGE_LAYOUT:
/* just do nothing here */
break;
-
- case IMAGE_POINTER:
- abort ();
-
+
case IMAGE_NOTHING:
/* nothing is as nothing does */
break;
-
+
+ case IMAGE_TEXT:
+ case IMAGE_POINTER:
default:
abort ();
}
- IMAGE_INSTANCE_OPTIMIZE_OUTPUT
+ IMAGE_INSTANCE_OPTIMIZE_OUTPUT
(XIMAGE_INSTANCE (instance)) = 0;
}
}
if (Dynarr_length (buf))
- tty_output_emchar_dynarr (w, dl, buf, xpos, findex, 0);
+ tty_output_charc_dynarr (w, dl, buf, xpos, findex, 0);
Dynarr_free (buf);
}
tty_turn_off_face (w, findex);
}
-static Bufbyte_dynarr *tty_output_emchar_dynarr_dynarr;
+static Bufbyte_dynarr *tty_output_charc_dynarr_dynarr;
/*****************************************************************************
- tty_output_emchar_dynarr
+ tty_output_charc_dynarr
Given a string and a starting position, output that string in the
given face. If cursor is true, draw a cursor around the string.
****************************************************************************/
static void
-tty_output_emchar_dynarr (struct window *w, struct display_line *dl,
- Emchar_dynarr *buf, int xpos, face_index findex,
- int cursor)
+tty_output_charc_dynarr (struct window *w, struct display_line *dl,
+ Charc_dynarr *buf, int xpos, face_index findex,
+ int cursor)
{
- if (!tty_output_emchar_dynarr_dynarr)
- tty_output_emchar_dynarr_dynarr = Dynarr_new (Bufbyte);
+ if (!tty_output_charc_dynarr_dynarr)
+ tty_output_charc_dynarr_dynarr = Dynarr_new (Bufbyte);
else
- Dynarr_reset (tty_output_emchar_dynarr_dynarr);
+ Dynarr_reset (tty_output_charc_dynarr_dynarr);
- convert_emchar_string_into_bufbyte_dynarr (Dynarr_atp (buf, 0),
+ convert_charc_string_into_bufbyte_dynarr (Dynarr_atp (buf, 0),
Dynarr_length (buf),
- tty_output_emchar_dynarr_dynarr);
+ tty_output_charc_dynarr_dynarr);
tty_output_bufbyte_string (w, dl,
- Dynarr_atp (tty_output_emchar_dynarr_dynarr, 0),
- Dynarr_length (tty_output_emchar_dynarr_dynarr),
+ Dynarr_atp (tty_output_charc_dynarr_dynarr, 0),
+ Dynarr_length (tty_output_charc_dynarr_dynarr),
xpos, findex, cursor);
}
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_output_end (XDEVICE (CONSOLE_SELECTED_DEVICE (c)));
+
+ {
+ Lisp_Object frm = CONSOLE_SELECTED_FRAME (c);
+
+ if (!NILP (frm))
+ tty_frame_output_end (XFRAME (frm));
+ }
}
/*****************************************************************************
/* And then stick the cursor there. */
tty_set_final_cursor_coords (f, f->height, 0);
- tty_output_end (XDEVICE (dev));
+ tty_frame_output_end (f);
}
}
}
up or removed. */
+#ifdef NOT_YET
/* 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 */
static int alternate_mode_on; /* nonzero if in alternate char set */
static int attributes_on; /* nonzero if any attributes on */
-#ifdef NOT_YET
static void
turn_on_insert (struct frame *f)
{
CONSOLE_TTY_DATA (c)->term_entry_buffer = (char *) xmalloc (2044);
bufptr = CONSOLE_TTY_DATA (c)->term_entry_buffer;
-#if !defined(WIN32)
+#ifdef SIGTTOU
/* SIGTT* don't exist under win32 */
EMACS_BLOCK_SIGNAL (SIGTTOU);
#endif
status = tgetent (entry_buffer, terminal_type);
-#if !defined(WIN32)
+#ifdef SIGTTOU
EMACS_UNBLOCK_SIGNAL (SIGTTOU);
#endif
#if 0
*/
cm_cost_init (c);
+#ifdef NOT_YET
/*
* Initialize local flags.
*/
underline_mode_on = 0;
alternate_mode_on = 0;
attributes_on = 0;
+#endif
/*
* Attempt to initialize the function_key_map to
CONSOLE_HAS_METHOD (tty, clear_to_window_end);
CONSOLE_HAS_METHOD (tty, clear_region);
CONSOLE_HAS_METHOD (tty, clear_frame);
- CONSOLE_HAS_METHOD (tty, output_begin);
- CONSOLE_HAS_METHOD (tty, output_end);
+ CONSOLE_HAS_METHOD (tty, frame_output_begin);
+ CONSOLE_HAS_METHOD (tty, frame_output_end);
CONSOLE_HAS_METHOD (tty, flash);
CONSOLE_HAS_METHOD (tty, ring_bell);
CONSOLE_HAS_METHOD (tty, set_final_cursor_coords);