[Top][All Lists]
[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.
>
>