diff options
Diffstat (limited to 'knetwortdeconf/backends/debug.pl.in')
-rw-r--r-- | knetwortdeconf/backends/debug.pl.in | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/knetwortdeconf/backends/debug.pl.in b/knetwortdeconf/backends/debug.pl.in new file mode 100644 index 0000000..0512308 --- /dev/null +++ b/knetwortdeconf/backends/debug.pl.in @@ -0,0 +1,222 @@ +#!/usr/bin/env perl +#-*- Mode: perl; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + +# Functions for hacker debug. +# +# Copyright (C) 2000-2001 Ximian, Inc. +# +# Authors: Hans Petter Jansson <hpj@ximian.com> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Library General Public License as published +# by the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +use File::Path; +use File::Copy; + +$SCRIPTSDIR = "@scriptsdir@"; +if ($SCRIPTSDIR =~ /^@scriptsdir[@]/) +{ + $SCRIPTSDIR = "."; + $DOTIN = ".in"; +} + +require "$SCRIPTSDIR/general.pl$DOTIN"; +require "$SCRIPTSDIR/file.pl$DOTIN"; + + +%gst_debug_fd_hash = (); + + +sub gst_debug_open_output_file +{ + local *FILE; + my $debug_path = &gst_file_get_debug_path () . "/$gst_name/1/$_[0]"; + + if (!exists $gst_debug_fd_hash{$debug_path}) + { + &gst_debug_rotate_try (); + open (FILE, ">>$debug_path"); + $gst_debug_fd_hash{$debug_path} = *FILE; + } + + return $gst_debug_fd_hash{$debug_path}; +} + +sub gst_debug_close_all +{ + my ($file, @files); + + @files = keys %gst_debug_fd_hash; + foreach $file (@files) + { + &gst_file_close ($gst_debug_fd_hash{$file}); + delete $gst_debug_fd_hash{$file}; + } +} + +sub gst_debug_print_string_to_file +{ + my $debug_file; + + $debug_file = &gst_debug_open_output_file ($_[0]); + print $debug_file $_[1]; +} + +sub gst_debug_print_log_to_file +{ + my ($file, $doc) = @_; + my (@buff, $line, $fd); + + $fd = &gst_debug_open_output_file ($file); + + @buff = split ("\n", $doc); + foreach $line (@buff) + { + print $fd "$line\n"; + } +} + + +sub gst_debug_print_string +{ + if ($gst_debug) { print STDERR $_[0]; } + &gst_debug_print_string_to_file ("debug", $_[0]); +} + + +sub gst_debug_print_line +{ + &gst_debug_print_string ($_[0] . "\n"); +} + + +sub gst_debug_print_indent +{ + my $indent = $_[0]; + my $indent_string = ""; + + $indent_string = " " x $indent; + &gst_debug_print_string ($indent_string); +} + + +sub gst_debug_print_indented_string +{ + my ($indent, @string) = @_; + + &gst_debug_print_indent ($indent); + &gst_debug_print_string (@string); +} + + +sub gst_debug_print_indented_line +{ + my $indent = shift @_; + my @line = @_; + + &gst_debug_print_indent ($indent); + &gst_debug_print_line (@line); +} + + +sub gst_debug_print_struct +{ + foreach $i (@_) + { + &gst_debug_print_struct_r (0, 0, $i); + } +} + + +sub gst_debug_print_struct_r +{ + my ($indent) = $_[0]; + my $is_hash_value = $_[1]; + my $a = $_[2]; + my $type; + my @keys; + my $elem; + my $i; + + $type = ref $a; + + if (!$is_hash_value) { &gst_debug_print_indent ($indent); } + + if ($type eq "SCALAR") + { + &gst_debug_print_line ($$a); + } + elsif ($type eq "ARRAY") + { + &gst_debug_print_line ("[ARRAY]"); + + for ($i = 0; $i <= $#$a; $i++) + { + &gst_debug_print_struct_r ($indent + 1, 0, $$a[$i]); + } + } + elsif ($type eq "HASH") + { + @keys = sort keys (%$a); + + &gst_debug_print_line ("[HASH]"); + + foreach $i (@keys) + { + &gst_debug_print_indented_string ($indent + !$is_hash_value, $i . " -> "); + &gst_debug_print_struct_r ($indent + !$is_hash_value + 1, 1, $$a{$i}); + } + } + else + { + &gst_debug_print_line ($a); + } +} + + +$gst_debug_dir_rotation_was_made = 0; + +sub gst_debug_rotate_try +{ + + my $debug_file = $_[0]; + my $debug_tool_dir = &gst_file_get_debug_path () . "/$gst_name"; + + # If this is the first debug created by this tool on this invocation, + # rotate the debug directories and create a new, empty one. + + if (!$gst_debug_dir_rotation_was_made) + { + my $i; + + $gst_debug_dir_rotation_was_made = 1; + + if (-e "$debug_tool_dir/9") + { + &gst_file_rmtree ("$debug_tool_dir/9", 0, 1); + } + + for ($i = 8; $i; $i--) + { + if (-e "$debug_tool_dir/$i") + { + move ("$debug_tool_dir/$i", "$debug_tool_dir/" . ($i + 1)); + } + } + + &gst_file_create_path ("$debug_tool_dir/1"); + } +} + +1; |