- Fri 14 March 2014
- misc
- Tero Koskinen
- #text_io
One, probably not so often used, feature of Ada.Text_IO is an ability to redirect output (Put, Put_Line, Newline) to a file. It happens simply by opening a file where you want to redirect the output and then calling Set_Output procedure.
Example below shows how it is done:
with Ada.Text_IO;
procedure Redir is
   Handle : Ada.Text_IO.File_Type;
begin
   Ada.Text_IO.Create (Handle, Ada.Text_IO.Out_File, "out.txt");
   Ada.Text_IO.Put_Line ("Starting redirection to out.txt");
   -- Tell Text_IO to redirect all output to Handle
   Ada.Text_IO.Set_Output (Handle);
   -- Print some text
   Ada.Text_IO.Put_Line ("Hello, this will go to out.txt");
   Ada.Text_IO.Close (Handle);
   -- Restoring output back to standard output
   Ada.Text_IO.Set_Output (Ada.Text_IO.Standard_Output);
   Ada.Text_IO.Put_Line ("Redirection restored to standard output");
end Redir;
This technique is used for example in Ahven framework, see ahven-temporary_output.adb for details.
EDIT 2014-03-20: Removed all Flush calls, they were useless.