-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2007, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2009, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
with Hostparm;
with Osint.C; use Osint.C;
+with Stringt; use Stringt;
package body Lib.Util is
Info_Buffer_Col : Natural := 1;
-- Column number of next character to be written.
- -- Can be different from Info_Buffer_Len + 1
- -- because of tab characters written by Write_Info_Tab.
+ -- Can be different from Info_Buffer_Len + 1 because of tab characters
+ -- written by Write_Info_Tab.
+
+ procedure Write_Info_Hex_Byte (J : Natural);
+ -- Place two hex digits representing the value J (which is in the range
+ -- 0-255) in Info_Buffer, incrementing Info_Buffer_Len by 2. The digits
+ -- are output using lower case letters.
---------------------
-- Write_Info_Char --
--------------------------
procedure Write_Info_Char_Code (Code : Char_Code) is
-
- procedure Write_Info_Hex_Byte (J : Natural);
- -- Write single hex digit
-
- procedure Write_Info_Hex_Byte (J : Natural) is
- Hexd : constant String := "0123456789abcdef";
-
- begin
- Write_Info_Char (Hexd (J / 16 + 1));
- Write_Info_Char (Hexd (J mod 16 + 1));
- end Write_Info_Hex_Byte;
-
- -- Start of processing for Write_Info_Char_Code
-
begin
-- 00 .. 7F
end Write_Info_EOL;
-------------------------
+ -- Write_Info_Hex_Byte --
+ -------------------------
+
+ procedure Write_Info_Hex_Byte (J : Natural) is
+ Hexd : constant array (0 .. 15) of Character := "0123456789abcdef";
+ begin
+ Write_Info_Char (Hexd (J / 16));
+ Write_Info_Char (Hexd (J mod 16));
+ end Write_Info_Hex_Byte;
+
+ -------------------------
-- Write_Info_Initiate --
-------------------------
procedure Write_Info_Initiate (Key : Character) renames Write_Info_Char;
+ --------------------
+ -- Write_Info_Int --
+ --------------------
+
+ procedure Write_Info_Int (N : Int) is
+ begin
+ if N >= 0 then
+ Write_Info_Nat (N);
+
+ -- Negative numbers, use Write_Info_Uint to avoid problems with largest
+ -- negative number.
+
+ else
+ Write_Info_Uint (UI_From_Int (N));
+ end if;
+ end Write_Info_Int;
+
---------------------
-- Write_Info_Name --
---------------------
Write_Info_Char (Character'Val (N mod 10 + Character'Pos ('0')));
end Write_Info_Nat;
+ ---------------------
+ -- Write_Info_Slit --
+ ---------------------
+
+ procedure Write_Info_Slit (S : String_Id) is
+ C : Character;
+
+ begin
+ Write_Info_Str ("""");
+
+ for J in 1 .. String_Length (S) loop
+ C := Get_Character (Get_String_Char (S, J));
+
+ if C in Character'Val (16#20#) .. Character'Val (16#7E#)
+ and then C /= '{'
+ then
+ Write_Info_Char (C);
+
+ if C = '"' then
+ Write_Info_Char (C);
+ end if;
+
+ else
+ Write_Info_Char ('{');
+ Write_Info_Hex_Byte (Character'Pos (C));
+ Write_Info_Char ('}');
+ end if;
+ end loop;
+
+ Write_Info_Char ('"');
+ end Write_Info_Slit;
+
--------------------
-- Write_Info_Str --
--------------------
Info_Buffer_Len := 0;
Info_Buffer_Col := 1;
-
end Write_Info_Terminate;
+ ---------------------
+ -- Write_Info_Uint --
+ ---------------------
+
+ procedure Write_Info_Uint (N : Uint) is
+ begin
+ UI_Image (N, Decimal);
+ Write_Info_Str (UI_Image_Buffer (1 .. UI_Image_Length));
+ end Write_Info_Uint;
+
end Lib.Util;