ncurses 6.1 - patch 20191221
authorThomas E. Dickey <dickey@invisible-island.net>
Sun, 22 Dec 2019 03:20:49 +0000 (03:20 +0000)
committerThomas E. Dickey <dickey@invisible-island.net>
Sun, 22 Dec 2019 03:20:49 +0000 (03:20 +0000)
+ correct pathname used in Ada95 sample programs for explain.txt, to
  work with test-packages.
+ improve tracemunch:
  + keep track of TERMINAL* values
  + if tracing was first turned on after initialization, attempt to
    show distinct screen, window and terminal names anyway.
+ ensure that GCC_NORETURN is defined in term.h, because the prototype
  for exit_terminfo() uses it (report by Werner Fink).

15 files changed:
Ada95/samples/Makefile.in
NEWS
VERSION
dist.mk
include/MKterm.h.awk.in
ncurses/base/keyok.c
ncurses/base/lib_color.c
package/debian-mingw/changelog
package/debian-mingw64/changelog
package/debian/changelog
package/mingw-ncurses.nsi
package/mingw-ncurses.spec
package/ncurses.spec
package/ncursest.spec
test/tracemunch

index 43e9ebaa6c67d074b509ba54aa28206b0fec16c9..c7323e8b249ed049b3edf54d58300c98bb788166 100644 (file)
@@ -28,7 +28,7 @@
 #
 #  Author:  Juergen Pfeifer, 1996
 #
-#  $Id: Makefile.in,v 1.56 2019/09/08 00:01:38 tom Exp $
+#  $Id: Makefile.in,v 1.57 2019/12/22 01:09:19 tom Exp $
 #
 .SUFFIXES:
 
@@ -82,6 +82,7 @@ DATADIR               = $(DESTDIR)$(datadir)
 LIBDIR         = $(DESTDIR)$(libdir)
 
 MY_DATADIR     = $(DATADIR)/@ADA_LIBNAME@
+THIS_DATADIR   = $(datadir)/@ADA_LIBNAME@
 
 ################################################################################
 ada_srcdir     = ../src
@@ -165,4 +166,4 @@ realclean :: distclean
 
 $(THISLIB)-explanation.adb : $(srcdir)/$(THISLIB)-explanation.adb_p
        rm -f $@
-       $(ADAPREP) -DTHIS_DATADIR=\"$(DATADIR)\" @GNATPREP_OPTS@ $(srcdir)/$(THISLIB)-explanation.adb_p $@
+       $(ADAPREP) -DTHIS_DATADIR=\"$(THIS_DATADIR)/\" @GNATPREP_OPTS@ $(srcdir)/$(THISLIB)-explanation.adb_p $@
diff --git a/NEWS b/NEWS
index fe58e2cc782f7cfb641b33b570b5cb7dae2071e1..8650eabec07f346742493128cec123a5df832aea 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -25,7 +25,7 @@
 -- sale, use or other dealings in this Software without prior written        --
 -- authorization.                                                            --
 -------------------------------------------------------------------------------
--- $Id: NEWS,v 1.3416 2019/12/14 21:26:03 tom Exp $
+-- $Id: NEWS,v 1.3420 2019/12/21 22:43:54 tom Exp $
 -------------------------------------------------------------------------------
 
 This is a log of changes that ncurses has gone through since Zeyd started
@@ -45,6 +45,16 @@ See the AUTHORS file for the corresponding full names.
 Changes through 1.9.9e did not credit all contributions;
 it is not possible to add this information.
 
+20191221
+       + correct pathname used in Ada95 sample programs for explain.txt, to
+         work with test-packages.
+       + improve tracemunch:
+         + keep track of TERMINAL* values
+         + if tracing was first turned on after initialization, attempt to
+           show distinct screen, window and terminal names anyway.
+       + ensure that GCC_NORETURN is defined in term.h, because the prototype
+         for exit_terminfo() uses it (report by Werner Fink).
+
 20191214
        + add exit_curses() and exit_terminfo() to replace internal symbols for
          leak-checking.
diff --git a/VERSION b/VERSION
index 932fc4637901352a182d8d687c2a0b73e451145b..fa5d276d5179324e27a49dde24b72141f9fbe569 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-5:0:10 6.1     20191214
+5:0:10 6.1     20191221
diff --git a/dist.mk b/dist.mk
index b62510ebffdec8402f495a75aacb8ad90f93299b..5e73c04dfc9513303f0ef1b3bb68b71cce8da54e 100644 (file)
--- a/dist.mk
+++ b/dist.mk
@@ -25,7 +25,7 @@
 # use or other dealings in this Software without prior written               #
 # authorization.                                                             #
 ##############################################################################
-# $Id: dist.mk,v 1.1319 2019/12/14 17:50:13 tom Exp $
+# $Id: dist.mk,v 1.1320 2019/12/21 11:16:12 tom Exp $
 # Makefile for creating ncurses distributions.
 #
 # This only needs to be used directly as a makefile by developers, but
@@ -37,7 +37,7 @@ SHELL = /bin/sh
 # These define the major/minor/patch versions of ncurses.
 NCURSES_MAJOR = 6
 NCURSES_MINOR = 1
-NCURSES_PATCH = 20191214
+NCURSES_PATCH = 20191221
 
 # We don't append the patch to the version, since this only applies to releases
 VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR)
index b7e2c1eb5224860b2990a33c4f48ecab6e03f6bd..c315e2e1a216631f49bc35d0a347d4b8d3e7f4ad 100644 (file)
@@ -59,7 +59,7 @@ BEGIN {
        print  "/*    and: Thomas E. Dickey                        1995-on                  */"
        print  "/****************************************************************************/"
        print  ""
-       print  "/* $Id: MKterm.h.awk.in,v 1.72 2019/12/14 22:31:32 tom Exp $ */"
+       print  "/* $Id: MKterm.h.awk.in,v 1.73 2019/12/21 18:29:09 tom Exp $ */"
        print  ""
        print  "/*"
        print  "**      term.h -- Definition of struct term"
@@ -147,6 +147,10 @@ BEGIN {
        print  "#define SET_TTY(fd, buf) stty(fd, buf)"
        print  "#endif"
        print  ""
+       print  "#ifndef GCC_NORETURN"
+       print  "#define GCC_NORETURN /* nothing */"
+       print  "#endif"
+       print  ""
        print  "#define NAMESIZE 256"
        print  ""
        print  "/* The cast works because TERMTYPE is the first data in TERMINAL */"
index 37fddecfa526880c7d654a592f3b5d22f858473e..180c54aa191c97559da2085fac1fc25ad057d6c4 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2012,2014 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2014,2019 Free Software Foundation, Inc.              *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
@@ -33,7 +33,7 @@
 
 #include <curses.priv.h>
 
-MODULE_ID("$Id: keyok.c,v 1.14 2014/03/08 20:32:59 tom Exp $")
+MODULE_ID("$Id: keyok.c,v 1.15 2019/12/21 22:40:32 tom Exp $")
 
 /*
  * Enable (or disable) ncurses' interpretation of a keycode by adding (or
@@ -55,7 +55,6 @@ NCURSES_SP_NAME(keyok) (NCURSES_SP_DCLx int c, bool flag)
 #ifdef USE_TERM_DRIVER
        code = CallDriver_2(sp, td_kyOk, c, flag);
 #else
-       T((T_CALLED("keyok(%d,%d)"), c, flag));
        if (c >= 0) {
            int count = 0;
            char *s;
index dfb774ba98404c4215bb6f404bc95d8f3087e46d..e2958051e6b8de86aa596eb6d2d39864a45ed0c4 100644 (file)
@@ -48,7 +48,7 @@
 #define CUR SP_TERMTYPE
 #endif
 
-MODULE_ID("$Id: lib_color.c,v 1.140 2019/01/21 01:55:18 tom Exp $")
+MODULE_ID("$Id: lib_color.c,v 1.142 2019/12/22 00:57:53 tom Exp $")
 
 #ifdef USE_TERM_DRIVER
 #define CanChange      InfoOf(SP_PARM).canchange
@@ -803,7 +803,7 @@ NCURSES_SP_NAME(has_colors) (NCURSES_SP_DCL0)
     int code = FALSE;
 
     (void) SP_PARM;
-    T((T_CALLED("has_colors()")));
+    T((T_CALLED("has_colors(%p)"), (void *) SP_PARM));
     if (HasTerminal(SP_PARM)) {
 #ifdef USE_TERM_DRIVER
        code = HasColor;
index 7e54ebcf8ef181f4327f803651db5e6a40fb634d..e67dfe017fb6ef317b5b2fe004d7dc1d47a033b8 100644 (file)
@@ -1,8 +1,8 @@
-ncurses6 (6.1+20191214) unstable; urgency=low
+ncurses6 (6.1+20191221) unstable; urgency=low
 
   * latest weekly patch
 
- -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 14 Dec 2019 12:50:13 -0500
+ -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 21 Dec 2019 06:16:12 -0500
 
 ncurses6 (5.9-20131005) unstable; urgency=low
 
index 7e54ebcf8ef181f4327f803651db5e6a40fb634d..e67dfe017fb6ef317b5b2fe004d7dc1d47a033b8 100644 (file)
@@ -1,8 +1,8 @@
-ncurses6 (6.1+20191214) unstable; urgency=low
+ncurses6 (6.1+20191221) unstable; urgency=low
 
   * latest weekly patch
 
- -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 14 Dec 2019 12:50:13 -0500
+ -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 21 Dec 2019 06:16:12 -0500
 
 ncurses6 (5.9-20131005) unstable; urgency=low
 
index 294884438b2dbd29d3a72fe2db4e0ff1a5ffaad6..a20c7e6965f95d3539d7c004c48f16a4d9116c86 100644 (file)
@@ -1,8 +1,8 @@
-ncurses6 (6.1+20191214) unstable; urgency=low
+ncurses6 (6.1+20191221) unstable; urgency=low
 
   * latest weekly patch
 
- -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 14 Dec 2019 12:50:13 -0500
+ -- Thomas E. Dickey <dickey@invisible-island.net>  Sat, 21 Dec 2019 06:16:12 -0500
 
 ncurses6 (5.9-20120608) unstable; urgency=low
 
index a5253704ee23ca4b9be7a5bafe3c0fac894b93cf..09d348381d4064aa44c4b1731a6e5b1c0326bd1d 100644 (file)
@@ -1,4 +1,4 @@
-; $Id: mingw-ncurses.nsi,v 1.365 2019/12/14 17:50:13 tom Exp $\r
+; $Id: mingw-ncurses.nsi,v 1.366 2019/12/21 11:16:12 tom Exp $\r
 \r
 ; TODO add examples\r
 ; TODO bump ABI to 6\r
@@ -10,7 +10,7 @@
 !define VERSION_MAJOR "6"\r
 !define VERSION_MINOR "1"\r
 !define VERSION_YYYY  "2019"\r
-!define VERSION_MMDD  "1214"\r
+!define VERSION_MMDD  "1221"\r
 !define VERSION_PATCH ${VERSION_YYYY}${VERSION_MMDD}\r
 \r
 !define MY_ABI   "5"\r
index b4edb715b21bd4bf9fb1a32f8818ffa7b740efe2..2627ccfdff85feae69c3a206c229be12250230dc 100644 (file)
@@ -3,7 +3,7 @@
 Summary: shared libraries for terminal handling
 Name: mingw32-ncurses6
 Version: 6.1
-Release: 20191214
+Release: 20191221
 License: X11
 Group: Development/Libraries
 Source: ncurses-%{version}-%{release}.tgz
index f15a4e1ded91916289b39cbbe1a834b96dcf0554..2209e1df99cabf970946f3bd52ed96f2b6ebe9c1 100644 (file)
@@ -1,7 +1,7 @@
 Summary: shared libraries for terminal handling
 Name: ncurses6
 Version: 6.1
-Release: 20191214
+Release: 20191221
 License: X11
 Group: Development/Libraries
 Source: ncurses-%{version}-%{release}.tgz
index 175657317d1caeba6a79a6900e8be31b321c96e9..6f21a2f7f45b69ad9332168f856600e74cc78a14 100644 (file)
@@ -1,7 +1,7 @@
 Summary: Curses library with POSIX thread support.
 Name: ncursest6
 Version: 6.1
-Release: 20191214
+Release: 20191221
 License: X11
 Group: Development/Libraries
 Source: ncurses-%{version}-%{release}.tgz
index c23607e9cdf67cdaca3fa04b39c7eb41b44f1f85..cc33852dc5ccf13968cf61cecccaa44b550b236e 100755 (executable)
@@ -1,7 +1,7 @@
 #!/usr/bin/env perl
-# $Id: tracemunch,v 1.24 2018/12/29 22:20:06 tom Exp $
+# $Id: tracemunch,v 1.26 2019/12/21 22:33:35 tom Exp $
 ##############################################################################
-# Copyright (c) 1998-2017,2018 Free Software Foundation, Inc.                #
+# Copyright (c) 1998-2018,2019 Free Software Foundation, Inc.                #
 #                                                                            #
 # Permission is hereby granted, free of charge, to any person obtaining a    #
 # copy of this software and associated documentation files (the "Software"), #
@@ -42,8 +42,305 @@ our $putattr =
 our $waddnstr =
   'waddnstr\(0x([[:xdigit:]]+),"([^\"]+)",[0-9]+\) called \{A_NORMAL\}';
 
+# If the trace is complete, we can infer addresses using the return value from
+# newwin, etc.  But if it is incomplete, we can still check for special cases
+# such as SCREEN* and WINDOW* parameters.  In this table, the type for the
+# first parameter is encoded, relying upon an ncurses programming convention:
+# 1 = SCREEN*
+# 2 = WINDOW*
+# 4 = TERMINAL*
+our %known_p1 = qw(
+  TransformLine           1
+  _nc_freewin             2
+  _nc_initscr             1
+  _nc_makenew             1
+  _nc_mingw_console_read  1
+  _nc_reset_colors        1
+  _nc_scroll_optimize     1
+  _nc_tinfo               1
+  _nc_tinfo_mvcur         1
+  _nc_wgetch              2
+  adjust_window           2
+  assume_default_colors   1
+  attr_get                2
+  baudrate                1
+  beep                    1
+  border_set              2
+  box                     2
+  box_set                 2
+  can_change_color        1
+  cbreak                  1
+  clearok                 2
+  color_content           1
+  copywin                 2
+  curs_set                1
+  decrease_size           1
+  def_prog_mode           1
+  def_shell_mode          1
+  define_key              1
+  del_curterm             1
+  delay_output            1
+  delscreen               1
+  delwin                  2
+  derwin                  2
+  doupdate                1
+  dupwin                  2
+  echo                    1
+  endwin                  1
+  erasechar               1
+  filter                  1
+  flash                   1
+  flushinp                1
+  getattrs                2
+  getbegx                 2
+  getbegy                 2
+  getbkgd                 2
+  getcurx                 2
+  getcury                 2
+  getmaxx                 2
+  getmaxy                 2
+  getmouse                1
+  getparx                 2
+  getpary                 2
+  halfdelay               1
+  has_ic                  1
+  has_il                  1
+  has_key                 1
+  idcok                   2
+  idlok                   2
+  immedok                 2
+  increase_size           1
+  init_color              1
+  init_pair               1
+  intrflush               1
+  is_cleared              2
+  is_idcok                2
+  is_idlok                2
+  is_immedok              2
+  is_keypad               2
+  is_leaveok              2
+  is_linetouched          2
+  is_nodelay              2
+  is_notimeout            2
+  is_pad                  2
+  is_scrollok             2
+  is_subwin               2
+  is_syncok               2
+  is_term_resized         1
+  is_wintouched           2
+  key_defined             1
+  keybound                1
+  keyok                   1
+  keypad                  2
+  killchar                1
+  leaveok                 2
+  longname                1
+  meta                    2
+  mouseinterval           1
+  mousemask               1
+  mvcur                   1
+  mvderwin                2
+  mvwadd_wch              2
+  mvwadd_wchnstr          2
+  mvwadd_wchstr           2
+  mvwaddch                2
+  mvwaddchnstr            2
+  mvwaddchstr             2
+  mvwaddnstr              2
+  mvwaddnwstr             2
+  mvwaddstr               2
+  mvwaddwstr              2
+  mvwchgat                2
+  mvwdelch                2
+  mvwget_wch              2
+  mvwget_wstr             2
+  mvwgetch                2
+  mvwgetn_wstr            2
+  mvwgetnstr              2
+  mvwgetstr               2
+  mvwhline                2
+  mvwhline_set            2
+  mvwin                   2
+  mvwin_wch               2
+  mvwin_wchnstr           2
+  mvwin_wchstr            2
+  mvwinch                 2
+  mvwinchnstr             2
+  mvwinchstr              2
+  mvwins_nwstr            2
+  mvwins_wch              2
+  mvwins_wstr             2
+  mvwinsch                2
+  mvwinsnstr              2
+  mvwinsstr               2
+  mvwinstr                2
+  mvwinwstr               2
+  mvwvline                2
+  mvwvline_set            2
+  newpad                  1
+  newterm                 1
+  newwin                  1
+  nl                      1
+  nocbreak                1
+  nodelay                 2
+  noecho                  1
+  nofilter                1
+  nonl                    1
+  noqiflush               1
+  noraw                   1
+  notimeout               2
+  overlap                 2
+  overlay                 2
+  overwrite               2
+  pair_content            1
+  pecho_wchar             2
+  pechochar               2
+  pnoutrefresh            2
+  putwin                  2
+  qiflush                 1
+  raw                     1
+  redrawwin               2
+  reset_prog_mode         1
+  reset_shell_mode        1
+  resetty                 1
+  resize_term             1
+  resizeterm              1
+  restartterm             1
+  ripoffline              1
+  savetty                 1
+  scr_init                1
+  scr_restore             1
+  scr_set                 1
+  scroll                  2
+  scrollok                2
+  set_curterm             4
+  set_term                1
+  slk_attr                1
+  slk_attr_set            1
+  slk_attroff             1
+  slk_attron              1
+  slk_attrset             1
+  slk_clear               1
+  slk_color               1
+  slk_init                1
+  slk_label               1
+  slk_noutrefresh         1
+  slk_refresh             1
+  slk_restore             1
+  slk_set                 1
+  slk_touch               1
+  start_color             1
+  subwin                  2
+  syncok                  2
+  termattrs               1
+  termname                1
+  tgetflag                1
+  tgetnum                 1
+  tigetflag               1
+  tigetnum                1
+  tigetstr                1
+  tinfo                   1
+  touchline               2
+  touchwin                2
+  typeahead               1
+  unget_wch               1
+  ungetch                 1
+  ungetmouse              1
+  untouchwin              2
+  use_default_colors      1
+  use_env                 1
+  use_legacy_coding       1
+  use_screen              1
+  use_tioctl              1
+  use_window              2
+  vidattr                 1
+  vidputs                 1
+  vw_printw               2
+  vwprintw                2
+  wadd_wch                2
+  wadd_wchnstr            2
+  wadd_wchstr             2
+  waddch                  2
+  waddchnstr              2
+  waddchstr               2
+  waddnstr                2
+  waddnwstr               2
+  waddstr                 2
+  waddwstr                2
+  wattr_get               2
+  wattr_off               2
+  wattr_on                2
+  wattr_set               2
+  wattroff                2
+  wattron                 2
+  wattrset                2
+  wbkgd                   2
+  wbkgdset                2
+  wborder                 2
+  wborder_set             2
+  wchgat                  2
+  wclear                  2
+  wclrtobot               2
+  wclrtoeol               2
+  wcolor_set              2
+  wcursyncup              2
+  wdelch                  2
+  wdeleteln               2
+  wechochar               2
+  wenclose                2
+  werase                  2
+  wget_wch                2
+  wget_wstr               2
+  wgetbkgrnd              2
+  wgetch                  2
+  wgetch_events           2
+  wgetdelay               2
+  wgetn_wstr              2
+  wgetnstr                2
+  wgetparent              2
+  wgetscrreg              2
+  wgetstr                 2
+  whline                  2
+  whline_set              2
+  win_wch                 2
+  win_wchnstr             2
+  win_wchstr              2
+  winch                   2
+  winchnstr               2
+  winchstr                2
+  winnstr                 2
+  winnwstr                2
+  wins_nwstr              2
+  wins_wch                2
+  wins_wstr               2
+  winsch                  2
+  winsdelln               2
+  winsertln               2
+  winsnstr                2
+  winsstr                 2
+  winstr                  2
+  winwstr                 2
+  wmouse_trafo            2
+  wmove                   2
+  wnoutrefresh            2
+  wprintw                 2
+  wredrawln               2
+  wrefresh                2
+  wresize                 2
+  wscrl                   2
+  wsetscrreg              2
+  wstandend               2
+  wstandout               2
+  wsyncdown               2
+  wsyncup                 2
+  wtimeout                2
+  wtouchln                2
+  wvline                  2
+);
+
 our $scr_nums = 0;
 our $thr_nums = 0;
+our $trm_nums = 0;
 our $try_nums = 0;
 our $win_nums = 0;
 our $curscr   = "";
@@ -51,40 +348,90 @@ our $newscr   = "";
 our $stdscr   = "";
 our %scr_addr;
 our %thr_addr;
+our %trm_addr;
 our %try_addr;
 our %win_addr;
 
-sub transaddr {
+sub has_addr($) {
+    my $value  = shift;
+    my $result = 0;
+    $result = 1 if ( $value =~ /\b0x[[:xdigit:]]+\b/i );
+    return $result;
+}
+
+sub transaddr($) {
+    my $arg = shift;
     my $n;
-    my $arg = $_[0];
 
     $arg =~ s/\b$curscr\b/curscr/g if ($curscr);
     $arg =~ s/\b$newscr\b/newscr/g if ($newscr);
     $arg =~ s/\b$stdscr\b/stdscr/g if ($stdscr);
-    foreach my $addr ( keys %scr_addr ) {
-        $n = $scr_addr{$addr};
-        $arg =~ s/\b$addr\b/screen$n/g if ( defined $n );
+    if ( &has_addr($arg) ) {
+        foreach my $addr ( keys %scr_addr ) {
+            $n = $scr_addr{$addr};
+            $arg =~ s/\b$addr\b/screen$n/g if ( defined $n );
+        }
     }
-    foreach my $addr ( keys %thr_addr ) {
-        $n = $thr_addr{$addr};
-        $arg =~ s/\b$addr\b/thread$n/g if ( defined $n );
+    if ( &has_addr($arg) ) {
+        foreach my $addr ( keys %thr_addr ) {
+            $n = $thr_addr{$addr};
+            $arg =~ s/\b$addr\b/thread$n/g if ( defined $n );
+        }
     }
-    foreach my $addr ( keys %try_addr ) {
-        $n = $try_addr{$addr};
-        $arg =~ s/\b$addr\b/tries_$n/g if ( defined $n );
+    if ( &has_addr($arg) ) {
+        foreach my $addr ( keys %trm_addr ) {
+            $n = $trm_addr{$addr};
+            $arg =~ s/\b$addr\b/terminal$n/g if ( defined $n );
+        }
     }
-    foreach my $addr ( keys %win_addr ) {
-        $n = $win_addr{$addr};
-        $arg =~ s/\b$addr\b/window$n/g if ( defined $n );
+    if ( &has_addr($arg) ) {
+        foreach my $addr ( keys %try_addr ) {
+            $n = $try_addr{$addr};
+            $arg =~ s/\b$addr\b/tries_$n/g if ( defined $n );
+        }
     }
-    if ( $arg =~ /add_wch\((window\d+,)?0x[[:xdigit:]]+\)/i ) {
-        $arg =~ s/(0x[[:xdigit:]]+)[)]/\&wch)/i;
+    if ( &has_addr($arg) ) {
+        foreach my $addr ( keys %win_addr ) {
+            $n = $win_addr{$addr};
+            $arg =~ s/\b$addr\b/window$n/g if ( defined $n );
+        }
     }
-    elsif ( $arg =~ /color_content\((screen\d+,)?\d+(,0x[[:xdigit:]]+){3}/i ) {
-        $arg =~ s/(,0x[[:xdigit:]]+){3}[)]/,\&r,\&g,\&b)/i;
+    if ( &has_addr($arg) ) {
+        if ( $arg =~ /add_wch\((window\d+,)?0x[[:xdigit:]]+\)/i ) {
+            $arg =~ s/(0x[[:xdigit:]]+)[)]/\&wch)/i;
+        }
+        elsif (
+            $arg =~ /color_content\((screen\d+,)?\d+(,0x[[:xdigit:]]+){3}/i )
+        {
+            $arg =~ s/(,0x[[:xdigit:]]+){3}[)]/,\&r,\&g,\&b)/i;
+        }
+        elsif ( $arg =~ /pair_content\((screen\d+,)?\d+(,0x[[:xdigit:]]+){2}/i )
+        {
+            $arg =~ s/(,0x[[:xdigit:]]+){2}[)]/,\&fg,\&bg)/i;
+        }
     }
-    elsif ( $arg =~ /pair_content\((screen\d+,)?\d+(,0x[[:xdigit:]]+){2}/i ) {
-        $arg =~ s/(,0x[[:xdigit:]]+){2}[)]/,\&fg,\&bg)/i;
+    if ( &has_addr($arg) and $arg =~ /called\s+\{/ ) {
+        my $func = $arg;
+        chomp $func;
+        $func =~ s/^.*called\s+\{([[:alnum:]_]+)\(.*$/$1/;
+        if ( defined $known_p1{$func} ) {
+            my $addr = $arg;
+            my $type = $known_p1{$func};
+            chomp $addr;
+            $addr =~ s/^[^(]+\((0x[[:xdigit:]]+).*/$1/i;
+            if ( $type == 1 ) {
+                $scr_addr{$addr} = ++$scr_nums;
+                $arg = &transaddr($arg);
+            }
+            elsif ( $type == 2 ) {
+                $win_addr{$addr} = ++$win_nums;
+                $arg = &transaddr($arg);
+            }
+            elsif ( $type == 4 ) {
+                $trm_addr{$addr} = ++$trm_nums;
+                $arg = &transaddr($arg);
+            }
+        }
     }
 
     return $arg;
@@ -132,6 +479,9 @@ sub muncher($) {
                 }
                 $awaiting = "";
             }
+            elsif ( $_ =~ /^(\+ )*called \{set_curterm\((0x[[:xdigit:]]+)\)/ ) {
+                $trm_addr{$2} = ++$trm_nums unless defined $trm_addr{$2};
+            }
             elsif ( $_ =~ /^(\+ )*called \{_nc_add_to_try\((0x[[:xdigit:]]+),/ )
             {
                 $try_addr{$2} = ++$try_nums unless defined $try_addr{$2};