1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
|
/* Copyright (c) 1993
* Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de)
* Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de)
* Copyright (c) 1987 Oliver Laumann
*
* This program 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.
*
* This program 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 this program (see the file COPYING); if not, write to the
* Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
****************************************************************
* $Id: window.h,v 1.11 1994/05/31 12:33:27 mlschroe Exp $ FAU
*/
/* keep this in sync with the initialisations in window.c */
struct NewWindow
{
int StartAt; /* where to start the search for the slot */
char *aka; /* aka string */
char **args; /* argv vector */
char *dir; /* directory for chdir */
char *term; /* TERM to be set instead of "screen" */
int aflag;
int flowflag;
int lflag;
int histheight;
int monitor;
int wlock; /* default writelock setting */
int silence;
int wrap;
int Lflag; /* logging */
int slow; /* inter character milliseconds */
int c1;
int gr;
int kanji;
char *hstatus;
char *charset;
};
#ifdef PSEUDOS
struct pseudowin
{
int p_fdpat;
int p_pid;
int p_ptyfd;
struct event p_readev;
struct event p_writeev;
char p_cmd[MAXSTR];
char p_tty[MAXSTR];
char p_inbuf[IOSIZE]; /* buffered writing to p_ptyfd */
int p_inlen;
};
/* bits for fdpat: */
#define F_PMASK 0x0003
#define F_PSHIFT 2
#define F_PFRONT 0x0001 /* . */
#define F_PBACK 0x0002 /* ! */
#define F_PBOTH (F_PFRONT | F_PBACK) /* : */
#define F_UWP 0x1000 /* | */
/* The screen process ...)
* ... wants to write to pseudo */
#define W_WP(w) ((w)->w_pwin && ((w)->w_pwin->p_fdpat & F_PFRONT))
/* ... wants to write to window: user writes to window
* or stdout/stderr of pseudo are duplicated to window */
#define W_WW(w) (!((w)->w_pwin) || \
(((w)->w_pwin->p_fdpat & F_PMASK) == F_PBACK) || \
((((w)->w_pwin->p_fdpat >> F_PSHIFT) & F_PMASK) == F_PBOTH) || \
((((w)->w_pwin->p_fdpat >> (F_PSHIFT * 2)) & F_PMASK) == F_PBOTH))
/* ... wants to read from pseudowin */
#define W_RP(w) ((w)->w_pwin && ((w)->w_pwin->p_fdpat & \
((F_PFRONT << (F_PSHIFT * 2)) | (F_PFRONT << F_PSHIFT)) ))
/* ... wants to read from window */
#define W_RW(w) (!((w)->w_pwin) || ((w)->w_pwin->p_fdpat & F_PFRONT))
/* user input is written to pseudo */
#define W_UWP(w) ((w)->w_pwin && ((w)->w_pwin->p_fdpat & F_UWP))
/* pseudo output has to be stuffed in window */
#define W_PTOW(w) (\
((w)->w_pwin->p_fdpat & F_PMASK << F_PSHIFT) == F_PBOTH << F_PSHIFT || \
((w)->w_pwin->p_fdpat & F_PMASK << F_PSHIFT * 2) == F_PBOTH << F_PSHIFT * 2 )
/* window output has to be stuffed in pseudo */
#define W_WTOP(w) (((w)->w_pwin->p_fdpat & F_PMASK) == F_PBOTH)
#endif /* PSEUDOS */
/* definitions for wlocktype */
#define WLOCK_OFF 0 /* all in w_userbits can write */
#define WLOCK_AUTO 1 /* who selects first, can write */
#define WLOCK_ON 2 /* user writes even if deselected */
#ifdef COPY_PASTE
struct paster
{
char *pa_pastebuf; /* this gets pasted in the window */
char *pa_pasteptr; /* pointer in pastebuf */
int pa_pastelen; /* bytes left to paste */
struct layer *pa_pastelayer; /* layer to paste into */
struct event pa_slowev; /* slowpaste event */
};
#else
struct paster;
#endif
struct win
{
struct win *w_next; /* next window */
int w_type; /* type of window */
void *w_data;
struct layer w_layer; /* our layer */
struct layer *w_savelayer; /* the layer to keep */
int w_blocked; /* block input */
#ifdef PSEUDOS
struct pseudowin *w_pwin; /* ptr to pseudo */
#endif
struct display *w_pdisplay; /* display for printer relay */
int w_number; /* window number */
struct event w_readev;
struct event w_writeev;
struct event w_silenceev; /* silence event */
int w_ptyfd; /* fd of the master pty */
char w_inbuf[IOSIZE];
int w_inlen;
char w_outbuf[IOSIZE];
int w_outlen;
int w_aflag; /* (-a option) */
char *w_title; /* name of the window */
char *w_akachange; /* autoaka hack */
char w_akabuf[MAXSTR]; /* aka buffer */
int w_autoaka; /* autoaka hack */
int w_intermediate; /* char used while parsing ESC-seq */
int w_args[MAXARGS]; /* emulator args */
int w_NumArgs;
#ifdef MULTIUSER
int w_wlock; /* WLOCK_AUTO, WLOCK_OFF, WLOCK_ON */
struct user *w_wlockuser; /* NULL when unlocked or user who writes */
AclBits w_userbits[ACL_BITS_PER_WIN];
AclBits w_lio_notify; /* whom to tell when lastio+seconds < time() */
AclBits w_mon_notify; /* whom to tell monitor statis */
#endif
enum state_t w_state; /* parser state */
enum string_t w_StringType;
struct mline *w_mlines;
struct mchar w_rend; /* current rendition */
#ifdef FONT
char w_FontL; /* character font GL */
char w_FontR; /* character font GR */
int w_Charset; /* charset number GL */
int w_CharsetR; /* charset number GR */
int w_charsets[4]; /* Font = charsets[Charset] */
#endif
int w_ss;
int w_saved;
int w_Saved_x, w_Saved_y;
struct mchar w_SavedRend;
#ifdef FONT
int w_SavedCharset;
int w_SavedCharsetR;
int w_SavedCharsets[4];
#endif
int w_top, w_bot; /* scrollregion */
int w_wrap; /* autowrap */
int w_origin; /* origin mode */
int w_insert; /* window is in insert mode */
int w_keypad; /* keypad mode */
int w_cursorkeys; /* appl. cursorkeys mode */
int w_revvid; /* reverse video */
int w_curinv; /* cursor invisible */
int w_curvvis; /* cursor very visible */
int w_autolf; /* automatic linefeed */
char *w_hstatus; /* hardstatus line */
int w_gr; /* enable GR flag */
int w_c1; /* enable C1 flag */
#ifdef KANJI
int w_kanji; /* for input and paste */
int w_mbcs; /* saved char for multibytes charset */
#endif
char w_string[MAXSTR];
char *w_stringp;
char *w_tabs; /* line with tabs */
int w_bell; /* bell status of this window */
int w_flow; /* flow flags */
struct logfile *w_log; /* log to file */
int w_logsilence; /* silence in secs */
int w_monitor; /* monitor status */
int w_silencewait; /* wait for silencewait secs */
int w_silence; /* silence status (Lloyd Zusman) */
char w_vbwait;
char w_norefresh; /* dont redisplay when switching to that win */
#ifdef HAVE_BRAILLE
int w_bd_x, w_bd_y; /* Braille cursor position */
#endif
#ifdef COPY_PASTE
int w_slowpaste; /* do careful writes to the window */
int w_histheight; /* all histbases are malloced with width * histheight */
int w_histidx; /* 0 <= histidx < histheight; where we insert lines */
struct mline *w_hlines; /* history buffer */
struct paster w_paster; /* paste info */
#else
int w_histheight; /* always 0 */
#endif
int w_pid; /* process at the other end of ptyfd */
char *w_cmdargs[MAXARGS]; /* command line argument vector */
char *w_dir; /* directory for chdir */
char *w_term; /* TERM to be set instead of "screen" */
slot_t w_slot; /* utmp slot */
#if defined (UTMPOK)
struct utmp w_savut; /* utmp entry of this window */
#endif
char w_tty[MAXSTR];
#ifdef BUILTIN_TELNET
struct sockaddr_in w_telsa;
char w_telbuf[IOSIZE];
int w_telbufl;
char w_telmopts[256];
char w_telropts[256];
int w_telstate;
char w_telsubbuf[128];
int w_telsubidx;
struct event w_telconnev;
#endif
};
#define w_width w_layer.l_width
#define w_height w_layer.l_height
#define w_x w_layer.l_x
#define w_y w_layer.l_y
/* definitions for w_type */
#define W_TYPE_PTY 0
#define W_TYPE_PLAIN 1
#define W_TYPE_TELNET 2
/*
* Definitions for flow
* 000 -(-) flow off, auto would be off
* 001 +(-) flow on , auto would be off
* 010 -(+) flow off, auto would be on
* 011 +(+) flow on , auto would be on
* 100 - flow auto, currently off
* 111 + flow auto, currently on
* Application controls auto_flow via TIOCPKT, if available,
* else via application keypad mode.
*/
#define FLOW_NOW (1<<0)
#define FLOW_AUTO (1<<1)
#define FLOW_AUTOFLAG (1<<2)
/*
* WIN gives us a reference to line y of the *whole* image
* where line 0 is the oldest line in our history.
* y must be in whole image coordinate system, not in display.
*/
#define WIN(y) ((y < fore->w_histheight) ? \
&fore->w_hlines[(fore->w_histidx + y) % fore->w_histheight] \
: &fore->w_mlines[y - fore->w_histheight])
#define Layer2Window(l) ((struct win *)(l)->l_bottom->l_data)
|