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 10 * 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. 15 * 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. 20 * 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 * https://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., 24 * 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA 25 * 26 **************************************************************** 27 * $Id$ GNU 28 */ 29 30 #if !defined(__GNUC__) || __GNUC__ < 2 31 #undef __attribute__ 32 #define __attribute__(x) 33 #endif 34 35 #include <stdbool.h> 36 37 /* screen.c */ 38 extern int main __P((int, char **)); 39 extern sigret_t SigHup __P(SIGPROTOARG); 40 extern void eexit __P((int)) __attribute__((__noreturn__)); 41 extern void Detach __P((int)); 42 extern void Hangup __P((void)); 43 extern void Kill __P((int, int)); 44 #ifdef USEVARARGS 45 extern void Msg __P((int, const char *, ...)) __attribute__((format(printf, 2, 3))); 46 extern void Panic __P((int, const char *, ...)) __attribute__((format(printf, 2, 3))) __attribute__((__noreturn__)); 47 extern void QueryMsg __P((int, const char *, ...)) __attribute__((format(printf, 2, 3))); 48 extern void Dummy __P((int, const char *, ...)) __attribute__((format(printf, 2, 3))); 49 #else 50 extern void Msg __P(()); 51 extern void Panic __P(()); 52 extern void QueryMsg __P(()); 53 extern void Dummy __P(()); 54 #endif 55 extern void Finit __P((int)); 56 extern void MakeNewEnv __P((void)); 57 extern char *MakeWinMsg __P((char *, struct win *, int)); 58 extern char *MakeWinMsgEv __P((char *, struct win *, int, int, struct event *, int)); 59 extern int AddWinMsgRend __P((const char *, int)); 60 extern void PutWinMsg __P((char *, int, int)); 61 #ifdef BSDWAIT 62 extern void WindowDied __P((struct win *, union wait, int)); 63 #else 64 extern void WindowDied __P((struct win *, int, int)); 65 #endif 66 extern void setbacktick __P((int, int, int, char **)); 67 68 /* ansi.c */ 69 extern void ResetAnsiState __P((struct win *)); 70 extern void ResetWindow __P((struct win *)); 71 extern void ResetCharsets __P((struct win *)); 72 extern void WriteString __P((struct win *, char *, int)); 73 extern void ChangeAKA __P((struct win *, char *, int)); 74 extern void SetCharsets __P((struct win *, char *)); 75 extern int GetAnsiStatus __P((struct win *, char *)); 76 extern void WNewAutoFlow __P((struct win *, int)); 77 extern void WBell __P((struct win *, int)); 78 extern void WMsg __P((struct win *, int, char *)); 79 extern void WChangeSize __P((struct win *, int, int)); 80 extern void WindowChanged __P((struct win *, int)); 81 extern int MFindUsedLine __P((struct win *, int, int)); 82 83 /* fileio.c */ 84 extern int StartRc __P((char *, int)); 85 extern void FinishRc __P((char *)); 86 extern void RcLine __P((char *, int)); 87 extern FILE *secfopen __P((char *, char *)); 88 extern int secopen __P((char *, int, int)); 89 extern void WriteFile __P((struct acluser *, char *, int)); 90 extern char *ReadFile __P((char *, int *)); 91 extern void KillBuffers __P((void)); 92 extern int printpipe __P((struct win *, char *)); 93 extern int readpipe __P((char **)); 94 extern void RunBlanker __P((char **)); 95 extern void do_source __P((char *)); 96 97 /* tty.c */ 98 extern int OpenTTY __P((char *, char *)); 99 extern void InitTTY __P((struct mode *, int)); 100 extern void GetTTY __P((int, struct mode *)); 101 extern void SetTTY __P((int, struct mode *)); 102 extern void SetMode __P((struct mode *, struct mode *, int, int)); 103 extern void SetFlow __P((int)); 104 extern void SendBreak __P((struct win *, int, int)); 105 extern int TtyGrabConsole __P((int, int, char *)); 106 extern char *TtyGetModemStatus __P((int, char *)); 107 #ifdef DEBUG 108 extern void DebugTTY __P((struct mode *)); 109 #endif /* DEBUG */ 110 extern int fgtty __P((int)); 111 extern void brktty __P((int)); 112 extern struct baud_values *lookup_baud __P((int bps)); 113 extern int SetBaud __P((struct mode *, int, int)); 114 extern int SttyMode __P((struct mode *, char *)); 115 extern int CheckTtyname __P((char *)); 116 extern char *GetPtsPathOrSymlink __P((int)); 117 118 /* mark.c */ 119 extern int GetHistory __P((void)); 120 extern void MarkRoutine __P((void)); 121 extern void revto_line __P((int, int, int)); 122 extern void revto __P((int, int)); 123 extern int InMark __P((void)); 124 extern void MakePaster __P((struct paster *, char *, int, int)); 125 extern void FreePaster __P((struct paster *)); 126 127 /* search.c */ 128 extern void Search __P((int)); 129 extern void ISearch __P((int)); 130 131 /* input.c */ 132 extern void inp_setprompt __P((char *, char *)); 133 extern void Input __P((char *, int, int, void (*)(char *, int, char *), char *, int)); 134 extern int InInput __P((void)); 135 136 /* help.c */ 137 extern void exit_with_usage __P((char *, char *, char *)); 138 extern void display_help __P((char *, struct action *)); 139 extern void display_copyright __P((void)); 140 extern void display_displays __P((void)); 141 extern void display_bindkey __P((char *, struct action *)); 142 extern int InWList __P((void)); 143 extern void WListUpdatecv __P((struct canvas *, struct win *)); 144 extern void WListLinkChanged __P((void)); 145 #ifdef ZMODEM 146 extern void ZmodemPage __P((void)); 147 #endif 148 149 /* window.c */ 150 extern int MakeWindow __P((struct NewWindow *)); 151 extern int RemakeWindow __P((struct win *)); 152 extern void FreeWindow __P((struct win *)); 153 #ifdef PSEUDOS 154 extern int winexec __P((char **)); 155 extern void FreePseudowin __P((struct win *)); 156 #endif 157 extern void nwin_compose __P((struct NewWindow *, struct NewWindow *, struct NewWindow *)); 158 extern int DoStartLog __P((struct win *, char *, int)); 159 extern int ReleaseAutoWritelock __P((struct display *, struct win *)); 160 extern int ObtainAutoWritelock __P((struct display *, struct win *)); 161 extern void CloseDevice __P((struct win *)); 162 #ifdef ZMODEM 163 extern void zmodem_abort __P((struct win *, struct display *)); 164 #endif 165 #ifndef HAVE_EXECVPE 166 extern void execvpe __P((char *, char **, char **)); 167 #endif 168 169 /* utmp.c */ 170 #ifdef UTMPOK 171 extern void InitUtmp __P((void)); 172 extern void RemoveLoginSlot __P((void)); 173 extern void RestoreLoginSlot __P((void)); 174 extern int SetUtmp __P((struct win *)); 175 extern int RemoveUtmp __P((struct win *)); 176 #endif /* UTMPOK */ 177 extern void SlotToggle __P((int)); 178 #ifdef USRLIMIT 179 extern int CountUsers __P((void)); 180 #endif 181 #ifdef CAREFULUTMP 182 extern void CarefulUtmp __P((void)); 183 #else 184 # define CarefulUtmp() /* nothing */ 185 #endif /* CAREFULUTMP */ 186 187 188 /* loadav.c */ 189 #ifdef LOADAV 190 extern void InitLoadav __P((void)); 191 extern void AddLoadav __P((char *)); 192 #endif 193 194 /* pty.c */ 195 extern int OpenPTY __P((char **)); 196 extern void InitPTY __P((int)); 197 198 /* process.c */ 199 extern void InitKeytab __P((void)); 200 extern void ProcessInput __P((char *, int)); 201 #ifdef MAPKEYS 202 extern void ProcessInput2 __P((char *, int)); 203 #endif 204 extern void DoProcess __P((struct win *, char **, int *, struct paster *)); 205 extern void DoAction __P((struct action *, int)); 206 extern int FindCommnr __P((const char *)); 207 extern void DoCommand __P((char **, int *)); 208 extern void Activate __P((int)); 209 extern void KillWindow __P((struct win *)); 210 extern void SetForeWindow __P((struct win *)); 211 extern int Parse __P((char *, int, char **, int *)); 212 extern void SetEscape __P((struct acluser *, int, int)); 213 extern void DoScreen __P((char *, char **)); 214 extern int IsNumColon __P((char *, int, char *, int)); 215 extern void ShowWindows __P((int)); 216 extern char *AddWindows __P((char *, int, int, int)); 217 extern char *AddWindowFlags __P((char *, int, struct win *)); 218 extern char *AddOtherUsers __P((char *, int, struct win *)); 219 extern int WindowByNoN __P((char *)); 220 extern struct win *FindNiceWindow __P((struct win *, char *)); 221 #ifdef COPY_PASTE 222 extern int CompileKeys __P((char *, int, unsigned char *)); 223 #endif 224 #ifdef RXVT_OSC 225 extern void RefreshXtermOSC __P((void)); 226 #endif 227 extern int ParseSaveStr __P((struct action *act, char **)); 228 extern int ParseNum __P((struct action *act, int *)); 229 extern int ParseSwitch __P((struct action *, int *)); 230 extern int ParseAttrColor __P((char *, char *, int)); 231 extern void ApplyAttrColor __P((int, struct mchar *)); 232 extern void SwitchWindow __P((int)); 233 extern int StuffKey __P((int)); 234 235 /* termcap.c */ 236 extern int InitTermcap __P((int, int)); 237 extern char *MakeTermcap __P((int)); 238 extern void DumpTermcap __P((int, FILE *)); 239 extern char *gettermcapstring __P((char *)); 240 #ifdef MAPKEYS 241 extern int remap __P((int, int)); 242 extern void CheckEscape __P((void)); 243 #endif 244 extern int CreateTransTable __P((char *)); 245 extern void FreeTransTable __P((void)); 246 247 /* attacher.c */ 248 extern int Attach __P((int)); 249 extern void Attacher __P((void)); 250 extern sigret_t AttacherFinit __P(SIGPROTOARG); 251 extern void SendCmdMessage __P((char *, char *, char **, int)); 252 253 /* display.c */ 254 extern struct display *MakeDisplay __P((char *, char *, char *, int, int, struct mode *)); 255 extern void FreeDisplay __P((void)); 256 extern void DefProcess __P((char **, int *)); 257 extern void DefRedisplayLine __P((int, int, int, int)); 258 extern void DefClearLine __P((int, int, int, int)); 259 extern int DefRewrite __P((int, int, int, struct mchar *, int)); 260 extern int DefResize __P((int, int)); 261 extern void DefRestore __P((void)); 262 extern void AddCStr __P((char *)); 263 extern void AddCStr2 __P((char *, int)); 264 extern void InitTerm __P((int)); 265 extern void FinitTerm __P((void)); 266 extern void PUTCHAR __P((int)); 267 extern void PUTCHARLP __P((int)); 268 extern void ClearAll __P((void)); 269 extern void ClearArea __P((int, int, int, int, int, int, int, int)); 270 extern void ClearLine __P((struct mline *, int, int, int, int)); 271 extern void RefreshAll __P((int)); 272 extern void RefreshArea __P((int, int, int, int, int)); 273 extern void RefreshLine __P((int, int, int, int)); 274 extern void Redisplay __P((int)); 275 extern void RedisplayDisplays __P((int)); 276 extern void ShowHStatus __P((char *)); 277 extern void RefreshHStatus __P((void)); 278 extern void DisplayLine __P((struct mline *, struct mline *, int, int, int)); 279 extern void GotoPos __P((int, int)); 280 extern int CalcCost __P((char *)); 281 extern void ScrollH __P((int, int, int, int, int, struct mline *)); 282 extern void ScrollV __P((int, int, int, int, int, int)); 283 extern void PutChar __P((struct mchar *, int, int)); 284 extern void InsChar __P((struct mchar *, int, int, int, struct mline *)); 285 extern void WrapChar __P((struct mchar *, int, int, int, int, int, int, int)); 286 extern void ChangeScrollRegion __P((int, int)); 287 extern void InsertMode __P((int)); 288 extern void KeypadMode __P((int)); 289 extern void CursorkeysMode __P((int)); 290 extern void ReverseVideo __P((int)); 291 extern void CursorVisibility __P((int)); 292 extern void MouseMode __P((int)); 293 extern void ExtMouseMode __P((int)); 294 extern void SetFont __P((int)); 295 extern void SetAttr __P((int)); 296 extern void SetColor __P((int, int)); 297 extern void SetRendition __P((struct mchar *)); 298 extern void SetRenditionMline __P((struct mline *, int)); 299 extern void MakeStatus __P((char *)); 300 extern void RemoveStatus __P((void)); 301 extern int ResizeDisplay __P((int, int)); 302 extern void AddStr __P((char *)); 303 extern void AddStrn __P((char *, int)); 304 extern void Flush __P((int)); 305 extern void freetty __P((void)); 306 extern void Resize_obuf __P((void)); 307 #ifdef AUTO_NUKE 308 extern void NukePending __P((void)); 309 #endif 310 #ifdef RXVT_OSC 311 extern void ClearAllXtermOSC __P((void)); 312 extern void SetXtermOSC __P((int, char *, char *)); 313 #endif 314 #ifdef COLOR 315 extern int color256to16 __P((int)); 316 # ifdef COLORS256 317 extern int color256to88 __P((int)); 318 # endif 319 #endif 320 extern void ResetIdle __P((void)); 321 extern void KillBlanker __P((void)); 322 extern void DisplaySleep1000 __P((int, int)); 323 324 /* resize.c */ 325 extern int ChangeWindowSize __P((struct win *, int, int, int)); 326 extern void ChangeScreenSize __P((int, int, int)); 327 extern void CheckScreenSize __P((int)); 328 extern char *xrealloc __P((char *, int)); 329 extern void ResizeLayersToCanvases __P((void)); 330 extern void ResizeLayer __P((struct layer *, int, int, struct display *)); 331 extern int MayResizeLayer __P((struct layer *)); 332 extern void FreeAltScreen __P((struct win *)); 333 extern void EnterAltScreen __P((struct win *)); 334 extern void LeaveAltScreen __P((struct win *)); 335 336 /* sched.c */ 337 extern void evenq __P((struct event *)); 338 extern void evdeq __P((struct event *)); 339 extern void SetTimeout __P((struct event *, int)); 340 extern void sched __P((void)); 341 342 /* socket.c */ 343 extern int FindSocket __P((int *, int *, int *, char *, bool *)); 344 extern int MakeClientSocket __P((int, bool)); 345 extern int MakeServerSocket __P((bool)); 346 extern int RecoverSocket __P((void)); 347 extern int chsock __P((void)); 348 extern void ReceiveMsg __P((void)); 349 extern void SendCreateMsg __P((char *, struct NewWindow *)); 350 extern int SendErrorMsg __P((char *, char *)); 351 extern int SendAttachMsg __P((int, struct msg *, int)); 352 extern void ReceiveRaw __P((int)); 353 extern bool IsSocket __P((const char *)); 354 355 /* misc.c */ 356 extern char *SaveStr __P((const char *)); 357 extern char *SaveStrn __P((const char *, int)); 358 extern char *InStr __P((char *, const char *)); 359 #ifndef HAVE_STRERROR 360 extern char *strerror __P((int)); 361 #endif 362 extern void centerline __P((char *, int)); 363 extern void leftline __P((char *, int, struct mchar *)); 364 extern char *Filename __P((char *)); 365 extern char *stripdev __P((char *)); 366 #ifdef NEED_OWN_BCOPY 367 extern void xbcopy __P((char *, char *, int)); 368 #endif 369 extern void bclear __P((char *, int)); 370 extern void closeallfiles __P((int)); 371 extern int UserContext __P((void)); 372 extern void UserReturn __P((int)); 373 extern int UserStatus __P((void)); 374 #if defined(POSIX) || defined(hpux) 375 extern void (*xsignal __P((int, void (*)SIGPROTOARG))) __P(SIGPROTOARG); 376 #endif 377 #ifndef HAVE_RENAME 378 extern int rename __P((char *, char *)); 379 #endif 380 #if defined(HAVE_SETEUID) || defined(HAVE_SETREUID) 381 extern void xseteuid __P((int)); 382 extern void xsetegid __P((int)); 383 #endif 384 extern int AddXChar __P((char *, int)); 385 extern int AddXChars __P((char *, int, char *)); 386 extern void xsetenv __P((char *, char *)); 387 extern void sleep1000 __P((int)); 388 #ifdef DEBUG 389 extern void opendebug __P((int, int)); 390 #endif 391 #ifdef USEVARARGS 392 # ifndef HAVE_VSNPRINTF 393 extern int xvsnprintf __P((char *, int, char *, va_list)); 394 # endif 395 #else 396 extern int xsnprintf __P(()); 397 #endif 398 399 400 /* acl.c */ 401 #ifdef MULTIUSER 402 extern int AclCheckPermWin __P((struct acluser *, int, struct win *)); 403 extern int AclCheckPermCmd __P((struct acluser *, int, struct comm *)); 404 extern int AclSetPerm __P((struct acluser *, struct acluser *, char *, char *)); 405 extern int AclUmask __P((struct acluser *, char *, char **)); 406 extern int UsersAcl __P((struct acluser *, int, char **)); 407 extern void AclWinSwap __P((int, int)); 408 extern int NewWindowAcl __P((struct win *, struct acluser *)); 409 extern void FreeWindowAcl __P((struct win *)); 410 extern char *DoSu __P((struct acluser **, char *, char *, char *)); 411 extern int AclLinkUser __P((char *, char *)); 412 #endif /* MULTIUSER */ 413 extern int UserFreeCopyBuffer __P((struct acluser *)); 414 extern struct acluser **FindUserPtr __P((char *)); 415 extern int UserAdd __P((char *, char *, struct acluser **)); 416 extern int UserDel __P((char *, struct acluser **)); 417 418 419 /* braile.c */ 420 #ifdef HAVE_BRAILLE 421 extern void InitBraille __P((void)); 422 extern void RefreshBraille __P((void)); 423 extern void DoBrailleAction __P((struct action *, int)); 424 extern void BGotoPos __P((struct layer *, int, int)); 425 extern void BPutChar __P((struct layer *, struct mchar *, int, int)); 426 extern void BPutStr __P((struct layer *, char *, int, struct mchar *, int, int)); 427 extern void BCDisplayLine __P((struct layer *, struct mline *, int, int, int, int)); 428 #endif 429 430 431 432 433 /* layer.c */ 434 extern void LGotoPos __P((struct layer *, int, int)); 435 extern void LPutChar __P((struct layer *, struct mchar *, int, int)); 436 extern void LInsChar __P((struct layer *, struct mchar *, int, int, struct mline *)); 437 extern void LPutStr __P((struct layer *, char *, int, struct mchar *, int, int)); 438 extern void LPutWinMsg __P((struct layer *, char *, int, struct mchar *, int, int)); 439 extern void LScrollH __P((struct layer *, int, int, int, int, int, struct mline *)); 440 extern void LScrollV __P((struct layer *, int, int, int, int)); 441 extern void LClearAll __P((struct layer *, int)); 442 extern void LClearArea __P((struct layer *, int, int, int, int, int, int)); 443 extern void LClearLine __P((struct layer *, int, int, int, int, struct mline *)); 444 extern void LRefreshAll __P((struct layer *, int)); 445 extern void LCDisplayLine __P((struct layer *, struct mline *, int, int, int, int)); 446 extern void LCDisplayLineWrap __P((struct layer *, struct mline *, int, int, int, int)); 447 extern void LSetRendition __P((struct layer *, struct mchar *)); 448 extern void LWrapChar __P((struct layer *, struct mchar *, int, int, int, int)); 449 extern void LCursorVisibility __P((struct layer *, int)); 450 extern void LSetFlow __P((struct layer *, int)); 451 extern void LKeypadMode __P((struct layer *, int)); 452 extern void LCursorkeysMode __P((struct layer *, int)); 453 extern void LMouseMode __P((struct layer *, int)); 454 extern void LExtMouseMode __P((struct layer *, int)); 455 #if defined(USEVARARGS) 456 extern void LMsg __P((int, const char *, ...)) __attribute__((format(printf, 2, 3))); 457 #else 458 extern void LMsg __P(()); 459 #endif 460 extern void KillLayerChain __P((struct layer *)); 461 extern int InitOverlayPage __P((int, struct LayFuncs *, int)); 462 extern void ExitOverlayPage __P((void)); 463 extern int LayProcessMouse __P((struct layer *, unsigned char)); 464 extern void LayProcessMouseSwitch __P((struct layer *, int)); 465 466 /* teln.c */ 467 #ifdef BUILTIN_TELNET 468 extern int TelOpenAndConnect __P((struct win *)); 469 extern int TelIsline __P((struct win *p)); 470 extern void TelProcessLine __P((char **, int *)); 471 extern int DoTelnet __P((char *, int *, int)); 472 extern int TelIn __P((struct win *, char *, int, int)); 473 extern void TelBreak __P((struct win *)); 474 extern void TelWindowSize __P((struct win *)); 475 extern void TelStatus __P((struct win *, char *, int)); 476 #endif 477 478 /* nethack.c */ 479 extern const char *DoNLS __P((const char *)); 480 481 /* encoding.c */ 482 #ifdef ENCODINGS 483 # ifdef UTF8 484 extern void InitBuiltinTabs __P((void)); 485 extern struct mchar *recode_mchar __P((struct mchar *, int, int)); 486 extern struct mline *recode_mline __P((struct mline *, int, int, int)); 487 extern int FromUtf8 __P((int, int *)); 488 extern void AddUtf8 __P((int)); 489 extern int ToUtf8 __P((char *, int)); 490 extern int ToUtf8_comb __P((char *, int)); 491 extern int utf8_isdouble __P((int)); 492 extern int utf8_iscomb __P((int)); 493 extern void utf8_handle_comb __P((int, struct mchar *)); 494 extern int ContainsSpecialDeffont __P((struct mline *, int, int, int)); 495 extern int LoadFontTranslation __P((int, char *)); 496 extern void LoadFontTranslationsForEncoding __P((int)); 497 # endif /* UTF8 */ 498 extern void WinSwitchEncoding __P((struct win *, int)); 499 extern int FindEncoding __P((char *)); 500 extern char *EncodingName __P((int)); 501 extern int EncodingDefFont __P((int)); 502 extern void ResetEncoding __P((struct win *)); 503 extern int CanEncodeFont __P((int, int)); 504 extern int DecodeChar __P((int, int, int *)); 505 extern int RecodeBuf __P((unsigned char *, int, int, int, unsigned char *)); 506 # ifdef DW_CHARS 507 extern int PrepareEncodedChar __P((int)); 508 # endif 509 #endif 510 extern int EncodeChar __P((char *, int, int, int *)); 511 512 /* layout.c */ 513 extern void RemoveLayout __P((struct layout *)); 514 extern int LayoutDumpCanvas __P((struct canvas *, char *)); 515