with text_io; use text_io;
package Communications_with_User is
-- DESCRIPTION :
-- The routines of this package are used to
-- 1) determine the names of input/output files:
-- + create a file: prevent over-writing of important files;
-- + open a file: check first its existence.
-- 2) make selections from menu's: choose one of the alternatives.
function Read_String return string;
-- DESCRIPTION :
-- Reads a string from standard input and returns it to the caller.
-- The length of the input string must be smaller than 80 characters.
generic
with function Valid_Alternative ( alt : character ) return boolean;
procedure Ask ( ans : out character );
-- DESCRIPTION :
-- This procedure keeps reading a character from standard input,
-- until a valid one has been given.
-- The function Valid_Alternative decides whether a certain
-- character corresponds to a valid answer to the question.
procedure Ask_Yes_or_No ( ans : out character );
-- DESCRIPTION :
-- Keeps reading a character from standard output,
-- until the user gives a 'y' or a 'n'.
procedure Ask_Alternative ( ans : out character; alternatives : in string );
-- DESCRIPTION :
-- This procedure keeps reading a character from standard input,
-- until a character that belongs to the string s has been given.
procedure Ask_Alternative
( ans : in out string; alternatives : string;
prefix : in character );
-- DESCRIPTION :
-- Ask the user to give a character that occurs in the string of
-- alternatives, eventually preceded by the given prefix character.
-- This procedure keeps reading till a valid choice has been made.
-- REQUIRED : ans'range = 1..2.
procedure Read_Name_and_Open_File ( file : in out file_type );
-- DESCRIPTION :
-- This procedure reads a name from standard input and
-- tries to open this file for input.
-- If this is unsuccesful, then another name will be asked.
procedure Read_Name_and_Create_File ( file : in out file_type );
-- DESCRIPTION :
-- This procedure reads a name from standard input and
-- a file with this name will be created for output.
-- If a file with the given name already exists,
-- the user will be asked if the existing file may be destroyed.
procedure Open_Input_File
( file : in out file_type; filename : in string );
-- DESCRIPTION :
-- Tries to open a file for input, starting with the given file name.
-- If the opening of the file with the given name is not succesful,
-- then the procedure `Read_Name_and_Open_File' will be invoked.
procedure Create_Output_File
( file : in out file_type; filename : in string );
-- DESCRIPTION :
-- This procedure creates an output file, starting with the given
-- file name. If the creation of a file with this name is unsuccesful,
-- then the procedure `Read_Name_and_Create_File' will be invoked.
end Communications_with_User;