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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [ada/] [g-cgideb.adb] - Rev 749

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

------------------------------------------------------------------------------
--                                                                          --
--                         GNAT COMPILER COMPONENTS                         --
--                                                                          --
--                        G N A T . C G I . D E B U G                       --
--                                                                          --
--                                 B o d y                                  --
--                                                                          --
--                     Copyright (C) 2000-2010, AdaCore                     --
--                                                                          --
-- 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- --
-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
--                                                                          --
-- As a special exception under Section 7 of GPL version 3, you are granted --
-- additional permissions described in the GCC Runtime Library Exception,   --
-- version 3.1, as published by the Free Software Foundation.               --
--                                                                          --
-- You should have received a copy of the GNU General Public License and    --
-- a copy of the GCC Runtime Library Exception along with this program;     --
-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
-- <http://www.gnu.org/licenses/>.                                          --
--                                                                          --
-- GNAT was originally developed  by the GNAT team at  New York University. --
-- Extensive contributions were provided by Ada Core Technologies Inc.      --
--                                                                          --
------------------------------------------------------------------------------
 
with Ada.Strings.Unbounded;
 
package body GNAT.CGI.Debug is
 
   use Ada.Strings.Unbounded;
 
   --  Define the abstract type which act as a template for all debug IO modes.
   --  To create a new IO mode you must:
   --     1. create a new package spec
   --     2. create a new type derived from IO.Format
   --     3. implement all the abstract routines in IO
 
   package IO is
 
      type Format is abstract tagged null record;
 
      function Output (Mode : Format'Class) return String;
 
      function Variable
        (Mode  : Format;
         Name  : String;
         Value : String) return String is abstract;
      --  Returns variable Name and its associated value
 
      function New_Line (Mode : Format) return String is abstract;
      --  Returns a new line such as this concatenated between two strings
      --  will display the strings on two lines.
 
      function Title (Mode : Format; Str : String) return String is abstract;
      --  Returns Str as a Title. A title must be alone and centered on a
      --  line. Next output will be on the following line.
 
      function Header
        (Mode : Format;
         Str  : String) return String is abstract;
      --  Returns Str as an Header. An header must be alone on its line. Next
      --  output will be on the following line.
 
   end IO;
 
   ----------------------
   -- IO for HTML Mode --
   ----------------------
 
   package HTML_IO is
 
      --  See IO for comments about these routines
 
      type Format is new IO.Format with null record;
 
      function Variable
        (IO    : Format;
         Name  : String;
         Value : String) return String;
 
      function New_Line (IO : Format) return String;
 
      function Title (IO : Format; Str : String) return String;
 
      function Header (IO : Format; Str : String) return String;
 
   end HTML_IO;
 
   ----------------------------
   -- IO for Plain Text Mode --
   ----------------------------
 
   package Text_IO is
 
      --  See IO for comments about these routines
 
      type Format is new IO.Format with null record;
 
      function Variable
        (IO    : Format;
         Name  : String;
         Value : String) return String;
 
      function New_Line (IO : Format) return String;
 
      function Title (IO : Format; Str : String) return String;
 
      function Header (IO : Format; Str : String) return String;
 
   end Text_IO;
 
   --------------
   -- Debug_IO --
   --------------
 
   package body IO is
 
      ------------
      -- Output --
      ------------
 
      function Output (Mode : Format'Class) return String is
         Result : Unbounded_String;
 
      begin
         Result :=
           To_Unbounded_String
             (Title (Mode, "CGI complete runtime environment")
              & Header (Mode, "CGI parameters:")
              & New_Line (Mode));
 
         for K in 1 .. Argument_Count loop
            Result := Result
              & Variable (Mode, Key (K), Value (K))
              & New_Line (Mode);
         end loop;
 
         Result := Result
           & New_Line (Mode)
           & Header (Mode, "CGI environment variables (Metavariables):")
           & New_Line (Mode);
 
         for P in Metavariable_Name'Range loop
            if Metavariable_Exists (P) then
               Result := Result
                 & Variable (Mode,
                             Metavariable_Name'Image (P),
                             Metavariable (P))
                 & New_Line (Mode);
            end if;
         end loop;
 
         return To_String (Result);
      end Output;
 
   end IO;
 
   -------------
   -- HTML_IO --
   -------------
 
   package body HTML_IO is
 
      NL : constant String := (1 => ASCII.LF);
 
      function Bold (S : String) return String;
      --  Returns S as an HTML bold string
 
      function Italic (S : String) return String;
      --  Returns S as an HTML italic string
 
      ----------
      -- Bold --
      ----------
 
      function Bold (S : String) return String is
      begin
         return "<b>" & S & "</b>";
      end Bold;
 
      ------------
      -- Header --
      ------------
 
      function Header (IO : Format; Str : String) return String is
         pragma Unreferenced (IO);
      begin
         return "<h2>" & Str & "</h2>" & NL;
      end Header;
 
      ------------
      -- Italic --
      ------------
 
      function Italic (S : String) return String is
      begin
         return "<i>" & S & "</i>";
      end Italic;
 
      --------------
      -- New_Line --
      --------------
 
      function New_Line (IO : Format) return String is
         pragma Unreferenced (IO);
      begin
         return "<br>" & NL;
      end New_Line;
 
      -----------
      -- Title --
      -----------
 
      function Title (IO : Format; Str : String) return String is
         pragma Unreferenced (IO);
      begin
         return "<p align=center><font size=+2>" & Str & "</font></p>" & NL;
      end Title;
 
      --------------
      -- Variable --
      --------------
 
      function Variable
        (IO    : Format;
         Name  : String;
         Value : String) return String
      is
         pragma Unreferenced (IO);
      begin
         return Bold (Name) & " = " & Italic (Value);
      end Variable;
 
   end HTML_IO;
 
   -------------
   -- Text_IO --
   -------------
 
   package body Text_IO is
 
      ------------
      -- Header --
      ------------
 
      function Header (IO : Format; Str : String) return String is
      begin
         return "*** " & Str & New_Line (IO);
      end Header;
 
      --------------
      -- New_Line --
      --------------
 
      function New_Line (IO : Format) return String is
         pragma Unreferenced (IO);
      begin
         return String'(1 => ASCII.LF);
      end New_Line;
 
      -----------
      -- Title --
      -----------
 
      function Title (IO : Format; Str : String) return String is
         Spaces : constant Natural := (80 - Str'Length) / 2;
         Indent : constant String (1 .. Spaces) := (others => ' ');
      begin
         return Indent & Str & New_Line (IO);
      end Title;
 
      --------------
      -- Variable --
      --------------
 
      function Variable
        (IO    : Format;
         Name  : String;
         Value : String) return String
      is
         pragma Unreferenced (IO);
      begin
         return "   " & Name & " = " & Value;
      end Variable;
 
   end Text_IO;
 
   -----------------
   -- HTML_Output --
   -----------------
 
   function HTML_Output return String is
      HTML : HTML_IO.Format;
   begin
      return IO.Output (Mode => HTML);
   end HTML_Output;
 
   -----------------
   -- Text_Output --
   -----------------
 
   function Text_Output return String is
      Text : Text_IO.Format;
   begin
      return IO.Output (Mode => Text);
   end Text_Output;
 
end GNAT.CGI.Debug;
 

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

powered by: WebSVN 2.1.0

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