--- loncom/lonmaxima 2008/02/14 14:09:43 1.37 +++ loncom/lonmaxima 2018/12/05 23:02:38 1.44 @@ -3,7 +3,7 @@ # The LearningOnline Network with CAPA # Connect to MAXIMA CAS # -# $Id: lonmaxima,v 1.37 2008/02/14 14:09:43 bisitz Exp $ +# $Id: lonmaxima,v 1.44 2018/12/05 23:02:38 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -156,8 +156,8 @@ my $wwwid=getpwnam('www'); if ($wwwid!=$<) { my $emailto="$perlvar{'lonAdmEMail'},$perlvar{'lonSysEMail'}"; my $subj="LON: User ID mismatch"; - system("echo 'User ID mismatch. lonmaxima must be run as user www.' |\ - mailto $emailto -s '$subj' > /dev/null"); + system("echo 'User ID mismatch. lonmaxima must be run as user www.' |". + " mail -s '$subj' $emailto > /dev/null"); exit 1; } @@ -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"); for (my $i=0; $i < $MAX_CLIENTS_PER_CHILD; $i++) { &status('Accepting connections'); my $client = $server->accept() or last; &sync($command); - print $command ("display2d:false;kill(all);\n"); + 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;