80ef17ef3336f6fb9fb9bb8407a8649ae7b79696
[spider.git] / perl / DXDebug.pm
1 #
2 # The system variables - those indicated will need to be changed to suit your
3 # circumstances (and callsign)
4 #
5 # Copyright (c) 1998 - Dirk Koopman G1TLH
6 #
7 # $Id$
8 #
9
10 package DXDebug;
11
12 require Exporter;
13 @ISA = qw(Exporter);
14 @EXPORT = qw(dbginit dbg dbgadd dbgsub dbglist isdbg dbgclose);
15 @EXPORT_OK = qw(dbginit dbg dbgadd dbgsub dbglist isdbg dbgclose);
16
17 use strict;
18 use vars qw(%dbglevel $fp);
19
20 use DXUtil;
21 use DXLog ();
22 use Carp;
23
24 %dbglevel = ();
25 $fp = DXLog::new('debug', 'dat', 'd');
26
27 sub _store
28 {
29         my $t = time; 
30         $fp->writeunix($t, "$t^$@") if $@; 
31         $fp->writeunix($t, "$t^$!") if $!; 
32         for (@_) {
33                 $fp->writeunix($t, "$t^$_"); 
34                 print STDERR $_;
35         }
36 }
37
38 sub dbginit
39 {
40         # add sig{__DIE__} handling
41         if (!defined $DB::VERSION) {
42                 $SIG{__WARN__} = $SIG{__DIE__} = \&_store;
43         }
44 }
45
46 sub dbgclose
47 {
48         $SIG{__DIE__} = $SIG{__WARN__} = 'DEFAULT';
49         $fp->close();
50 }
51
52 sub dbg
53 {
54         my $l = shift;
55         if ($dbglevel{$l}) {
56             my @in = @_;
57                 my $t = time;
58                 for (@in) {
59                     s/\n$//o;
60                         s/\a//og;   # beeps
61                         print "$_\n" if defined \*STDOUT;
62                         $fp->writeunix($t, "$t^$_");
63                 }
64         }
65 }
66
67 sub dbgadd
68
69         my $entry;
70         
71         foreach $entry (@_) {
72                 $dbglevel{$entry} = 1;
73         }
74 }
75
76 sub dbgsub
77 {
78         my $entry;
79         
80         foreach $entry (@_) {
81                 delete $dbglevel{$entry};
82         }
83 }
84
85 sub dbglist
86 {
87         return keys (%dbglevel);
88 }
89
90 sub isdbg
91 {
92         my $s = shift;
93         return $dbglevel{$s};
94 }
95 1;
96 __END__