Newbie questions about Pliant

Newbie questions about Pliant

Basic Web File Handling

I just want to know how to put the value of a variable in a file using a web page.
Message posted by maybe Guilherme Miotto on 2006/03/12 18:31:00
In a text based program i can do that. But not in a .page.
I've tried something like this:

module "/pliant/language/stream.pli"
module "/pliant/language/unsafe.pli"
title "Chat"
eol
var Str nick
var Stream arquivo
arquivo open "data/people.dat" in+out
input "Nick: " nick length 15 noeol
button "Enter"
 arquivo raw_write addressof:(nick) 15

Please don't laught on me.
:)
Thanks everyone.
Message posted by hubert.tonneau on 2006/03/12 18:44:46
> Please don't laught on me.

The answer is fairly complex, so there is no reason to,
and should even your question be stupid, you would still be welcome to ask here.

> var Stream arquivo
> arquivo open "data/people.dat" in+out
> input "Nick: " nick length 15 noeol
> button "Enter"
>  arquivo raw_write addressof:(nick) 15

Just replace it with:

input "Nick: " nick length 15 noeol
button "Enter"
  var Stream arquivo
  arquivo open "data/people.dat" in+out
  arquivo raw_write addressof:(nick) 15

The key difference between the console mode and .page is that .page
uses lazy execution just like the new Pliant ui interface, as opposed to the
console interface which is using sequencial execution.

So in a .page, each time you use 'button' instruction, you are creating a
subpage, and the system must be abble to convert the all environment (local
variables that are used both outside the button and inside the button body)
to a string that will be passed to the browser, then passed back to the
server when execution resumes.
In your example, a problem arises because Pliant cannot convert a 'Stream'
to some string.
So, the way I solved it is to use 'arquivo' variable only within the button
body so that Pliant does not need to pass it to the browser anymore.
Message posted by maybe Guilherme Miotto on 2006/03/14 17:17:38

Oh, very good explanation.
Thanks