1# ncurses 6.1 - patch 20191221 - Thomas E. Dickey
2#
3# ------------------------------------------------------------------------------
4#
5# Ncurses 6.1 is at
6# 	ftp.gnu.org:/pub/gnu
7#
8# Patches for ncurses 6.1 can be found at
9# 	ftp://ftp.invisible-island.net/ncurses/6.1
10#	http://invisible-mirror.net/archives/ncurses/6.1
11#
12# ------------------------------------------------------------------------------
13# ftp://ftp.invisible-island.net/ncurses/6.1/ncurses-6.1-20191221.patch.gz
14# patch by Thomas E. Dickey <dickey@invisible-island.net>
15# created  Sun Dec 22 03:20:49 UTC 2019
16# ------------------------------------------------------------------------------
17# Ada95/samples/Makefile.in        |    5
18# NEWS                             |   12 +
19# VERSION                          |    2
20# dist.mk                          |    4
21# include/MKterm.h.awk.in          |    6
22# ncurses/base/keyok.c             |    5
23# ncurses/base/lib_color.c         |    4
24# package/debian-mingw/changelog   |    4
25# package/debian-mingw64/changelog |    4
26# package/debian/changelog         |    4
27# package/mingw-ncurses.nsi        |    4
28# package/mingw-ncurses.spec       |    2
29# package/ncurses.spec             |    2
30# package/ncursest.spec            |    2
31# test/tracemunch                  |  400 ++++++++++++++++++++++++++++++++++---
32# 15 files changed, 412 insertions(+), 48 deletions(-)
33# ------------------------------------------------------------------------------
34Index: Ada95/samples/Makefile.in
35Prereq:  1.56
36--- ncurses-6.1-20191214+/Ada95/samples/Makefile.in	2019-09-08 00:01:38.000000000 +0000
37+++ ncurses-6.1-20191221/Ada95/samples/Makefile.in	2019-12-22 01:09:19.000000000 +0000
38@@ -28,7 +28,7 @@
39 #
40 #  Author:  Juergen Pfeifer, 1996
41 #
42-#  $Id: Makefile.in,v 1.56 2019/09/08 00:01:38 tom Exp $
43+#  $Id: Makefile.in,v 1.57 2019/12/22 01:09:19 tom Exp $
44 #
45 .SUFFIXES:
46
47@@ -82,6 +82,7 @@
48 LIBDIR		= $(DESTDIR)$(libdir)
49
50 MY_DATADIR	= $(DATADIR)/@ADA_LIBNAME@
51+THIS_DATADIR	= $(datadir)/@ADA_LIBNAME@
52
53 ################################################################################
54 ada_srcdir	= ../src
55@@ -165,4 +166,4 @@
56
57 $(THISLIB)-explanation.adb : $(srcdir)/$(THISLIB)-explanation.adb_p
58 	rm -f $@
59-	$(ADAPREP) -DTHIS_DATADIR=\"$(DATADIR)\" @GNATPREP_OPTS@ $(srcdir)/$(THISLIB)-explanation.adb_p $@
60+	$(ADAPREP) -DTHIS_DATADIR=\"$(THIS_DATADIR)/\" @GNATPREP_OPTS@ $(srcdir)/$(THISLIB)-explanation.adb_p $@
61Index: NEWS
62Prereq:  1.3416
63--- ncurses-6.1-20191214+/NEWS	2019-12-14 21:26:03.000000000 +0000
64+++ ncurses-6.1-20191221/NEWS	2019-12-21 22:43:54.000000000 +0000
65@@ -25,7 +25,7 @@
66 -- sale, use or other dealings in this Software without prior written        --
67 -- authorization.                                                            --
68 -------------------------------------------------------------------------------
69--- $Id: NEWS,v 1.3416 2019/12/14 21:26:03 tom Exp $
70+-- $Id: NEWS,v 1.3420 2019/12/21 22:43:54 tom Exp $
71 -------------------------------------------------------------------------------
72
73 This is a log of changes that ncurses has gone through since Zeyd started
74@@ -45,6 +45,16 @@
75 Changes through 1.9.9e did not credit all contributions;
76 it is not possible to add this information.
77
78+20191221
79+	+ correct pathname used in Ada95 sample programs for explain.txt, to
80+	  work with test-packages.
81+	+ improve tracemunch:
82+	  + keep track of TERMINAL* values
83+	  + if tracing was first turned on after initialization, attempt to
84+	    show distinct screen, window and terminal names anyway.
85+	+ ensure that GCC_NORETURN is defined in term.h, because the prototype
86+	  for exit_terminfo() uses it (report by Werner Fink).
87+
88 20191214
89 	+ add exit_curses() and exit_terminfo() to replace internal symbols for
90 	  leak-checking.
91Index: VERSION
92--- ncurses-6.1-20191214+/VERSION	2019-12-14 17:50:13.000000000 +0000
93+++ ncurses-6.1-20191221/VERSION	2019-12-21 11:16:12.000000000 +0000
94@@ -1 +1 @@
95-5:0:10	6.1	20191214
96+5:0:10	6.1	20191221
97Index: dist.mk
98Prereq:  1.1319
99--- ncurses-6.1-20191214+/dist.mk	2019-12-14 17:50:13.000000000 +0000
100+++ ncurses-6.1-20191221/dist.mk	2019-12-21 11:16:12.000000000 +0000
101@@ -25,7 +25,7 @@
102 # use or other dealings in this Software without prior written               #
103 # authorization.                                                             #
104 ##############################################################################
105-# $Id: dist.mk,v 1.1319 2019/12/14 17:50:13 tom Exp $
106+# $Id: dist.mk,v 1.1320 2019/12/21 11:16:12 tom Exp $
107 # Makefile for creating ncurses distributions.
108 #
109 # This only needs to be used directly as a makefile by developers, but
110@@ -37,7 +37,7 @@
111 # These define the major/minor/patch versions of ncurses.
112 NCURSES_MAJOR = 6
113 NCURSES_MINOR = 1
114-NCURSES_PATCH = 20191214
115+NCURSES_PATCH = 20191221
116
117 # We don't append the patch to the version, since this only applies to releases
118 VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR)
119Index: include/MKterm.h.awk.in
120Prereq:  1.72
121--- ncurses-6.1-20191214+/include/MKterm.h.awk.in	2019-12-14 22:31:32.000000000 +0000
122+++ ncurses-6.1-20191221/include/MKterm.h.awk.in	2019-12-21 18:29:09.000000000 +0000
123@@ -59,7 +59,7 @@
124 	print  "/*    and: Thomas E. Dickey                        1995-on                  */"
125 	print  "/****************************************************************************/"
126 	print  ""
127-	print  "/* $Id: MKterm.h.awk.in,v 1.72 2019/12/14 22:31:32 tom Exp $ */"
128+	print  "/* $Id: MKterm.h.awk.in,v 1.73 2019/12/21 18:29:09 tom Exp $ */"
129 	print  ""
130 	print  "/*"
131 	print  "**	term.h -- Definition of struct term"
132@@ -147,6 +147,10 @@
133 	print  "#define SET_TTY(fd, buf) stty(fd, buf)"
134 	print  "#endif"
135 	print  ""
136+	print  "#ifndef	GCC_NORETURN"
137+	print  "#define	GCC_NORETURN /* nothing */"
138+	print  "#endif"
139+	print  ""
140 	print  "#define NAMESIZE 256"
141 	print  ""
142 	print  "/* The cast works because TERMTYPE is the first data in TERMINAL */"
143Index: ncurses/base/keyok.c
144Prereq:  1.14
145--- ncurses-6.1-20191214+/ncurses/base/keyok.c	2014-03-08 20:32:59.000000000 +0000
146+++ ncurses-6.1-20191221/ncurses/base/keyok.c	2019-12-21 22:40:32.000000000 +0000
147@@ -1,5 +1,5 @@
148 /****************************************************************************
149- * Copyright (c) 1998-2012,2014 Free Software Foundation, Inc.              *
150+ * Copyright (c) 1998-2014,2019 Free Software Foundation, Inc.              *
151  *                                                                          *
152  * Permission is hereby granted, free of charge, to any person obtaining a  *
153  * copy of this software and associated documentation files (the            *
154@@ -33,7 +33,7 @@
155
156 #include <curses.priv.h>
157
158-MODULE_ID("$Id: keyok.c,v 1.14 2014/03/08 20:32:59 tom Exp $")
159+MODULE_ID("$Id: keyok.c,v 1.15 2019/12/21 22:40:32 tom Exp $")
160
161 /*
162  * Enable (or disable) ncurses' interpretation of a keycode by adding (or
163@@ -55,7 +55,6 @@
164 #ifdef USE_TERM_DRIVER
165 	code = CallDriver_2(sp, td_kyOk, c, flag);
166 #else
167-	T((T_CALLED("keyok(%d,%d)"), c, flag));
168 	if (c >= 0) {
169 	    int count = 0;
170 	    char *s;
171Index: ncurses/base/lib_color.c
172Prereq:  1.140
173--- ncurses-6.1-20191214+/ncurses/base/lib_color.c	2019-01-21 01:55:18.000000000 +0000
174+++ ncurses-6.1-20191221/ncurses/base/lib_color.c	2019-12-22 00:57:53.000000000 +0000
175@@ -48,7 +48,7 @@
176 #define CUR SP_TERMTYPE
177 #endif
178
179-MODULE_ID("$Id: lib_color.c,v 1.140 2019/01/21 01:55:18 tom Exp $")
180+MODULE_ID("$Id: lib_color.c,v 1.142 2019/12/22 00:57:53 tom Exp $")
181
182 #ifdef USE_TERM_DRIVER
183 #define CanChange      InfoOf(SP_PARM).canchange
184@@ -803,7 +803,7 @@
185     int code = FALSE;
186
187     (void) SP_PARM;
188-    T((T_CALLED("has_colors()")));
189+    T((T_CALLED("has_colors(%p)"), (void *) SP_PARM));
190     if (HasTerminal(SP_PARM)) {
191 #ifdef USE_TERM_DRIVER
192 	code = HasColor;
193Index: package/debian-mingw/changelog
194--- ncurses-6.1-20191214+/package/debian-mingw/changelog	2019-12-14 17:50:13.000000000 +0000
195+++ ncurses-6.1-20191221/package/debian-mingw/changelog	2019-12-21 11:16:12.000000000 +0000
196@@ -1,8 +1,8 @@
197-ncurses6 (6.1+20191214) unstable; urgency=low
198+ncurses6 (6.1+20191221) unstable; urgency=low
199
200   * latest weekly patch
201
202- -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 14 Dec 2019 12:50:13 -0500
203+ -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 21 Dec 2019 06:16:12 -0500
204
205 ncurses6 (5.9-20131005) unstable; urgency=low
206
207Index: package/debian-mingw64/changelog
208--- ncurses-6.1-20191214+/package/debian-mingw64/changelog	2019-12-14 17:50:13.000000000 +0000
209+++ ncurses-6.1-20191221/package/debian-mingw64/changelog	2019-12-21 11:16:12.000000000 +0000
210@@ -1,8 +1,8 @@
211-ncurses6 (6.1+20191214) unstable; urgency=low
212+ncurses6 (6.1+20191221) unstable; urgency=low
213
214   * latest weekly patch
215
216- -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 14 Dec 2019 12:50:13 -0500
217+ -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 21 Dec 2019 06:16:12 -0500
218
219 ncurses6 (5.9-20131005) unstable; urgency=low
220
221Index: package/debian/changelog
222--- ncurses-6.1-20191214+/package/debian/changelog	2019-12-14 17:50:13.000000000 +0000
223+++ ncurses-6.1-20191221/package/debian/changelog	2019-12-21 11:16:12.000000000 +0000
224@@ -1,8 +1,8 @@
225-ncurses6 (6.1+20191214) unstable; urgency=low
226+ncurses6 (6.1+20191221) unstable; urgency=low
227
228   * latest weekly patch
229
230- -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 14 Dec 2019 12:50:13 -0500
231+ -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 21 Dec 2019 06:16:12 -0500
232
233 ncurses6 (5.9-20120608) unstable; urgency=low
234
235Index: package/mingw-ncurses.nsi
236Prereq:  1.365
237--- ncurses-6.1-20191214+/package/mingw-ncurses.nsi	2019-12-14 17:50:13.000000000 +0000
238+++ ncurses-6.1-20191221/package/mingw-ncurses.nsi	2019-12-21 11:16:12.000000000 +0000
239@@ -1,4 +1,4 @@
240-; $Id: mingw-ncurses.nsi,v 1.365 2019/12/14 17:50:13 tom Exp $
241+; $Id: mingw-ncurses.nsi,v 1.366 2019/12/21 11:16:12 tom Exp $
242
243 ; TODO add examples
244 ; TODO bump ABI to 6
245@@ -10,7 +10,7 @@
246 !define VERSION_MAJOR "6"
247 !define VERSION_MINOR "1"
248 !define VERSION_YYYY  "2019"
249-!define VERSION_MMDD  "1214"
250+!define VERSION_MMDD  "1221"
251 !define VERSION_PATCH ${VERSION_YYYY}${VERSION_MMDD}
252
253 !define MY_ABI   "5"
254Index: package/mingw-ncurses.spec
255--- ncurses-6.1-20191214+/package/mingw-ncurses.spec	2019-12-14 17:50:13.000000000 +0000
256+++ ncurses-6.1-20191221/package/mingw-ncurses.spec	2019-12-21 11:16:12.000000000 +0000
257@@ -3,7 +3,7 @@
258 Summary: shared libraries for terminal handling
259 Name: mingw32-ncurses6
260 Version: 6.1
261-Release: 20191214
262+Release: 20191221
263 License: X11
264 Group: Development/Libraries
265 Source: ncurses-%{version}-%{release}.tgz
266Index: package/ncurses.spec
267--- ncurses-6.1-20191214+/package/ncurses.spec	2019-12-14 17:50:13.000000000 +0000
268+++ ncurses-6.1-20191221/package/ncurses.spec	2019-12-21 11:16:12.000000000 +0000
269@@ -1,7 +1,7 @@
270 Summary: shared libraries for terminal handling
271 Name: ncurses6
272 Version: 6.1
273-Release: 20191214
274+Release: 20191221
275 License: X11
276 Group: Development/Libraries
277 Source: ncurses-%{version}-%{release}.tgz
278Index: package/ncursest.spec
279--- ncurses-6.1-20191214+/package/ncursest.spec	2019-12-14 17:50:13.000000000 +0000
280+++ ncurses-6.1-20191221/package/ncursest.spec	2019-12-21 11:16:12.000000000 +0000
281@@ -1,7 +1,7 @@
282 Summary: Curses library with POSIX thread support.
283 Name: ncursest6
284 Version: 6.1
285-Release: 20191214
286+Release: 20191221
287 License: X11
288 Group: Development/Libraries
289 Source: ncurses-%{version}-%{release}.tgz
290Index: test/tracemunch
291Prereq:  1.24
292--- ncurses-6.1-20191214+/test/tracemunch	2018-12-29 22:20:06.000000000 +0000
293+++ ncurses-6.1-20191221/test/tracemunch	2019-12-21 22:33:35.000000000 +0000
294@@ -1,7 +1,7 @@
295 #!/usr/bin/env perl
296-# $Id: tracemunch,v 1.24 2018/12/29 22:20:06 tom Exp $
297+# $Id: tracemunch,v 1.26 2019/12/21 22:33:35 tom Exp $
298 ##############################################################################
299-# Copyright (c) 1998-2017,2018 Free Software Foundation, Inc.                #
300+# Copyright (c) 1998-2018,2019 Free Software Foundation, Inc.                #
301 #                                                                            #
302 # Permission is hereby granted, free of charge, to any person obtaining a    #
303 # copy of this software and associated documentation files (the "Software"), #
304@@ -42,8 +42,305 @@
305 our $waddnstr =
306   'waddnstr\(0x([[:xdigit:]]+),"([^\"]+)",[0-9]+\) called \{A_NORMAL\}';
307
308+# If the trace is complete, we can infer addresses using the return value from
309+# newwin, etc.  But if it is incomplete, we can still check for special cases
310+# such as SCREEN* and WINDOW* parameters.  In this table, the type for the
311+# first parameter is encoded, relying upon an ncurses programming convention:
312+# 1 = SCREEN*
313+# 2 = WINDOW*
314+# 4 = TERMINAL*
315+our %known_p1 = qw(
316+  TransformLine           1
317+  _nc_freewin             2
318+  _nc_initscr             1
319+  _nc_makenew             1
320+  _nc_mingw_console_read  1
321+  _nc_reset_colors        1
322+  _nc_scroll_optimize     1
323+  _nc_tinfo               1
324+  _nc_tinfo_mvcur         1
325+  _nc_wgetch              2
326+  adjust_window           2
327+  assume_default_colors   1
328+  attr_get                2
329+  baudrate                1
330+  beep                    1
331+  border_set              2
332+  box                     2
333+  box_set                 2
334+  can_change_color        1
335+  cbreak                  1
336+  clearok                 2
337+  color_content           1
338+  copywin                 2
339+  curs_set                1
340+  decrease_size           1
341+  def_prog_mode           1
342+  def_shell_mode          1
343+  define_key              1
344+  del_curterm             1
345+  delay_output            1
346+  delscreen               1
347+  delwin                  2
348+  derwin                  2
349+  doupdate                1
350+  dupwin                  2
351+  echo                    1
352+  endwin                  1
353+  erasechar               1
354+  filter                  1
355+  flash                   1
356+  flushinp                1
357+  getattrs                2
358+  getbegx                 2
359+  getbegy                 2
360+  getbkgd                 2
361+  getcurx                 2
362+  getcury                 2
363+  getmaxx                 2
364+  getmaxy                 2
365+  getmouse                1
366+  getparx                 2
367+  getpary                 2
368+  halfdelay               1
369+  has_ic                  1
370+  has_il                  1
371+  has_key                 1
372+  idcok                   2
373+  idlok                   2
374+  immedok                 2
375+  increase_size           1
376+  init_color              1
377+  init_pair               1
378+  intrflush               1
379+  is_cleared              2
380+  is_idcok                2
381+  is_idlok                2
382+  is_immedok              2
383+  is_keypad               2
384+  is_leaveok              2
385+  is_linetouched          2
386+  is_nodelay              2
387+  is_notimeout            2
388+  is_pad                  2
389+  is_scrollok             2
390+  is_subwin               2
391+  is_syncok               2
392+  is_term_resized         1
393+  is_wintouched           2
394+  key_defined             1
395+  keybound                1
396+  keyok                   1
397+  keypad                  2
398+  killchar                1
399+  leaveok                 2
400+  longname                1
401+  meta                    2
402+  mouseinterval           1
403+  mousemask               1
404+  mvcur                   1
405+  mvderwin                2
406+  mvwadd_wch              2
407+  mvwadd_wchnstr          2
408+  mvwadd_wchstr           2
409+  mvwaddch                2
410+  mvwaddchnstr            2
411+  mvwaddchstr             2
412+  mvwaddnstr              2
413+  mvwaddnwstr             2
414+  mvwaddstr               2
415+  mvwaddwstr              2
416+  mvwchgat                2
417+  mvwdelch                2
418+  mvwget_wch              2
419+  mvwget_wstr             2
420+  mvwgetch                2
421+  mvwgetn_wstr            2
422+  mvwgetnstr              2
423+  mvwgetstr               2
424+  mvwhline                2
425+  mvwhline_set            2
426+  mvwin                   2
427+  mvwin_wch               2
428+  mvwin_wchnstr           2
429+  mvwin_wchstr            2
430+  mvwinch                 2
431+  mvwinchnstr             2
432+  mvwinchstr              2
433+  mvwins_nwstr            2
434+  mvwins_wch              2
435+  mvwins_wstr             2
436+  mvwinsch                2
437+  mvwinsnstr              2
438+  mvwinsstr               2
439+  mvwinstr                2
440+  mvwinwstr               2
441+  mvwvline                2
442+  mvwvline_set            2
443+  newpad                  1
444+  newterm                 1
445+  newwin                  1
446+  nl                      1
447+  nocbreak                1
448+  nodelay                 2
449+  noecho                  1
450+  nofilter                1
451+  nonl                    1
452+  noqiflush               1
453+  noraw                   1
454+  notimeout               2
455+  overlap                 2
456+  overlay                 2
457+  overwrite               2
458+  pair_content            1
459+  pecho_wchar             2
460+  pechochar               2
461+  pnoutrefresh            2
462+  putwin                  2
463+  qiflush                 1
464+  raw                     1
465+  redrawwin               2
466+  reset_prog_mode         1
467+  reset_shell_mode        1
468+  resetty                 1
469+  resize_term             1
470+  resizeterm              1
471+  restartterm             1
472+  ripoffline              1
473+  savetty                 1
474+  scr_init                1
475+  scr_restore             1
476+  scr_set                 1
477+  scroll                  2
478+  scrollok                2
479+  set_curterm             4
480+  set_term                1
481+  slk_attr                1
482+  slk_attr_set            1
483+  slk_attroff             1
484+  slk_attron              1
485+  slk_attrset             1
486+  slk_clear               1
487+  slk_color               1
488+  slk_init                1
489+  slk_label               1
490+  slk_noutrefresh         1
491+  slk_refresh             1
492+  slk_restore             1
493+  slk_set                 1
494+  slk_touch               1
495+  start_color             1
496+  subwin                  2
497+  syncok                  2
498+  termattrs               1
499+  termname                1
500+  tgetflag                1
501+  tgetnum                 1
502+  tigetflag               1
503+  tigetnum                1
504+  tigetstr                1
505+  tinfo                   1
506+  touchline               2
507+  touchwin                2
508+  typeahead               1
509+  unget_wch               1
510+  ungetch                 1
511+  ungetmouse              1
512+  untouchwin              2
513+  use_default_colors      1
514+  use_env                 1
515+  use_legacy_coding       1
516+  use_screen              1
517+  use_tioctl              1
518+  use_window              2
519+  vidattr                 1
520+  vidputs                 1
521+  vw_printw               2
522+  vwprintw                2
523+  wadd_wch                2
524+  wadd_wchnstr            2
525+  wadd_wchstr             2
526+  waddch                  2
527+  waddchnstr              2
528+  waddchstr               2
529+  waddnstr                2
530+  waddnwstr               2
531+  waddstr                 2
532+  waddwstr                2
533+  wattr_get               2
534+  wattr_off               2
535+  wattr_on                2
536+  wattr_set               2
537+  wattroff                2
538+  wattron                 2
539+  wattrset                2
540+  wbkgd                   2
541+  wbkgdset                2
542+  wborder                 2
543+  wborder_set             2
544+  wchgat                  2
545+  wclear                  2
546+  wclrtobot               2
547+  wclrtoeol               2
548+  wcolor_set              2
549+  wcursyncup              2
550+  wdelch                  2
551+  wdeleteln               2
552+  wechochar               2
553+  wenclose                2
554+  werase                  2
555+  wget_wch                2
556+  wget_wstr               2
557+  wgetbkgrnd              2
558+  wgetch                  2
559+  wgetch_events           2
560+  wgetdelay               2
561+  wgetn_wstr              2
562+  wgetnstr                2
563+  wgetparent              2
564+  wgetscrreg              2
565+  wgetstr                 2
566+  whline                  2
567+  whline_set              2
568+  win_wch                 2
569+  win_wchnstr             2
570+  win_wchstr              2
571+  winch                   2
572+  winchnstr               2
573+  winchstr                2
574+  winnstr                 2
575+  winnwstr                2
576+  wins_nwstr              2
577+  wins_wch                2
578+  wins_wstr               2
579+  winsch                  2
580+  winsdelln               2
581+  winsertln               2
582+  winsnstr                2
583+  winsstr                 2
584+  winstr                  2
585+  winwstr                 2
586+  wmouse_trafo            2
587+  wmove                   2
588+  wnoutrefresh            2
589+  wprintw                 2
590+  wredrawln               2
591+  wrefresh                2
592+  wresize                 2
593+  wscrl                   2
594+  wsetscrreg              2
595+  wstandend               2
596+  wstandout               2
597+  wsyncdown               2
598+  wsyncup                 2
599+  wtimeout                2
600+  wtouchln                2
601+  wvline                  2
602+);
603+
604 our $scr_nums = 0;
605 our $thr_nums = 0;
606+our $trm_nums = 0;
607 our $try_nums = 0;
608 our $win_nums = 0;
609 our $curscr   = "";
610@@ -51,40 +348,90 @@
611 our $stdscr   = "";
612 our %scr_addr;
613 our %thr_addr;
614+our %trm_addr;
615 our %try_addr;
616 our %win_addr;
617
618-sub transaddr {
619+sub has_addr($) {
620+    my $value  = shift;
621+    my $result = 0;
622+    $result = 1 if ( $value =~ /\b0x[[:xdigit:]]+\b/i );
623+    return $result;
624+}
625+
626+sub transaddr($) {
627+    my $arg = shift;
628     my $n;
629-    my $arg = $_[0];
630
631     $arg =~ s/\b$curscr\b/curscr/g if ($curscr);
632     $arg =~ s/\b$newscr\b/newscr/g if ($newscr);
633     $arg =~ s/\b$stdscr\b/stdscr/g if ($stdscr);
634-    foreach my $addr ( keys %scr_addr ) {
635-        $n = $scr_addr{$addr};
636-        $arg =~ s/\b$addr\b/screen$n/g if ( defined $n );
637-    }
638-    foreach my $addr ( keys %thr_addr ) {
639-        $n = $thr_addr{$addr};
640-        $arg =~ s/\b$addr\b/thread$n/g if ( defined $n );
641-    }
642-    foreach my $addr ( keys %try_addr ) {
643-        $n = $try_addr{$addr};
644-        $arg =~ s/\b$addr\b/tries_$n/g if ( defined $n );
645-    }
646-    foreach my $addr ( keys %win_addr ) {
647-        $n = $win_addr{$addr};
648-        $arg =~ s/\b$addr\b/window$n/g if ( defined $n );
649+    if ( &has_addr($arg) ) {
650+        foreach my $addr ( keys %scr_addr ) {
651+            $n = $scr_addr{$addr};
652+            $arg =~ s/\b$addr\b/screen$n/g if ( defined $n );
653+        }
654+    }
655+    if ( &has_addr($arg) ) {
656+        foreach my $addr ( keys %thr_addr ) {
657+            $n = $thr_addr{$addr};
658+            $arg =~ s/\b$addr\b/thread$n/g if ( defined $n );
659+        }
660+    }
661+    if ( &has_addr($arg) ) {
662+        foreach my $addr ( keys %trm_addr ) {
663+            $n = $trm_addr{$addr};
664+            $arg =~ s/\b$addr\b/terminal$n/g if ( defined $n );
665+        }
666     }
667-    if ( $arg =~ /add_wch\((window\d+,)?0x[[:xdigit:]]+\)/i ) {
668-        $arg =~ s/(0x[[:xdigit:]]+)[)]/\&wch)/i;
669+    if ( &has_addr($arg) ) {
670+        foreach my $addr ( keys %try_addr ) {
671+            $n = $try_addr{$addr};
672+            $arg =~ s/\b$addr\b/tries_$n/g if ( defined $n );
673+        }
674     }
675-    elsif ( $arg =~ /color_content\((screen\d+,)?\d+(,0x[[:xdigit:]]+){3}/i ) {
676-        $arg =~ s/(,0x[[:xdigit:]]+){3}[)]/,\&r,\&g,\&b)/i;
677+    if ( &has_addr($arg) ) {
678+        foreach my $addr ( keys %win_addr ) {
679+            $n = $win_addr{$addr};
680+            $arg =~ s/\b$addr\b/window$n/g if ( defined $n );
681+        }
682     }
683-    elsif ( $arg =~ /pair_content\((screen\d+,)?\d+(,0x[[:xdigit:]]+){2}/i ) {
684-        $arg =~ s/(,0x[[:xdigit:]]+){2}[)]/,\&fg,\&bg)/i;
685+    if ( &has_addr($arg) ) {
686+        if ( $arg =~ /add_wch\((window\d+,)?0x[[:xdigit:]]+\)/i ) {
687+            $arg =~ s/(0x[[:xdigit:]]+)[)]/\&wch)/i;
688+        }
689+        elsif (
690+            $arg =~ /color_content\((screen\d+,)?\d+(,0x[[:xdigit:]]+){3}/i )
691+        {
692+            $arg =~ s/(,0x[[:xdigit:]]+){3}[)]/,\&r,\&g,\&b)/i;
693+        }
694+        elsif ( $arg =~ /pair_content\((screen\d+,)?\d+(,0x[[:xdigit:]]+){2}/i )
695+        {
696+            $arg =~ s/(,0x[[:xdigit:]]+){2}[)]/,\&fg,\&bg)/i;
697+        }
698+    }
699+    if ( &has_addr($arg) and $arg =~ /called\s+\{/ ) {
700+        my $func = $arg;
701+        chomp $func;
702+        $func =~ s/^.*called\s+\{([[:alnum:]_]+)\(.*$/$1/;
703+        if ( defined $known_p1{$func} ) {
704+            my $addr = $arg;
705+            my $type = $known_p1{$func};
706+            chomp $addr;
707+            $addr =~ s/^[^(]+\((0x[[:xdigit:]]+).*/$1/i;
708+            if ( $type == 1 ) {
709+                $scr_addr{$addr} = ++$scr_nums;
710+                $arg = &transaddr($arg);
711+            }
712+            elsif ( $type == 2 ) {
713+                $win_addr{$addr} = ++$win_nums;
714+                $arg = &transaddr($arg);
715+            }
716+            elsif ( $type == 4 ) {
717+                $trm_addr{$addr} = ++$trm_nums;
718+                $arg = &transaddr($arg);
719+            }
720+        }
721     }
722
723     return $arg;
724@@ -132,6 +479,9 @@
725                 }
726                 $awaiting = "";
727             }
728+            elsif ( $_ =~ /^(\+ )*called \{set_curterm\((0x[[:xdigit:]]+)\)/ ) {
729+                $trm_addr{$2} = ++$trm_nums unless defined $trm_addr{$2};
730+            }
731             elsif ( $_ =~ /^(\+ )*called \{_nc_add_to_try\((0x[[:xdigit:]]+),/ )
732             {
733                 $try_addr{$2} = ++$try_nums unless defined $try_addr{$2};
734