version 1.26, 2007/04/19 17:29:11
|
version 1.27, 2007/04/26 02:46:39
|
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 "kill(all);\n"; |
&getmaximaoutput($command); |
&getmaximaoutput($command,2); |
&sync($command); |
&sync($command); |
my $syntaxerr = 0; |
my $syntaxerr = 0; |
while (my $cmd=<$client>) { |
while (my $cmd=<$client>) { |
Line 307 sub getmaximaoutput {
|
Line 307 sub getmaximaoutput {
|
my $regexp = '\(\%i\d+\)'; |
my $regexp = '\(\%i\d+\)'; |
my $syntaxerr=0; |
my $syntaxerr=0; |
if ($numcheck) { |
if ($numcheck) { |
if ($command->match() =~ /\(\%i(\d+)\)/) { |
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; |
my $nextmatch = $1+1; |
$regexp = '(\(\%i'.$nextmatch.'\)|Incorrect syntax\:)'; |
$regexp = '(\(\%i'.$nextmatch.'\)|Incorrect syntax\:)'; |
} |
} |
} |
} |
my $timeout = 20; |
my $timeout = 20; |
my (undef,$error,$matched,$output)=$command->expect($timeout, -re => $regexp); |
my (undef,$error,$matched,$output) = |
if ($numcheck) { |
$command->expect($timeout, -re => $regexp); |
if ($matched eq 'Incorrect syntax:') { |
|
$syntaxerr = 1; |
if ($numcheck && $matched eq 'Incorrect syntax:') { |
if (wantarray) { |
$syntaxerr = 1; |
return ($matched,$syntaxerr); |
if (wantarray) { |
} else { |
return ($matched,$syntaxerr); |
return $matched; |
} else { |
} |
return $matched; |
} |
} |
} |
} |
if ($error) { |
if ($error) { |
if (wantarray) { |
return 'Error: '.$error; |
return ('Error: '.$error); |
|
} else { |
|
return 'Error: '.$error; |
|
} |
|
} |
} |
$output =~ s/\r+//g; # Remove Windows-style linebreaks |
$output =~ s/\r+//g; # Remove Windows-style linebreaks |
my $foundoutput=0; |
my $foundoutput=0; |