Mercurial > hg > xemacs-beta
diff src/console-tty.h @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children | 0293115a14e9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/console-tty.h Mon Aug 13 08:45:50 2007 +0200 @@ -0,0 +1,289 @@ +/* Define TTY specific console, device, and frame object for XEmacs. + Copyright (C) 1995 Board of Trustees, University of Illinois. + Copyright (C) 1996 Ben Wing. + +This file is part of XEmacs. + +XEmacs is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +XEmacs is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Synched up with: Not in FSF. */ + +/* Written by Chuck Thompson and Ben Wing. */ + +/* NOTE: Currently each TTY console can have only one device. + Therefore, all stuff for both input and output is lumped into + the console structure. If it ever becomes meaningful to + have more than one device on a TTY console, the output stuff + will have to get separated out. */ + +#ifndef _XEMACS_CONSOLE_TTY_H_ +#define _XEMACS_CONSOLE_TTY_H_ + +#include "console.h" +#include "syssignal.h" /* Always include before systty.h */ +#include "systty.h" + +DECLARE_CONSOLE_TYPE (tty); + +struct tty_console +{ + int infd, outfd; + Lisp_Object instream, outstream; + Lisp_Object terminal_type; + char *term_entry_buffer; + + /* Physical location of cursor on this console. */ + int cursor_x; + int cursor_y; + + /* The real location of the cursor. The above physical location may + be ahead of where we really are. */ + int real_cursor_x; + int real_cursor_y; + + int height; + int width; + + /* flags indicating presence, absence or value of various features */ + struct + { + unsigned int must_write_spaces :1;/* terminal inserts nulls, not + spaces to fill whitespace + on screen */ + unsigned int insert_mode_motion :1;/* cursor movement commands + work while in insert mode */ + unsigned int standout_motion :1; /* cursor movement is graceful + in standout or underline mode */ + unsigned int memory_above_frame :1;/* display retained above screen */ + unsigned int memory_below_frame :1;/* display retained below screen */ + unsigned int meta_key :2; /* 0 == mask off top bit; + 1 == top bit is meta; + 2 == top bit is useful as + character info */ + unsigned int flow_control :1; /* Nonzero means use ^S/^Q as + cretinous flow control. */ + int standout_width; /* # of spaces printed when + change to standout mode */ + int underline_width; /* # of spaces printed when + change to underline mode */ + } flags; + + /* cursor motion entries - each entry is commented with the terminfo + and the termcap entry */ + struct + { + /* local cursor movement */ + CONST char *up; /* cuu1, up */ + CONST char *down; /* cud1, do */ + CONST char *left; /* cub1, le */ + CONST char *right; /* cuf1, nd */ + CONST char *home; /* home, ho */ + CONST char *low_left; /* ll, ll */ + CONST char *car_return; /* cr, cr */ + + /* parameterized local cursor movement */ + CONST char *multi_up; /* cuu, UP */ + CONST char *multi_down; /* cud, DO */ + CONST char *multi_left; /* cub, LE */ + CONST char *multi_right; /* cuf, RI */ + + /* absolute cursor motion */ + CONST char *abs; /* cup, cm */ + CONST char *hor_abs; /* hpa, ch */ + CONST char *ver_abs; /* vpa, cv */ + + /* scrolling */ + CONST char *scroll_forw; /* ind, sf */ + CONST char *scroll_back; /* ri, sr */ + CONST char *multi_scroll_forw; /* indn, SF */ + CONST char *multi_scroll_back; /* rin, SR */ + CONST char *set_scroll_region; /* csr, cs */ + } cm; + + /* screen editing entries - each entry is commented with the + terminfo and the termcap entry */ + struct + { + /* adding to the screen */ + CONST char *ins_line; /* il1, al */ + CONST char *multi_ins_line; /* il, AL */ + CONST char *repeat; /* rep, rp */ + CONST char *begin_ins_mode; /* smir, im */ + CONST char *end_ins_mode; /* rmir, ei */ + CONST char *ins_char; /* ich1, ic */ + CONST char *multi_ins_char; /* ich, IC */ + CONST char *insert_pad; /* ip, ip */ + + /* deleting from the screen */ + CONST char *clr_frame; /* clear, cl */ + CONST char *clr_from_cursor; /* ed, cd */ + CONST char *clr_to_eol; /* el, ce */ + CONST char *del_line; /* dl1, dl */ + CONST char *multi_del_line; /* dl, DL */ + CONST char *del_char; /* dch1, dc */ + CONST char *multi_del_char; /* dch, DC */ + CONST char *begin_del_mode; /* smdc, dm */ + CONST char *end_del_mode; /* rmdc, ed */ + CONST char *erase_at_cursor; /* ech, ec */ + } se; + + /* screen display entries - each entry is commented with the + terminfo and termcap entry */ + struct + { + CONST char *begin_standout; /* smso, so */ + CONST char *end_standout; /* rmso, se */ + CONST char *begin_underline; /* smul, us */ + CONST char *end_underline; /* rmul, ue */ + CONST char *begin_alternate; /* smacs, as */ + CONST char *end_alternate; /* rmacs, ae */ + + CONST char *turn_on_reverse; /* rev, mr */ + CONST char *turn_on_blinking; /* blink, mb */ + CONST char *turn_on_bold; /* bold, md */ + CONST char *turn_on_dim; /* dim, mh */ + CONST char *turn_off_attributes; /* sgr0, me */ + + CONST char *visual_bell; /* flash, vb */ + CONST char *audio_bell; /* bel, bl */ + + CONST char *cursor_visible; /* cvvis, vs */ + CONST char *cursor_normal; /* cnorm, ve */ + CONST char *init_motion; /* smcup, ti */ + CONST char *end_motion; /* rmcup, te */ + CONST char *keypad_on; /* smkx, ks */ + CONST char *keypad_off; /* rmkx, ke */ + } sd; + + /* costs of various operations */ + struct + { + int cm_up; + int cm_down; + int cm_left; + int cm_right; + int cm_home; + int cm_low_left; + int cm_car_return; + int cm_abs; + int cm_hor_abs; + int cm_ver_abs; + } cost; + + /* The initial tty mode bits */ + struct emacs_tty old_tty; + + /* Is this TTY our controlling terminal? */ + int controlling_terminal :1; + int is_stdio :1; +}; + +#define CONSOLE_TTY_DATA(c) CONSOLE_TYPE_DATA (c, tty) +#define CONSOLE_TTY_CURSOR_X(c) (CONSOLE_TTY_DATA (c)->cursor_x) +#define CONSOLE_TTY_CURSOR_Y(c) (CONSOLE_TTY_DATA (c)->cursor_y) +#define CONSOLE_TTY_REAL_CURSOR_X(c) (CONSOLE_TTY_DATA (c)->real_cursor_x) +#define CONSOLE_TTY_REAL_CURSOR_Y(c) (CONSOLE_TTY_DATA (c)->real_cursor_y) + +#define TTY_CM(c) (CONSOLE_TTY_DATA (c)->cm) +#define TTY_SE(c) (CONSOLE_TTY_DATA (c)->se) +#define TTY_SD(c) (CONSOLE_TTY_DATA (c)->sd) +#define TTY_FLAGS(c) (CONSOLE_TTY_DATA (c)->flags) +#define TTY_COST(c) (CONSOLE_TTY_DATA (c)->cost) + +#define TTY_INC_CURSOR_X(c, n) \ +do \ +{ \ + int __tempn__ = (n); \ + assert (CONSOLE_TTY_CURSOR_X (c) == CONSOLE_TTY_REAL_CURSOR_X (c)); \ + CONSOLE_TTY_CURSOR_X (c) += __tempn__; \ + CONSOLE_TTY_REAL_CURSOR_X (c) += __tempn__; \ +} while (0) + +#define TTY_INC_CURSOR_Y(c, n) \ +do \ +{ \ + int __tempn__ = (n); \ + CONSOLE_TTY_CURSOR_Y (c) += __tempn__; \ + CONSOLE_TTY_REAL_CURSOR_Y (c) += __tempn__; \ +} while (0) + +struct tty_device +{ +#ifdef HAVE_TERMIOS + speed_t ospeed; /* Output speed (from sg_ospeed) */ +#else + short ospeed; /* Output speed (from sg_ospeed) */ +#endif +}; + +#define DEVICE_TTY_DATA(d) DEVICE_TYPE_DATA (d, tty) + +/* termcap requires this to be global */ +#ifndef HAVE_TERMIOS +extern short ospeed; /* Output speed (from sg_ospeed) */ +#endif + +extern FILE *termscript; + + +/****************** Prototypes from cm.c *******************/ + +/* #### Verify that all of these are still needed. */ + +extern void cm_cost_init (struct console *c); +extern void cmputc (int c); +extern void cmgoto (struct frame *f, int row, int col); +extern struct console *cmputc_console; +void send_string_to_tty_console (struct console *c, unsigned char *str, + int len); + + +/*************** Prototypes from event-tty.c ****************/ + +extern void init_event_tty_late (void); + + + +/*************** Prototypes from redisplay-tty.c ****************/ + +enum term_init_status +{ + TTY_UNABLE_OPEN_DATABASE, + TTY_TYPE_UNDEFINED, + TTY_TYPE_INSUFFICIENT, + TTY_SIZE_UNSPECIFIED, + TTY_INIT_SUCCESS +}; + +extern int init_tty_for_redisplay (struct device *d, char *terminal_type); +/* #### These should probably be methods. */ +void set_tty_modes (struct console *c); +void reset_tty_modes (struct console *c); + +/* Used in sysdep.c to properly clear and position the cursor when exiting. */ +extern void tty_redisplay_shutdown (struct console *c); + +/* called from console-stream.c */ +Lisp_Object tty_semi_canonicalize_console_connection (Lisp_Object connection, + Error_behavior errb); +Lisp_Object tty_canonicalize_console_connection (Lisp_Object connection, + Error_behavior errb); +Lisp_Object tty_semi_canonicalize_device_connection (Lisp_Object connection, + Error_behavior errb); +Lisp_Object tty_canonicalize_device_connection (Lisp_Object connection, + Error_behavior errb); + +#endif /* _XEMACS_CONSOLE_TTY_H_ */