--- loncom/lonmaxima 2007/02/08 06:28:30 1.24 +++ loncom/lonmaxima 2007/02/08 10:08:02 1.25 @@ -3,7 +3,7 @@ # The LearningOnline Network with CAPA # Connect to MAXIMA CAS # -# $Id: lonmaxima,v 1.24 2007/02/08 06:28:30 raeburn Exp $ +# $Id: lonmaxima,v 1.25 2007/02/08 10:08:02 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -259,10 +259,7 @@ sub make_new_child { while (my $cmd=<$client>) { &status('Processing command'); print $command &unescape($cmd); - my ($reply,$finished,$syntaxerr); - while ((!$finished) && (!$syntaxerr) && ($reply !~ /^Error\:/)) { - ($reply,$finished,$syntaxerr) = &getmaximaoutput($command); - } + my ($reply,$finished,$syntaxerr) = &getmaximaoutput($command,1); print $client &escape($reply)."\n"; if ($reply=~/^Error\:/) { &logthis('Died through '.$reply); @@ -294,7 +291,7 @@ sub make_new_child { my $expect=$counter.time; print $command "$expect;\n"; while (1) { - my $output=&getmaximaoutput($command); + my $output=&getmaximaoutput($command,1); if (($output=~/\Q$expect\E/) || ($output=~/^Error\:/)) { return; } @@ -303,8 +300,15 @@ sub make_new_child { } sub getmaximaoutput { - my ($command)=@_; - my (undef,$error,undef,$output)=$command->expect(20, -re => '^\(\%i\d+\)'); + my ($command,$numcheck)=@_; + my $regexp = '\(\%i\d+\)'; + if ($numcheck) { + if ($command->match() =~ /\(\%i(\d+)\)/) { + my $nextmatch = $1+1; + $regexp = '\(\%i'.$nextmatch.'\)'; + } + } + my (undef,$error,undef,$output)=$command->expect(20, -re => $regexp); if ($error) { return 'Error: '.$error; }