[BACK]Return to characters_and_numbers.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Math_Lib / Numbers

File: [local] / OpenXM_contrib / PHC / Ada / Math_Lib / Numbers / characters_and_numbers.adb (download)

Revision 1.1.1.1 (vendor branch), Sun Oct 29 17:45:25 2000 UTC (23 years, 8 months ago) by maekawa
Branch: PHC, MAIN
CVS Tags: v2, maekawa-ipv6, RELEASE_1_2_3, RELEASE_1_2_2_KNOPPIX_b, RELEASE_1_2_2_KNOPPIX, RELEASE_1_2_2, RELEASE_1_2_1, HEAD
Changes since 1.1: +0 -0 lines

Import the second public release of PHCpack.

OKed by Jan Verschelde.

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;