#!/usr/bin/env perl
-# $Id: tracemunch,v 1.30 2020/08/29 18:59:58 tom Exp $
+# $Id: tracemunch,v 1.33 2020/12/26 23:56:50 tom Exp $
##############################################################################
# Copyright 2018-2019,2020 Thomas E. Dickey #
# Copyright 1998-2005,2017 Free Software Foundation, Inc. #
# 1 = SCREEN*
# 2 = WINDOW*
# 4 = TERMINAL*
+# 8 = PANEL*
our %known_p1 = qw(
TransformLine 1
_nc_console_read 1
baudrate 1
beep 1
border_set 2
+ bottom_panel 8
box 2
box_set 2
can_change_color 1
def_shell_mode 1
define_key 1
del_curterm 1
+ del_panel 8
delay_output 1
delscreen 1
delwin 2
has_ic 1
has_il 1
has_key 1
+ hide_panel 8
idcok 2
idlok 2
immedok 2
meta 2
mouseinterval 1
mousemask 1
+ move_panel 8
mvcur 1
mvderwin 2
mvwadd_wch 2
mvwinwstr 2
mvwvline 2
mvwvline_set 2
+ new_panel 2
newpad 1
newterm 1
newwin 1
overlay 2
overwrite 2
pair_content 1
+ panel_above 8
+ panel_below 8
+ panel_hidden 8
+ panel_userptr 8
+ panel_window 8
pecho_wchar 2
pechochar 2
pnoutrefresh 2
qiflush 1
raw 1
redrawwin 2
+ replace_panel 8
reset_prog_mode 1
reset_shell_mode 1
resetty 1
scroll 2
scrollok 2
set_curterm 4
+ set_panel_userptr 8
set_term 1
+ show_panel 8
slk_attr 1
slk_attr_set 1
slk_attroff 1
tigetnum 1
tigetstr 1
tinfo 1
+ top_panel 8
touchline 2
touchwin 2
typeahead 1
wvline 2
);
+our $pan_nums = 0;
our $scr_nums = 0;
our $thr_nums = 0;
our $trm_nums = 0;
our $try_nums = 0;
+our $usr_nums = 0;
our $win_nums = 0;
-our $curscr = "";
-our $newscr = "";
-our $stdscr = "";
+
+our $curscr = "";
+our $newscr = "";
+our $stdscr = "";
+
+our %pan_addr;
our %scr_addr;
our %thr_addr;
our %trm_addr;
our %try_addr;
+our %usr_addr;
our %win_addr;
sub has_addr($) {
$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);
+ if ( &has_addr($arg) ) {
+ foreach my $addr ( keys %pan_addr ) {
+ $n = $pan_addr{$addr};
+ $arg =~ s/\b$addr\b/panel$n/g if ( defined $n );
+ }
+ }
if ( &has_addr($arg) ) {
foreach my $addr ( keys %scr_addr ) {
$n = $scr_addr{$addr};
$arg =~ s/\b$addr\b/tries_$n/g if ( defined $n );
}
}
+ if ( &has_addr($arg) ) {
+ foreach my $addr ( keys %usr_addr ) {
+ $n = $usr_addr{$addr};
+ $arg =~ s/\b$addr\b/user_ptr$n/g if ( defined $n );
+ }
+ }
if ( &has_addr($arg) ) {
foreach my $addr ( keys %win_addr ) {
$n = $win_addr{$addr};
$trm_addr{$addr} = ++$trm_nums;
$arg = &transaddr($arg);
}
+ elsif ( $type == 8 ) {
+ $pan_addr{$addr} = ++$pan_nums;
+ $arg = &transaddr($arg);
+ }
}
}
CLASSIFY: {
+ next unless $_;
+
# just in case someone tries a file with cr/lf line-endings:
$_ =~ s/\r\n/\n/g;
$_ =~ s/\r/\n/g;
}
$awaiting = "";
}
+ elsif ( $_ =~ /^create :(root|new)_panel 0x([[:xdigit:]]+)/ ) {
+ $addr = "0x$2";
+ $pan_addr{$addr} = $pan_nums++;
+ $_ = &transaddr($_);
+ }
+ elsif ( $_ =~ /^create :user_ptr 0x([[:xdigit:]]+)/ ) {
+ $addr = "0x$1";
+ $usr_addr{$addr} = $usr_nums++;
+ $_ = &transaddr($_);
+ }
elsif ( $_ =~ /^(\+ )*called \{set_curterm\((0x[[:xdigit:]]+)\)/ ) {
$trm_addr{$2} = ++$trm_nums unless defined $trm_addr{$2};
}
undef $win_addr{$addr};
}
}
+ elsif ( $_ =~ /^\.\.\.deleted pan=\"0x([[:xdigit:]]+)\"/ ) {
+ $addr = "0x$1";
+ $_ = &transaddr($_);
+ undef $pan_addr{$addr};
+ }
# Compactify runs of PutAttrChar
if ( ( ( $tracelevel & $TR{CHARPUT} ) != 0 ) and $_ =~ /$putattr/ )