users-prolog
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: put_code


From: Salvador Pinto Abreu
Subject: Re: put_code
Date: Thu, 1 Nov 2012 14:22:15 +0000

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, address@hidden 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 <address@hidden>:
> 
>> On Nov 1, 2012, at 11:30, address@hidden 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: address@hidden
> ----------------------------------------------------------------
> 
> ----------------------------------------------------------------
> This message was sent using IMP, the Internet Messaging Program.
> 
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]