[LON-CAPA-cvs] cvs: modules /gerd/maxima lonmaxima
www
lon-capa-cvs@mail.lon-capa.org
Wed, 10 May 2006 01:08:08 -0000
www Tue May 9 21:08:08 2006 EDT
Modified files:
/modules/gerd/maxima lonmaxima
Log:
Need to sync up in order to deal with unexpected output or error situations.
Index: modules/gerd/maxima/lonmaxima
diff -u modules/gerd/maxima/lonmaxima:1.17 modules/gerd/maxima/lonmaxima:1.18
--- modules/gerd/maxima/lonmaxima:1.17 Thu Mar 9 16:38:26 2006
+++ modules/gerd/maxima/lonmaxima Tue May 9 21:08:01 2006
@@ -3,7 +3,7 @@
# The LearningOnline Network with CAPA
# Connect to MAXIMA CAS
#
-# $Id: lonmaxima,v 1.17 2006/03/09 21:38:26 www Exp $
+# $Id: lonmaxima,v 1.18 2006/05/10 01:08:01 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -52,6 +52,7 @@
my $port; # path to UNIX socket file
my %perlvar; # configuration file info
my $lastlog; # last string that was logged
+
use vars qw($PREFORK $MAX_CLIENTS_PER_CHILD %children $children $status
$pidfile $port %perlvar $lastlog);
@@ -257,6 +258,7 @@
&getmaximaoutput($command);
while (my $cmd=<$client>) {
&status('Processing command');
+ &sync($command);
print $command &unescape($cmd);
my $reply=&getmaximaoutput($command);
print $client &escape($reply)."\n";
@@ -281,6 +283,22 @@
}
}
+{
+ my $counter;
+ sub sync {
+ my ($command)=@_;
+ $counter++;
+ my $expect=$counter.time;
+ print $command "$expect;\n";
+ while (1) {
+ my $output=&getmaximaoutput($command);
+ if (($output=~/\Q$expect\E/) || ($output=~/^Error\:/)) {
+ return;
+ }
+ }
+ }
+}
+
sub getmaximaoutput {
my ($command)=@_;
my (undef,$error,undef,$output)=$command->expect(20, -re => '\(\%i\d+\)');