-/* NetHack 3.6 termcap.c $NHDT-Date: 1446856761 2015/11/07 00:39:21 $ $NHDT-Branch: master $:$NHDT-Revision: 1.22 $ */
+/* NetHack 3.6 termcap.c $NHDT-Date: 1447234979 2015/11/11 09:42:59 $ $NHDT-Branch: master $:$NHDT-Revision: 1.23 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
static void NDECL(kill_hilite);
#endif
-/* (see tcap.h) -- nh_CM, nh_ND, nh_CD, nh_HI,nh_HE, nh_US,nh_UE,
- ul_hack */
+/* (see tcap.h) -- nh_CM, nh_ND, nh_CD, nh_HI,nh_HE, nh_US,nh_UE, ul_hack */
struct tc_lcl_data tc_lcl_data = { 0, 0, 0, 0, 0, 0, 0, FALSE };
STATIC_VAR char *HO, *CL, *CE, *UP, *XD, *BC, *SO, *SE, *TI, *TE;
#endif
#ifdef TERMLIB
+boolean dynamic_HIHE = FALSE;
#ifdef TEXTCOLOR
STATIC_VAR char *MD;
#endif
nh_US = "\033[4m";
MR = "\033[7m";
TI = nh_HE = ME = SE = nh_UE = "\033[0m";
-/* strictly, SE should be 2, and nh_UE should be 24,
- but we can't trust all ANSI emulators to be
- that complete. -3. */
+ /* strictly, SE should be 2, and nh_UE should be 24,
+ but we can't trust all ANSI emulators to be
+ that complete. -3. */
#ifndef MICRO
AS = "\016";
AE = "\017";
#else
HO = Tgetstr("ho");
#endif
-/*
- * LI and CO are set in ioctl.c via a TIOCGWINSZ if available. If
- * the kernel has values for either we should use them rather than
- * the values from TERMCAP ...
- */
+ /*
+ * LI and CO are set in ioctl.c via a TIOCGWINSZ if available. If
+ * the kernel has values for either we should use them rather than
+ * the values from TERMCAP ...
+ */
#ifndef MICRO
if (!CO)
CO = tgetnum("co");
LI = tgetnum("li");
#else
#if defined(TOS) && defined(__GNUC__)
- if (!strcmp(term, "builtin"))
+ if (!strcmp(term, "builtin")) {
get_scr_size();
- else {
+ } else
#endif
+ {
CO = tgetnum("co");
LI = tgetnum("li");
if (!LI || !CO) /* if we don't override it */
get_scr_size();
-#if defined(TOS) && defined(__GNUC__)
}
-#endif
-#endif
+#endif /* ?MICRO */
#ifdef CLIPPING
if (CO < COLNO || LI < ROWNO + 3)
setclipped();
* pager as a string - so how can you send it NULs???
* -jsb
*/
- nh_HI = (char *) alloc((unsigned) (strlen(SO) + 1));
- nh_HE = (char *) alloc((unsigned) (strlen(ME) + 1));
- i = 0;
- while (digit(SO[i]))
- i++;
- Strcpy(nh_HI, &SO[i]);
- i = 0;
- while (digit(ME[i]))
- i++;
- Strcpy(nh_HE, &ME[i]);
+ for (i = 0; digit(SO[i]); ++i)
+ continue;
+ nh_HI = dupstr(&SO[i]);
+ for (i = 0; digit(ME[i]); ++i)
+ continue;
+ nh_HE = dupstr(&ME[i]);
+ dynamic_HIHE = TRUE;
+
AS = Tgetstr("as");
AE = Tgetstr("ae");
nh_CD = Tgetstr("cd");
void
tty_shutdown()
{
-#if defined(TEXTCOLOR) && defined(TERMLIB)
+ /* we only attempt to clean up a few individual termcap variables */
+#ifdef TERMLIB
+#ifdef TEXTCOLOR
kill_hilite();
#endif
- /* we don't attempt to clean up individual termcap variables [yet?] */
+ if (dynamic_HIHE) {
+ free((genericptr_t) nh_HI), nh_HI = (char *) 0;
+ free((genericptr_t) nh_HE), nh_HE = (char *) 0;
+ dynamic_HIHE = FALSE;
+ }
+#endif
return;
}
}
/* See note above. xputc() is a special function. */
-void xputc(c)
+void
+xputc(c)
#if defined(apollo)
int c;
#else
#else /* MICRO */
/* BUG: if the padding character is visible, as it is on the 5620
then this looks terrible. */
- if (flags.null)
+ if (flags.null) {
#ifdef TERMINFO
/* cbosgd!cbcephus!pds for SYS V R2 */
#ifdef NHSTDC
#endif
#endif
- else if (ospeed > 0 && ospeed < SIZE(tmspc10) && nh_CM) {
+ } else if (ospeed > 0 && ospeed < SIZE(tmspc10) && nh_CM) {
/* delay by sending cm(here) an appropriate number of times */
register int cmlen =
strlen(tgoto(nh_CM, ttyDisplay->curx, ttyDisplay->cury));
#endif /* MICRO */
}
-void cl_eos() /* free after Robert Viduya */
-{ /* must only be called with curx = 1 */
-
- if (nh_CD)
+/* must only be called with curx = 1 */
+void
+cl_eos() /* free after Robert Viduya */
+{
+ if (nh_CD) {
xputs(nh_CD);
- else {
+ } else {
register int cy = ttyDisplay->cury + 1;
+
while (cy <= LI - 2) {
cl_end();
xputc('\n');
-/* NetHack 3.6 wintty.c $NHDT-Date: 1446856765 2015/11/07 00:39:25 $ $NHDT-Branch: master $:$NHDT-Revision: 1.110 $ */
+/* NetHack 3.6 wintty.c $NHDT-Date: 1447234979 2015/11/11 09:42:59 $ $NHDT-Branch: master $:$NHDT-Revision: 1.112 $ */
/* Copyright (c) David Cohrs, 1991 */
/* NetHack may be freely redistributed. See license for details. */
/* Just forget any windows existed, since we're about to exit anyway.
* Disable windows to avoid calls to window routines.
*/
- for (i = 0; i < MAXWIN; i++)
- if (wins[i] && (i != BASE_WINDOW)) {
+ for (i = 0; i < MAXWIN; i++) {
+ if (i == BASE_WINDOW)
+ continue; /* handle wins[BASE_WINDOW] last */
+ if (wins[i]) {
#ifdef FREE_ALL_MEMORY
free_window_info(wins[i], TRUE);
free((genericptr_t) wins[i]);
#endif
- wins[i] = 0;
+ wins[i] = (struct WinDesc *) 0;
}
+ }
+#ifdef FREE_ALL_MEMORY
+ if (BASE_WINDOW != WIN_ERR && wins[BASE_WINDOW]) {
+ free_window_info(wins[BASE_WINDOW], TRUE);
+ free((genericptr_t) wins[BASE_WINDOW]);
+ wins[BASE_WINDOW] = (struct WinDesc *) 0;
+ BASE_WINDOW = WIN_ERR;
+ }
+ free((genericptr_t) ttyDisplay);
+ ttyDisplay = (struct DisplayDesc *) 0;
+#endif
+
#ifndef NO_TERMS /*(until this gets added to the window interface)*/
tty_shutdown(); /* cleanup termcap/terminfo/whatever */
#endif