Re: put_code

Salvador Pinto Abreu <[email protected]>
Newsgroups gmane.comp.gnu.prolog.general
Message-ID <[email protected]>
Hello Massimo,

Guess you'd do something along the lines of:

put_bytes([]).
put_bytes([B|Bs]) :- put_byte(B), put_bytes(Bs).


and then

…
 put_bytes("P5\n32 32\n255\n"),
…

remember strings in Prolog are lists of integers with the character codes…

You may consider format_to_codes/3, which may be used as in:

| ?- format_to_codes(X, "P5\n%d %d\n255\n", [32, 32]).   

X = [80,53,10,51,50,32,51,50,10,50,53,53,10]

which produces the exact same string as in your example.


cheers
-salvador

On Nov 1, 2012, at 12:43, [email protected] wrote:

> It worked perfectly. The only problem I have now is the following.
> 
> The PPM format has three line at the beginning such as:
> 
> P5
> 32 32
> 255
> 
> where P5 is the flag for binary greyscale
> 32 32 are the size of the image
> 255 number of greylevels
> 
> Just after that starts the binary part of the file that I can
> generate following your good suggestion.
> 
> Now, how can I write, in the same file, the first three text line
> followed by the binaries ones?
> 
> Massimo
> 
> Citando Salvador Pinto Abreu <[email protected]>:
> 
>> On Nov 1, 2012, at 11:30, [email protected] wrote:
>> 
>>> I am trying to automatically generate PPM P5 files.
>>> In order to write the binary part of the files, I am using
>>> 
>>> put_code/1
>> 
>> maybe, considering you are building a non-text file, you'd be better  off having Prolog use a binary stream, in which case you'd be using  the put_byte/1 built-in.
>> 
>> consider this, for instance:
>> 
>> 11:56:56$ gprolog
>> GNU Prolog 1.4.1
>> By Daniel Diaz
>> Copyright (C) 1999-2012 Daniel Diaz
>> | ?- open(foo, write, _FOO, [type(binary), alias(foo)]),
>>     set_output(foo),
>>     put_byte(0), put_byte(1), put_byte(2), put_byte(3),
>>     close(foo).
>> 
>> (1 ms) yes
>> | ?- halt.
>> 
>> 11:57:05$ od -b foo
>> 0000000   000 001 002 003
>> 0000004
>> 11:57:10$ ls -l foo
>> -rw-r--r--  1 spa  staff     4B Nov  1 11:56 foo
>> 11:57:19$
>> 
>> hope this helps
>> -salvador
>> 
>> 
> 
> 
> 
> ----------------------------------------------------------------
> Massimo De Gregorio
> Research Scientist
> Istituto di Cibernetica "Eduardo Caianiello" - CNR
> Via Campi Flegrei 34
> Comprensorio "A. Olivetti" - Ed. 70
> 80078 Pozzuoli (NA) - ITALIA
> Tel. (+ 39) 0818675151
> Fax: (+ 39) 0818675158
> Skype: massimo.de.gregorio
> E-mail: [email protected]
> ----------------------------------------------------------------
> 
> ----------------------------------------------------------------
> This message was sent using IMP, the Internet Messaging Program.
> 
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.