     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;
