     package body InteAKD is
     ----------------------------------------------------------------------
     -- Copyright (C) 1994 David Wallace Croft.  All rights reserved.
     ----------------------------------------------------------------------

     function Ask_Nat (
       Prompt  : in     string  := "";
       Default : in     natural := natural'first;
       Minimum : in     natural := natural'first;
       Maximum : in     natural := natural'last;
       Width   : in     Field   := natural'width )
       return natural is
     ----------------------------------------------------------------------
       Temp_Str : string ( 1..Width ) := ( others => ASCII.Nul );
       Last     : natural;
       Temp     : natural    ;
     begin
       loop
	 Put ( Prompt & "(" & natural'image ( Minimum ) & ".."
	   & natural'image ( Maximum ) & ") [" & natural'image ( Default )
	   & "]: " );
	 Get_Line ( Temp_Str, Last );
	 begin
	   if Last = 0 then
	     Temp := Default;
	   else
	     Temp := natural'value ( Temp_Str ( 1..Last ) );
	   end if;
	   if Temp < Minimum then
	     Put_Line ( "Please enter a value greater than or equal to "
	       & natural'image ( Minimum ) & "." );
	   elsif Temp > Maximum then
	     Put_Line ( "Please enter a value less than or equal to "
	       & natural'image ( Maximum ) & "." );
	   else
	     exit;
	   end if;
	 exception
	   when others =>
	     Put_Line ( "Please enter an integer number between "
	       & natural'image ( Minimum ) & " and "
	       & natural'image ( Maximum ) & " inclusive." );
	 end;
       end loop;
       return Temp;
     end Ask_Nat;

     ----------------------------------------------------------------------
     ----------------------------------------------------------------------

     function Ask_Pos (
       Prompt  : in     string    := "";
       Default : in     positive  := positive'first;
       Minimum : in     positive  := positive'first;
       Maximum : in     positive  := positive'last;
       Width   : in     Field     := positive'width )
       return positive is
     ----------------------------------------------------------------------
       Temp_Str : string ( 1..Width ) := ( others => ASCII.Nul );
       Last     : natural;
       Temp     : positive    ;
     begin
       loop
	 Put ( Prompt & "(" & positive'image ( Minimum ) & ".."
	   & positive'image ( Maximum ) & ") [" & positive'image ( Default )
	   & "]: " );
	 Get_Line ( Temp_Str, Last );
	 begin
	   if Last = 0 then
	     Temp := Default;
	   else
	     Temp := positive'value ( Temp_Str ( 1..Last ) );
	   end if;
	   if Temp < Minimum then
	     Put_Line ( "Please enter a value greater than or equal to "
	       & positive'image ( Minimum ) & "." );
	   elsif Temp > Maximum then
	     Put_Line ( "Please enter a value less than or equal to "
	       & positive'image ( Maximum ) & "." );
	   else
	     exit;
	   end if;
	 exception
	   when others =>
	     Put_Line ( "Please enter an integer number between "
	       & positive'image ( Minimum ) & " and "
	       & positive'image ( Maximum ) & " inclusive." );
	 end;
       end loop;
       return Temp;
     end Ask_Pos;

     ----------------------------------------------------------------------
     ----------------------------------------------------------------------

     function Ask_Int (
       Prompt  : in     string  := "";
       Default : in     integer := integer'first;
       Minimum : in     integer := integer'first;
       Maximum : in     integer := integer'last;
       Width   : in     Field   := integer'width )
       return integer is
     ----------------------------------------------------------------------
       Temp_Str : string ( 1..Width ) := ( others => ASCII.Nul );
       Last     : natural;
       Temp     : integer    ;
     begin
       loop
	 Put ( Prompt & "(" & integer'image ( Minimum ) & ".."
	   & integer'image ( Maximum ) & ") [" & integer'image ( Default )
	   & "]: " );
	 Get_Line ( Temp_Str, Last );
	 begin
	   if Last = 0 then
	     Temp := Default;
	   else
	     Temp := integer'value ( Temp_Str ( 1..Last ) );
	   end if;
	   if Temp < Minimum then
	     Put_Line ( "Please enter a value greater than or equal to "
	       & integer'image ( Minimum ) & "." );
	   elsif Temp > Maximum then
	     Put_Line ( "Please enter a value less than or equal to "
	       & integer'image ( Maximum ) & "." );
	   else
	     exit;
	   end if;
	 exception
	   when others =>
	     Put_Line ( "Please enter an integer number between "
	       & integer'image ( Minimum ) & " and "
	       & integer'image ( Maximum ) & " inclusive." );
	 end;
       end loop;
       return Temp;
     end Ask_Int;

     procedure Put (
       File  : in     File_Type;
       Item  : in     integer;
       Width : in     Field       := integer'width;
       Base  : in     Number_Base := Default_Base ) is
     ----------------------------------------------------------------------
       Item_Str : string ( 1..Width );
     begin
       Put ( Item_Str, Item, Base );
       Put ( File, Item_Str );
     end Put;

     procedure Put (
       Item  : in     integer;
       Width : in     Field       := integer'width;
       Base  : in     Number_Base := Default_Base ) is
     ----------------------------------------------------------------------
       Item_Str : string ( 1..Width );
     begin
       Put ( Item_Str, Item, Base );
       Put ( Item_Str );
     end Put;

     procedure Get (
       From  : in     string;
       Item  :    out integer;
       Last  :    out positive ) is
     ----------------------------------------------------------------------
       package Int_IO is new TextAKD.Integer_IO_AKD ( integer );
     begin
       Int_IO.Get ( From, Item, Last );
     end Get;

     procedure Put (
       To    :    out string;
       Item  : in     integer;
       Base  : in     Number_Base := Default_Base ) is
     ----------------------------------------------------------------------
       package Int_IO is new TextAKD.Integer_IO_AKD ( integer );
     begin
       Int_IO.Put ( To, Item, Base );
     end Put;

     procedure Put_Line (
       File  : in     File_Type;
       Item  : in     integer;
       Width : in     Field       := integer'width;
       Base  : in     Number_Base := Default_Base ) is
     ----------------------------------------------------------------------
       package Int_IO is new Integer_IO_AKD ( integer );
     begin
       Int_IO.Put ( File, Item, Width, Base );
       Put_Line ( File, "" );
     end Put_Line;

     procedure Put_Line (
       Item  : in     integer;
       Width : in     Field       := integer'width;
       Base  : in     Number_Base := Default_Base ) is
     ----------------------------------------------------------------------
       package Int_IO is new Integer_IO_AKD ( integer );
     begin
       Int_IO.Put ( Item, Width, Base );
       Put_Line ( "" );
     end Put_Line;

     ----------------------------------------------------------------------
     ----------------------------------------------------------------------

     function Ask_Long (
       Prompt  : in     string        := "";
       Default : in     long_integer  := long_integer'first;
       Minimum : in     long_integer  := long_integer'first;
       Maximum : in     long_integer  := long_integer'last;
       Width   : in     Field         := long_integer'width )
       return long_integer is
     ----------------------------------------------------------------------
       Temp_Str : string ( 1..Width ) := ( others => ASCII.Nul );
       Last     : natural;
       Temp     : long_integer    ;
     begin
       loop
	 Put ( Prompt & "(" & long_integer'image ( Minimum ) & ".."
	   & long_integer'image ( Maximum ) & ") [" & long_integer'image ( Default )
	   & "]: " );
	 Get_Line ( Temp_Str, Last );
	 begin
	   if Last = 0 then
	     Temp := Default;
	   else
	     Temp := long_integer'value ( Temp_Str ( 1..Last ) );
	   end if;
	   if Temp < Minimum then
	     Put_Line ( "Please enter a value greater than or equal to "
	       & long_integer'image ( Minimum ) & "." );
	   elsif Temp > Maximum then
	     Put_Line ( "Please enter a value less than or equal to "
	       & long_integer'image ( Maximum ) & "." );
	   else
	     exit;
	   end if;
	 exception
	   when others =>
	     Put_Line ( "Please enter an integer number between "
	       & long_integer'image ( Minimum ) & " and "
	       & long_integer'image ( Maximum ) & " inclusive." );
	 end;
       end loop;
       return Temp;
     end Ask_Long;

     procedure Put_Line (
       File  : in     File_Type;
       Item  : in     long_integer;
       Width : in     Field       := long_integer'width;
       Base  : in     Number_Base := Default_Base ) is
     ----------------------------------------------------------------------
       package Long_Int_IO is new Integer_IO_AKD ( long_integer );
     begin
       Long_Int_IO.Put ( File, Item, Width, Base );
       Put_Line ( File, "" );
     end Put_Line;

     procedure Put_Line (
       Item  : in     long_integer;
       Width : in     Field       := long_integer'width;
       Base  : in     Number_Base := Default_Base ) is
     ----------------------------------------------------------------------
       package Long_Int_IO is new Integer_IO_AKD ( long_integer );
     begin
       Long_Int_IO.Put ( Item, Width, Base );
       Put_Line ( "" );
     end Put_Line;

     ----------------------------------------------------------------------
     ----------------------------------------------------------------------

     function Ask_Byte (
       Prompt  : in     string        := "";
       Default : in     byte_integer  := byte_integer'first;
       Minimum : in     byte_integer  := byte_integer'first;
       Maximum : in     byte_integer  := byte_integer'last;
       Width   : in     Field         := byte_integer'width )
       return byte_integer is
     ----------------------------------------------------------------------
       Temp_Str : string ( 1..Width ) := ( others => ASCII.Nul );
       Last     : natural;
       Temp     : byte_integer    ;
     begin
       loop
	 Put ( Prompt & "(" & byte_integer'image ( Minimum ) & ".."
	   & byte_integer'image ( Maximum ) & ") [" & byte_integer'image ( Default )
	   & "]: " );
	 Get_Line ( Temp_Str, Last );
	 begin
	   if Last = 0 then
	     Temp := Default;
	   else
	     Temp := byte_integer'value ( Temp_Str ( 1..Last ) );
	   end if;
	   if Temp < Minimum then
	     Put_Line ( "Please enter a value greater than or equal to "
	       & byte_integer'image ( Minimum ) & "." );
	   elsif Temp > Maximum then
	     Put_Line ( "Please enter a value less than or equal to "
	       & byte_integer'image ( Maximum ) & "." );
	   else
	     exit;
	   end if;
	 exception
	   when others =>
	     Put_Line ( "Please enter an integer number between "
	       & byte_integer'image ( Minimum ) & " and "
	       & byte_integer'image ( Maximum ) & " inclusive." );
	 end;
       end loop;
       return Temp;
     end Ask_Byte;

     procedure Put_Line (
       File  : in     File_Type;
       Item  : in     byte_integer;
       Width : in     Field       := byte_integer'width;
       Base  : in     Number_Base := Default_Base ) is
     ----------------------------------------------------------------------
       package byte_Int_IO is new Integer_IO_AKD ( byte_integer );
     begin
       byte_Int_IO.Put ( File, Item, Width, Base );
       Put_Line ( File, "" );
     end Put_Line;

     procedure Put_Line (
       Item  : in     byte_integer;
       Width : in     Field       := byte_integer'width;
       Base  : in     Number_Base := Default_Base ) is
     ----------------------------------------------------------------------
       package byte_Int_IO is new Integer_IO_AKD ( byte_integer );
     begin
       byte_Int_IO.Put ( Item, Width, Base );
       Put_Line ( "" );
     end Put_Line;

     ----------------------------------------------------------------------
     ----------------------------------------------------------------------
     end InteAKD;


