From mboxrd@z Thu Jan 1 00:00:00 1970
X-Spam-Checker-Version: SpamAssassin 3.4.5-pre1 (2020-06-20) on
ip-172-31-74-118.ec2.internal
X-Spam-Level:
X-Spam-Status: No, score=-1.9 required=3.0 tests=BAYES_00,FREEMAIL_FROM
autolearn=ham autolearn_force=no version=3.4.5-pre1
Path: eternal-september.org!reader01.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED.LML2mx3X3vRi7IU0e4rchg.user.gioia.aioe.org!not-for-mail
From: Blady
Newsgroups: comp.lang.ada
Subject: Re: Ada.Text_IO.File_Type object with user defined Get and Put
subprograms.
Date: Fri, 31 Jul 2020 19:06:41 +0200
Organization: Aioe.org NNTP Server
Message-ID:
References:
NNTP-Posting-Host: LML2mx3X3vRi7IU0e4rchg.user.gioia.aioe.org
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Complaints-To: abuse@aioe.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:68.0)
Gecko/20100101 Thunderbird/68.10.0
Content-Language: en-US
X-Notice: Filtered by postfilter v. 0.9.2
Xref: reader01.eternal-september.org comp.lang.ada:59613
List-Id:
Le 30/07/2020 à 23:51, J-P. Rosen a écrit :
> Le 30/07/2020 à 22:21, Blady a écrit :
>
>> Given a legacy code calling many Put_Line from Ada.Text_IO which works
>> nice in a Terminal, I want to add a mode which sends these outputs to
>> another process without changing the legacy code too much.
>> And I want to keep the Terminal mode.
>>
>> Is there a way to create a File_Type object (from Ada.Text_IO) which
>> would have user defined Get and Put subprograms instead of the
>> predefined ones of the file system?
>>
>> Thus in my case, I will create a custom File_Type object My_Output with
>> the user define Put which will send the lines to the other process and
>> then I will call "Set_Output (My_Ouput);" before the legacy code.
>>
> Why don't you simply pipe the first process to the second one?
Yes, it was an option.
But I have to catch the outputs during some specific execution phases
and on some particular output values.
Both processes should then have an extra synchronization path which is
too far for the considered changes.
The simplest solution (I found) is to add a virtual dummy Text_IO
package (name My_TIO) with Put_Line defined inside processing the values
and sending the lines to the other process if needed.
And I replaced everywhere with "Ada.Text_IO;" by "with My_TIO;".
But Text_IO is also used for file management inside the legacy code
which made me going to wrap all the Text_IO stuff :-(
Then I went to think of the possibility of user defined Put and Get
subprograms for a Text_IO File_Type object.
However, I even don't know if it is feasible on an Unix-Like OS but I
would be pleased to having this possibility in an Ada way.
Pascal.