[LON-CAPA-cvs] cvs: loncom / lonmaxima
albertel
lon-capa-cvs-allow@mail.lon-capa.org
Thu, 26 Apr 2007 02:46:39 -0000
albertel Wed Apr 25 22:46:39 2007 EDT
Modified files:
/loncom lonmaxima
Log:
- explicitly look for the (%i1) prompt after the kill(all) reset of the env
otherwise it waits forever looking for the wrong i number
Index: loncom/lonmaxima
diff -u loncom/lonmaxima:1.26 loncom/lonmaxima:1.27
--- loncom/lonmaxima:1.26 Thu Apr 19 13:29:11 2007
+++ loncom/lonmaxima Wed Apr 25 22:46:39 2007
@@ -3,7 +3,7 @@
# The LearningOnline Network with CAPA
# Connect to MAXIMA CAS
#
-# $Id: lonmaxima,v 1.26 2007/04/19 17:29:11 raeburn Exp $
+# $Id: lonmaxima,v 1.27 2007/04/26 02:46:39 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -247,14 +247,14 @@
my $command=Expect->spawn('maxima');
$command->log_stdout(0);
-
+ #$command->log_file("$execdir/logs/lonmaxima.session.log");
&getmaximaoutput($command);
for (my $i=0; $i < $MAX_CLIENTS_PER_CHILD; $i++) {
&status('Accepting connections');
my $client = $server->accept() or last;
print $command "kill(all);\n";
- &getmaximaoutput($command);
+ &getmaximaoutput($command,2);
&sync($command);
my $syntaxerr = 0;
while (my $cmd=<$client>) {
@@ -307,29 +307,29 @@
my $regexp = '\(\%i\d+\)';
my $syntaxerr=0;
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;
$regexp = '(\(\%i'.$nextmatch.'\)|Incorrect syntax\:)';
}
}
my $timeout = 20;
- my (undef,$error,$matched,$output)=$command->expect($timeout, -re => $regexp);
- if ($numcheck) {
- if ($matched eq 'Incorrect syntax:') {
- $syntaxerr = 1;
- if (wantarray) {
- return ($matched,$syntaxerr);
- } else {
- return $matched;
- }
- }
+ 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 (wantarray) {
- return ('Error: '.$error);
- } else {
- return 'Error: '.$error;
- }
+ return 'Error: '.$error;
}
$output =~ s/\r+//g; # Remove Windows-style linebreaks
my $foundoutput=0;