comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Re: IDL on the NET(ION) Anybody used it?
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Re: IDL on the NET(ION) Anybody used it? [message #18695] Thu, 03 February 2000 00:00
wmc is currently offline  wmc
Messages: 117
Registered: February 1995
Senior Member
Peter Brooker <ra5589@email.sps.mot.com> wrote:
> Does anybody have experience with this? I want to create a fairly simple
> modeling program that could be accessed through the net. The program
> will display a multiline graph that will change as the user changes
> inputs.

I haven't used it, but, I have written a sort-of el cheapo replacement. My version
is primitive and insecure but it works, a bit. To use it publicly, you'd
definitely have to fix the security problems. But in case its useful, here it is:

-W.

--- the perl script ---
#!/users/icd/wmc/bin/perl

# This script runs as a server. It listens to port $PORT for IDL
# commands encoded in URLs and responds to them, drawing pictures
# to the Z-buffer and returning the image as image/gif.
# If the plot fails you get an unhelpful error message (but hey, you do at least get one).

# Security:
# The script runs as me. It will reject commands with "spawn" in.
# This should be beefed up a bit
# State:
# The idl process retains state - you can use variables defined in one call for the next.
# But... you may inherit things you don't want (!p.multi, for example)
# Interface:
# See http://www.nbs.ac.uk/public/icd/wmc/perl/idl-server.html
# Bugs:
# Needs a reset mechanism for state
# Fixes:
# 2000/02/02 - prefix commands with "retall" to catch some errors

use IO::Socket;
use Time::HiRes qw(sleep);

$|=1;

$server = IO::Socket::INET->new(LocalPort => 1234, Type => SOCK_STREAM, Reuse => 1, Listen => 10) or
die "Can't open port";

open IDL, "| idl" or die "Failed to open IDL";
IDL->autoflush;
print IDL " set_plot,'Z'\ndevice,set_res=600*[1,1.25]\npolyfill,[0,1,1,0 ,0],[0,0,1,1,0],col=!p.background,/norm\nxyouts,0.5,0.5,/nor m,'sorry your plot failed'\n";

$Nclient=0;
while ($client = $server->accept()) {
$data=<$client>;
($requested)=($data=~/\?([^ ]*?) /);
$requested =~ s/\+/ /g;
$requested =~ s/%(\w\w)/sprintf("%c", hex($1))/ge;
#print "<req: $requested>\n";
($cmd)=($requested=~/idl-cmd\=(.*)/ms);
$cmd =~ s/\\n/\n/g;
#print "<cmd: $cmd>\n";

if ($cmd =~ /spawn/) {

print $client "HTTP/1.0 404\nContent-type: text/html\n\nBad command."

} elsif ($cmd) {

`echo 1 > idl-server-lock`;
$idl_cmd="retall\n$cmd \ngettwogifs,/nosm,out='/tmp/wmc/wmc-idl-junk'\nspawn,'rm idl-server-lock'\n";
print "Will send to IDL:\n".$idl_cmd;
print IDL $idl_cmd;
while (-r "idl-server-lock") {
sleep(0.5)
};
open IDLIN,"/tmp/wmc/wmc-idl-junk.gif";
$image=join("",<IDLIN>);
print $client "HTTP/1.0 200 Document follows\nContent-type: image/gif\n\n".$image;
close IDLIN;

} else {

print $client "HTTP/1.0 404\nContent-type: text/html\n\nFailure, sorry. Try again?"

};
close $client;
$Nclient++;
};

--- End ---

William M Connolley | wmc@bas.ac.uk | http://www.nbs.ac.uk/public/icd/wmc/
Climate Modeller, British Antarctic Survey | Disclaimer: I speak for myself
[Message index]
 
Read Message
Previous Topic: Re: mapping data & grid (MAP_SET MAP_GRID)
Next Topic: Re: text window using widgets

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Sat Oct 11 05:37:33 PDT 2025

Total time taken to generate the page: 1.28018 seconds