1 /* Define TTY specific console, device, and frame object for XEmacs.
2 Copyright (C) 1995 Board of Trustees, University of Illinois.
3 Copyright (C) 1996 Ben Wing.
5 This file is part of XEmacs.
7 XEmacs is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 2, or (at your option) any
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with XEmacs; see the file COPYING. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
22 /* Synched up with: Not in FSF. */
24 /* Written by Chuck Thompson and Ben Wing. */
26 /* NOTE: Currently each TTY console can have only one device.
27 Therefore, all stuff for both input and output is lumped into
28 the console structure. If it ever becomes meaningful to
29 have more than one device on a TTY console, the output stuff
30 will have to get separated out. */
32 #ifndef _XEMACS_CONSOLE_TTY_H_
33 #define _XEMACS_CONSOLE_TTY_H_
36 #include "syssignal.h" /* Always include before systty.h */
39 DECLARE_CONSOLE_TYPE (tty);
47 Lisp_Object instream, outstream;
48 Lisp_Object terminal_type;
49 Lisp_Object controlling_process;
50 char *term_entry_buffer;
52 /* Physical location of cursor on this console. */
56 /* The real location of the cursor. The above physical location may
57 be ahead of where we really are. */
67 /* The count of frame number. */
70 /* flags indicating presence, absence or value of various features */
73 unsigned int must_write_spaces :1; /* terminal inserts nulls, not
74 spaces to fill whitespace on
76 unsigned int insert_mode_motion :1; /* cursor movement commands
77 work while in insert mode */
78 unsigned int standout_motion :1; /* cursor movement is graceful
79 in standout or underline mode */
80 unsigned int memory_above_frame :1; /* display retained above screen */
81 unsigned int memory_below_frame :1; /* display retained below screen */
82 unsigned int meta_key :2; /* 0 == mask off top bit;
84 2 == top bit is useful as
86 unsigned int flow_control :1; /* Nonzero means use ^S/^Q as
87 cretinous flow control. */
88 int standout_width; /* # of spaces printed when
89 change to standout mode */
90 int underline_width; /* # of spaces printed when
91 change to underline mode */
94 /* cursor motion entries - each entry is commented with the terminfo
95 and the termcap entry */
98 /* local cursor movement */
99 CONST char *up; /* cuu1, up */
100 CONST char *down; /* cud1, do */
101 CONST char *left; /* cub1, le */
102 CONST char *right; /* cuf1, nd */
103 CONST char *home; /* home, ho */
104 CONST char *low_left; /* ll, ll */
105 CONST char *car_return; /* cr, cr */
107 /* parameterized local cursor movement */
108 CONST char *multi_up; /* cuu, UP */
109 CONST char *multi_down; /* cud, DO */
110 CONST char *multi_left; /* cub, LE */
111 CONST char *multi_right; /* cuf, RI */
113 /* absolute cursor motion */
114 CONST char *abs; /* cup, cm */
115 CONST char *hor_abs; /* hpa, ch */
116 CONST char *ver_abs; /* vpa, cv */
119 CONST char *scroll_forw; /* ind, sf */
120 CONST char *scroll_back; /* ri, sr */
121 CONST char *multi_scroll_forw; /* indn, SF */
122 CONST char *multi_scroll_back; /* rin, SR */
123 CONST char *set_scroll_region; /* csr, cs */
126 /* screen editing entries - each entry is commented with the
127 terminfo and the termcap entry */
130 /* adding to the screen */
131 CONST char *ins_line; /* il1, al */
132 CONST char *multi_ins_line; /* il, AL */
133 CONST char *repeat; /* rep, rp */
134 CONST char *begin_ins_mode; /* smir, im */
135 CONST char *end_ins_mode; /* rmir, ei */
136 CONST char *ins_char; /* ich1, ic */
137 CONST char *multi_ins_char; /* ich, IC */
138 CONST char *insert_pad; /* ip, ip */
140 /* deleting from the screen */
141 CONST char *clr_frame; /* clear, cl */
142 CONST char *clr_from_cursor; /* ed, cd */
143 CONST char *clr_to_eol; /* el, ce */
144 CONST char *del_line; /* dl1, dl */
145 CONST char *multi_del_line; /* dl, DL */
146 CONST char *del_char; /* dch1, dc */
147 CONST char *multi_del_char; /* dch, DC */
148 CONST char *begin_del_mode; /* smdc, dm */
149 CONST char *end_del_mode; /* rmdc, ed */
150 CONST char *erase_at_cursor; /* ech, ec */
153 /* screen display entries - each entry is commented with the
154 terminfo and termcap entry */
157 CONST char *begin_standout; /* smso, so */
158 CONST char *end_standout; /* rmso, se */
159 CONST char *begin_underline; /* smul, us */
160 CONST char *end_underline; /* rmul, ue */
161 CONST char *begin_alternate; /* smacs, as */
162 CONST char *end_alternate; /* rmacs, ae */
164 CONST char *turn_on_reverse; /* rev, mr */
165 CONST char *turn_on_blinking; /* blink, mb */
166 CONST char *turn_on_bold; /* bold, md */
167 CONST char *turn_on_dim; /* dim, mh */
168 CONST char *turn_off_attributes; /* sgr0, me */
170 CONST char *visual_bell; /* flash, vb */
171 CONST char *audio_bell; /* bel, bl */
173 CONST char *cursor_visible; /* cvvis, vs */
174 CONST char *cursor_normal; /* cnorm, ve */
175 CONST char *init_motion; /* smcup, ti */
176 CONST char *end_motion; /* rmcup, te */
177 CONST char *keypad_on; /* smkx, ks */
178 CONST char *keypad_off; /* rmkx, ke */
180 CONST char *orig_pair; /* op, op */
183 /* costs of various operations */
198 /* The initial tty mode bits */
199 struct emacs_tty old_tty;
201 /* Is this TTY our controlling terminal? */
202 unsigned int controlling_terminal :1;
203 unsigned int is_stdio :1;
207 #define CONSOLE_TTY_MOUSE_FD(c) (CONSOLE_TTY_DATA (c)->mouse_fd)
209 #define CONSOLE_TTY_DATA(c) CONSOLE_TYPE_DATA (c, tty)
210 #define CONSOLE_TTY_CURSOR_X(c) (CONSOLE_TTY_DATA (c)->cursor_x)
211 #define CONSOLE_TTY_CURSOR_Y(c) (CONSOLE_TTY_DATA (c)->cursor_y)
212 #define CONSOLE_TTY_REAL_CURSOR_X(c) (CONSOLE_TTY_DATA (c)->real_cursor_x)
213 #define CONSOLE_TTY_REAL_CURSOR_Y(c) (CONSOLE_TTY_DATA (c)->real_cursor_y)
214 #define CONSOLE_TTY_FINAL_CURSOR_X(c) (CONSOLE_TTY_DATA (c)->final_cursor_x)
215 #define CONSOLE_TTY_FINAL_CURSOR_Y(c) (CONSOLE_TTY_DATA (c)->final_cursor_y)
217 #define TTY_CM(c) (CONSOLE_TTY_DATA (c)->cm)
218 #define TTY_SE(c) (CONSOLE_TTY_DATA (c)->se)
219 #define TTY_SD(c) (CONSOLE_TTY_DATA (c)->sd)
220 #define TTY_FLAGS(c) (CONSOLE_TTY_DATA (c)->flags)
221 #define TTY_COST(c) (CONSOLE_TTY_DATA (c)->cost)
223 #define TTY_INC_CURSOR_X(c, n) do { \
225 assert (CONSOLE_TTY_CURSOR_X (c) == CONSOLE_TTY_REAL_CURSOR_X (c)); \
226 CONSOLE_TTY_CURSOR_X (c) += TICX_n; \
227 CONSOLE_TTY_REAL_CURSOR_X (c) += TICX_n; \
230 #define TTY_INC_CURSOR_Y(c, n) do { \
232 CONSOLE_TTY_CURSOR_Y (c) += TICY_n; \
233 CONSOLE_TTY_REAL_CURSOR_Y (c) += TICY_n; \
239 speed_t ospeed; /* Output speed (from sg_ospeed) */
241 short ospeed; /* Output speed (from sg_ospeed) */
245 #define DEVICE_TTY_DATA(d) DEVICE_TYPE_DATA (d, tty)
247 /* termcap requires this to be global */
249 extern short ospeed; /* Output speed (from sg_ospeed) */
252 extern FILE *termscript;
254 EXFUN (Fconsole_tty_controlling_process, 1);
256 /****************** Prototypes from cm.c *******************/
258 /* #### Verify that all of these are still needed. */
260 void cm_cost_init (struct console *c);
262 void cmgoto (struct frame *f, int row, int col);
263 extern struct console *cmputc_console;
264 void send_string_to_tty_console (struct console *c, unsigned char *str,
268 /*************** Prototypes from redisplay-tty.c ****************/
270 enum term_init_status
272 TTY_UNABLE_OPEN_DATABASE,
274 TTY_TYPE_INSUFFICIENT,
275 TTY_SIZE_UNSPECIFIED,
279 int init_tty_for_redisplay (struct device *d, char *terminal_type);
280 /* #### These should probably be methods. */
281 void set_tty_modes (struct console *c);
282 void reset_tty_modes (struct console *c);
284 /* Used in sysdep.c to properly clear and position the cursor when exiting. */
285 void tty_redisplay_shutdown (struct console *c);
287 /* called from console-stream.c */
288 Lisp_Object tty_semi_canonicalize_console_connection (Lisp_Object connection,
289 Error_behavior errb);
290 Lisp_Object tty_canonicalize_console_connection (Lisp_Object connection,
291 Error_behavior errb);
292 Lisp_Object tty_semi_canonicalize_device_connection (Lisp_Object connection,
293 Error_behavior errb);
294 Lisp_Object tty_canonicalize_device_connection (Lisp_Object connection,
295 Error_behavior errb);
296 struct console * tty_find_console_from_fd (int fd);
298 #endif /* _XEMACS_CONSOLE_TTY_H_ */