OSDN Git Service

More improvements to sparc VIS vec_init code generation.
[pf3gnuchains/gcc-fork.git] / gcc / ada / s-imgwch.adb
1 ------------------------------------------------------------------------------
2 --                                                                          --
3 --                         GNAT RUN-TIME COMPONENTS                         --
4 --                                                                          --
5 --                     S Y S T E M . I M G _ W C H A R                      --
6 --                                                                          --
7 --                                 B o d y                                  --
8 --                                                                          --
9 --          Copyright (C) 1992-2010, Free Software Foundation, Inc.         --
10 --                                                                          --
11 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
12 -- terms of the  GNU General Public License as published  by the Free Soft- --
13 -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
14 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
16 -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
17 --                                                                          --
18 -- As a special exception under Section 7 of GPL version 3, you are granted --
19 -- additional permissions described in the GCC Runtime Library Exception,   --
20 -- version 3.1, as published by the Free Software Foundation.               --
21 --                                                                          --
22 -- You should have received a copy of the GNU General Public License and    --
23 -- a copy of the GCC Runtime Library Exception along with this program;     --
24 -- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
25 -- <http://www.gnu.org/licenses/>.                                          --
26 --                                                                          --
27 -- GNAT was originally developed  by the GNAT team at  New York University. --
28 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
29 --                                                                          --
30 ------------------------------------------------------------------------------
31
32 with Interfaces; use Interfaces;
33
34 with System.Img_Char; use System.Img_Char;
35
36 package body System.Img_WChar is
37
38    --------------------------
39    -- Image_Wide_Character --
40    --------------------------
41
42    procedure Image_Wide_Character
43      (V        : Wide_Character;
44       S        : in out String;
45       P        : out Natural;
46       Ada_2005 : Boolean)
47    is
48       pragma Assert (S'First = 1);
49
50    begin
51       --  Annoying Ada 95 incompatibility with FFFE/FFFF
52
53       if V >= Wide_Character'Val (16#FFFE#)
54         and then not Ada_2005
55       then
56          if V = Wide_Character'Val (16#FFFE#) then
57             S (1 .. 4) := "FFFE";
58          else
59             S (1 .. 4) := "FFFF";
60          end if;
61
62          P := 4;
63
64       --  Deal with annoying Ada 95 incompatibility with soft hyphen
65
66       elsif V = Wide_Character'Val (16#00AD#)
67         and then not Ada_2005
68       then
69          P := 3;
70          S (1) := ''';
71          S (2) := Character'Val (16#00AD#);
72          S (3) := ''';
73
74       --  Normal case, same as Wide_Wide_Character
75
76       else
77          Image_Wide_Wide_Character
78            (Wide_Wide_Character'Val (Wide_Character'Pos (V)), S, P);
79       end if;
80    end Image_Wide_Character;
81
82    -------------------------------
83    -- Image_Wide_Wide_Character --
84    -------------------------------
85
86    procedure Image_Wide_Wide_Character
87      (V : Wide_Wide_Character;
88       S : in out String;
89       P : out Natural)
90    is
91       pragma Assert (S'First = 1);
92
93       Val : Unsigned_32 := Wide_Wide_Character'Pos (V);
94
95    begin
96       --  If in range of standard Character, use Character routine. Use the
97       --  Ada 2005 version, since either we are called directly in Ada 2005
98       --  mode for Wide_Wide_Character, or this is the Wide_Character case
99       --  which already took care of the Soft_Hyphen glitch.
100
101       if Val <= 16#FF# then
102          Image_Character_05
103            (Character'Val (Wide_Wide_Character'Pos (V)), S, P);
104
105       --  Otherwise value returned is Hex_hhhhhhhh
106
107       else
108          declare
109             Hex : constant array (Unsigned_32 range 0 .. 15) of Character :=
110                     "0123456789ABCDEF";
111
112          begin
113             S (1 .. 4) := "Hex_";
114
115             for J in reverse 5 .. 12 loop
116                S (J) := Hex (Val mod 16);
117                Val := Val / 16;
118             end loop;
119
120             P := 12;
121          end;
122       end if;
123    end Image_Wide_Wide_Character;
124
125 end System.Img_WChar;