void
ring_bell ()
{
- struct frame *f = (updating_frame
- ? updating_frame
- : XFRAME (selected_frame));
+ struct frame *f = XFRAME (selected_frame);
if (!NILP (Vring_bell_function))
{
(*FRAME_DISPLAY (f)->ring_bell_hook) ();
}
+/* Ring the bell on a tty. */
+
void
tty_ring_bell ()
{
- struct frame *f = (updating_frame
- ? updating_frame
- : XFRAME (selected_frame));
-
+ struct frame *f = XFRAME (selected_frame);
struct tty_display_info *tty = FRAME_TTY (f);
OUTPUT (tty, (tty->TS_visible_bell && visible_bell
: tty->TS_bell));
}
-void tty_set_terminal_modes (struct display *display)
+/* Set up termcap modes for Emacs. */
+
+void
+tty_set_terminal_modes (struct display *display)
{
struct tty_display_info *tty = display->display_info.tty;
losecursor (tty);
}
-void tty_reset_terminal_modes (struct display *display)
+/* Reset termcap modes before exiting Emacs. */
+
+void
+tty_reset_terminal_modes (struct display *display)
{
struct tty_display_info *tty = display->display_info.tty;
updating_frame = NULL;
}
+/* Flag the end of a display update on a termcap display. */
+
void
tty_update_end (struct frame *f)
{
background_highlight (tty);
}
+/* Specify how many text lines, from the top of the window,
+ should be affected by insert-lines and delete-lines operations.
+ This, and those operations, are used only within an update
+ that is bounded by calls to update_begin and update_end. */
+
void
set_terminal_window (size)
int size;
(*FRAME_DISPLAY (f)->set_terminal_window_hook) (size);
}
+/* The implementation of set_terminal_window for termcap frames. */
+
void
tty_set_terminal_window (int size)
{
\f
/* Erase operations */
-/* clear from cursor to end of frame */
+/* Clear from cursor to end of frame. */
void
clear_to_end ()
{
(*FRAME_DISPLAY (f)->clear_to_end_hook) ();
}
+/* Clear from cursor to end of frame on a termcap device. */
+
void
tty_clear_to_end (void)
{
(*FRAME_DISPLAY (f)->clear_frame_hook) ();
}
+/* Clear an entire termcap frame. */
+
void
tty_clear_frame ()
{
(*FRAME_DISPLAY (f)->clear_end_of_line_hook) (first_unused_hpos);
}
+/* An implementation of clear_end_of_line for termcap frames.
+
+ Note that the cursor may be moved, on terminals lacking a `ce' string. */
+
void
tty_clear_end_of_line (int first_unused_hpos)
{
}
+/* Output LEN glyphs starting at STRING at the nominal cursor position.
+ Advance the nominal cursor over the text. */
+
void
write_glyphs (string, len)
register struct glyph *string;
(*FRAME_DISPLAY (f)->write_glyphs_hook) (string, len);
}
+/* An implementation of write_glyphs for termcap frames. */
+
void
tty_write_glyphs (struct glyph *string, int len)
{
cmcheckmagic (tty);
}
-/* If start is zero, insert blanks instead of a string at start */
+/* Insert LEN glyphs from START at the nominal cursor position.
+
+ If start is zero, insert blanks instead of a string at start */
void
insert_glyphs (start, len)
(*FRAME_DISPLAY (f)->insert_glyphs_hook) (start, len);
}
+/* An implementation of insert_glyphs for termcap frames. */
+
void
tty_insert_glyphs (struct glyph *start, int len)
{
cmcheckmagic (tty);
}
+/* Delete N glyphs at the nominal cursor position. */
+
void
delete_glyphs (n)
register int n;
(*FRAME_DISPLAY (f)->delete_glyphs_hook) (n);
}
+/* An implementation of delete_glyphs for termcap frames. */
+
void
tty_delete_glyphs (int n)
{
(*FRAME_DISPLAY (f)->ins_del_lines_hook) (vpos, n);
}
+/* An implementation of ins_del_lines for termcap frames. */
+
void
tty_ins_del_lines (int vpos, int n)
{
\f
+/* Return the termcap display with the given name. If NAME is null,
+ return the display corresponding to our controlling terminal.
+
+ Returns NULL if the named terminal device is not opened. */
+
struct display *
get_named_tty_display (name)
char *name;
***********************************************************************/
/* Create the bootstrap display device for the initial frame.
+ Returns a display of type output_initial. */
-Returns a display of type output_initial. */
struct display *
init_initial_display (void)
{
/* Deletes the bootstrap display device.
Called through delete_display_hook. */
+
void
delete_initial_display (struct display *display)
{
TERMINAL_TYPE is the termcap type of the device, e.g. "vt100".
If MUST_SUCCEED is true, then all errors are fatal. */
+
struct display *
term_init (char *name, char *terminal_type, int must_succeed)
{
display->redeem_scroll_bar_hook = 0; /* Not needed. */
display->judge_scroll_bars_hook = 0; /* Not needed. */
- display->read_socket_hook = 0; /* Not needed. */
+ display->read_socket_hook = &tty_read_avail_input; /* keyboard.c */
display->frame_up_to_date_hook = 0; /* Not needed. */
display->delete_frame_hook = &delete_tty_output;
init_baud_rate (fileno (TTY_INPUT (tty)));
- /* XXX This condition sounds bogus. */
- if (display->read_socket_hook) /* Baudrate is somewhat
- meaningless in this case */
- baud_rate = 9600;
-
#ifdef AIXHFT
/* The HFT system on AIX doesn't optimize for scrolling, so it's
really ugly at times. */
/* Auxiliary error-handling function for term_init.
Free BUFFER and delete DISPLAY, then call error or fatal
- with str1 or str2, respectively, according to MUST_SUCCEED.
-*/
+ with str1 or str2, respectively, according to MUST_SUCCEED. */
+
static void
maybe_fatal (must_succeed, buffer, display, str1, str2, arg1, arg2)
int must_succeed;
static int deleting_tty = 0;
+
+/* Delete the given terminal device, closing all frames on it. */
+
void
delete_tty (struct display *display)
{
if (FRAME_TERMCAP_P (f) && FRAME_LIVE_P (f) && FRAME_TTY (f) == tty)
{
Fdelete_frame (frame, Qt);
- f->output_data.tty = 0;
}
}
/* Initialize the tty-dependent part of frame F. The frame must
already have its display initialized. */
+
void
create_tty_output (struct frame *f)
{
+ struct tty_output *t;
+
if (! FRAME_TERMCAP_P (f))
abort ();
- struct tty_output *t = xmalloc (sizeof (struct tty_output));
+ t = xmalloc (sizeof (struct tty_output));
bzero (t, sizeof (struct tty_output));
t->display_info = FRAME_DISPLAY (f)->display_info.tty;
}
/* Delete the tty-dependent part of frame F. */
+
void
delete_tty_output (struct frame *f)
{
/* Mark the pointers in the tty_display_info objects.
Called by the Fgarbage_collector. */
+
void
mark_ttys ()
{
\f
/* Create a new display object and add it to the display list. */
+
struct display *
create_display (void)
{
}
/* Remove a display from the display list and free its memory. */
+
void
delete_display (struct display *dev)
{
struct display **dp;
+ Lisp_Object tail, frame;
+
+ /* Check for and close live frames that are still on this
+ display. */
+ FOR_EACH_FRAME (tail, frame)
+ {
+ struct frame *f = XFRAME (frame);
+ if (FRAME_LIVE_P (f) && f->display == dev)
+ {
+ Fdelete_frame (frame, Qt);
+ }
+ }
+
for (dp = &display_list; *dp != dev; dp = &(*dp)->next_display)
if (! *dp)
abort ();