#!/usr/bin/env perl
-# $Id: tracemunch,v 1.9 2017/05/07 19:59:08 tom Exp $
+# $Id: tracemunch,v 1.17 2017/12/23 17:51:31 tom Exp $
##############################################################################
# Copyright (c) 1998-2005,2017 Free Software Foundation, Inc. #
# #
"waddnstr\\(0x([[:xdigit:]]+),\"([^\"]+)\",[0-9]+\\) called {A_NORMAL}";
our $scr_nums = 0;
+our $thr_nums = 0;
our $try_nums = 0;
our $win_nums = 0;
our $curscr = "";
our $newscr = "";
our $stdscr = "";
our %scr_addr;
+our %thr_addr;
our %try_addr;
our %win_addr;
$n = $scr_addr{$addr};
$arg =~ s/\b$addr\b/screen$n/g;
}
+ foreach my $addr ( keys %thr_addr ) {
+ $n = $thr_addr{$addr};
+ $arg =~ s/\b$addr\b/thread$n/g;
+ }
foreach my $addr ( keys %try_addr ) {
$n = $try_addr{$addr};
$arg =~ s/\b$addr\b/tries_$n/g;
$n = $win_addr{$addr};
$arg =~ s/\b$addr\b/window$n/g;
}
+ 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;
+ }
return $arg;
}
while (<STDIN>) {
my $addr;
my $n;
- my $awaiting;
+ my $awaiting = "";
CLASSIFY: {
+ my $thread = "";
+ if ( $_ =~ /^(0x[[:xdigit:]]+):/ ) {
+ $thr_addr{$1} = ++$thr_nums unless defined $thr_addr{$1};
+ $thread = "thread" . $thr_addr{$1} . ":";
+ $_ =~ s/^[^:]*://;
+ }
+
# Transform window pointer addresses so it's easier to compare logs
$awaiting = "curscr" if ( $_ =~ /creating curscr/ );
$awaiting = "newscr" if ( $_ =~ /creating newscr/ );
elsif ( $_ =~ /^(\+ )*called {_nc_add_to_try\((0x[[:xdigit:]]+),/ ) {
$try_addr{$2} = ++$try_nums unless defined $try_addr{$2};
}
+ elsif ( $_ =~ /^(\+ )*_nc_alloc_screen_sp 0x([[:xdigit:]]+)/ ) {
+ $addr = "0x$2";
+ $scr_addr{$addr} = ++$scr_nums unless ( $scr_addr{$addr} );
+ $awaiting = "";
+ }
elsif ( $_ =~ /^(\+ )*return }0x([[:xdigit:]]+)/ ) {
$addr = "0x$2";
if ( $awaiting eq "screen" ) {
- $scr_addr{$addr} = ++$scr_nums;
+ $scr_addr{$addr} = ++$scr_nums unless ( $scr_addr{$addr} );
}
}
elsif ( $_ =~ /^\.\.\.deleted win=0x([[:xdigit:]]+)/ ) {
print "${repeatcount} REPEATS OF $anyline";
}
else {
- print $anyline;
+ print $thread . $anyline;
}
redo CLASSIFY if $_;