This is device-tty.h in view mode; [Download] [Up]
/* Define TTY specific device object for XEmacs.
Copyright (C) 1995 Board of Trustees, University of Illinois
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, 675 Mass Ave, Cambridge, MA 02139, USA. */
/* Synched up with: Not in FSF. */
/* Written by Chuck Thompson. */
#ifndef _XEMACS_DEVICE_TTY_H_
#define _XEMACS_DEVICE_TTY_H_
#include "device.h"
#include "syssignal.h" /* Always include before systty.h */
#include "systty.h"
DECLARE_DEVICE_TYPE (tty);
struct tty_device
{
FILE *infd, *outfd;
Lisp_Object tty, terminal_type;
char *term_entry_buffer;
#ifdef HAVE_TERMIOS
speed_t ospeed; /* Output speed (from sg_ospeed) */
#else
short ospeed; /* Output speed (from sg_ospeed) */
#endif
/* Physical location of cursor on this device. */
int cursor_x;
int 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;
};
#define DEVICE_TTY_DATA(d) DEVICE_TYPE_DATA (d, tty)
#define DEVICE_TTY_CURSOR_X(d) (DEVICE_TTY_DATA (d)->cursor_x)
#define DEVICE_TTY_CURSOR_Y(d) (DEVICE_TTY_DATA (d)->cursor_y)
#define TTY_CM(d) (DEVICE_TTY_DATA (d)->cm)
#define TTY_SE(d) (DEVICE_TTY_DATA (d)->se)
#define TTY_SD(d) (DEVICE_TTY_DATA (d)->sd)
#define TTY_FLAGS(d) (DEVICE_TTY_DATA (d)->flags)
#define TTY_COST(d) (DEVICE_TTY_DATA (d)->cost)
#define TTY_INC_CURSOR_X(d, n) (DEVICE_TTY_CURSOR_X (d) += n)
#define TTY_INC_CURSOR_Y(d, n) (DEVICE_TTY_CURSOR_Y (d) += n)
/* termcap requires this to be global */
#ifdef HAVE_TERMIOS
extern speed_t ospeed; /* Output speed (from sg_ospeed) */
#else
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 device *d);
extern void cmputc (int c);
extern void cmgoto (struct frame *f, int row, int col);
extern struct device *cmputc_device;
/*************** Prototypes from device-tty.c ****************/
extern void init_event_tty_late (void);
/*************** Prototypes from event-tty.c ****************/
extern int read_event_from_tty_or_stream_desc (struct Lisp_Event *event,
struct device *d, int fd);
extern int maybe_read_quit_event (struct Lisp_Event *event);
/*************** 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 device *d);
void reset_tty_modes (struct device *d);
/* #### sysdep.c currently needs this. I think this is wrong. */
extern void tty_clear_region (Lisp_Object locale, face_index findex, int x,
int y, int width, int height);
#endif /* _XEMACS_DEVICE_TTY_H_ */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.