Diff for /loncom/lonmaxima between versions 1.23 and 1.28

version 1.23, 2007/02/03 04:09:30 version 1.28, 2007/05/15 17:28:32
Line 247  sub make_new_child { Line 247  sub make_new_child {
   
         my $command=Expect->spawn('maxima');          my $command=Expect->spawn('maxima');
         $command->log_stdout(0);          $command->log_stdout(0);
    #$command->log_file("$execdir/logs/lonmaxima.session.log");
         &getmaximaoutput($command);          &getmaximaoutput($command);
   
         for (my $i=0; $i < $MAX_CLIENTS_PER_CHILD; $i++) {          for (my $i=0; $i < $MAX_CLIENTS_PER_CHILD; $i++) {
            &status('Accepting connections');              &status('Accepting connections');
            my $client = $server->accept()     or last;              my $client = $server->accept()     or last;
            print $command "kill(all);\n";              print $command ("reset;display2d:false;kill(all);\n");
    &getmaximaoutput($command);      &getmaximaoutput($command,2);
            &sync($command);              &sync($command);
            while (my $cmd=<$client>) {              my $syntaxerr = 0;
               &status('Processing command');              while (my $cmd=<$client>) {
               print $command &unescape($cmd);                  &status('Processing command');
               my ($reply,$finished,$syntaxerr) = &getmaximaoutput($command);                  print $command &unescape($cmd);
               if ((!$finished) && (!$syntaxerr) && ($reply !~ /^Error\:/)) {                  my ($reply,$syntaxerr) = &getmaximaoutput($command,1);
                   ($reply,$finished,$syntaxerr) = &getmaximaoutput($command);                  print $client &escape($reply)."\n";
               }                  if ($syntaxerr) {
               print $client &escape($reply)."\n";                      last;
               if ($reply=~/^Error\:/) {                  } elsif ($reply=~/^Error\:/) {
                  &logthis('Died through '.$reply);                      &logthis('Died through '.$reply);
                  $client->close();                      $client->close();
                  $command->hard_close();                           $command->hard_close();     
                  exit;                      exit;
               }                        }
       &sync($command);          &sync($command);
               &status('Waiting for commands');                  &status('Waiting for commands');
            }              }
         }          }
   
         # tidy up gracefully and finish          # tidy up gracefully and finish
Line 294  sub make_new_child { Line 294  sub make_new_child {
  my $expect=$counter.time;   my $expect=$counter.time;
  print $command "$expect;\n";   print $command "$expect;\n";
  while (1) {   while (1) {
     my $output=&getmaximaoutput($command);      my $output=&getmaximaoutput($command,1);
     if (($output=~/\Q$expect\E/) || ($output=~/^Error\:/)) {      if (($output=~/\Q$expect\E/) || ($output=~/^Error\:/)) {
  return;   return;
     }      }
Line 303  sub make_new_child { Line 303  sub make_new_child {
 }  }
   
 sub getmaximaoutput {  sub getmaximaoutput {
     my ($command)=@_;      my ($command,$numcheck)=@_;
     my (undef,$error,undef,$output)=$command->expect(20, -re => '\(\%i\d+\)');      my $regexp = '\(\%i\d+\)';
       my $syntaxerr=0;
       if ($numcheck) {
           if ($numcheck eq 2) {
       # command was the killall so should get a full reset on
       # command numbers
       $regexp = '(\(\%i(1)\)|Incorrect syntax\:)';
    } elsif ($command->match() =~ /\(\%i(\d+)\)/) {
               my $nextmatch = $1+1;
               $regexp = '(\(\%i'.$nextmatch.'\)|Incorrect syntax\:)';
           }
       }
       my $timeout = 20;
       my (undef,$error,$matched,$output) =
    $command->expect($timeout, -re => $regexp);
   
       if ($numcheck && $matched eq 'Incorrect syntax:') {
    $syntaxerr = 1;
    if (wantarray) {
       return ($matched,$syntaxerr);
    } else {
       return $matched;
    }
       }
     if ($error) {      if ($error) {
        return 'Error: '.$error;   return 'Error: '.$error;
     }      }
     $output =~ s/\r+//g; # Remove Windows-style linebreaks      $output =~ s/\r+//g; # Remove Windows-style linebreaks
     my $hasoutput=0;  
     my $foundoutput=0;      my $foundoutput=0;
     my $syntaxerr=0;  
     my $realoutput='';      my $realoutput='';
     foreach my $line (split(/\n/,$output)) {      foreach my $line (split(/\n/,$output)) {
        if ($line=~/\;/) { $foundoutput=1; next; }         if ($line=~/\;/) { $foundoutput=1; next; }
Line 319  sub getmaximaoutput { Line 340  sub getmaximaoutput {
        if ($line=~/^Incorrect syntax:/) { $syntaxerr = 1; next; }         if ($line=~/^Incorrect syntax:/) { $syntaxerr = 1; next; }
        (my $label, $line) = ($line=~ /^(\(\%o\d+\))(.+)$/);         (my $label, $line) = ($line=~ /^(\(\%o\d+\))(.+)$/);
        if ($label) {         if ($label) {
           $label=~s/\S/ /g;             $label=~s/\S/ /g;
           $line=$label.$line;             $line=$label.$line;
           $hasoutput = 1;  
        }         }
        $realoutput.=$line."\n";         $realoutput.=$line."\n";
     }      }
     if (wantarray) {      if (wantarray) {
         return ($realoutput,$hasoutput,$syntaxerr);          return ($realoutput,$syntaxerr);
     } else {      } else {
         return $realoutput;          return $realoutput;
     }      }

Removed from v.1.23  
changed lines
  Added in v.1.28


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.