# HG changeset patch # User devi # Date 1133714661 -7200 # Node ID d021553f4e9880082538ff2a2b00e6f9b6a6d944 # Parent 568bab7090fc349ce2e9c4bb67d809e8a18e810f Tabs expanded diff -r 568bab7090fc -r d021553f4e98 l3-frontend --- a/l3-frontend Sat Nov 26 16:15:52 2005 +0200 +++ b/l3-frontend Sun Dec 04 18:44:21 2005 +0200 @@ -21,7 +21,7 @@ # ^^^ our %Stat; -our %CommandsFDistribution; # Сколько раз в журнале встречается какая команда +our %CommandsFDistribution; # Сколько раз в журнале встречается какая команда sub search_buy; sub make_comment; @@ -38,163 +38,163 @@ sub main { - $| = 1; + $| = 1; - init_variables(); - init_config(); + init_variables(); + init_config(); - open_mywi_socket(); - load_command_lines_from_xml($Config{"backend_datafile"}); - load_sessions_from_xml($Config{"backend_datafile"}); - sort_command_lines; - process_command_lines; - print_command_lines($Config{"output"}); - close_mywi_socket; + open_mywi_socket(); + load_command_lines_from_xml($Config{"backend_datafile"}); + load_sessions_from_xml($Config{"backend_datafile"}); + sort_command_lines; + process_command_lines; + print_command_lines($Config{"output"}); + close_mywi_socket; } sub search_by { - my $sm = shift; - my $topic = shift; - $topic =~ s/ /+/; - - return ""; + my $sm = shift; + my $topic = shift; + $topic =~ s/ /+/; + + return ""; } sub extract_from_cline # Разобрать командную строку $_[1] и возвратить хэш, содержащий # номер первого появление команды в строке: -# команда => первая позиция +# команда => первая позиция { - my $what = $_[0]; - my $cline = $_[1]; - my @lists = split /\;/, $cline; - - - my @commands = (); - for my $list (@lists) { - push @commands, split /\|/, $list; - } + my $what = $_[0]; + my $cline = $_[1]; + my @lists = split /\;/, $cline; + + + my @commands = (); + for my $list (@lists) { + push @commands, split /\|/, $list; + } - my %commands; - my %args; - my $i=0; - for my $command (@commands) { - $command =~ s@^\s*\S+/@@; - $command =~ /\s*(\S+)\s*(.*)/; - if ($1 && $1 eq "sudo" ) { - $commands{"$1"}=$i++; - $command =~ s/\s*sudo\s+//; - } - $command =~ s@^\s*\S+/@@; - $command =~ /\s*(\S+)\s*(.*)/; - if ($1 && !defined $commands{"$1"}) { - $commands{"$1"}=$i++; - }; - if ($2) { - my $args = $2; - my @args = split (/\s+/, $args); - for my $a (@args) { - $args{"$a"}=$i++ - if !defined $args{"$a"}; - }; + my %commands; + my %args; + my $i=0; + for my $command (@commands) { + $command =~ s@^\s*\S+/@@; + $command =~ /\s*(\S+)\s*(.*)/; + if ($1 && $1 eq "sudo" ) { + $commands{"$1"}=$i++; + $command =~ s/\s*sudo\s+//; + } + $command =~ s@^\s*\S+/@@; + $command =~ /\s*(\S+)\s*(.*)/; + if ($1 && !defined $commands{"$1"}) { + $commands{"$1"}=$i++; + }; + if ($2) { + my $args = $2; + my @args = split (/\s+/, $args); + for my $a (@args) { + $args{"$a"}=$i++ + if !defined $args{"$a"}; + }; - - } - } + + } + } - if ($what eq "commands") { - return \%commands; - } else { - return \%args; - } - + if ($what eq "commands") { + return \%commands; + } else { + return \%args; + } + } sub open_mywi_socket { - $Mywi_Socket = IO::Socket::INET->new( - PeerAddr => $Config{mywi_server}, - PeerPort => $Config{mywi_port}, - Proto => "tcp", - Type => SOCK_STREAM); + $Mywi_Socket = IO::Socket::INET->new( + PeerAddr => $Config{mywi_server}, + PeerPort => $Config{mywi_port}, + Proto => "tcp", + Type => SOCK_STREAM); } sub close_mywi_socket { - close ($Mywi_Socket); + close ($Mywi_Socket); } sub mywi_client { - my $query = $_[0]; - my $mywi; + my $query = $_[0]; + my $mywi; - open_mywi_socket; - if ($Mywi_Socket) { - local $| = 1; - local $/ = ""; - print $Mywi_Socket $query."\n"; - $mywi = <$Mywi_Socket>; - $mywi = "" if $mywi =~ /nothing app/; - } - close_mywi_socket; - return $mywi; + open_mywi_socket; + if ($Mywi_Socket) { + local $| = 1; + local $/ = ""; + print $Mywi_Socket $query."\n"; + $mywi = <$Mywi_Socket>; + $mywi = "" if $mywi =~ /nothing app/; + } + close_mywi_socket; + return $mywi; } sub make_comment { - my $cline = $_[0]; - #my $files = $_[1]; + my $cline = $_[0]; + #my $files = $_[1]; - my @comments=(); - my @commands = keys %{extract_from_cline("commands", $cline)}; - my @args = keys %{extract_from_cline("args", $cline)}; - return if (!@commands && !@args); - #return "commands=".join(" ",@commands)."; files=".join(" ",@files); + my @comments=(); + my @commands = keys %{extract_from_cline("commands", $cline)}; + my @args = keys %{extract_from_cline("args", $cline)}; + return if (!@commands && !@args); + #return "commands=".join(" ",@commands)."; files=".join(" ",@files); - # Commands - for my $command (@commands) { - $command =~ s/'//g; - $CommandsFDistribution{$command}++; - if (!$Commands_Description{$command}) { - my $mywi=""; - $mywi = mywi_client ($command); - $mywi = join ("\n", grep(/\([18]\)/, split(/\n/, $mywi))); - $mywi =~ s/\s+/ /; - if ($mywi !~ /^\s*$/) { - $Commands_Description{$command} = $mywi; - } - else { - next; - } - } + # Commands + for my $command (@commands) { + $command =~ s/'//g; + $CommandsFDistribution{$command}++; + if (!$Commands_Description{$command}) { + my $mywi=""; + $mywi = mywi_client ($command); + $mywi = join ("\n", grep(/\([18]\)/, split(/\n/, $mywi))); + $mywi =~ s/\s+/ /; + if ($mywi !~ /^\s*$/) { + $Commands_Description{$command} = $mywi; + } + else { + next; + } + } - push @comments, $Commands_Description{$command}; - } - return join(" \n", @comments); - - # Files - for my $arg (@args) { - $arg =~ s/'//g; - if (!$Args_Description{$arg}) { - my $mywi; - $mywi = mywi_client ($arg); - $mywi = join ("\n", grep(/\([5]\)/, split(/\n/, $mywi))); - $mywi =~ s/\s+/ /; - if ($mywi !~ /^\s*$/) { - $Args_Description{$arg} = $mywi; - } - else { - next; - } - } + push @comments, $Commands_Description{$command}; + } + return join(" \n", @comments); + + # Files + for my $arg (@args) { + $arg =~ s/'//g; + if (!$Args_Description{$arg}) { + my $mywi; + $mywi = mywi_client ($arg); + $mywi = join ("\n", grep(/\([5]\)/, split(/\n/, $mywi))); + $mywi =~ s/\s+/ /; + if ($mywi !~ /^\s*$/) { + $Args_Description{$arg} = $mywi; + } + else { + next; + } + } - push @comments, $Args_Description{$arg}; - } + push @comments, $Args_Description{$arg}; + } } @@ -209,157 +209,157 @@ =cut sub load_command_lines_from_xml { - my $datafile = $_[0]; + my $datafile = $_[0]; - open (CLASS, $datafile) - or die "Can't open file of the class ",$datafile,"\n"; - local $/; - $data = ; - close(CLASS); + open (CLASS, $datafile) + or die "Can't open file of the class ",$datafile,"\n"; + local $/; + $data = ; + close(CLASS); - for $command ($data =~ m@(.*?)@sg) { - my %cl; - while ($command =~ m@<([^>]*?)>(.*?)@sg) { - $cl{$1} = $2; - } - push @Command_Lines, \%cl; - } + for $command ($data =~ m@(.*?)@sg) { + my %cl; + while ($command =~ m@<([^>]*?)>(.*?)@sg) { + $cl{$1} = $2; + } + push @Command_Lines, \%cl; + } } sub load_sessions_from_xml { - my $datafile = $_[0]; + my $datafile = $_[0]; - open (CLASS, $datafile) - or die "Can't open file of the class ",$datafile,"\n"; - local $/; - my $data = ; - close(CLASS); + open (CLASS, $datafile) + or die "Can't open file of the class ",$datafile,"\n"; + local $/; + my $data = ; + close(CLASS); - for my $session ($data =~ m@(.*?)@sg) { - my %session; - while ($session =~ m@<([^>]*?)>(.*?)@sg) { - $session{$1} = $2; - } - $Sessions{$session{local_session_id}} = \%session; - } + for my $session ($data =~ m@(.*?)@sg) { + my %session; + while ($session =~ m@<([^>]*?)>(.*?)@sg) { + $session{$1} = $2; + } + $Sessions{$session{local_session_id}} = \%session; + } } sub sort_command_lines { - # Sort Command_Lines - # Write Command_Lines to Command_Lines_Index + # Sort Command_Lines + # Write Command_Lines to Command_Lines_Index - my @index; - for (my $i=0;$i<=$#Command_Lines;$i++) { - $index[$i]=$i; - } + my @index; + for (my $i=0;$i<=$#Command_Lines;$i++) { + $index[$i]=$i; + } - @Command_Lines_Index = sort { - $Command_Lines[$index[$a]]->{"time"} <=> $Command_Lines[$index[$b]]->{"time"} - } @index; + @Command_Lines_Index = sort { + $Command_Lines[$index[$a]]->{"time"} <=> $Command_Lines[$index[$b]]->{"time"} + } @index; } sub process_command_lines { - for my $i (@Command_Lines_Index) { + for my $i (@Command_Lines_Index) { - my $cl = \$Command_Lines[$i]; - #@{${$cl}->{"new_commands"}} =(); - #@{${$cl}->{"new_files"}} =(); - $$cl->{"class"} = ""; + my $cl = \$Command_Lines[$i]; + #@{${$cl}->{"new_commands"}} =(); + #@{${$cl}->{"new_files"}} =(); + $$cl->{"class"} = ""; - if ($$cl->{"err"}) { - $$cl->{"class"}="wrong"; - $$cl->{"class"}="interrupted" - if ($$cl->{"err"} eq 130); - } - if (!$$cl->{"euid"}) { - $$cl->{"class"}.="_root"; - } - -#tab# my @tab_words=split /\s+/, $$cl->{"output"}; -#tab# my $last_word= $$cl->{"cline"} =~ /(\S*)$/; -#tab# $last_word =~ s@.*/@@; -#tab# my $this_is_tab=1; + if ($$cl->{"err"}) { + $$cl->{"class"}="wrong"; + $$cl->{"class"}="interrupted" + if ($$cl->{"err"} eq 130); + } + if (!$$cl->{"euid"}) { + $$cl->{"class"}.="_root"; + } + +#tab# my @tab_words=split /\s+/, $$cl->{"output"}; +#tab# my $last_word= $$cl->{"cline"} =~ /(\S*)$/; +#tab# $last_word =~ s@.*/@@; +#tab# my $this_is_tab=1; #tab# -#tab# if ($last_word && @tab_words >2) { -#tab# for my $tab_words (@tab_words) { -#tab# if ($tab_words !~ /^$last_word/) { -#tab# $this_is_tab=0; -#tab# last; -#tab# } -#tab# } -#tab# } -#tab# $$cl->{"class"}="tab" if $this_is_tab; - +#tab# if ($last_word && @tab_words >2) { +#tab# for my $tab_words (@tab_words) { +#tab# if ($tab_words !~ /^$last_word/) { +#tab# $this_is_tab=0; +#tab# last; +#tab# } +#tab# } +#tab# } +#tab# $$cl->{"class"}="tab" if $this_is_tab; + -# if ( !$$cl->{"err"}) { -# # Command does not contain mistakes -# -# my %commands = extract_from_cline("commands", ${$cl}->{"cline"}); -# my %files = extract_from_cline("files", ${$cl}->{"cline"}); +# if ( !$$cl->{"err"}) { +# # Command does not contain mistakes +# +# my %commands = extract_from_cline("commands", ${$cl}->{"cline"}); +# my %files = extract_from_cline("files", ${$cl}->{"cline"}); # -# # Searching for new commands only -# for my $command (keys %commands) { -# if (!defined $Commands_Stat{$command}) { -# push @{$$cl->{new_commands}}, $command; -# } -# $Commands_Stat{$command}++; -# } -# -# for my $file (keys %files) { -# if (!defined $Files_Stat{$file}) { -# push @{$$cl->{new_files}}, $file; -# } -# $Files_Stat{$file}++; -# } -# } +# # Searching for new commands only +# for my $command (keys %commands) { +# if (!defined $Commands_Stat{$command}) { +# push @{$$cl->{new_commands}}, $command; +# } +# $Commands_Stat{$command}++; +# } +# +# for my $file (keys %files) { +# if (!defined $Files_Stat{$file}) { +# push @{$$cl->{new_files}}, $file; +# } +# $Files_Stat{$file}++; +# } +# } - if ($$cl->{cline}=~ m@cat[^#]*#([\^=v])\s*(.*)@) { - if ($1 eq "=") { - $$cl->{"class"} = "note"; - $$cl->{"note"} = $$cl->{"output"}; - $$cl->{"note_title"} = $2; - } - else { - my $j = $i; - if ($1 eq "^") { - $j--; - $j-- while ($j >=0 && (!$Command_Lines[$j] || $Command_Lines[$j]->{tty} ne $$cl->{tty})); - } - elsif ($1 eq "v") { - $j++; - $j++ while ($j <= @Command_Lines && (!$Command_Lines[$j] || $Command_Lines[$j]->{tty} ne $$cl->{tty})); - } - $Command_Lines[$j]->{note_title}="$2"; - $Command_Lines[$j]->{note}=$$cl->{output}; - $$cl=0; - } - } - elsif ($$cl->{cline}=~ /#([\^=v])(.*)/) { - if ($1 eq "=") { - $$cl->{"class"} = "note"; - $$cl->{"note"} = $2; - } - else { - my $j=$i; - if ($1 eq "^") { - $j--; - $j-- while ($j >=0 && (!$Command_Lines[$j] || $Command_Lines[$j]->{tty} ne $$cl->{tty})); - } - elsif ($1 eq "v") { - $j++; - $j++ while ($j <= @Command_Lines && $Command_Lines[$j]->{tty} ne $$cl->{tty} || !$Command_Lines[$j]); - } - $Command_Lines[$j]->{note}.="$2\n"; - $$cl=0; - } - } - } + if ($$cl->{cline}=~ m@cat[^#]*#([\^=v])\s*(.*)@) { + if ($1 eq "=") { + $$cl->{"class"} = "note"; + $$cl->{"note"} = $$cl->{"output"}; + $$cl->{"note_title"} = $2; + } + else { + my $j = $i; + if ($1 eq "^") { + $j--; + $j-- while ($j >=0 && (!$Command_Lines[$j] || $Command_Lines[$j]->{tty} ne $$cl->{tty})); + } + elsif ($1 eq "v") { + $j++; + $j++ while ($j <= @Command_Lines && (!$Command_Lines[$j] || $Command_Lines[$j]->{tty} ne $$cl->{tty})); + } + $Command_Lines[$j]->{note_title}="$2"; + $Command_Lines[$j]->{note}=$$cl->{output}; + $$cl=0; + } + } + elsif ($$cl->{cline}=~ /#([\^=v])(.*)/) { + if ($1 eq "=") { + $$cl->{"class"} = "note"; + $$cl->{"note"} = $2; + } + else { + my $j=$i; + if ($1 eq "^") { + $j--; + $j-- while ($j >=0 && (!$Command_Lines[$j] || $Command_Lines[$j]->{tty} ne $$cl->{tty})); + } + elsif ($1 eq "v") { + $j++; + $j++ while ($j <= @Command_Lines && $Command_Lines[$j]->{tty} ne $$cl->{tty} || !$Command_Lines[$j]); + } + $Command_Lines[$j]->{note}.="$2\n"; + $$cl=0; + } + } + } } @@ -373,447 +373,447 @@ sub print_command_lines { - my $output_filename=$_[0]; + my $output_filename=$_[0]; - my $course_name = $Config{"course-name"}; - my $course_code = $Config{"course-code"}; - my $course_date = $Config{"course-date"}; - my $course_center = $Config{"course-center"}; - my $course_trainer = $Config{"course-trainer"}; - my $course_student = $Config{"course-student"}; - + my $course_name = $Config{"course-name"}; + my $course_code = $Config{"course-code"}; + my $course_date = $Config{"course-date"}; + my $course_center = $Config{"course-center"}; + my $course_trainer = $Config{"course-trainer"}; + my $course_student = $Config{"course-student"}; + - # Результат выполнения процедуры равен - # join("", @Result{header,body,stat,help,about,footer}) - my %Result; - my @toc; # Хранит оглавление - my $note_number=0; + # Результат выполнения процедуры равен + # join("", @Result{header,body,stat,help,about,footer}) + my %Result; + my @toc; # Хранит оглавление + my $note_number=0; - $Result{"body"} = "\n"; - - my $cl; - my $last_tty=""; - my $last_day=""; - my $in_range=0; + $Result{"body"} = "
\n"; + + my $cl; + my $last_tty=""; + my $last_day=""; + my $in_range=0; - my $current_command=0; + my $current_command=0; COMMAND_LINE: - for my $k (@Command_Lines_Index) { + for my $k (@Command_Lines_Index) { - my $cl=$Command_Lines[$Command_Lines_Index[$current_command++]]; - - next unless $cl; + my $cl=$Command_Lines[$Command_Lines_Index[$current_command++]]; + + next unless $cl; - if ($Config{filter}) { - # Инициализация фильтра - my %filter; - for (split /&/,$Config{filter}) { - my ($var, $val) = split /=/; - $filter{$var} = $val || ""; - } + if ($Config{filter}) { + # Инициализация фильтра + my %filter; + for (split /&/,$Config{filter}) { + my ($var, $val) = split /=/; + $filter{$var} = $val || ""; + } - for my $filter_key (keys %filter) { - next COMMAND_LINE unless ( - not defined($cl->{local_session_id}) - || not defined($Sessions{$cl->{local_session_id}}->{$filter_key}) - || $Sessions{$cl->{local_session_id}}->{$filter_key} eq $filter{$filter_key}); - } + for my $filter_key (keys %filter) { + next COMMAND_LINE unless ( + not defined($cl->{local_session_id}) + || not defined($Sessions{$cl->{local_session_id}}->{$filter_key}) + || $Sessions{$cl->{local_session_id}}->{$filter_key} eq $filter{$filter_key}); + } - #if ($filter{user}) { - # next COMMAND_LINE unless $Sessions{$cl->{local_session_id}}->{user} eq $filter{user}; - #} + #if ($filter{user}) { + # next COMMAND_LINE unless $Sessions{$cl->{local_session_id}}->{user} eq $filter{user}; + #} - #for my $filter_field (keys %filter) { - # next COMMAND_LINE unless $Sessions{$cl->{local_session_id}}->{$filter_field} eq $filter{$filter_field}; - #} - } + #for my $filter_field (keys %filter) { + # next COMMAND_LINE unless $Sessions{$cl->{local_session_id}}->{$filter_field} eq $filter{$filter_field}; + #} + } - if ($Config{"from"} && $cl->{"cline"} =~ /$Config{"signature"}\s*$Config{"from"}/) { - $in_range=1; - next; - } - if ($Config{"to"} && $cl->{"cline"} =~ /$Config{"signature"}\s*$Config{"to"}/) { - $in_range=0; - next; - } - next if ($Config{"from"} && $Config{"to"} && !$in_range) - || - ($Config{"skip_empty"} =~ /^y/i && $cl->{"cline"} =~ /^\s*$/ ) - || - ($Config{"skip_wrong"} =~ /^y/i && $cl->{"err"} != 0) - || - ($Config{"skip_interrupted"} =~ /^y/i && $cl->{"err"} == 130); - - #my @new_commands=@{$cl->{"new_commands"}}; - #my @new_files=@{$cl->{"new_files"}}; + if ($Config{"from"} && $cl->{"cline"} =~ /$Config{"signature"}\s*$Config{"from"}/) { + $in_range=1; + next; + } + if ($Config{"to"} && $cl->{"cline"} =~ /$Config{"signature"}\s*$Config{"to"}/) { + $in_range=0; + next; + } + next if ($Config{"from"} && $Config{"to"} && !$in_range) + || + ($Config{"skip_empty"} =~ /^y/i && $cl->{"cline"} =~ /^\s*$/ ) + || + ($Config{"skip_wrong"} =~ /^y/i && $cl->{"err"} != 0) + || + ($Config{"skip_interrupted"} =~ /^y/i && $cl->{"err"} == 130); + + #my @new_commands=@{$cl->{"new_commands"}}; + #my @new_files=@{$cl->{"new_files"}}; - if ($cl->{class} eq "note") { - my $note = $cl->{note}; - $note = join ("\n", map ("

$_

", split (/-\n/, $note))); - $note =~ s@(http:[a-zA-Z.0-9/?%-]*)@$1@g; - $note =~ s@(www\.[a-zA-Z.0-9/?%-]*)@$1@g; - $Result{"body"} .= ""; + if ($cl->{class} eq "note") { + my $note = $cl->{note}; + $note = join ("\n", map ("

$_

", split (/-\n/, $note))); + $note =~ s@(http:[a-zA-Z.0-9/?%-]*)@$1@g; + $note =~ s@(www\.[a-zA-Z.0-9/?%-]*)@$1@g; + $Result{"body"} .= ""; - if ($cl->{note_title}) { - push @{$toc[@toc]},"".$cl->{note_title}.""; - $note_number++; - } - next; - } + if ($cl->{note_title}) { + push @{$toc[@toc]},"".$cl->{note_title}.""; + $note_number++; + } + next; + } - my $cl_class="cline"; - my $out_class="output"; - if ($cl->{"class"}) { - $cl_class = $cl->{"class"}."_".$cl_class; - $out_class = $cl->{"class"}."_".$out_class; - } + my $cl_class="cline"; + my $out_class="output"; + if ($cl->{"class"}) { + $cl_class = $cl->{"class"}."_".$cl_class; + $out_class = $cl->{"class"}."_".$out_class; + } - my @new_commands; - my @new_files; - @new_commands = split (/\s+/, $cl->{"new_commands"}) if defined $cl->{"new_commands"}; - @new_files = split (/\s+/, $cl->{"new_files"}) if defined $cl->{"new_files"}; + my @new_commands; + my @new_files; + @new_commands = split (/\s+/, $cl->{"new_commands"}) if defined $cl->{"new_commands"}; + @new_files = split (/\s+/, $cl->{"new_files"}) if defined $cl->{"new_files"}; - my $output=""; - if ($Config{"head_lines"} || $Config{"tail_lines"}) { - # Partialy output - my @lines = split '\n', $cl->{"output"}; - # head - my $mark=1; - for (my $i=0; $i<= $#lines && $i < $Config{"head_lines"}; $i++) { - $output .= $lines[$i]."\n"; - } - # tail - my $start=$#lines-$Config{"tail_lines"}+1; - if ($start < 0) { - $start=0; - $mark=0; - } - if ($start < $Config{"head_lines"}) { - $start=$Config{"head_lines"}; - $mark=0; - } - $output .= $Config{"skip_text"}."\n" if $mark; - for ($i=$start; $i<= $#lines; $i++) { - $output .= $lines[$i]."\n"; - } - } - else { - # Full output - $output .= $cl->{"output"}; - } - #$output .= "^C\n" if ($cl->{"err"} eq "130"); + my $output=""; + if ($Config{"head_lines"} || $Config{"tail_lines"}) { + # Partialy output + my @lines = split '\n', $cl->{"output"}; + # head + my $mark=1; + for (my $i=0; $i<= $#lines && $i < $Config{"head_lines"}; $i++) { + $output .= $lines[$i]."\n"; + } + # tail + my $start=$#lines-$Config{"tail_lines"}+1; + if ($start < 0) { + $start=0; + $mark=0; + } + if ($start < $Config{"head_lines"}) { + $start=$Config{"head_lines"}; + $mark=0; + } + $output .= $Config{"skip_text"}."\n" if $mark; + for ($i=$start; $i<= $#lines; $i++) { + $output .= $lines[$i]."\n"; + } + } + else { + # Full output + $output .= $cl->{"output"}; + } + #$output .= "^C\n" if ($cl->{"err"} eq "130"); - # - ## - ## Начинается собственно вывод - ## - # + # + ## + ## Начинается собственно вывод + ## + # - # + # - my ($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime($cl->{time}); - next if $Stat{LastCommand} == $cl->{time}; - $Stat{FirstCommand} = $cl->{time} unless $Stat{FirstCommand}; - $Stat{LastCommand} = 0 unless defined $Stat{LastCommand}; - $Stat{TotalTime} += $cl->{time} - $Stat{LastCommand} - if $cl->{time} - $Stat{LastCommand} < $Config{stat_inactivity_interval}; - $Stat{LastCommand} = $cl->{time}; - $Stat{TotalCommands} = 0 unless $Stat{TotalCommands}; - $Stat{TotalCommands}++; + my ($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime($cl->{time}); + next if $Stat{LastCommand} == $cl->{time}; + $Stat{FirstCommand} = $cl->{time} unless $Stat{FirstCommand}; + $Stat{LastCommand} = 0 unless defined $Stat{LastCommand}; + $Stat{TotalTime} += $cl->{time} - $Stat{LastCommand} + if $cl->{time} - $Stat{LastCommand} < $Config{stat_inactivity_interval}; + $Stat{LastCommand} = $cl->{time}; + $Stat{TotalCommands} = 0 unless $Stat{TotalCommands}; + $Stat{TotalCommands}++; - # Добавляем спереди 0 для удобочитаемости - $min = "0".$min if $min =~ /^.$/; - $hour = "0".$hour if $hour =~ /^.$/; - $sec = "0".$sec if $sec =~ /^.$/; + # Добавляем спереди 0 для удобочитаемости + $min = "0".$min if $min =~ /^.$/; + $hour = "0".$hour if $hour =~ /^.$/; + $sec = "0".$sec if $sec =~ /^.$/; - $class=$cl->{"out_class"}; - $class =~ s/output$//; + $class=$cl->{"out_class"}; + $class =~ s/output$//; - $Stat{ErrorCommands}++ - if $class =~ /wrong/; - - $Result{"body"} .= "\n"; - - - # DAY CHANGE - if ( $last_day ne $day) { - #$Result{"body"} .= ""; - $Result{"body"} .= ""; - push @toc, "".$Day_Name[$wday]."\n"; - $last_day=$day; - } + $Stat{ErrorCommands}++ + if $class =~ /wrong/; + + $Result{"body"} .= "\n"; + + + # DAY CHANGE + if ( $last_day ne $day) { + #$Result{"body"} .= ""; + $Result{"body"} .= ""; + push @toc, "".$Day_Name[$wday]."\n"; + $last_day=$day; + } - # CONSOLE CHANGE - if ( $last_tty ne $cl->{"tty"}) { - my $host; - #$host = $Sessions{$cl->{local_session_id}}->{user}."@".$Sessions{$cl->{local_session_id}}->{hostname}; - my $body = $cl->{"tty"}; - $body .= " \@$host" if $host; - $Result{"body"} .= ""; - $last_tty=$cl->{"tty"}; - } + # CONSOLE CHANGE + if ( $last_tty ne $cl->{"tty"}) { + my $host; + #$host = $Sessions{$cl->{local_session_id}}->{user}."@".$Sessions{$cl->{local_session_id}}->{hostname}; + my $body = $cl->{"tty"}; + $body .= " \@$host" if $host; + $Result{"body"} .= ""; + $last_tty=$cl->{"tty"}; + } - # TIME - if ($Config{"show_time"} =~ /^y/i) { - $Result{"body"} .= ""; - } else { - $Result{"body"} .= ""; + } else { + $Result{"body"} .= "\n"; - $Result{"body"} .= "\n"; - } + # Вывод очередной команды окончен + $Result{"body"} .= "\n"; + $Result{"body"} .= "\n"; + } - $Result{"body"} .= "
"; - $Result{"body"} .= "

".$cl->{note_title}."

" if $cl->{note_title}; - $Result{"body"} .= "".$note."

"; + $Result{"body"} .= "

".$cl->{note_title}."

" if $cl->{note_title}; + $Result{"body"} .= "".$note."

День ",$day,"

".$Day_Name[$wday]."

День ",$day,"

".$Day_Name[$wday]."

".$body."
".$body."
".
-				$hour. ":". $min. ":". $sec.
-				"
" - } + # TIME + if ($Config{"show_time"} =~ /^y/i) { + $Result{"body"} .= "
".
+                $hour. ":". $min. ":". $sec.
+                "
" + } - # COMMAND - $Result{"body"} .= "\n"; - $Result{"body"} .= "
\n";
-		my $cline = $cl->{"prompt"}.$cl->{"cline"};
-		$cline =~ s/\n//;
+        # COMMAND
+        $Result{"body"} .= "
\n"; + $Result{"body"} .= "
\n";
+        my $cline = $cl->{"prompt"}.$cl->{"cline"};
+        $cline =~ s/\n//;
 
-		#$cline .= "(".$Sessions{$cl->{local_session_id}}.")";
-		
-		my $hint = make_comment($cl->{"cline"});
-		$cline = "
$cline
" if $hint; - $Result{"body"} .= $cline; - $Result{"body"} .= "
\n"; + #$cline .= "(".$Sessions{$cl->{local_session_id}}.")"; + + my $hint = make_comment($cl->{"cline"}); + $cline = "
$cline
" if $hint; + $Result{"body"} .= $cline; + $Result{"body"} .= "\n"; - my $last_command = $cl->{"last_command"}; - if (!( - $Config{"suppress_editors"} =~ /^y/i && grep ($_ eq $last_command, @{$Config{"editors"}}) || - $Config{"suppress_pagers"} =~ /^y/i && grep ($_ eq $last_command, @{$Config{"pagers"}}) || - $Config{"suppress_terminal"}=~ /^y/i && grep ($_ eq $last_command, @{$Config{"terminal"}}) - )) { + my $last_command = $cl->{"last_command"}; + if (!( + $Config{"suppress_editors"} =~ /^y/i && grep ($_ eq $last_command, @{$Config{"editors"}}) || + $Config{"suppress_pagers"} =~ /^y/i && grep ($_ eq $last_command, @{$Config{"pagers"}}) || + $Config{"suppress_terminal"}=~ /^y/i && grep ($_ eq $last_command, @{$Config{"terminal"}}) + )) { - $Result{"body"} .= "
";
-			$Result{"body"} .= $output;
-			$Result{"body"} .= "
\n"; - } + $Result{"body"} .= "
";
+            $Result{"body"} .= $output;
+            $Result{"body"} .= "
\n"; + } - # DIFF - if ( $Config{"show_diffs"} =~ /^y/i && $cl->{"diff"}) { - $Result{"body"} .= "
";
-			$Result{"body"} .= $cl->{"diff"};
-			$Result{"body"} .= "
"; - } - - #NOTES - if ( $Config{"show_notes"} =~ /^y/i && $cl->{"note"}) { - my $note=$cl->{"note"}; - $note =~ s/\n/\n/msg; - $note =~ s@(http:[a-zA-Z.0-9/?%-]*)@$1@g; - $note =~ s@(www\.[a-zA-Z.0-9/?%-]*)@$1@g; - # Ширину пока не используем - # $Result{"body"} .= ""; - $Result{"body"} .= "
"; - $Result{"body"} .= "" if $cl->{note_title}; - $Result{"body"} .= ""; - $Result{"body"} .= "
".$cl->{note_title}."
".$note."
\n"; - } + # DIFF + if ( $Config{"show_diffs"} =~ /^y/i && $cl->{"diff"}) { + $Result{"body"} .= "
";
+            $Result{"body"} .= $cl->{"diff"};
+            $Result{"body"} .= "
"; + } + + #NOTES + if ( $Config{"show_notes"} =~ /^y/i && $cl->{"note"}) { + my $note=$cl->{"note"}; + $note =~ s/\n/\n/msg; + $note =~ s@(http:[a-zA-Z.0-9/?%-]*)@$1@g; + $note =~ s@(www\.[a-zA-Z.0-9/?%-]*)@$1@g; + # Ширину пока не используем + # $Result{"body"} .= ""; + $Result{"body"} .= "
"; + $Result{"body"} .= "" if $cl->{note_title}; + $Result{"body"} .= ""; + $Result{"body"} .= "
".$cl->{note_title}."
".$note."
\n"; + } - # COMMENT - if ( $Config{"show_comments"} =~ /^y/i) { - my $comment = make_comment($cl->{"cline"}); - if ($comment) { - $Result{"body"} .= "". - "
"; - $Result{"body"} .= ""; - $Result{"body"} .= $comment; - $Result{"body"} .= "
\n"; - $Result{"body"} .= "
"; - } - } + # COMMENT + if ( $Config{"show_comments"} =~ /^y/i) { + my $comment = make_comment($cl->{"cline"}); + if ($comment) { + $Result{"body"} .= "". + "
"; + $Result{"body"} .= ""; + $Result{"body"} .= $comment; + $Result{"body"} .= "
\n"; + $Result{"body"} .= "
"; + } + } - # Вывод очередной команды окончен - $Result{"body"} .= "
\n"; + $Result{"body"} .= "\n"; - #$Result{"stat"} = "
"; + #$Result{"stat"} = "
"; - %StatNames = ( - FirstCommand => "Время первой команды журнала", - LastCommand => "Время последней команды журнала", - TotalCommands => "Количество командных строк в журнале", - ErrorsPercentage => "Процент команд с ненулевым кодом завершения, %", - TotalTime => "Суммарное время работы с терминалом *, час", - CommandsPerTime => "Количество командных строк в единицу времени, команда/мин", - CommandsFrequency => "Частота использования команд", - RareCommands => "Частота использования этих команд < 0.5%", - ); - @StatOrder = ( - FirstCommand, - LastCommand, - TotalCommands, - ErrorsPercentage, - TotalTime, - CommandsPerTime, - CommandsFrequency, - RareCommands, - ); + %StatNames = ( + FirstCommand => "Время первой команды журнала", + LastCommand => "Время последней команды журнала", + TotalCommands => "Количество командных строк в журнале", + ErrorsPercentage => "Процент команд с ненулевым кодом завершения, %", + TotalTime => "Суммарное время работы с терминалом *, час", + CommandsPerTime => "Количество командных строк в единицу времени, команда/мин", + CommandsFrequency => "Частота использования команд", + RareCommands => "Частота использования этих команд < 0.5%", + ); + @StatOrder = ( + FirstCommand, + LastCommand, + TotalCommands, + ErrorsPercentage, + TotalTime, + CommandsPerTime, + CommandsFrequency, + RareCommands, + ); - # Подготовка статистики к выводу - # Некоторые значения пересчитываются! - # Дальше их лучше уже не использовать!!! + # Подготовка статистики к выводу + # Некоторые значения пересчитываются! + # Дальше их лучше уже не использовать!!! - my %CommandsFrequency = %CommandsFDistribution; + my %CommandsFrequency = %CommandsFDistribution; - $Stat{TotalTime} ||= 0; - my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($Stat{FirstCommand} || 0); - $Stat{FirstCommand} = sprintf "%02i:%02i:%02i %04i-%2i-%2i", $hour, $min, $sec, $year+1900, $mon+1, $mday; - ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($Stat{LastCommand} || 0); - $Stat{LastCommand} = sprintf "%02i:%02i:%02i %04i-%2i-%2i", $hour, $min, $sec, $year+1900, $mon+1, $mday; - $Stat{ErrorsPercentage} = sprintf "%5.2f", $Stat{ErrorCommands}*100/$Stat{TotalCommands} - if $Stat{TotalCommands}; - $Stat{CommandsPerTime} = sprintf "%5.2f", $Stat{TotalCommands}*60/$Stat{TotalTime} - if $Stat{TotalTime}; - $Stat{TotalTime} = sprintf "%5.2f", $Stat{TotalTime}/60/60; + $Stat{TotalTime} ||= 0; + my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($Stat{FirstCommand} || 0); + $Stat{FirstCommand} = sprintf "%02i:%02i:%02i %04i-%2i-%2i", $hour, $min, $sec, $year+1900, $mon+1, $mday; + ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($Stat{LastCommand} || 0); + $Stat{LastCommand} = sprintf "%02i:%02i:%02i %04i-%2i-%2i", $hour, $min, $sec, $year+1900, $mon+1, $mday; + $Stat{ErrorsPercentage} = sprintf "%5.2f", $Stat{ErrorCommands}*100/$Stat{TotalCommands} + if $Stat{TotalCommands}; + $Stat{CommandsPerTime} = sprintf "%5.2f", $Stat{TotalCommands}*60/$Stat{TotalTime} + if $Stat{TotalTime}; + $Stat{TotalTime} = sprintf "%5.2f", $Stat{TotalTime}/60/60; - my $total_commands=0; - for $command (keys %CommandsFrequency){ - $total_commands += $CommandsFrequency{$command}; - } - if ($total_commands) { - for $command (reverse sort {$CommandsFrequency{$a} <=> $CommandsFrequency{$b}} keys %CommandsFrequency){ - my $command_html; - my $percentage = sprintf "%5.2f",$CommandsFrequency{$command}*100/$total_commands; - if ($percentage < 0.5) { - my $hint = make_comment($command); - $command_html = "$command"; - $command_html = "$command_html" if $hint; - my $command_html = "$command_html"; - $Stat{RareCommands} .= $command_html."".$CommandsFrequency{$command}." , "; - } - else { - my $hint = make_comment($command); - $command_html = "$command"; - $command_html = "$command_html" if $hint; - my $command_html = "$command_html"; - $percentage = sprintf "%5.2f",$percentage; - $Stat{CommandsFrequency} .= "".$command_html."".$CommandsFrequency{$command}."". - "|".("="x int($CommandsFrequency{$command}*100/$total_commands))."| $percentage%"; - } - } - $Stat{CommandsFrequency} = "".$Stat{CommandsFrequency}."
"; - $Stat{RareCommands} =~ s/, $// if $Stat{RareCommands}; - } + my $total_commands=0; + for $command (keys %CommandsFrequency){ + $total_commands += $CommandsFrequency{$command}; + } + if ($total_commands) { + for $command (reverse sort {$CommandsFrequency{$a} <=> $CommandsFrequency{$b}} keys %CommandsFrequency){ + my $command_html; + my $percentage = sprintf "%5.2f",$CommandsFrequency{$command}*100/$total_commands; + if ($percentage < 0.5) { + my $hint = make_comment($command); + $command_html = "$command"; + $command_html = "$command_html" if $hint; + my $command_html = "$command_html"; + $Stat{RareCommands} .= $command_html."".$CommandsFrequency{$command}." , "; + } + else { + my $hint = make_comment($command); + $command_html = "$command"; + $command_html = "$command_html" if $hint; + my $command_html = "$command_html"; + $percentage = sprintf "%5.2f",$percentage; + $Stat{CommandsFrequency} .= "".$command_html."".$CommandsFrequency{$command}."". + "|".("="x int($CommandsFrequency{$command}*100/$total_commands))."| $percentage%"; + } + } + $Stat{CommandsFrequency} = "".$Stat{CommandsFrequency}."
"; + $Stat{RareCommands} =~ s/, $// if $Stat{RareCommands}; + } - $Result{"stat"} .= "

Статистика

"; - $Result{"stat"} .= ""; - for my $stat (@StatOrder) { - $Result{"stat"} .= "" - if $Stat{"$stat"}; - } - - $Result{"stat"} .= "
".$StatNames{"$stat"}."".$Stat{"$stat"}."
"; - $Result{"stat"} .= "____
*) Интервалы неактивности длительностью ".($Config{stat_inactivity_interval}/60)." минут и более не учитываются

"; + $Result{"stat"} .= "

Статистика

"; + $Result{"stat"} .= ""; + for my $stat (@StatOrder) { + $Result{"stat"} .= "" + if $Stat{"$stat"}; + } + + $Result{"stat"} .= "
".$StatNames{"$stat"}."".$Stat{"$stat"}."
"; + $Result{"stat"} .= "____
*) Интервалы неактивности длительностью ".($Config{stat_inactivity_interval}/60)." минут и более не учитываются

"; - #$Result{"help"} .= "
"; - $Result{"help"} .= "

Справка

"; - $Result{"help"} .= "$Html_Help
"; - #$Result{"about"} .= "
"; - $Result{"about"} .= "

О программе

"; - $Result{"about"} .= "$Html_About"; - $Result{"footer"} .= "\n"; - $Result{"footer"} .= "\n"; + #$Result{"help"} .= "
"; + $Result{"help"} .= "

Справка

"; + $Result{"help"} .= "$Html_Help
"; + #$Result{"about"} .= "
"; + $Result{"about"} .= "

О программе

"; + $Result{"about"} .= "$Html_About"; + $Result{"footer"} .= "\n"; + $Result{"footer"} .= "\n"; - $Result{"title"} = "Журнал лабораторных работ"; - $Result{"title"}.= " -- ".$course_student if $course_student; - if ($course_date) { - $Result{"title"}.= " -- ".$course_date; - $Result{"title"}.= "/".$course_code if $course_code; - } - else { - $Result{"title"}.= " -- ".$course_code if $course_code; - } + $Result{"title"} = "Журнал лабораторных работ"; + $Result{"title"}.= " -- ".$course_student if $course_student; + if ($course_date) { + $Result{"title"}.= " -- ".$course_date; + $Result{"title"}.= "/".$course_code if $course_code; + } + else { + $Result{"title"}.= " -- ".$course_code if $course_code; + } - # Заголовок генерируется позже всего - # Тогда, когда известно уже, что должно быть написано в - # оглавлении - $Result{"header"} = < - - - - $Result{title} - - - -

Журнал лабораторных работ

+ # Заголовок генерируется позже всего + # Тогда, когда известно уже, что должно быть написано в + # оглавлении + $Result{"header"} = < + + + + $Result{title} + + + +

Журнал лабораторных работ

HEADER - $Result{"header"} .= "

" if $course_student || $course_trainer || $course_name || $course_code || $course_date || $course_center; - $Result{"header"} .= "Выполнил $course_student
" if $course_student; - $Result{"header"} .= "Проверил $course_trainer
" if $course_trainer; - $Result{"header"} .= "Курс " if $course_name || $course_code || $course_date; - $Result{"header"} .= "$course_name " if $course_name; - $Result{"header"} .= "($course_code)" if $course_code; - $Result{"header"} .= ", $course_date
" if $course_date; - $Result{"header"} .= "Учебный центр $course_center
" if $course_center; - $Result{"header"} .= "

" if $course_student || $course_trainer || $course_name || $course_code || $course_date || $course_center; + $Result{"header"} .= "

" if $course_student || $course_trainer || $course_name || $course_code || $course_date || $course_center; + $Result{"header"} .= "Выполнил $course_student
" if $course_student; + $Result{"header"} .= "Проверил $course_trainer
" if $course_trainer; + $Result{"header"} .= "Курс " if $course_name || $course_code || $course_date; + $Result{"header"} .= "$course_name " if $course_name; + $Result{"header"} .= "($course_code)" if $course_code; + $Result{"header"} .= ", $course_date
" if $course_date; + $Result{"header"} .= "Учебный центр $course_center
" if $course_center; + $Result{"header"} .= "

" if $course_student || $course_trainer || $course_name || $course_code || $course_date || $course_center; - my $toc = collapse_list (\@toc); - $Result{"header"} .= < - - -
Содержание
- - - - + my $toc = collapse_list (\@toc); + $Result{"header"} .= < + + +
Содержание
+ + + + -

Журнал

+

Журнал

HEADER - $Result{"header"} .= "
\n"; - for my $element (keys %Elements_Visibility) - { - my @e = split /\s+/, $element; - my $showhide = join "", map { "ShowHide('$_');" } @e ; - $Result{"header"} .= "". - $Elements_Visibility{$element}. - "
\n"; - } + $Result{"header"} .= "
\n"; + for my $element (keys %Elements_Visibility) + { + my @e = split /\s+/, $element; + my $showhide = join "", map { "ShowHide('$_');" } @e ; + $Result{"header"} .= "". + $Elements_Visibility{$element}. + "
\n"; + } - $Result{"header"} .= "
\n"; + $Result{"header"} .= "
\n"; - if ($output_filename eq "-") { - print $Result{"header"}, $Result{"body"}, $Result{"stat"}, $Result{"help"}, $Result{"about"}, $Result{"footer"}; - } - else { - open(OUT, ">", $output_filename) - or die "Can't open $output_filename for writing\n"; - print OUT $Result{"header"}, $Result{"body"}, $Result{"stat"}, $Result{"help"}, $Result{"about"}, $Result{"footer"}; - close(OUT); - } + if ($output_filename eq "-") { + print $Result{"header"}, $Result{"body"}, $Result{"stat"}, $Result{"help"}, $Result{"about"}, $Result{"footer"}; + } + else { + open(OUT, ">", $output_filename) + or die "Can't open $output_filename for writing\n"; + print OUT $Result{"header"}, $Result{"body"}, $Result{"stat"}, $Result{"help"}, $Result{"about"}, $Result{"footer"}; + close(OUT); + } } sub collapse_list($) { - my $res = ""; - for my $elem (@{$_[0]}) { - if (ref $elem eq "ARRAY") { - $res .= "
    ".collapse_list($elem)."
"; - } - else - { - $res .= "
  • ".$elem."
  • "; - } - } - return $res; + my $res = ""; + for my $elem (@{$_[0]}) { + if (ref $elem eq "ARRAY") { + $res .= "
      ".collapse_list($elem)."
    "; + } + else + { + $res .= "
  • ".$elem."
  • "; + } + } + return $res; } @@ -822,24 +822,24 @@ sub init_variables { $Html_Help = < -
  • - В журнал автоматически попадают все команды, данные в любом терминале системы. -

  • -
  • - Для того чтобы убедиться, что журнал на текущем терминале ведётся, - и команды записываются, дайте команду w. - В поле WHAT, соответствующем текущему терминалу, - должна быть указана программа script. -

  • -
  • - Если код завершения команды равен нулю, - команда была выполнена без ошибок. - Команды, код завершения которых отличен от нуля, выделяются цветом. + Для того чтобы использовать LiLaLo, не нужно знать ничего особенного: + всё происходит само собой. + Однако, чтобы ведение и последующее использование журналов + было как можно более эффективным, желательно иметь в виду следующее: +

      +
    • + В журнал автоматически попадают все команды, данные в любом терминале системы. +

    • +
    • + Для того чтобы убедиться, что журнал на текущем терминале ведётся, + и команды записываются, дайте команду w. + В поле WHAT, соответствующем текущему терминалу, + должна быть указана программа script. +

    • +
    • + Если код завершения команды равен нулю, + команда была выполнена без ошибок. + Команды, код завершения которых отличен от нуля, выделяются цветом.
      @@ -851,9 +851,9 @@

      -

    • -
    • - Команды, ход выполнения которых был прерван пользователем, выделяются цветом. +

    • +
    • + Команды, ход выполнения которых был прерван пользователем, выделяются цветом.
      @@ -870,10 +870,10 @@

      -

    • -
    • - Команды, выполненные с привилегиями суперпользователя, - выделяются слева красной чертой. +

    • +
    • + Команды, выполненные с привилегиями суперпользователя, + выделяются слева красной чертой.
      @@ -885,33 +885,33 @@
      -
      -

    • -
    • - Изменения, внесённые в текстовый файл с помощью редактора, - запоминаются и показываются в журнале в формате ed. - Строки, начинающиеся символом "<", удалены, а строки, - начинающиеся символом ">" -- добавлены. +
      +

    • +
    • + Изменения, внесённые в текстовый файл с помощью редактора, + запоминаются и показываются в журнале в формате ed. + Строки, начинающиеся символом "<", удалены, а строки, + начинающиеся символом ">" -- добавлены.
       \$ vi ~/.bashrc
      2a3,5
      -> 	if [ -f /usr/local/etc/bash_completion ]; then
      +>    if [ -f /usr/local/etc/bash_completion ]; then
       >         . /usr/local/etc/bash_completion
      ->     	fi
      +>        fi
       
      -
      -

    • -
    • - Для того чтобы изменить файл в соответствии с показанными в диффшоте - изменениями, можно воспользоваться командой patch. - Нужно скопировать изменения, запустить программу patch, указав в - качестве её аргумента файл, к которому применяются изменения, - и всавить скопированный текст: +
      +

    • +
    • + Для того чтобы изменить файл в соответствии с показанными в диффшоте + изменениями, можно воспользоваться командой patch. + Нужно скопировать изменения, запустить программу patch, указав в + качестве её аргумента файл, к которому применяются изменения, + и всавить скопированный текст:
      @@ -920,35 +920,35 @@
      - В данном случае изменения применяются к файлу ~/.bashrc -

    • -
    • - Для того чтобы получить краткую справочную информацию о команде, - нужно подвести к ней мышь. Во всплывающей подсказке появится краткое - описание команды. -

    • -
    • - Время ввода команды, показанное в журнале, соответствует времени - начала ввода командной строки, которое равно тому моменту, - когда на терминале появилось приглашение интерпретатора -

    • -
    • - Имя терминала, на котором была введена команда, показано в специальном блоке. - Этот блок показывается только в том случае, если терминал - текущей команды отличается от терминала предыдущей. -

    • -
    • - Вывод не интересующих вас в настоящий момент элементов журнала, - таких как время, имя терминала и других, можно отключить. - Для этого нужно воспользоваться формой управления журналом - вверху страницы. -

    • -
    • - Небольшие комментарии к командам можно вставлять прямо из командной строки. - Комментарий вводится прямо в командную строку, после символов #^ или #v. - Символы ^ и v показывают направление выбора команды, к которой относится комментарий: - ^ - к предыдущей, v - к следующей. - Например, если в командной строке было введено: + В данном случае изменения применяются к файлу ~/.bashrc +

    • +
    • + Для того чтобы получить краткую справочную информацию о команде, + нужно подвести к ней мышь. Во всплывающей подсказке появится краткое + описание команды. +

    • +
    • + Время ввода команды, показанное в журнале, соответствует времени + начала ввода командной строки, которое равно тому моменту, + когда на терминале появилось приглашение интерпретатора +

    • +
    • + Имя терминала, на котором была введена команда, показано в специальном блоке. + Этот блок показывается только в том случае, если терминал + текущей команды отличается от терминала предыдущей. +

    • +
    • + Вывод не интересующих вас в настоящий момент элементов журнала, + таких как время, имя терминала и других, можно отключить. + Для этого нужно воспользоваться формой управления журналом + вверху страницы. +

    • +
    • + Небольшие комментарии к командам можно вставлять прямо из командной строки. + Комментарий вводится прямо в командную строку, после символов #^ или #v. + Символы ^ и v показывают направление выбора команды, к которой относится комментарий: + ^ - к предыдущей, v - к следующей. + Например, если в командной строке было введено:

       \$ whoami
       
      @@ -958,8 +958,8 @@
       \$ #^ Интересно, кто я?
       
      - в журнале это будет выглядеть так: - + в журнале это будет выглядеть так: +
       \$ whoami
       
      @@ -968,10 +968,10 @@
      Интересно, кто я?
      -

    • -
    • - Если комментарий содержит несколько строк, - его можно вставить в журнал следующим образом: +

    • +
    • + Если комментарий содержит несколько строк, + его можно вставить в журнал следующим образом:

       \$ whoami
       
      @@ -988,7 +988,7 @@ Она не может ответить на вопрос о нашем назначении в этом мире. - В журнале это будет выглядеть так: + В журнале это будет выглядеть так:
      @@ -1006,103 +1006,103 @@
      - Для разделения нескольких абзацев между собой - используйте символ "-", один в строке. -
      + Для разделения нескольких абзацев между собой + используйте символ "-", один в строке. +

    • -
    • - Комментарии, не относящиеся непосредственно ни к какой из команд, - добавляются точно таким же способом, только вместо симолов #^ или #v - нужно использовать символы #= -

    • +
    • + Комментарии, не относящиеся непосредственно ни к какой из команд, + добавляются точно таким же способом, только вместо симолов #^ или #v + нужно использовать символы #= +

    HELP $Html_About = < - LiLaLo (L3) расшифровывается как Live Lab Log.
    - Программа разработана для повышения эффективности обучения Unix/Linux-системам.
    - (c) Игорь Чубин, 2004-2005
    -

    +

    + LiLaLo (L3) расшифровывается как Live Lab Log.
    + Программа разработана для повышения эффективности обучения Unix/Linux-системам.
    + (c) Игорь Чубин, 2004-2005
    +

    ABOUT $Html_About.='$Id$

    '; $Html_JavaScript = <0) - subelems[j].style.display = "none"; - else - subelems[j].style.display = ""; + function getElementsByClassName(Class_Name) + { + var Result=new Array(); + var All_Elements=document.all || document.getElementsByTagName('*'); + for (i=0; i0) + subelems[j].style.display = "none"; + else + subelems[j].style.display = ""; - } - - } - } + } + + } + } - } + } JS %Search_Machines = ( - "google" => { "query" => "http://www.google.com/search?q=" , - "icon" => "$Config{frontend_google_ico}" }, - "freebsd" => { "query" => "http://www.freebsd.org/cgi/man.cgi?query=", - "icon" => "$Config{frontend_freebsd_ico}" }, - "linux" => { "query" => "http://man.he.net/?topic=", - "icon" => "$Config{frontend_linux_ico}"}, - "opennet" => { "query" => "http://www.opennet.ru/search.shtml?words=", - "icon" => "$Config{frontend_opennet_ico}"}, - "local" => { "query" => "http://www.freebsd.org/cgi/man.cgi?query=", - "icon" => "$Config{frontend_local_ico}" }, + "google" => { "query" => "http://www.google.com/search?q=" , + "icon" => "$Config{frontend_google_ico}" }, + "freebsd" => { "query" => "http://www.freebsd.org/cgi/man.cgi?query=", + "icon" => "$Config{frontend_freebsd_ico}" }, + "linux" => { "query" => "http://man.he.net/?topic=", + "icon" => "$Config{frontend_linux_ico}"}, + "opennet" => { "query" => "http://www.opennet.ru/search.shtml?words=", + "icon" => "$Config{frontend_opennet_ico}"}, + "local" => { "query" => "http://www.freebsd.org/cgi/man.cgi?query=", + "icon" => "$Config{frontend_local_ico}" }, - ); + ); %Elements_Visibility = ( - "note" => "замечания", - "diff" => "редактор", - "time" => "время", - "ttychange" => "терминал", - "wrong_output wrong_cline wrong_root_output wrong_root_cline" - => "команды с ошибками", - "interrupted_output interrupted_cline interrupted_root_output interrupted_root_cline" - => "прерванные команды", - "tab_completion_output tab_completion_cline" - => "продолжение с помощью tab" + "note" => "замечания", + "diff" => "редактор", + "time" => "время", + "ttychange" => "терминал", + "wrong_output wrong_cline wrong_root_output wrong_root_cline" + => "команды с ошибками", + "interrupted_output interrupted_cline interrupted_root_output interrupted_root_cline" + => "прерванные команды", + "tab_completion_output tab_completion_cline" + => "продолжение с помощью tab" ); @Day_Name = qw/ Воскресенье Понедельник Вторник Среда Четверг Пятница Суббота /; diff -r 568bab7090fc -r d021553f4e98 l3scripts --- a/l3scripts Sat Nov 26 16:15:52 2005 +0200 +++ b/l3scripts Sun Dec 04 18:44:21 2005 +0200 @@ -71,8 +71,8 @@ ###send-logs -cat >> /tmp/letters <> /tmp/letters <