1 /* tty.h - Terminals */
2
3 #define TTY_IN_BYTES 256 /* tty input queue size */
4 #define TAB_SIZE 8 /* distance between tab stops */
5 #define TAB_MASK 7 /* mask to compute a tab stop position */
6
7 #define ESC '\33' /* escape */
8
9 #define O_NOCTTY 00400 /* from <fcntl.h>, or cc will choke */
10 #define O_NONBLOCK 04000
11
12 typedef _PROTOTYPE( void (*devfun_t), (struct tty *tp) );
13 typedef _PROTOTYPE( void (*devfunarg_t), (struct tty *tp, int c) );
14
15 typedef struct tty {
16 int tty_events; /* set when TTY should inspect this line */
17
18 /* Input queue. Typed characters are stored here until read by a program. */
19 u16_t *tty_inhead; /* pointer to place where next char goes */
20 u16_t *tty_intail; /* pointer to next char to be given to prog */
21 int tty_incount; /* # chars in the input queue */
22 int tty_eotct; /* number of "line breaks" in input queue */
23 devfun_t tty_devread; /* routine to read from low level buffers */
24 devfun_t tty_icancel; /* cancel any device input */
25 int tty_min; /* minimum requested #chars in input queue */
26 clock_t tty_time; /* time when the input is available */
27 struct tty *tty_timenext; /* for a list of ttys with active timers */
28
29 /* Output section. */
30 devfun_t tty_devwrite; /* routine to start actual device output */
31 devfunarg_t tty_echo; /* routine to echo characters input */
32 devfun_t tty_ocancel; /* cancel any ongoing device output */
33 devfun_t tty_break; /* let the device send a break */
34
35 /* Terminal parameters and status. */
36 int tty_position; /* current position on the screen for echoing */
37 char tty_reprint; /* 1 when echoed input messed up, else 0 */
38 char tty_escaped; /* 1 when LNEXT (^V) just seen, else 0 */
39 char tty_inhibited; /* 1 when STOP (^S) just seen (stops output) */
40 char tty_pgrp; /* slot number of controlling process */
41 char tty_openct; /* count of number of opens of this tty */
42
43 /* Information about incomplete I/O requests is stored here. */
44 char tty_inrepcode; /* reply code, TASK_REPLY or REVIVE */
45 char tty_incaller; /* process that made the call (usually FS) */
46 char tty_inproc; /* process that wants to read from tty */
47 vir_bytes tty_in_vir; /* virtual address where data is to go */
48 int tty_inleft; /* how many chars are still needed */
49 int tty_incum; /* # chars input so far */
50 char tty_outrepcode; /* reply code, TASK_REPLY or REVIVE */
51 char tty_outcaller; /* process that made the call (usually FS) */
52 char tty_outproc; /* process that wants to write to tty */
53 vir_bytes tty_out_vir; /* virtual address where data comes from */
54 int tty_outleft; /* # chars yet to be output */
55 int tty_outcum; /* # chars output so far */
56 char tty_iocaller; /* process that made the call (usually FS) */
57 char tty_ioproc; /* process that wants to do an ioctl */
58 int tty_ioreq; /* ioctl request code */
59 vir_bytes tty_iovir; /* virtual address of ioctl buffer */
60
61 /* Miscellaneous. */
62 devfun_t tty_ioctl; /* set line speed, etc. at the device level */
63 devfun_t tty_close; /* tell the device that the tty is closed */
64 void *tty_priv; /* pointer to per device private data */
65 struct termios tty_termios; /* terminal attributes */
66 struct winsize tty_winsize; /* window size (#lines and #columns) */
67
68 u16_t tty_inbuf[TTY_IN_BYTES];/* tty input buffer */
69 } tty_t;
70
71 EXTERN tty_t tty_table[NR_CONS+NR_RS_LINES+NR_PTYS];
72 #define tty_line(tp) ((tp) - tty_table) /* return line num from tp */
73
74 /* Values for the fields. */
75 #define NOT_ESCAPED 0 /* previous character is not LNEXT (^V) */
76 #define ESCAPED 1 /* previous character was LNEXT (^V) */
77 #define RUNNING 0 /* no STOP (^S) has been typed to stop output */
78 #define STOPPED 1 /* STOP (^S) has been typed to stop output */
79
80 /* Fields and flags on characters in the input queue. */
81 #define IN_CHAR 0x00FF /* low 8 bits are the character itself */
82 #define IN_LEN 0x0F00 /* length of char if it has been echoed */
83 #define IN_LSHIFT 8 /* length = (c & IN_LEN) >> IN_LSHIFT */
84 #define IN_EOT 0x1000 /* char is a line break (^D, LF) */
85 #define IN_EOF 0x2000 /* char is EOF (^D), do not return to user */
86 #define IN_ESC 0x4000 /* escaped by LNEXT (^V), no interpretation */
87
88 /* Times and timeouts. */
89 #define TIME_NEVER ((clock_t) -1 < 0 ? (clock_t) LONG_MAX : (clock_t) -1)
90 #define force_timeout() ((void) (tty_timeout = 0))
91
92 EXTERN tty_t *tty_timelist; /* list of ttys with active timers */
93
94 /* Number of elements and limit of a buffer. */
95 #define buflen(buf) (sizeof(buf) / sizeof((buf)[0]))
96 #define bufend(buf) ((buf) + buflen(buf))
97
This page was automatically generated by the
LXR engine.
Visit the LXR main site for more
information.