Ada 艾达:我能有两个不同的控制台窗口吗?

Ada 艾达:我能有两个不同的控制台窗口吗?,ada,gnat,Ada,Gnat,我将GNAT 2014用于Ada项目,我有一个简单(我希望)的问题。我可以同时打开两个“控制台”吗 让我解释一下原因:我的程序向控制台输出了大量日志数据。我希望有两个独立的控制台,一个打印程序输出,另一个接收用户输入 这可行吗?或者这是运行在操作系统端的东西,而Ada无法控制? 我可以用GtkAda实现我想要的,但是因为我想使用尽可能少的第三方库,我想知道是否有一种本地方式(同时考虑到我需要发出的命令非常基本,比如“退出”或“暂停”,控制台输入就足够了).例如,您可以在日志框架中使用GNATCO

我将GNAT 2014用于Ada项目,我有一个简单(我希望)的问题。我可以同时打开两个“控制台”吗

让我解释一下原因:我的程序向控制台输出了大量日志数据。我希望有两个独立的控制台,一个打印程序输出,另一个接收用户输入

这可行吗?或者这是运行在操作系统端的东西,而Ada无法控制?
我可以用GtkAda实现我想要的,但是因为我想使用尽可能少的第三方库,我想知道是否有一种本地方式(同时考虑到我需要发出的命令非常基本,比如“退出”或“暂停”,控制台输入就足够了).

例如,您可以在日志框架中使用GNATCOLL.Traces(而不是我假设的Put\u Line)。这将允许您精确地控制日志应该放在哪里,特别是一些日志可以配置为发送到文件,一些发送到终端

您可以做的一件事是将一些日志发送到一个文件,然后在第二个终端监视器中发送该日志文件。这也更方便,因为它允许您在日志中向上滚动,而终端往往会丢失较旧的日志


当然,同样的方法也可以通过简单的Put_行(标准错误,“…”)甚至文件来实现,但是GNATCOLL.Traces是动态配置的,这通常更方便。

例如,您可以在日志框架中使用GNATCOLL.Traces(而不是我假设的Put_行)。这将允许您精确地控制日志应该放在哪里,特别是一些日志可以配置为发送到文件,一些发送到终端

您可以做的一件事是将一些日志发送到一个文件,然后在第二个终端监视器中发送该日志文件。这也更方便,因为它允许您在日志中向上滚动,而终端往往会丢失较旧的日志


当然,同样的方法也可以通过简单的Put_行(标准错误,“…”)甚至文件来实现,但是GNATCOLL.Traces是动态配置的,这通常更方便。

例如,您可以在日志框架中使用GNATCOLL.Traces(而不是我假设的Put_行)。这将允许您精确地控制日志应该放在哪里,特别是一些日志可以配置为发送到文件,一些发送到终端

您可以做的一件事是将一些日志发送到一个文件,然后在第二个终端监视器中发送该日志文件。这也更方便,因为它允许您在日志中向上滚动,而终端往往会丢失较旧的日志


当然,同样的方法也可以通过简单的Put_行(标准错误,“…”)甚至文件来实现,但是GNATCOLL.Traces是动态配置的,这通常更方便。

例如,您可以在日志框架中使用GNATCOLL.Traces(而不是我假设的Put_行)。这将允许您精确地控制日志应该放在哪里,特别是一些日志可以配置为发送到文件,一些发送到终端

您可以做的一件事是将一些日志发送到一个文件,然后在第二个终端监视器中发送该日志文件。这也更方便,因为它允许您在日志中向上滚动,而终端往往会丢失较旧的日志


当然,同样的方法也可以通过简单的Put_行(标准错误,“…”)甚至文件来实现,但GNATCOLL.Traces可以动态配置,这通常更方便。

考虑为您想要的每个非交互式“控制台”创建一个文件:

with Ada.Text_IO;

generic
   type Names is (<>);
package Generic_Consoles is
   procedure Open_Or_Create;
   function File (Name : in Names) return Ada.Text_IO.File_Access;
end Generic_Consoles;

package body Generic_Consoles is
   Files : array (Names) of aliased Ada.Text_IO.File_Type;

   procedure Open_Or_Create is
      use Ada.Text_IO;
   begin
      for Name in Files'Range loop
         begin
            Open (File => Files (Name),
                  Mode => Append_File,
                  Name => Names'Image (Name));
         exception
            when others =>
               Create (File => Files (Name),
                       Mode => Append_File,
                       Name => Names'Image (Name));
         end;
      end loop;
   end Open_Or_Create;

   function File (Name : in Names) return Ada.Text_IO.File_Access is
   begin
      return Files (Name)'Access;
   end File;
end Generic_Consoles;

考虑为您想要的每个非交互式“控制台”创建一个文件:

with Ada.Text_IO;

generic
   type Names is (<>);
package Generic_Consoles is
   procedure Open_Or_Create;
   function File (Name : in Names) return Ada.Text_IO.File_Access;
end Generic_Consoles;

package body Generic_Consoles is
   Files : array (Names) of aliased Ada.Text_IO.File_Type;

   procedure Open_Or_Create is
      use Ada.Text_IO;
   begin
      for Name in Files'Range loop
         begin
            Open (File => Files (Name),
                  Mode => Append_File,
                  Name => Names'Image (Name));
         exception
            when others =>
               Create (File => Files (Name),
                       Mode => Append_File,
                       Name => Names'Image (Name));
         end;
      end loop;
   end Open_Or_Create;

   function File (Name : in Names) return Ada.Text_IO.File_Access is
   begin
      return Files (Name)'Access;
   end File;
end Generic_Consoles;

考虑为您想要的每个非交互式“控制台”创建一个文件:

with Ada.Text_IO;

generic
   type Names is (<>);
package Generic_Consoles is
   procedure Open_Or_Create;
   function File (Name : in Names) return Ada.Text_IO.File_Access;
end Generic_Consoles;

package body Generic_Consoles is
   Files : array (Names) of aliased Ada.Text_IO.File_Type;

   procedure Open_Or_Create is
      use Ada.Text_IO;
   begin
      for Name in Files'Range loop
         begin
            Open (File => Files (Name),
                  Mode => Append_File,
                  Name => Names'Image (Name));
         exception
            when others =>
               Create (File => Files (Name),
                       Mode => Append_File,
                       Name => Names'Image (Name));
         end;
      end loop;
   end Open_Or_Create;

   function File (Name : in Names) return Ada.Text_IO.File_Access is
   begin
      return Files (Name)'Access;
   end File;
end Generic_Consoles;

考虑为您想要的每个非交互式“控制台”创建一个文件:

with Ada.Text_IO;

generic
   type Names is (<>);
package Generic_Consoles is
   procedure Open_Or_Create;
   function File (Name : in Names) return Ada.Text_IO.File_Access;
end Generic_Consoles;

package body Generic_Consoles is
   Files : array (Names) of aliased Ada.Text_IO.File_Type;

   procedure Open_Or_Create is
      use Ada.Text_IO;
   begin
      for Name in Files'Range loop
         begin
            Open (File => Files (Name),
                  Mode => Append_File,
                  Name => Names'Image (Name));
         exception
            when others =>
               Create (File => Files (Name),
                       Mode => Append_File,
                       Name => Names'Image (Name));
         end;
      end loop;
   end Open_Or_Create;

   function File (Name : in Names) return Ada.Text_IO.File_Access is
   begin
      return Files (Name)'Access;
   end File;
end Generic_Consoles;