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.