OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [ada/] [g-cgideb.adb] - Blame information for rev 821

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 706 jeremybenn
------------------------------------------------------------------------------
2
--                                                                          --
3
--                         GNAT COMPILER COMPONENTS                         --
4
--                                                                          --
5
--                        G N A T . C G I . D E B U G                       --
6
--                                                                          --
7
--                                 B o d y                                  --
8
--                                                                          --
9
--                     Copyright (C) 2000-2010, AdaCore                     --
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 Ada.Strings.Unbounded;
33
 
34
package body GNAT.CGI.Debug is
35
 
36
   use Ada.Strings.Unbounded;
37
 
38
   --  Define the abstract type which act as a template for all debug IO modes.
39
   --  To create a new IO mode you must:
40
   --     1. create a new package spec
41
   --     2. create a new type derived from IO.Format
42
   --     3. implement all the abstract routines in IO
43
 
44
   package IO is
45
 
46
      type Format is abstract tagged null record;
47
 
48
      function Output (Mode : Format'Class) return String;
49
 
50
      function Variable
51
        (Mode  : Format;
52
         Name  : String;
53
         Value : String) return String is abstract;
54
      --  Returns variable Name and its associated value
55
 
56
      function New_Line (Mode : Format) return String is abstract;
57
      --  Returns a new line such as this concatenated between two strings
58
      --  will display the strings on two lines.
59
 
60
      function Title (Mode : Format; Str : String) return String is abstract;
61
      --  Returns Str as a Title. A title must be alone and centered on a
62
      --  line. Next output will be on the following line.
63
 
64
      function Header
65
        (Mode : Format;
66
         Str  : String) return String is abstract;
67
      --  Returns Str as an Header. An header must be alone on its line. Next
68
      --  output will be on the following line.
69
 
70
   end IO;
71
 
72
   ----------------------
73
   -- IO for HTML Mode --
74
   ----------------------
75
 
76
   package HTML_IO is
77
 
78
      --  See IO for comments about these routines
79
 
80
      type Format is new IO.Format with null record;
81
 
82
      function Variable
83
        (IO    : Format;
84
         Name  : String;
85
         Value : String) return String;
86
 
87
      function New_Line (IO : Format) return String;
88
 
89
      function Title (IO : Format; Str : String) return String;
90
 
91
      function Header (IO : Format; Str : String) return String;
92
 
93
   end HTML_IO;
94
 
95
   ----------------------------
96
   -- IO for Plain Text Mode --
97
   ----------------------------
98
 
99
   package Text_IO is
100
 
101
      --  See IO for comments about these routines
102
 
103
      type Format is new IO.Format with null record;
104
 
105
      function Variable
106
        (IO    : Format;
107
         Name  : String;
108
         Value : String) return String;
109
 
110
      function New_Line (IO : Format) return String;
111
 
112
      function Title (IO : Format; Str : String) return String;
113
 
114
      function Header (IO : Format; Str : String) return String;
115
 
116
   end Text_IO;
117
 
118
   --------------
119
   -- Debug_IO --
120
   --------------
121
 
122
   package body IO is
123
 
124
      ------------
125
      -- Output --
126
      ------------
127
 
128
      function Output (Mode : Format'Class) return String is
129
         Result : Unbounded_String;
130
 
131
      begin
132
         Result :=
133
           To_Unbounded_String
134
             (Title (Mode, "CGI complete runtime environment")
135
              & Header (Mode, "CGI parameters:")
136
              & New_Line (Mode));
137
 
138
         for K in 1 .. Argument_Count loop
139
            Result := Result
140
              & Variable (Mode, Key (K), Value (K))
141
              & New_Line (Mode);
142
         end loop;
143
 
144
         Result := Result
145
           & New_Line (Mode)
146
           & Header (Mode, "CGI environment variables (Metavariables):")
147
           & New_Line (Mode);
148
 
149
         for P in Metavariable_Name'Range loop
150
            if Metavariable_Exists (P) then
151
               Result := Result
152
                 & Variable (Mode,
153
                             Metavariable_Name'Image (P),
154
                             Metavariable (P))
155
                 & New_Line (Mode);
156
            end if;
157
         end loop;
158
 
159
         return To_String (Result);
160
      end Output;
161
 
162
   end IO;
163
 
164
   -------------
165
   -- HTML_IO --
166
   -------------
167
 
168
   package body HTML_IO is
169
 
170
      NL : constant String := (1 => ASCII.LF);
171
 
172
      function Bold (S : String) return String;
173
      --  Returns S as an HTML bold string
174
 
175
      function Italic (S : String) return String;
176
      --  Returns S as an HTML italic string
177
 
178
      ----------
179
      -- Bold --
180
      ----------
181
 
182
      function Bold (S : String) return String is
183
      begin
184
         return "<b>" & S & "</b>";
185
      end Bold;
186
 
187
      ------------
188
      -- Header --
189
      ------------
190
 
191
      function Header (IO : Format; Str : String) return String is
192
         pragma Unreferenced (IO);
193
      begin
194
         return "<h2>" & Str & "</h2>" & NL;
195
      end Header;
196
 
197
      ------------
198
      -- Italic --
199
      ------------
200
 
201
      function Italic (S : String) return String is
202
      begin
203
         return "<i>" & S & "</i>";
204
      end Italic;
205
 
206
      --------------
207
      -- New_Line --
208
      --------------
209
 
210
      function New_Line (IO : Format) return String is
211
         pragma Unreferenced (IO);
212
      begin
213
         return "<br>" & NL;
214
      end New_Line;
215
 
216
      -----------
217
      -- Title --
218
      -----------
219
 
220
      function Title (IO : Format; Str : String) return String is
221
         pragma Unreferenced (IO);
222
      begin
223
         return "<p align=center><font size=+2>" & Str & "</font></p>" & NL;
224
      end Title;
225
 
226
      --------------
227
      -- Variable --
228
      --------------
229
 
230
      function Variable
231
        (IO    : Format;
232
         Name  : String;
233
         Value : String) return String
234
      is
235
         pragma Unreferenced (IO);
236
      begin
237
         return Bold (Name) & " = " & Italic (Value);
238
      end Variable;
239
 
240
   end HTML_IO;
241
 
242
   -------------
243
   -- Text_IO --
244
   -------------
245
 
246
   package body Text_IO is
247
 
248
      ------------
249
      -- Header --
250
      ------------
251
 
252
      function Header (IO : Format; Str : String) return String is
253
      begin
254
         return "*** " & Str & New_Line (IO);
255
      end Header;
256
 
257
      --------------
258
      -- New_Line --
259
      --------------
260
 
261
      function New_Line (IO : Format) return String is
262
         pragma Unreferenced (IO);
263
      begin
264
         return String'(1 => ASCII.LF);
265
      end New_Line;
266
 
267
      -----------
268
      -- Title --
269
      -----------
270
 
271
      function Title (IO : Format; Str : String) return String is
272
         Spaces : constant Natural := (80 - Str'Length) / 2;
273
         Indent : constant String (1 .. Spaces) := (others => ' ');
274
      begin
275
         return Indent & Str & New_Line (IO);
276
      end Title;
277
 
278
      --------------
279
      -- Variable --
280
      --------------
281
 
282
      function Variable
283
        (IO    : Format;
284
         Name  : String;
285
         Value : String) return String
286
      is
287
         pragma Unreferenced (IO);
288
      begin
289
         return "   " & Name & " = " & Value;
290
      end Variable;
291
 
292
   end Text_IO;
293
 
294
   -----------------
295
   -- HTML_Output --
296
   -----------------
297
 
298
   function HTML_Output return String is
299
      HTML : HTML_IO.Format;
300
   begin
301
      return IO.Output (Mode => HTML);
302
   end HTML_Output;
303
 
304
   -----------------
305
   -- Text_Output --
306
   -----------------
307
 
308
   function Text_Output return String is
309
      Text : Text_IO.Format;
310
   begin
311
      return IO.Output (Mode => Text);
312
   end Text_Output;
313
 
314
end GNAT.CGI.Debug;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.