--- loncom/lonmaxima 2009/04/17 00:12:14 1.40 +++ loncom/lonmaxima 2013/07/04 11:44:44 1.42 @@ -3,7 +3,7 @@ # The LearningOnline Network with CAPA # Connect to MAXIMA CAS # -# $Id: lonmaxima,v 1.40 2009/04/17 00:12:14 www Exp $ +# $Id: lonmaxima,v 1.42 2013/07/04 11:44:44 droeschl Exp $ # # Copyright Michigan State University Board of Trustees # @@ -259,7 +259,11 @@ sub make_new_child { &logthis('New process started'); - my $command=Expect->spawn('maxima'); + my $command = new Expect(); + $command->log_stdout(0); + #$command->log_file("$execdir/logs/lonmaxima.session.log"); + $command->spawn('maxima'); + &getmaximaoutput($command, 2); # wait for maxima to finish initialization # soft/hard_close can take awhile and we really # don't care we just want it gone $SIG{INT} = sub { @@ -268,8 +272,6 @@ sub make_new_child { exit; }; - $command->log_stdout(0); - #$command->log_file("$execdir/logs/lonmaxima.session.log"); for (my $i=0; $i < $MAX_CLIENTS_PER_CHILD; $i++) { &status('Accepting connections'); @@ -335,17 +337,17 @@ sub getmaximaoutput { if ($numcheck eq 2) { # command was the killall so should get a full reset on # command numbers - $regexp = '(\(\%i(1)\)|Incorrect syntax\:)'; + $regexp = '(\(\%i(1)\)|[Ii]ncorrect syntax\:)'; } elsif ($command->match() =~ /\(\%i(\d+)\)/) { my $nextmatch = $1+1; - $regexp = '(\(\%i'.$nextmatch.'\)|Incorrect syntax\:)'; + $regexp = '(\(\%i'.$nextmatch.'\)|[Ii]ncorrect syntax\:)'; } } my $timeout = 20; my (undef,$error,$matched,$output) = $command->expect($timeout, -re => $regexp); - if ($numcheck && $matched eq 'Incorrect syntax:') { + if ($numcheck && lc($matched) eq 'incorrect syntax:') { $syntaxerr = 1; if (wantarray) { return ($matched,$syntaxerr); @@ -363,7 +365,7 @@ sub getmaximaoutput { foreach my $line (split(/\n/,$output)) { if ($line=~/\;/) { $foundoutput=1; next; } if (!$foundoutput) { next; } - if ($line=~/^Incorrect syntax:/) { $syntaxerr = 1; next; } + if ($line=~/^[Ii]ncorrect syntax:/) { $syntaxerr = 1; next; } if ($line=~ /^(\(\%o\d+\))(.+)$/){ my $label = $1; $line = $2;