Bring back --with-sys-screenrc configure flag.
[screen-lua.git] / src / screen.h
blob5c93f32ea6d3e27f85f46820beacdcb2ee9b4ae9
1 /* Copyright (c) 2008, 2009
2 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de)
3 * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de)
4 * Micah Cowan (micah@cowan.name)
5 * Sadrul Habib Chowdhury (sadrul@users.sourceforge.net)
6 * Copyright (c) 1993-2002, 2003, 2005, 2006, 2007
7 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de)
8 * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de)
9 * Copyright (c) 1987 Oliver Laumann
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 3, or (at your option)
14 * any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program (see the file COPYING); if not, see
23 * http://www.gnu.org/licenses/, or contact Free Software Foundation, Inc.,
24 * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
26 ****************************************************************
27 * $Id$ GNU
30 #include "os.h"
32 #if defined(__STDC__)
33 # ifndef __P
34 # define __P(a) a
35 # endif
36 #else
37 # ifndef __P
38 # define __P(a) ()
39 # endif
40 # define const
41 #endif
43 #include "osdef.h"
45 #include "ansi.h"
46 #include "sched.h"
47 #include "acls.h"
48 #include "comm.h"
49 #include "layer.h"
50 #include "term.h"
53 #ifdef DEBUG
54 # define STATIC /* a function that the debugger should see */
55 #else
56 # define STATIC static
57 #endif
59 #ifdef DEBUG
60 # define DEBUGDIR "/tmp/debug"
61 # define debugf(a) do {if(dfp){fprintf a;fflush(dfp);}} while (0)
62 # define debug(x) debugf((dfp,x))
63 # define debug1(x,a) debugf((dfp,x,a))
64 # define debug2(x,a,b) debugf((dfp,x,a,b))
65 # define debug3(x,a,b,c) debugf((dfp,x,a,b,c))
66 extern FILE *dfp;
67 #else
68 # define debugf(a) do {} while (0)
69 # define debug(x) debugf(x)
70 # define debug1(x,a) debugf(x)
71 # define debug2(x,a,b) debugf(x)
72 # define debug3(x,a,b,c) debugf(x)
73 #endif
75 #ifndef DEBUG
76 # define NOASSERT
77 #endif
79 #ifndef NOASSERT
80 # if defined(__STDC__)
81 # define ASSERT(lousy_cpp) do {if (!(lousy_cpp)) {if (!dfp) opendebug(0, 1);debug2("ASSERT("#lousy_cpp") failed file %s line %d\n", __FILE__, __LINE__);abort();}} while (0)
82 # else
83 # define ASSERT(lousy_cpp) do {if (!(lousy_cpp)) {if (!dfp) opendebug(0, 1);debug2("ASSERT(lousy_cpp) failed file %s line %d\n", __FILE__, __LINE__);abort();}} while (0)
84 # endif
85 #else
86 # define ASSERT(lousy_cpp) do {} while (0)
87 #endif
89 /* here comes my own Free: jw. */
90 #define Free(a) {if ((a) == 0) abort(); else free((void *)(a)); (a)=0;}
92 #define Ctrl(c) ((c)&037)
94 #define MAXSTR 512
95 #define MAXARGS 64
96 #define MSGWAIT 5
97 #define MSGMINWAIT 1
98 #define SILENCEWAIT 30
101 * if a nasty user really wants to try a history of 3000 lines on all 10
102 * windows, he will allocate 8 MegaBytes of memory, which is quite enough.
104 #define MAXHISTHEIGHT 3000
105 #define DEFAULTHISTHEIGHT 100
106 #if defined(NAME_MAX) && NAME_MAX < 16
107 # define DEFAULT_BUFFERFILE "/tmp/screen-xchg"
108 #else
109 # define DEFAULT_BUFFERFILE "/tmp/screen-exchange"
110 #endif
113 #if defined(hpux) && !(defined(VSUSP) && defined(VDSUSP) && defined(VWERASE) && defined(VLNEXT))
114 # define HPUX_LTCHARS_HACK
115 #endif
117 struct mode
119 #ifdef POSIX
120 struct termios tio;
121 # ifdef HPUX_LTCHARS_HACK
122 struct ltchars m_ltchars;
123 # endif /* HPUX_LTCHARS_HACK */
124 #else /* POSIX */
125 # ifdef TERMIO
126 struct termio tio;
127 # ifdef CYTERMIO
128 int m_mapkey;
129 int m_mapscreen;
130 int m_backspace;
131 # endif
132 # else /* TERMIO */
133 struct sgttyb m_ttyb;
134 struct tchars m_tchars;
135 struct ltchars m_ltchars;
136 int m_ldisc;
137 int m_lmode;
138 # endif /* TERMIO */
139 #endif /* POSIX */
140 #if defined(KANJI) && defined(TIOCKSET)
141 struct jtchars m_jtchars;
142 int m_knjmode;
143 #endif
147 /* #include "logfile.h" */ /* (requires stat.h) struct logfile */
148 #include "image.h"
149 #include "canvas.h"
150 #include "display.h"
151 #include "window.h"
154 * Parameters for the Detach() routine
156 #define D_DETACH 0
157 #define D_STOP 1
158 #define D_REMOTE 2
159 #define D_POWER 3
160 #define D_REMOTE_POWER 4
161 #define D_LOCK 5
162 #define D_HANGUP 6
165 * Here are the messages the attacher sends to the backend
167 #define MSG_CREATE 0
168 #define MSG_ERROR 1
169 #define MSG_ATTACH 2
170 #define MSG_CONT 3
171 #define MSG_DETACH 4
172 #define MSG_POW_DETACH 5
173 #define MSG_WINCH 6
174 #define MSG_HANGUP 7
175 #define MSG_COMMAND 8
176 #define MSG_QUERY 9
179 * versions of struct msg:
180 * 0: screen version 3.6.6 (version count introduced)
181 * 1: screen version 4.1.0devel (revisions e3fc19a upto 8147d08)
182 * A few revisions after 8147d08 incorrectly
183 * carried version 1, but should have carried 2.
184 * 2: screen version 4.1.0devel (revisions 8b46d8a upto YYYYYYY)
186 #define MSG_VERSION 2
188 #define MSG_REVISION (('m'<<24) | ('s'<<16) | ('g'<<8) | MSG_VERSION)
189 struct msg
191 int protocol_revision; /* reduce harm done by incompatible messages */
192 int type;
193 char m_tty[MAXPATHLEN]; /* ttyname */
194 union
196 struct
198 int lflag;
199 int aflag;
200 int flowflag;
201 int hheight; /* size of scrollback buffer */
202 int nargs;
203 char line[MAXPATHLEN];
204 char dir[MAXPATHLEN];
205 char screenterm[20]; /* is screen really "screen" ? */
207 create;
208 struct
210 char auser[20 + 1]; /* username */
211 int apid; /* pid of frontend */
212 int adaptflag; /* adapt window size? */
213 int lines, columns; /* display size */
214 char preselect[20];
215 int esc; /* his new escape character unless -1 */
216 int meta_esc; /* his new meta esc character unless -1 */
217 char envterm[20 + 1]; /* terminal type */
218 int encoding; /* encoding of display */
219 int detachfirst; /* whether to detach remote sessions first */
221 attach;
222 struct
224 char duser[20 + 1]; /* username */
225 int dpid; /* pid of frontend */
227 detach;
228 struct
230 char auser[20 + 1]; /* username */
231 int nargs;
232 char cmd[MAXPATHLEN]; /* command */
233 int apid; /* pid of frontend */
234 char preselect[20];
235 char writeback[MAXPATHLEN]; /* The socket to write the result.
236 Only used for MSG_QUERY */
238 command;
239 char message[MAXPATHLEN * 2];
240 } m;
244 * And the signals the attacher receives from the backend
246 #define SIG_BYE SIGHUP
247 #define SIG_POWER_BYE SIGUSR1
248 #define SIG_LOCK SIGUSR2
249 #define SIG_STOP SIGTSTP
250 #ifdef SIGIO
251 #define SIG_NODEBUG SIGIO /* triggerd by command 'debug off' */
252 #endif
255 #define BELL (Ctrl('g'))
256 #define VBELLWAIT 1 /* No. of seconds a vbell will be displayed */
258 #define BELL_ON 0 /* No bell has occurred in the window */
259 #define BELL_FOUND 1 /* A bell has occurred, but user not yet notified */
260 #define BELL_DONE 2 /* A bell has occured, user has been notified */
262 #define BELL_VISUAL 3 /* A bell has occured in fore win, notify him visually */
264 #define MON_OFF 0 /* Monitoring is off in the window */
265 #define MON_ON 1 /* No activity has occurred in the window */
266 #define MON_FOUND 2 /* Activity has occured, but user not yet notified */
267 #define MON_DONE 3 /* Activity has occured, user has been notified */
269 #define DUMP_TERMCAP 0 /* WriteFile() options */
270 #define DUMP_HARDCOPY 1
271 #define DUMP_EXCHANGE 2
272 #define DUMP_SCROLLBACK 3
274 #define SILENCE_OFF 0 /* Not checking for silence */
275 #define SILENCE_ON 1 /* Window being monitored for silence */
276 #define SILENCE_FOUND 2 /* Window is silent */
277 #define SILENCE_DONE 3 /* Window is silent and user is notified */
279 extern char strnomem[];
282 * line modes used by Input()
284 #define INP_COOKED 0
285 #define INP_NOECHO 1
286 #define INP_RAW 2
287 #define INP_EVERY 4
290 #ifdef MULTIUSER
291 struct acl
293 struct acl *next;
294 char *name;
296 #endif
298 /* register list */
299 #define MAX_PLOP_DEFS 256
301 struct baud_values
303 int idx; /* the index in the bsd-is padding lookup table */
304 int bps; /* bits per seconds */
305 int sym; /* symbol defined in ttydev.h */
309 * windowlist orders
311 #define WLIST_NUM 0
312 #define WLIST_MRU 1
313 #define WLIST_NESTED 2