------------------------------------------------------------------------------
--                                                                          --
--                 GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS                 --
--                                                                          --
--                     S Y S T E M . T R A C E S . S E N D                  --
--                                                                          --
--                                  B o d y                                 --
--                                                                          --
--           Copyright (C) 2001-2005 Free Software Foundation, Inc.         --
--                                                                          --
-- GNARL 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 2,  or (at your option) any later ver- --
-- sion. GNARL 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.  See the GNU General Public License --
-- for  more details.  You should have  received  a copy of the GNU General --
-- Public License  distributed with GNARL; see file COPYING.  If not, write --
-- to  the  Free Software Foundation,  51  Franklin  Street,  Fifth  Floor, --
-- Boston, MA 02110-1301, USA.                                              --
--                                                                          --
-- As a special exception,  if other files  instantiate  generics from this --
-- unit, or you link  this unit with other files  to produce an executable, --
-- this  unit  does not  by itself cause  the resulting  executable  to  be --
-- covered  by the  GNU  General  Public  License.  This exception does not --
-- however invalidate  any other reasons why  the executable file  might be --
-- covered by the  GNU Public License.                                      --
--                                                                          --
-- GNAT was originally developed  by the GNAT team at  New York University. --
-- Extensive contributions were provided by Ada Core Technologies Inc.      --
--                                                                          --
------------------------------------------------------------------------------

--  This version is for VxWorks targets.

--  Trace information is sent to WindView using the wvEvent function.

--  Note that wvEvent is from the VxWorks API.

--  When adding a new event, just give an Id to then event, and then modify
--  the WindView events database.

--  Refer to WindView User's Guide for more details on how to add new events
--  to the events database.

----------------
-- Send_Trace --
----------------

--  This procedure formats the string, maps the event Id to an Id
--  recognized by WindView, and send the event using wvEvent

separate (System.Traces.Format)
procedure Send_Trace (Id : Trace_T; Info : String) is

   procedure Wv_Event
     (Id : Integer;
      Buffer : System.Address;
      Size : Integer);
   pragma Import (C, Wv_Event, "wvEvent");

   Info_Trace : String_Trace;
   Id_Event   : Integer;

begin
   Info_Trace := Format_Trace (Info);

   case Id is
      when M_Accept_Complete => Id_Event := 30000;
      when M_Select_Else     => Id_Event := 30001;
      when M_RDV_Complete    => Id_Event := 30002;
      when M_Call_Complete   => Id_Event := 30003;
      when M_Delay           => Id_Event := 30004;
      when E_Kill            => Id_Event := 30005;
      when E_Missed          => Id_Event := 30006;
      when E_Timeout         => Id_Event := 30007;

      when W_Call            => Id_Event := 30010;
      when W_Accept          => Id_Event := 30011;
      when W_Select          => Id_Event := 30012;
      when W_Completion      => Id_Event := 30013;
      when W_Delay           => Id_Event := 30014;
      when WT_Select         => Id_Event := 30015;
      when WT_Call           => Id_Event := 30016;
      when WT_Completion     => Id_Event := 30017;
      when WU_Delay          => Id_Event := 30018;

      when PO_Call           => Id_Event := 30020;
      when POT_Call          => Id_Event := 30021;
      when PO_Run            => Id_Event := 30022;
      when PO_Lock           => Id_Event := 30023;
      when PO_Unlock         => Id_Event := 30024;
      when PO_Done           => Id_Event := 30025;

      when T_Create          => Id_Event := 30030;
      when T_Activate        => Id_Event := 30031;
      when T_Abort           => Id_Event := 30032;
      when T_Terminate       => Id_Event := 30033;

      --  Unrecognized events are given the special Id_Event value 29999

      when others            => Id_Event := 29999;

   end case;

   Wv_Event (Id_Event, Info_Trace'Address, Max_Size);
end Send_Trace;
