1/* Copyright (c) 1993-2002 2 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) 3 * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) 4 * Copyright (c) 1987 Oliver Laumann 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2, or (at your option) 9 * any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program (see the file COPYING); if not, write to the 18 * Free Software Foundation, Inc., 19 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA 20 * 21 **************************************************************** 22 * $Id: screen.h,v 1.12 1994/05/31 12:32:54 mlschroe Exp $ FAU 23 */ 24 25#include "os.h" 26 27#if defined(__STDC__) 28# ifndef __P 29# define __P(a) a 30# endif 31#else 32# ifndef __P 33# define __P(a) () 34# endif 35# define const 36#endif 37 38#include "osdef.h" 39 40#include "ansi.h" 41#include "sched.h" 42#include "acls.h" 43#include "comm.h" 44#include "layer.h" 45#include "term.h" 46 47 48#ifdef DEBUG 49# define STATIC /* a function that the debugger should see */ 50#else 51# define STATIC static 52#endif 53 54#ifdef DEBUG 55# define DEBUGDIR "/tmp/debug" 56# define debugf(a) do {if(dfp){fprintf a;fflush(dfp);}} while (0) 57# define debug(x) debugf((dfp,x)) 58# define debug1(x,a) debugf((dfp,x,a)) 59# define debug2(x,a,b) debugf((dfp,x,a,b)) 60# define debug3(x,a,b,c) debugf((dfp,x,a,b,c)) 61 extern FILE *dfp; 62#else 63# define debugf(a) do {} while (0) 64# define debug(x) debugf(x) 65# define debug1(x,a) debugf(x) 66# define debug2(x,a,b) debugf(x) 67# define debug3(x,a,b,c) debugf(x) 68#endif 69 70#ifndef DEBUG 71# define NOASSERT 72#endif 73 74#ifndef NOASSERT 75# if defined(__STDC__) 76# 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) 77# else 78# 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) 79# endif 80#else 81# define ASSERT(lousy_cpp) do {} while (0) 82#endif 83 84/* here comes my own Free: jw. */ 85#define Free(a) {if ((a) == 0) abort(); else free((void *)(a)); (a)=0;} 86 87#define Ctrl(c) ((c)&037) 88 89#define MAXSTR 256 90#define MAXARGS 64 91#define MSGWAIT 5 92#define MSGMINWAIT 1 93#define SILENCEWAIT 30 94 95/* 96 * if a nasty user really wants to try a history of 3000 lines on all 10 97 * windows, he will allocate 8 MegaBytes of memory, which is quite enough. 98 */ 99#define MAXHISTHEIGHT 3000 100#define DEFAULTHISTHEIGHT 100 101#if defined(NAME_MAX) && NAME_MAX < 16 102# define DEFAULT_BUFFERFILE "/tmp/screen-xchg" 103#else 104# define DEFAULT_BUFFERFILE "/tmp/screen-exchange" 105#endif 106 107 108#if defined(hpux) && !(defined(VSUSP) && defined(VDSUSP) && defined(VWERASE) && defined(VLNEXT)) 109# define HPUX_LTCHARS_HACK 110#endif 111 112struct mode 113{ 114#ifdef POSIX 115 struct termios tio; 116# ifdef HPUX_LTCHARS_HACK 117 struct ltchars m_ltchars; 118# endif /* HPUX_LTCHARS_HACK */ 119#else /* POSIX */ 120# ifdef TERMIO 121 struct termio tio; 122# ifdef CYTERMIO 123 int m_mapkey; 124 int m_mapscreen; 125 int m_backspace; 126# endif 127# else /* TERMIO */ 128 struct sgttyb m_ttyb; 129 struct tchars m_tchars; 130 struct ltchars m_ltchars; 131 int m_ldisc; 132 int m_lmode; 133# endif /* TERMIO */ 134#endif /* POSIX */ 135#if defined(KANJI) && defined(TIOCKSET) 136 struct jtchars m_jtchars; 137 int m_knjmode; 138#endif 139}; 140 141 142/* #include "logfile.h" */ /* (requires stat.h) struct logfile */ 143#include "image.h" 144#include "display.h" 145#include "window.h" 146 147/* 148 * Parameters for the Detach() routine 149 */ 150#define D_DETACH 0 151#define D_STOP 1 152#define D_REMOTE 2 153#define D_POWER 3 154#define D_REMOTE_POWER 4 155#define D_LOCK 5 156#define D_HANGUP 6 157 158/* 159 * Here are the messages the attacher sends to the backend 160 */ 161#define MSG_CREATE 0 162#define MSG_ERROR 1 163#define MSG_ATTACH 2 164#define MSG_CONT 3 165#define MSG_DETACH 4 166#define MSG_POW_DETACH 5 167#define MSG_WINCH 6 168#define MSG_HANGUP 7 169#define MSG_COMMAND 8 170 171/* 172 * versions of struct msg: 173 * 0: screen version 3.6.6 (version count introduced) 174 */ 175#define MSG_VERSION 0 176#define MSG_REVISION (('m'<<24) | ('s'<<16) | ('g'<<8) | MSG_VERSION) 177struct msg 178{ 179 int protocol_revision; /* reduce harm done by incompatible messages */ 180 int type; 181 char m_tty[MAXPATHLEN]; /* ttyname */ 182 union 183 { 184 struct 185 { 186 int lflag; 187 int aflag; 188 int flowflag; 189 int hheight; /* size of scrollback buffer */ 190 int nargs; 191 char line[MAXPATHLEN]; 192 char dir[MAXPATHLEN]; 193 char screenterm[20]; /* is screen really "screen" ? */ 194 } 195 create; 196 struct 197 { 198 char auser[20 + 1]; /* username */ 199 int apid; /* pid of frontend */ 200 int adaptflag; /* adapt window size? */ 201 int lines, columns; /* display size */ 202 char preselect[20]; 203 int esc; /* his new escape character unless -1 */ 204 int meta_esc; /* his new meta esc character unless -1 */ 205 char envterm[20 + 1]; /* terminal type */ 206 int encoding; /* encoding of display */ 207 } 208 attach; 209 struct 210 { 211 char duser[20 + 1]; /* username */ 212 int dpid; /* pid of frontend */ 213 } 214 detach; 215 struct 216 { 217 char auser[20 + 1]; /* username */ 218 int nargs; 219 char cmd[MAXPATHLEN]; /* command */ 220 int apid; /* pid of frontend */ 221 char preselect[20]; 222 } 223 command; 224 char message[MAXPATHLEN * 2]; 225 } m; 226}; 227 228/* 229 * And the signals the attacher receives from the backend 230 */ 231#define SIG_BYE SIGHUP 232#define SIG_POWER_BYE SIGUSR1 233#define SIG_LOCK SIGUSR2 234#define SIG_STOP SIGTSTP 235#ifdef SIGIO 236#define SIG_NODEBUG SIGIO /* triggerd by command 'debug off' */ 237#endif 238 239 240#define BELL (Ctrl('g')) 241#define VBELLWAIT 1 /* No. of seconds a vbell will be displayed */ 242 243#define BELL_ON 0 /* No bell has occurred in the window */ 244#define BELL_FOUND 1 /* A bell has occurred, but user not yet notified */ 245#define BELL_DONE 2 /* A bell has occured, user has been notified */ 246 247#define BELL_VISUAL 3 /* A bell has occured in fore win, notify him visually */ 248 249#define MON_OFF 0 /* Monitoring is off in the window */ 250#define MON_ON 1 /* No activity has occurred in the window */ 251#define MON_FOUND 2 /* Activity has occured, but user not yet notified */ 252#define MON_DONE 3 /* Activity has occured, user has been notified */ 253 254#define DUMP_TERMCAP 0 /* WriteFile() options */ 255#define DUMP_HARDCOPY 1 256#define DUMP_EXCHANGE 2 257#define DUMP_SCROLLBACK 3 258 259#define SILENCE_OFF 0 260#define SILENCE_ON 1 261 262extern char strnomem[]; 263 264/* 265 * line modes used by Input() 266 */ 267#define INP_COOKED 0 268#define INP_NOECHO 1 269#define INP_RAW 2 270#define INP_EVERY 4 271 272 273#ifdef MULTIUSER 274struct acl 275{ 276 struct acl *next; 277 char *name; 278}; 279#endif 280 281/* register list */ 282#define MAX_PLOP_DEFS 256 283 284struct baud_values 285{ 286 int idx; /* the index in the bsd-is padding lookup table */ 287 int bps; /* bits per seconds */ 288 int sym; /* symbol defined in ttydev.h */ 289}; 290 291/* 292 * windowlist orders 293 */ 294#define WLIST_NUM 0 295#define WLIST_MRU 1 296