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