-- Reporter bindings for Ada 95
-- Reporter module by Chris Morison & Martin Avison
-- Ada 95 bindings by Stefan Bellon

with Kernel, Interfaces.C, System, System.Storage_Elements;

package body Reporter is

   OS_CLI : constant Interfaces.C.Unsigned := 16#5#;

   Regs : aliased Kernel.SWI_Regs;

   function Address_To_C_Int (Addr : in System.Address)
                              return Interfaces.C.Int is
   begin
      return Interfaces.C.Int (System.Storage_Elements.To_Integer (Addr));
   end Address_To_C_Int;

   procedure Call_OS_CLI (Command : in String) is
      Local_String : String := Command & Character'Val (0);
   begin
      Regs.R(0) := Address_To_C_Int (Local_String'Address);
      Kernel.SWI (OS_CLI, Regs'Access, Regs'Access);
   end Call_OS_CLI;

   procedure Report (Text : in String) is
   begin
      Call_OS_CLI ("Report " & Text);
   end Report;

   procedure Clear (Text : in String := "") is
   begin
      Call_OS_CLI ("ReportClear " & Text);
   end Clear;

   procedure On (Text : in String := "") is
   begin
      Call_OS_CLI ("ReportOn " & Text);
   end On;

   procedure Off (Text : in String := "") is
   begin
      Call_OS_CLI ("ReportOff " & Text);
   end Off;

   procedure Close is
   begin
      Call_OS_CLI ("ReportClose");
   end Close;

   procedure Error is -- not very useful at the moment!
   begin
      Call_OS_CLI ("ReportError");
   end Error;

end Reporter;
