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;