Newbie questions about Pliant

Newbie questions about Pliant

'Calling a program'

Using other programs with Pliant
Message posted by maybe Willer Alves on 2001/07/16 17:27:44
Is there a way of calling a program with Pliant?

I want to use a program to filter some contents in files sent to the Pliant HttpServer via the File Browser. How could I do this?
Message posted by maybe Hubert Tonneau on 2001/07/16 21:49:08
Here are two samples:


The first one is a abc_filter.pli
If you include this module, it will specify that .abc files are serviced as
plain text, and apply a filter that will double each line in the file.
Such a filter will be automatically applyed by Pliant file browser, so
it's the direct answer to your question.

module "/pliant/language/stream.pli"
module "/pliant/language/compiler.pli"
module "/pliant/protocol/common/mime.pli"

function abc_filter src dest options
  arg_rw Stream src dest ; arg Str options
  while not src:atend
    var Str l := src readline
    dest writeline l
    dest writeline l

declare_mime_type ".abc" "text/plain"
declare_mime_static_filter ".abc" (the_function abc_filter Stream Stream Str)


The second one is
If you put it in a directory of your web site, then requesting
will build a binary file on the fly.
Of course, this file could also be plain text if you specify 'text/plain'
instead of 'binary/*' and the content could be the result of any computation.

module "/pliant/language/stream.pli"

if virtual_path="/result.txt"
  http_request answer_mime_type := "binary/*"
  http_request send_header
  http_request:stream writeline "Here is the file content."
  [There is no such file on this web site !]
Message posted by maybe Willer Alves on 2001/07/17 18:00:31

But I have to use something like command lines, 'cause I will receive an archive (let's suppose in.txt) and I should call a program like this

/the_program in.txt out.txt

if I use a shell (or dos command line). So, this program will create out.txt.

If I use virtual_tree, I can put the command line in the place of the '*'? The program must be in the binary directory?
Message posted by maybe Hubert Tonneau on 2001/07/30 21:15:02
If you are running Linux, it is no problem to call another program and
pipe it in or out.
The 'stream_pipe' instruction will create a pipe ('stream_pipe' is implemented
in module /Pliant/language/stream/pipe.pli module),
then you can use 'execute' parameters to use the input or the output of
the pipe in the called executable,
and open the other end as a 'Stream' in your Pliant program.
You can find an example in /pliant/linux/storage/cdrom.pli
Also be warned that this is a not yet stable feature about Pliant in the
current stable release (I had problems with handles duplicated as a result
of Linux clone instruction), so there will be implementation changes in this
area in release 62.

If you are running Win32, you need to finish the Pliant 'execute' command first.