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
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
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
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]
"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 */