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