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.