Diff for /loncom/interface/loncommon.pm between versions 1.431 and 1.443

version 1.431, 2006/07/19 08:36:11 version 1.443, 2006/08/11 21:55:19
Line 285  sub browser_and_searcher_javascript { Line 285  sub browser_and_searcher_javascript {
  }   }
         url += 'element=' + elementname + '';          url += 'element=' + elementname + '';
         var title = 'Browser';          var title = 'Browser';
         var options = 'scrollbars=1,resizable=1,menubar=1,location=1';          var options = 'scrollbars=1,resizable=1,menubar=0,toolbar=1,location=1';
         options += ',width=700,height=600';          options += ',width=700,height=600';
         editbrowser = open(url,title,options,'1');          editbrowser = open(url,title,options,'1');
         editbrowser.focus();          editbrowser.focus();
Line 306  sub browser_and_searcher_javascript { Line 306  sub browser_and_searcher_javascript {
  }   }
         url += 'element=' + elementname + '';          url += 'element=' + elementname + '';
         var title = 'Search';          var title = 'Search';
         var options = 'scrollbars=1,resizable=1,menubar=0';          var options = 'scrollbars=1,resizable=1,menubar=0,toolbar=1,location=1';
         options += ',width=700,height=600';          options += ',width=700,height=600';
         editsearcher = open(url,title,options,'1');          editsearcher = open(url,title,options,'1');
         editsearcher.focus();          editsearcher.focus();
Line 672  sub help_open_topic { Line 672  sub help_open_topic {
     {      {
  $template .=    $template .= 
   "<table bgcolor='#3333AA' cellspacing='1' cellpadding='1' border='0'><tr>".    "<table bgcolor='#3333AA' cellspacing='1' cellpadding='1' border='0'><tr>".
   "<td bgcolor='#5555FF'><a href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";    "<td bgcolor='#5555FF'><a target=\"_top\" href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";
     }      }
   
     # Add the graphic      # Add the graphic
     my $title = &mt('Online Help');      my $title = &mt('Online Help');
     my $helpicon=&lonhttpdurl("/adm/help/gif/smallHelp.gif");      my $helpicon=&lonhttpdurl("/adm/help/gif/smallHelp.gif");
     $template .= <<"ENDTEMPLATE";      $template .= <<"ENDTEMPLATE";
  <a href="$link" title="$title"><img src="$helpicon" border="0" alt="(Help: $topic)" /></a>   <a target="_top" href="$link" title="$title"><img src="$helpicon" border="0" alt="(Help: $topic)" /></a>
 ENDTEMPLATE  ENDTEMPLATE
     if ($text ne '') { $template.='</td></tr></table>' };      if ($text ne '') { $template.='</td></tr></table>' };
     return $template;      return $template;
Line 766  sub help_open_menu { Line 766  sub help_open_menu {
 sub top_nav_help {  sub top_nav_help {
     my ($text) = @_;      my ($text) = @_;
   
     my ($topic,$component_help,$faq,$bug,$stayOnPage,$width,$height);      $text = &mt($text);
      
     $text = "" if (not defined $text);      my $stayOnPage = 
     $stayOnPage = 0 if (not defined $stayOnPage);   ($env{'browser.interface'}  eq 'textual' ||
     if ($env{'browser.interface'} eq 'textual' ||   $env{'environment.remote'} eq 'off' );
         $env{'environment.remote'} eq 'off' ) {      my $link=  ($stayOnPage) ? "javascript:helpMenu('display')"
         $stayOnPage=1;                       : "javascript:helpMenu('open')";
     }      my $banner_link = &update_help_link(undef,undef,undef,undef,$stayOnPage);
     $width = 620 if (not defined $width);  
     $height = 600 if (not defined $height);  
     my $link='';  
     my $title = &mt('Get help');      my $title = &mt('Get help');
     if ($stayOnPage) {  
  $link = "javascript:helpMenu('display')";      return <<"END";
     } else {  $banner_link
         $link = "javascript:helpMenu('open')";   <a href="$link" title="$title">$text</a>
     }  END
   }
   
   sub help_menu_js {
       my ($text) = @_;
   
       my $stayOnPage = 
    ($env{'browser.interface'}  eq 'textual' ||
    $env{'environment.remote'} eq 'off' );
   
       my $width = 620;
       my $height = 600;
     my $helptopic=&general_help();      my $helptopic=&general_help();
     my $banner_link = &update_help_link($topic,$component_help,$faq,$bug,$stayOnPage);  
     my $details_link = '/adm/help/'.$helptopic.'.hlp';      my $details_link = '/adm/help/'.$helptopic.'.hlp';
     my $template;  
     my $nothing=&Apache::lonhtmlcommon::javascript_nothing();      my $nothing=&Apache::lonhtmlcommon::javascript_nothing();
     my $helpicon=&lonhttpdurl("/adm/lonIcons/helpgateway.gif");  
     my $start_page =      my $start_page =
         &Apache::loncommon::start_page('Help Menu', undef,          &Apache::loncommon::start_page('Help Menu', undef,
        {'frameset'    => 1,         {'frameset'    => 1,
Line 800  sub top_nav_help { Line 806  sub top_nav_help {
         &Apache::loncommon::end_page({'frameset' => 1,          &Apache::loncommon::end_page({'frameset' => 1,
       'js_ready' => 1,});        'js_ready' => 1,});
   
     $template .= <<"ENDTEMPLATE";      my $template .= <<"ENDTEMPLATE";
  <script type="text/javascript">  <script type="text/javascript">
 // <!-- BEGIN LON-CAPA Internal  // <!-- BEGIN LON-CAPA Internal
 // <![CDATA[  // <![CDATA[
 var banner_link = '';  var banner_link = '';
Line 830  function writeHelp(caller) { Line 836  function writeHelp(caller) {
 }  }
 // ]]>  // ]]>
 // END LON-CAPA Internal -->  // END LON-CAPA Internal -->
  </script>  </script>
 $banner_link  
  <a href="$link" title="$title">$text</a>  
 ENDTEMPLATE  ENDTEMPLATE
     return $template;      return $template;
 }  }
Line 868  sub help_open_bug { Line 872  sub help_open_bug {
     {      {
  $template .=    $template .= 
   "<table bgcolor='#AA3333' cellspacing='1' cellpadding='1' border='0'><tr>".    "<table bgcolor='#AA3333' cellspacing='1' cellpadding='1' border='0'><tr>".
   "<td bgcolor='#FF5555'><a href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";    "<td bgcolor='#FF5555'><a target=\"_top\" href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";
     }      }
   
     # Add the graphic      # Add the graphic
     my $title = &mt('Report a Bug');      my $title = &mt('Report a Bug');
     my $bugicon=&lonhttpdurl("/adm/lonMisc/smallBug.gif");      my $bugicon=&lonhttpdurl("/adm/lonMisc/smallBug.gif");
     $template .= <<"ENDTEMPLATE";      $template .= <<"ENDTEMPLATE";
  <a href="$link" title="$title"><img src="$bugicon" border="0" alt="(Bug: $topic)" /></a>   <a target="_top" href="$link" title="$title"><img src="$bugicon" border="0" alt="(Bug: $topic)" /></a>
 ENDTEMPLATE  ENDTEMPLATE
     if ($text ne '') { $template.='</td></tr></table>' };      if ($text ne '') { $template.='</td></tr></table>' };
     return $template;      return $template;
Line 913  sub help_open_faq { Line 917  sub help_open_faq {
     {      {
  $template .=    $template .= 
   "<table bgcolor='#337733' cellspacing='1' cellpadding='1' border='0'><tr>".    "<table bgcolor='#337733' cellspacing='1' cellpadding='1' border='0'><tr>".
   "<td bgcolor='#448844'><a href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";    "<td bgcolor='#448844'><a target=\"_top\" href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";
     }      }
   
     # Add the graphic      # Add the graphic
     my $title = &mt('View the FAQ');      my $title = &mt('View the FAQ');
     my $faqicon=&lonhttpdurl("/adm/lonMisc/smallFAQ.gif");      my $faqicon=&lonhttpdurl("/adm/lonMisc/smallFAQ.gif");
     $template .= <<"ENDTEMPLATE";      $template .= <<"ENDTEMPLATE";
  <a href="$link" title="$title"><img src="$faqicon" border="0" alt="(FAQ: $topic)" /></a>   <a target="_top" href="$link" title="$title"><img src="$faqicon" border="0" alt="(FAQ: $topic)" /></a>
 ENDTEMPLATE  ENDTEMPLATE
     if ($text ne '') { $template.='</td></tr></table>' };      if ($text ne '') { $template.='</td></tr></table>' };
     return $template;      return $template;
Line 2048  sub nickname { Line 2052  sub nickname {
   
 sub getnames {  sub getnames {
     my ($uname,$udom)=@_;      my ($uname,$udom)=@_;
       if ($udom eq 'public' && $uname eq 'public') {
    return ('lastname' => &mt('Public'));
       }
     my $id=$uname.':'.$udom;      my $id=$uname.':'.$udom;
     my ($names,$cached)=&Apache::lonnet::is_cached_new('namescache',$id);      my ($names,$cached)=&Apache::lonnet::is_cached_new('namescache',$id);
     if ($cached) {      if ($cached) {
Line 2085  sub screenname { Line 2092  sub screenname {
 sub messagewrapper {  sub messagewrapper {
     my ($link,$username,$domain,$subject,$text)=@_;      my ($link,$username,$domain,$subject,$text)=@_;
     return       return 
         '<a href="/adm/email?compose=individual&'.          '<a href="/adm/email?compose=individual&amp;'.
         'recname='.$username.'&recdom='.$domain.          'recname='.$username.'&amp;recdom='.$domain.
  '&subject='.&escape($subject).'&text='.&escape($text).'" '.   '&amp;subject='.&escape($subject).'&amp;text='.&escape($text).'" '.
         'title="'.&mt('Send message').'">'.$link.'</a>';          'title="'.&mt('Send message').'">'.$link.'</a>';
 }  }
 # --------------------------------------------------------------- Notes Wrapper  # --------------------------------------------------------------- Notes Wrapper
Line 2868  sub bodytag { Line 2875  sub bodytag {
                    'alink'   => &designparm($function.'.alink',$domain),                     'alink'   => &designparm($function.'.alink',$domain),
    'vlink'   => &designparm($function.'.vlink',$domain),     'vlink'   => &designparm($function.'.vlink',$domain),
    'link'    => &designparm($function.'.link',$domain),);     'link'    => &designparm($function.'.link',$domain),);
     @$addentries{keys(%design)} = @design{keys(%design)};      @design{keys(%$addentries)} = @$addentries{keys(%$addentries)}; 
   
  # role and realm   # role and realm
     my ($role,$realm) = split(/\./,$env{'request.role'},2);      my ($role,$realm) = split(/\./,$env{'request.role'},2);
Line 2885  sub bodytag { Line 2892  sub bodytag {
     } else {      } else {
         $role = &Apache::lonnet::plaintext($role);          $role = &Apache::lonnet::plaintext($role);
     }      }
   
     if (!$realm) { $realm='&nbsp;'; }      if (!$realm) { $realm='&nbsp;'; }
 # Set messages  # Set messages
     my $messages=&domainlogo($domain);      my $messages=&domainlogo($domain);
Line 2892  sub bodytag { Line 2900  sub bodytag {
     my $lonhttpdPort=$Apache::lonnet::perlvar{'lonhttpdPort'};      my $lonhttpdPort=$Apache::lonnet::perlvar{'lonhttpdPort'};
     if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; }      if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; }
   
     my $extra_body_attr = &make_attr_string($forcereg,$addentries);      my $extra_body_attr = &make_attr_string($forcereg,\%design);
   
 # construct main body tag  # construct main body tag
     my $bodytag = "<body $extra_body_attr>".      my $bodytag = "<body $extra_body_attr>".
Line 2913  sub bodytag { Line 2921  sub bodytag {
     }      }
   
     my $name = &plainname($env{'user.name'},$env{'user.domain'});      my $name = &plainname($env{'user.name'},$env{'user.domain'});
       if ($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public') {
    undef($role);
       } else {
    $name = &aboutmewrapper($name,$env{'user.name'},$env{'user.domain'});
       }
           
     my $roleinfo=(<<ENDROLE);      my $roleinfo=(<<ENDROLE);
 <td class="LC_title_bar_who">  <td class="LC_title_bar_who">
Line 3187  form, .inline { display: inline; } Line 3200  form, .inline { display: inline; }
 .LC_success {  .LC_success {
   color: green;    color: green;
 }  }
   .LC_icon {
     border: 0px;
   }
   
 table#LC_top_nav, table#LC_menubuttons {  table#LC_top_nav, table#LC_menubuttons {
   width: 100%;    width: 100%;
Line 3262  table#LC_top_nav td a, div#LC_top_nav a Line 3278  table#LC_top_nav td a, div#LC_top_nav a
 }  }
 table#LC_top_nav td.LC_top_nav_logo {  table#LC_top_nav td.LC_top_nav_logo {
   background: $tabbg;    background: $tabbg;
   text-align: right;    text-align: left;
   white-space: nowrap;    white-space: nowrap;
   font-weight: bold;    width: 31px;
 }  }
 table#LC_top_nav td.LC_top_nav_logo img {  table#LC_top_nav td.LC_top_nav_logo img {
   margin-left: 0.2em;    border: 0px;
   vertical-align: bottom;    vertical-align: bottom;
 }  }
   table#LC_top_nav td.LC_top_nav_exit,
   table#LC_top_nav td.LC_top_nav_help {
     width: 2.0em;
   }
   table#LC_top_nav td.LC_top_nav_login {
     width: 4.0em;
     text-align: center;
   }
 table.LC_breadcrumbs td, table.LC_docs_path td  {  table.LC_breadcrumbs td, table.LC_docs_path td  {
   background: $tabbg;    background: $tabbg;
   color: $font;    color: $font;
Line 3310  td.LC_menubuttons_img { Line 3334  td.LC_menubuttons_img {
   font-weight: bold;    font-weight: bold;
 }  }
   
   table.LC_aboutme_port {
     border: 0px;
     border-collapse: collapse;
     border-spacing: 0px;
   }
 table.LC_data_table, table.LC_mail_list {  table.LC_data_table, table.LC_mail_list {
   border: 1px solid #000000;    border: 1px solid #000000;
   border-collapse: separate;    border-collapse: separate;
Line 3323  table.LC_data_table tr th, table.LC_cale Line 3352  table.LC_data_table tr th, table.LC_cale
   background-color: $data_table_head;    background-color: $data_table_head;
   font-size: smaller;    font-size: smaller;
 }  }
 table.LC_data_table tr td {  table.LC_data_table tr td, 
   table.LC_aboutme_port tr td {
   background-color: $data_table_light;    background-color: $data_table_light;
   padding: 2px;    padding: 2px;
 }  }
 table.LC_data_table tr.LC_even_row td {  table.LC_data_table tr.LC_even_row td,
   table.LC_aboutme_port tr.LC_even_row td {
   background-color: $data_table_dark;    background-color: $data_table_dark;
 }  }
 table.LC_data_table tr.LC_data_table_highlight td {  table.LC_data_table tr.LC_data_table_highlight td {
Line 3680  sub headtag { Line 3711  sub headtag {
     if ($args->{'force_register'}) {      if ($args->{'force_register'}) {
  $result .= &Apache::lonmenu::registerurl(1);   $result .= &Apache::lonmenu::registerurl(1);
     }      }
       if (!$args->{'no_nav_bar'} 
    && !$args->{'only_body'}
    && !$args->{'frameset'}) {
    $result .= &help_menu_js();
       }
   
     if (ref($args->{'redirect'})) {      if (ref($args->{'redirect'})) {
  my ($time,$url,$inhibit_continue) = @{$args->{'redirect'}};   my ($time,$url,$inhibit_continue) = @{$args->{'redirect'}};
Line 3849  sub start_page { Line 3885  sub start_page {
     #&Apache::lonnet::logthis("start_page ".join(':',caller(0)));      #&Apache::lonnet::logthis("start_page ".join(':',caller(0)));
     my %head_args;      my %head_args;
     foreach my $arg ('redirect','force_register','domain','function',      foreach my $arg ('redirect','force_register','domain','function',
      'bgcolor') {       'bgcolor','frameset','no_nav_bar','only_body') {
  if (defined($args->{$arg})) {   if (defined($args->{$arg})) {
     $head_args{$arg} = $args->{$arg};      $head_args{$arg} = $args->{$arg};
  }   }
Line 4320  sub get_course_users { Line 4356  sub get_course_users {
         }          }
     }      }
     if ((@{$roles} > 1) || ((@{$roles} == 1) && ($$roles[0] ne "st"))) {      if ((@{$roles} > 1) || ((@{$roles} == 1) && ($$roles[0] ne "st"))) {
         my @coursepersonnel = &Apache::lonnet::getkeys('nohist_userroles',$cdom,$cnum);          my %coursepersonnel = &Apache::lonnet::dump('nohist_userroles',$cdom,$cnum);
         foreach my $person (@coursepersonnel) {          my $now = time;
           foreach my $person (sort(keys(%coursepersonnel))) {
             my $match = 0;              my $match = 0;
             my $secmatch = 0;              my $secmatch = 0;
               my $status;
             my ($role,$user,$usec) = ($person =~ /^([^:]*):([^:]+:[^:]+):([^:]*)/);              my ($role,$user,$usec) = ($person =~ /^([^:]*):([^:]+:[^:]+):([^:]*)/);
             $user =~ s/:$//;              $user =~ s/:$//;
             if (($role) && (grep(/^\Q$role\E$/,@{$roles}))) {              my ($end,$start) = split(/:/,$coursepersonnel{$person});
               if ($end == -1 || $start == -1) {
                   next;
               }
               if (($role) && ((grep(/^\Q$role\E$/,@{$roles})) ||
                   (grep(/^cr$/,@{$roles}) && $role =~ /^cr\//))) {
                 my ($uname,$udom) = split(/:/,$user);                  my ($uname,$udom) = split(/:/,$user);
                 if ((ref($sections) eq 'ARRAY') && (@{$sections} > 0)) {                  if ((ref($sections) eq 'ARRAY') && (@{$sections} > 0)) {
                     if (grep(/^all$/,@{$sections})) {                      if (grep(/^all$/,@{$sections})) {
Line 4348  sub get_course_users { Line 4391  sub get_course_users {
                     $usec = 'none';                      $usec = 'none';
                 }                  }
                 if ($uname ne '' && $udom ne '') {                  if ($uname ne '' && $udom ne '') {
                     my $status = &check_user_status($udom,$uname,$cdom,$cnum,$role,                      if ($end < $now) {
                                                     $usec);                          $status = 'previous';
                       } elsif ($start > $now) {
                           $status = 'future';
                       } else {
                           $status = 'active';
                       }
                     foreach my $type (keys(%{$types})) {                       foreach my $type (keys(%{$types})) { 
                         if ($status eq $type) {                          if ($status eq $type) {
                             if (!grep(/^\Q$type\E$/,@{$$users{$role}{$user}})) {                              if (!grep(/^\Q$type\E$/,@{$$users{$role}{$user}})) {
Line 4374  sub get_course_users { Line 4422  sub get_course_users {
                 my %csettings = &Apache::lonnet::get('environment',['internal.courseowner'],$cdom,$cnum);                  my %csettings = &Apache::lonnet::get('environment',['internal.courseowner'],$cdom,$cnum);
                 if ( defined($csettings{'internal.courseowner'}) ) {                  if ( defined($csettings{'internal.courseowner'}) ) {
                     my $owner = $csettings{'internal.courseowner'};                      my $owner = $csettings{'internal.courseowner'};
                     @{$$users{'ow'}{$owner.':'.$cdom}} = 'any';                      if ($owner !~ /^[^:]+:[^:]+$/) {
                           $owner = $owner.':'.$cdom;
                       }
                       @{$$users{'ow'}{$owner}} = 'any';
                     if (defined($userdata) &&                       if (defined($userdata) && 
  !exists($$userdata{$owner.':'.$cdom})) {   !exists($$userdata{$owner.':'.$cdom})) {
  &get_user_info($cdom,$owner,\%idx,$userdata);   &get_user_info($cdom,$owner,\%idx,$userdata);
Line 5452  sub restore_course_settings { Line 5503  sub restore_course_settings {
 }  }
   
 ############################################################  ############################################################
   ############################################################
   
   sub commit_customrole {
       my ($udom,$uname,$url,$three,$four,$five,$start,$end) = @_;
       my $output = &mt('Assigning custom role').' "'.$five.'" by '.$four.'@'.$three.' in '.$url.
                            ($start?', '.&mt('starting').' '.localtime($start):'').
                            ($end?', ending '.localtime($end):'').': <b>'.
                 &Apache::lonnet::assigncustomrole(
                    $udom,$uname,$url,$three,$four,$five,$end,$start).
                    '</b><br />';
       return $output;
   }
   
   sub commit_standardrole {
       my ($udom,$uname,$url,$three,$start,$end,$one,$two,$sec) = @_;
       my $output;
       my $logmsg;
       if ($three eq 'st') {
           my $result = &commit_studentrole(\$logmsg,$udom,$uname,$url,$three,$start,$end,$one,$two,$sec);
           if (($result =~ /^error/) || ($result eq 'not_in_class') || ($result eq 'unknown_course')) {
               $output = "Error: $result\n"; 
           } else {
               $output = &mt('Assigning').' '.$three.' in '.$url.
                  ($start?', '.&mt('starting').' '.localtime($start):'').
                  ($end?', '.&mt('ending').' '.localtime($end):'').
                  ': <b>'.$result.'</b><br />'.
                  &mt('Add to classlist').': <b>ok</b><br />';
           }
       } else {
           $output = &mt('Assigning').' '.$three.' in '.$url.
                  ($start?', '.&mt('starting').' '.localtime($start):'').
                  ($end?', '.&mt('ending').' '.localtime($end):'').': <b>'.
                  &Apache::lonnet::assignrole(
                      $udom,$uname,$url,$three,$end,$start).
                      '</b><br />';
       }
       return $output;
   }
   
   sub commit_studentrole {
       my ($logmsg,$udom,$uname,$url,$three,$start,$end,$one,$two,$sec) = @_;
       my $linefeed =  '<br />'."\n";
       my $result;
       if (defined($one) && defined($two)) {
           my $cid=$one.'_'.$two;
           my $oldsec=&Apache::lonnet::getsection($udom,$uname,$cid);
           my $secchange = 0;
           my $expire_role_result;
           my $modify_section_result;
           unless ($oldsec eq '-1') {
               unless ($sec eq $oldsec) {
                   $secchange = 1;
                   my $uurl='/'.$cid;
                   $uurl=~s/\_/\//g;
                   if ($oldsec) {
                       $uurl.='/'.$oldsec;
                   }
                   $expire_role_result = &Apache::lonnet::assignrole($udom,$uname,$uurl,'st',time);
                   $result = $expire_role_result;
               }
           }
           if (($expire_role_result eq 'ok') || ($secchange == 0)) {
               $modify_section_result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,'','',$cid);
               if ($modify_section_result =~ /^ok/) {
                   if ($secchange == 1) {
                       $$logmsg .= "Section for $uname switched from old section: $oldsec to new section: $sec".$linefeed;
                   } elsif ($oldsec eq '-1') {
                       $$logmsg .= "New student role for $uname in section $sec in course $cid".$linefeed;
                   } else {
                       $$logmsg .= "Student $uname assigned to unchanged section $sec in course $cid".$linefeed;
                   }
               } else {
                   $$logmsg .= "Error when attempting section change for $uname from old section $oldsec to new section: $sec in course $cid -error: $modify_section_result".$linefeed;
               }
               $result = $modify_section_result;
           } elsif ($secchange == 1) {
               $$logmsg .= "Error when attempting to expire role for $uname in old section $oldsec in course $cid -error: $expire_role_result".$linefeed;
           }
       } else {
           $$logmsg .= "Incomplete course id defined.  Addition of user $uname from domain $udom to course $one\_$two, section $sec not completed.$linefeed";
           $result = "error: incomplete course id\n";
       }
       return $result;
   }
   
   ############################################################
 ############################################################  ############################################################
   
 sub course_type {  sub course_type {

Removed from v.1.431  
changed lines
  Added in v.1.443


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>