+our $no_stdout; # set if not running in a terminal
+our @dbgring;
+
+# Avoid generating "subroutine redefined" warnings with the following
+# hack (from CGI::Carp):
+if (!defined $DB::VERSION) {
+ local $^W=0;
+ eval qq( sub confess {
+ \$SIG{__DIE__} = 'DEFAULT';
+ DXDebug::dbgprintring() if DXDebug::isdbg('nologchan');
+ DXDebug::dbg(\$@);
+# DXDebug::dbg(Carp::shortmess(\@_));
+ DXDebug::longmess(\@_);
+ exit(-1);
+ }
+ sub croak {
+ \$SIG{__DIE__} = 'DEFAULT';
+ DXDebug::dbgprintring() if DXDebug::isdbg('nologchan');
+ DXDebug::dbg(\$@);
+# DXDebug::dbg(Carp::longmess(\@_));
+ DXDebug::shortmess(\@_);
+ exit(-1);
+ }
+ sub carp {
+ DXDebug::dbgprintring(25) if DXDebug::isdbg('nologchan');
+# DXDebug::dbg(Carp::shortmess(\@_));
+ DXDebug::longmess(\@_);
+ }
+ sub cluck {
+ DXDebug::dbgprintring(25) if DXDebug::isdbg('nologchan');
+# DXDebug::dbg(Carp::longmess(\@_));
+ DXDebug::longmess(\@_);
+ } );
+
+ CORE::die(Carp::shortmess($@)) if $@;
+} else {
+ eval qq( sub confess { die Carp::longmess(\@_); };
+ sub croak { die Carp::shortmess(\@_); };
+ sub cluck { warn Carp::longmess(\@_); };
+ sub carp { warn Carp::shortmess(\@_); };
+ );
+}
+
+
+my $_isdbg = ''; # current dbg level we are processing
+
+# print stack trace
+sub dbgtrace