[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+\)');