#!/usr/bin/env perl # IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html package xCAT::Enabletrace; use Filter::Util::Call; our @ISA = qw(Exporter); our @EXPORT_OK = qw(loadtrace filter); sub loadtrace{ my (undef, $filename) = caller(); my (%args) = ( filename => $filename, inside => 0, lineno => 0, ); filter_add(bless \%args); } sub filter { my ($self) = @_; my $line= filter_read(); $self->{lineno}++; # deal with EOF/error first if ($line<= 0) { if ($self->{inside}) { die "Do not find the END of the trace block. [$self->{filename}:$self->{lineno}]"; } return $line; } if ($self->{inside}) { if (/^\s*##\s*TRACE_BEGIN/ ) { die "The trace block is nested. [$self->{filename}:$self->{lineno}]"; } elsif (/^\s*##\s*TRACE_END/) { $self->{inside} = 0; } else { # remove the #.. at the begin of the line s/^\s*#+//; } } elsif ( /^\s*##\s*TRACE_BEGIN/ ) { $self->{inside} = 1; } elsif ( /^\s*##\s*TRACE_END/ ) { die "Do not see the BEGIN of the trace block. [$self->{filename}:$self->{lineno}]"; } elsif ( /^\s*##\s*TRACE_LINE/ ) { s/^\s*##\s*TRACE_LINE//; } return $line; } 1;