• How to test if file = Ada.Text_IO.Standard_Input ?

    From reinert@21:1/5 to All on Sat Oct 23 01:06:38 2021
    Hello,

    the following program:

    procedure test1 (file1 : in Ada.Text_IO.File_Type) is
    term1 : constant Boolean := file1 in Ada.Text_IO.Standard_Input;
    begin
    null;
    end test1;

    compiles under gnat-10 (debian). The point here is to test if "file1" represents the terminal.

    However, when I try to compile using the current GNAT Community Edition from AdaCore, I get the error:

    test7.adb:38:41: error: invalid operand types for operator "="
    test7.adb:38:41: error: left operand has private type "Ada.Text_Io.File_Type" test7.adb:38:41: error: right operand has type "Ada.Text_Io.File_Access" gnatmake: "test7.adb" compilation error

    So how can I test if "file1" referes to the terminal using the lastest GNAT Community Edition?

    reinert

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jeffrey R.Carter@21:1/5 to reinert on Sat Oct 23 12:22:36 2021
    On 10/23/21 10:06, reinert wrote:

    So how can I test if "file1" referes to the terminal using the lastest GNAT Community Edition?

    Have you tried

    Ada.Text_IO.Name (File1) = Ada.Text_IO.Name (Ada.Text_IO.Standard_Input)

    ? (I haven't.)

    --
    Jeff Carter
    "C++: The power, elegance and simplicity of a hand grenade."
    Ole-Hjalmar Kristensen
    90

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From reinert@21:1/5 to All on Sat Oct 23 05:28:23 2021
    Yes, now it compiles !

    reinert

    lørdag 23. oktober 2021 kl. 12:22:40 UTC+2 skrev Jeffrey R.Carter:
    On 10/23/21 10:06, reinert wrote:

    So how can I test if "file1" referes to the terminal using the lastest GNAT Community Edition?
    Have you tried

    Ada.Text_IO.Name (File1) = Ada.Text_IO.Name (Ada.Text_IO.Standard_Input)

    ? (I haven't.)

    --
    Jeff Carter
    "C++: The power, elegance and simplicity of a hand grenade."
    Ole-Hjalmar Kristensen
    90

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Gautier write-only address@21:1/5 to All on Sat Oct 23 08:40:37 2021
    Le samedi 23 octobre 2021 à 14:28:24 UTC+2, reinert a écrit :
    Yes, now it compiles !

    Interesting to see what name GNAT gives to Standard_Input:

    with Ada.Text_IO;

    procedure SIO is
    begin
    Ada.Text_IO.Put_Line ('[' & Ada.Text_IO.Name (Ada.Text_IO.Standard_Input) & ']');
    Ada.Text_IO.Put_Line ('[' & Ada.Text_IO.Name (Ada.Text_IO.Standard_Error) & ']');
    end;

    [*stdin]
    [*stderr]

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Keith Thompson@21:1/5 to Jeffrey R.Carter on Sun Oct 24 13:51:09 2021
    "Jeffrey R.Carter" <spam.jrcarter.not@spam.acm.org.not> writes:
    On 10/23/21 10:06, reinert wrote:
    So how can I test if "file1" referes to the terminal using the
    lastest GNAT Community Edition?

    Have you tried

    Ada.Text_IO.Name (File1) = Ada.Text_IO.Name (Ada.Text_IO.Standard_Input)

    ? (I haven't.)

    That might well serve reinert's needs, but strictly speaking it doesn't
    tell you whether File1 refers to the terminal. At best it might tell
    you whether File1 and Standard_Input refer to the same external file --
    which may not even be a terminal if standard input was redirected.

    GNAT apparently uses "*stdin" as the Name of Standard_Input, regardless
    of what actual file it refers to. There could be an actual file with
    that name. It's not likely, but it means that this method could be
    broken maliciously.

    --
    Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com
    Working, but not speaking, for Philips
    void Void(void) { Void(); } /* The recursive call of the void */

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)