--- loncom/lonmaxima 2007/11/09 18:54:46 1.36 +++ 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.36 2007/11/09 18:54:46 albertel 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,14 +272,12 @@ sub make_new_child { exit; }; - $command->log_stdout(0); - #$command->log_file("$execdir/logs/lonmaxima.session.log"); - &sync($command); for (my $i=0; $i < $MAX_CLIENTS_PER_CHILD; $i++) { &status('Accepting connections'); my $client = $server->accept() or last; - print $command ("display2d:false;kill(all);\n"); + &sync($command); + print $command ("display2d:false;simp:true;kill(all);\n"); &getmaximaoutput($command,2); &sync($command); my $syntaxerr = 0; @@ -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); @@ -356,14 +358,14 @@ sub getmaximaoutput { if ($error) { return 'Error: '.$error; } - $output =~ s/\r+//g; # Remove Windows-style linebreaks + $output =~ s/\r+//gs; # Remove Windows-style linebreaks my $foundoutput=0; my $found_label=0; my $realoutput=''; 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;