TraceAPI plugin
=-=-=-=-=-=-=-=

This was originally intended as a (more or less) complete example of a
Metamod plugin. It catches _every_ call available to it (dll routines both
before and after the game, as well as engine functions both before and
after the engine).

Because it catches every routine, I figured I'd give it the ability to log
when given routines are called, so it became an "api tracing" plugin. :)

This can actually be useful for tracking the operation of the HL engine,
as well as that of a particular HL game mod.

It recognizes the following server cvars:

   // Tracing debug levels; higher values log increasingly frequent routines.
   // Currently 0-50.  See "api_info.cpp" for the debug levels of various
   // functions.

   // Trace level for dllapi routines.
   trace_dllapi

   // Trace level for "new" dllapi routines.
   trace_newapi

   // Trace level for engine functions.
   trace_engine

   // Enable unlimited trace logging.  By default (as of v1.06), it only
   // logs _one_ trace message per second, to keep from overwhelming the
   // server.  Set to "1" to enable unlimited logging.  (Default "0")
   trace_unlimit

   // General debug level, independent of trace levels.  Not currently used.
   trace_debug


and the following server commands:

   // Enable tracing of a given routine, independent of "trace_*" level.
   // See the list of routine names in "api_info.cpp".  Case is insignificant.
   trace set <APIroutine>

   // Disable tracing of a given routine, iff previously enabled with "trace".
   // Doesn't affect routines being logged via "trace_*" level.
   trace unset <APIroutine>

   // Show the routines being traced.
   trace show

   // List the various routines that can be traced.
   trace list dllapi
   trace list newapi
   trace list engine
   trace list all

   // Prints out version/date/etc.
   trace version

Note the information it logs on each routine invocation is, at the moment,
relatively minimal. I included information that seemed obvious (args for a
ClientCommand, etc), and I've added info for other routines as I've come
across a need. Most routines I still know too little about to log any
particular information (CreateBaseline, etc). Feel free to add information
that you're interested in to the log messages in the routines; the
examples should be pretty self-explanatory. I'd be interested in knowing
as well, for adding it to the distribution code.

--------------------------------------------------------------------------
