--- loncom/cgi/plot.gif 2002/02/28 21:02:32 1.8 +++ loncom/cgi/plot.gif 2016/08/19 05:15:21 1.15 @@ -1,6 +1,6 @@ #!/usr/bin/perl # -# $Id: plot.gif,v 1.8 2002/02/28 21:02:32 matthew Exp $ +# $Id: plot.gif,v 1.15 2016/08/19 05:15:21 musolffc Exp $ # # Copyright Michigan State University Board of Trustees # @@ -25,6 +25,7 @@ # http://www.lon-capa.org/ # use strict; +use bytes; $|=1; @@ -35,25 +36,48 @@ foreach (split/&/,$ENV{'QUERY_STRING'}) $data{$name}=$value; } my $filename = $data{'file'}; +# unescape filename +$filename =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; die if ($filename =~ /\// || $filename !~ /_plot.data$/); $filename = $tmpdir . $filename; die "$data{'file'} does not exist\n" if (! -e $filename); my $output = $data{'output'}; -if ($output eq 'gif') { - open PLOT, "gnuplot $filename |"; +if ($output eq '') { + $output = (split('\.',$0))[-1]; +} + +if ($output eq 'gif' || $output eq 'png') { + open(my $plot, "gnuplot $filename |"); + my $image_content= ''; + while (my $line = <$plot>) { + $image_content .= $line; + } + my $length = bytes::length($image_content); print <<"END"; -Content-type: image/gif +Content-type: image/$output +Content-length: $length +$image_content END - while ($_=) { - print; - } + } elsif ($output eq 'eps') { - system ("gnuplot $filename"); + print <<"END"; +Content-type: text/html + +eps plot creation + +

Creating eps plot

+ +END + if (! system ("gnuplot $filename")) { + print "

An error occurred.

\n". + "I am not going to tell you about it as I have not bothered ". + "to figure out how to get you the error text.\n"; + } else { + print "

EPS file generated successfully.

\n"; + } + print "\n"; } else { die "output $output is not a recognized value or has no value\n"; } - - -