with CharAK; use CharAK; -- for Ask ( char ) with FloaAK; use FloaAK; with InteAK; with StriAK; use StriAK; -- for Ask ( char ) with Text_IO; use Text_IO; with TypeAK; use TypeAK; -- with IOInAK; package body ConsAK is ---------------------------------------------------------------------- -- Copyright (C) 1994 David Wallace Croft. All rights reserved. ---------------------------------------------------------------------- procedure Demo is ---------------------------------------------------------------------- begin Put_Line ( Copyright ); New_Line; Put_Line ( Description ); New_Line; Put_Line ( "No demonstration is currently available." ); Pause; end Demo; ---------------------------------------------------------------------- -- Boolean ---------------------------------------------------------------------- procedure Ask ( Item : out boolean; Prompt : in string := ""; Default : in boolean := true ) is ---------------------------------------------------------------------- Default_Char : character; Do_Over : boolean := false; Item_Str : string ( 1..2 ); Last : natural; begin if Default then Default_Char := 'Y'; else Default_Char := 'N'; end if; loop Put ( Prompt & "(Y/N) [" & Default_Char & "]: " ); Last := 0; Get_Line ( Item_Str, Last ); if Last = 0 then Item := Default; else case Item_Str ( 1 ) is when 'Y'|'T'|'y'|'t' => Item := true; when 'N'|'F'|'n'|'f' => Item := false; when others => Do_Over := true; end case; end if; exit when not ( Do_Over ); Put_Line ( "Please enter 'Y' or 'N'." ); end loop; end Ask; procedure Put_Line ( Item : in boolean ) is ---------------------------------------------------------------------- begin Put_Line ( boolean'image ( Item ) ); end Put_Line; procedure Put ( Item : in boolean ) is ---------------------------------------------------------------------- begin Put ( boolean'image ( Item ) ); end Put; procedure Ask ( Item : out character; Prompt : in string := ""; Default : in character := ASCII.Nul; Answers : in string := ""; Upcased : in boolean := true ) is ---------------------------------------------------------------------- Line : string ( 1..2 ); Last : natural; Temp : character; begin loop Put ( Prompt ); if Answers /= "" then Put ( '(' ); for Answer in Answers'range loop Put ( Answers ( Answer ) ); if Answer /= Answers'last then Put ( '/' ); end if; end loop; Put ( ')' ); if Default /= ASCII.Nul then Put ( ' ' ); else Put ( ": " ); end if; end if; if Default /= ASCII.Nul then Put ( "[" & Default & "]: " ); end if; Get_Line ( Line, Last ); if Last = 0 then Temp := Default; else Temp := Line ( 1 ); end if; if Upcased then Temp := Upcase ( Temp ); end if; exit when ( Answers = "" ) or else ( Locate ( Temp, Answers ) /= 0 ); end loop; Item := Temp; end Ask; procedure Ask ( Item : out string; Prompt : in string := ""; Default : in string := "" ) is ---------------------------------------------------------------------- Temp : string ( Item'first..( Item'last + 1 ) ); Last : natural; begin Put ( Prompt ); if Default /= "" then Put ( "[" & Default & "]: " ); end if; Get_Line ( Temp, Last ); if Last = 0 then Item ( Default'range ) := Default; Last := Default'last; else Item := Temp ( Item'range ); end if; for index in ( Last + 1 )..Item'last loop Item ( index ) := ASCII.Nul; end loop; end Ask; procedure Flush is ---------------------------------------------------------------------- -- Flushes input. ---------------------------------------------------------------------- Item : string ( 1..80 ); Last : natural; begin Get_Line ( Item, Last ); end Flush; procedure Pause ( Prompt : in string := "Please press ENTER to continue..." ) is ---------------------------------------------------------------------- Item : string ( 1..1 ); Last : natural; begin Put ( Prompt ); Get_Line ( Item, Last ); end Pause; ---------------------------------------------------------------------- ---------------------------------------------------------------------- end ConsAK;