package body Characters_and_Numbers is function Convert ( c : character ) return natural is -- DESCRIPTION : -- Returns 10 if the character does not represent a number -- between 0 and 9, otherwise returns the corresponding number. begin case c is when '0' => return 0; when '1' => return 1; when '2' => return 2; when '3' => return 3; when '4' => return 4; when '5' => return 5; when '6' => return 6; when '7' => return 7; when '8' => return 8; when '9' => return 9; when others => return 10; end case; end Convert; function Convert_Decimal ( n : natural ) return character is -- DESCRIPTION : -- For n in 0..9, the corresponding character representation is returned. begin case n is when 0 => return '0'; when 1 => return '1'; when 2 => return '2'; when 3 => return '3'; when 4 => return '4'; when 5 => return '5'; when 6 => return '6'; when 7 => return '7'; when 8 => return '8'; when 9 => return '9'; when others => return '0'; end case; end Convert_Decimal; function Convert_Hexadecimal ( c : character ) return natural is begin case c is when '0' => return 0; when '1' => return 1; when '2' => return 2; when '3' => return 3; when '4' => return 4; when '5' => return 5; when '6' => return 6; when '7' => return 7; when '8' => return 8; when '9' => return 9; when 'A' => return 10; when 'B' => return 11; when 'C' => return 12; when 'D' => return 13; when 'E' => return 14; when 'F' => return 15; when others => return 16; end case; end Convert_Hexadecimal; function Convert_Hexadecimal ( n : natural ) return character is begin if n < 10 then return Convert_Decimal(n); else case n is when 10 => return 'A'; when 11 => return 'B'; when 12 => return 'C'; when 13 => return 'D'; when 14 => return 'E'; when 15 => return 'F'; when others => return '0'; end case; end if; end Convert_Hexadecimal; function Convert ( s : String ) return natural is acc : natural := 0; cvn : natural; begin for i in s'range loop cvn := Convert(s(i)); if cvn < 10 then acc := acc*10 + cvn; end if; end loop; return acc; end Convert; function Convert ( n : natural ) return String is begin if n < 10 then declare res : String(1..1); begin res(1) := Convert_Decimal(n); return res; end; else declare rest : natural := n mod 10; head : natural := n/10; headstr : constant string := Convert(head); res : String(1..headstr'last+1); begin res(headstr'range) := headstr; res(res'last) := Convert_Decimal(rest); return res; end; end if; end Convert; procedure Skip_Spaces ( file : in file_type; c : in out character ) is begin get(file,c); while c = ' ' and not End_of_Line(file) loop get(file,c); end loop; end Skip_Spaces; procedure Skip_Underscores ( file : in file_type; c : in out character ) is begin get(file,c); while c = '_' and not End_of_Line(file) loop get(file,c); end loop; end Skip_Underscores; end Characters_and_Numbers;