You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
306 lines
12 KiB
306 lines
12 KiB
/* /////////////////////////////////////////////////////////////////////////
|
|
* File: pantheios/backends/be.N.h
|
|
*
|
|
* Purpose: Declaration of the Pantheios be.N Stock Back-end API.
|
|
*
|
|
* Created: 18th October 2006
|
|
* Updated: 26th November 2010
|
|
*
|
|
* Home: http://www.pantheios.org/
|
|
*
|
|
* Copyright (c) 2006-2010, Matthew Wilson and Synesis Software
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are
|
|
* met:
|
|
*
|
|
* - Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
* - Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* - Neither the name(s) of Matthew Wilson and Synesis Software nor the
|
|
* names of any contributors may be used to endorse or promote products
|
|
* derived from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* ////////////////////////////////////////////////////////////////////// */
|
|
|
|
|
|
/** \file pantheios/backends/be.N.h
|
|
*
|
|
* [C,C++] Pantheios be.N Stock Back-end API
|
|
*/
|
|
|
|
#ifndef PANTHEIOS_INCL_PANTHEIOS_FRONTENDS_H_BE_N
|
|
#define PANTHEIOS_INCL_PANTHEIOS_FRONTENDS_H_BE_N
|
|
|
|
/* /////////////////////////////////////////////////////////////////////////
|
|
* Version information
|
|
*/
|
|
|
|
#ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
|
|
# define PANTHEIOS_VER_PANTHEIOS_BACKENDS_H_BE_N_MAJOR 1
|
|
# define PANTHEIOS_VER_PANTHEIOS_BACKENDS_H_BE_N_MINOR 6
|
|
# define PANTHEIOS_VER_PANTHEIOS_BACKENDS_H_BE_N_REVISION 2
|
|
# define PANTHEIOS_VER_PANTHEIOS_BACKENDS_H_BE_N_EDIT 21
|
|
#endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
|
|
|
|
/* /////////////////////////////////////////////////////////////////////////
|
|
* Includes
|
|
*/
|
|
|
|
#ifndef PANTHEIOS_INCL_PANTHEIOS_H_PANTHEIOS
|
|
# include <pantheios/pantheios.h>
|
|
#endif /* !PANTHEIOS_INCL_PANTHEIOS_H_PANTHEIOS */
|
|
#ifndef PANTHEIOS_INCL_PANTHEIOS_H_BACKEND
|
|
# include <pantheios/backend.h>
|
|
#endif /* !PANTHEIOS_INCL_PANTHEIOS_H_BACKEND */
|
|
|
|
#include <limits.h>
|
|
|
|
/* /////////////////////////////////////////////////////////////////////////
|
|
* Documentation
|
|
*/
|
|
|
|
/** \defgroup group__backend__stock_backends__N Pantheios N Stock Back-end
|
|
* \ingroup group__backend__stock_backends
|
|
* Back-end library that splits output to N back-ends.
|
|
*/
|
|
|
|
/* /////////////////////////////////////////////////////////////////////////
|
|
* API
|
|
*/
|
|
|
|
/* /////////////////////////////////////////////////////////////////////////
|
|
* Constants
|
|
*/
|
|
|
|
/** \defgroup group__backend__stock_backends__N__flags Pantheios be.N Stock Back-end Flags
|
|
* \ingroup group__backend__stock_backends__N
|
|
* Flags for the \ref group__backend__stock_backends__N
|
|
*/
|
|
|
|
/** \def PANTHEIOS_BE_N_F_IGNORE_INIT_FAILURE
|
|
* Cause the \ref group__backend__stock_backends__N to
|
|
* ignore initialisation failure of the given back-end.
|
|
* \ingroup group__backend__stock_backends__N__flags
|
|
*/
|
|
|
|
#define PANTHEIOS_BE_N_F_IGNORE_INIT_FAILURE (0x00100000)
|
|
|
|
/** \def PANTHEIOS_BE_N_F_ID_MUST_MATCH_CUSTOM28
|
|
` * Cause the \ref group__backend__stock_backends__N to
|
|
* only output to a given back-end if the custom-28 value
|
|
* matches the back-end's Id.
|
|
* \ingroup group__backend__stock_backends__N__flags
|
|
*/
|
|
|
|
#define PANTHEIOS_BE_N_F_ID_MUST_MATCH_CUSTOM28 (0x00200000)
|
|
|
|
/** \def PANTHEIOS_BE_N_F_IGNORE_NONMATCHED_CUSTOM28_ID
|
|
* Cause the \ref group__backend__stock_backends__N to
|
|
* only output to a given back-end if the custom-28 value
|
|
* does not match the back-end's Id.
|
|
* \ingroup group__backend__stock_backends__N__flags
|
|
*/
|
|
|
|
#define PANTHEIOS_BE_N_F_IGNORE_NONMATCHED_CUSTOM28_ID (0x00400000)
|
|
|
|
/** \def PANTHEIOS_BE_N_F_INIT_ONLY_IF_PREVIOUS_FAILED
|
|
* Cause the \ref group__backend__stock_backends__N to
|
|
* initialise the given back-end only if all others have failed.
|
|
* \ingroup group__backend__stock_backends__N__flags
|
|
*/
|
|
|
|
#define PANTHEIOS_BE_N_F_INIT_ONLY_IF_PREVIOUS_FAILED (0x00800000)
|
|
|
|
/* /////////////////////////////////////////////////////////////////////////
|
|
* Typedefs
|
|
*/
|
|
|
|
/** Structure that describes a back-end to be used by the \ref group__backend__stock_backends__N.
|
|
*
|
|
* \ingroup group__backend__stock_backends__N
|
|
*
|
|
* \see PANTHEIOS_BE_N_STDFORM_ENTRY
|
|
*/
|
|
struct pan_be_N_t
|
|
{
|
|
/** A combination of the
|
|
* \ref group__backend__stock_backends__N__flags "be.N flags" that control
|
|
* the behaviour of the given back-end
|
|
*/
|
|
int flags;
|
|
/** The back-end Id
|
|
*
|
|
* Must be >0.
|
|
*/
|
|
int backEndId;
|
|
/** Pointer to the back-end's initialisation function */
|
|
int (PANTHEIOS_CALLCONV *pfnInit)(
|
|
PAN_CHAR_T const*
|
|
, int
|
|
, void const*
|
|
, void*
|
|
, void**
|
|
);
|
|
/** Pointer to the back-end's uninitialisation function */
|
|
void (PANTHEIOS_CALLCONV *pfnUninit)( void*);
|
|
/** Pointer to the back-end's log-entry function */
|
|
int (PANTHEIOS_CALLCONV *pfnLogEntry)(
|
|
void*
|
|
, void*
|
|
, int
|
|
, PAN_CHAR_T const*
|
|
, size_t
|
|
);
|
|
/** A per-back-end static severity ceiling
|
|
*/
|
|
int severityCeiling;
|
|
#ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
|
|
/* INTERNAL USE ONLY */
|
|
void* token;
|
|
#endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
|
|
};
|
|
#ifndef __cplusplus
|
|
typedef struct pan_be_N_t pan_be_N_t;
|
|
#endif /* __cplusplus */
|
|
|
|
|
|
/* PANTHEIOS_BE_N_ENTRY has been removed */
|
|
|
|
|
|
/** \def PANTHEIOS_BE_N_STDFORM_ENTRY
|
|
*
|
|
* Defines an entry in an array of pan_be_N_t.
|
|
*
|
|
* \param backEndId The back-end identifier. Must be >0
|
|
* \param be_prefix The prefix of all the back-end functions, e.g. <b>pantheios_be_speech</b>
|
|
* \param flags A combination of the
|
|
* \ref group__backend__stock_backends__N__flags "be.N flags" that control
|
|
* the behaviour of the given back-end
|
|
*
|
|
* This is used in combination with PANTHEIOS_BE_N_TERMINATOR_ENTRY to
|
|
* define the set of concrete back-ends are to be attached to the program:
|
|
<pre>
|
|
pan_be_N_t PAN_BE_N_BACKEND_LIST[] =
|
|
{
|
|
PANTHEIOS_BE_N_STDFORM_ENTRY(1, pantheios_be_file, 0)
|
|
, PANTHEIOS_BE_N_STDFORM_ENTRY(2, pantheios_be_fprintf, 0)
|
|
, PANTHEIOS_BE_N_STDFORM_ENTRY(3, pantheios_be_null, 0)
|
|
\#if defined(PLATFORMSTL_OS_IS_UNIX)
|
|
, PANTHEIOS_BE_N_STDFORM_ENTRY(4, pantheios_be_syslog, 0)
|
|
\#elif defined(PLATFORMSTL_OS_IS_WIN32) || \
|
|
defined(PLATFORMSTL_OS_IS_WIN64)
|
|
, PANTHEIOS_BE_N_STDFORM_ENTRY(4, pantheios_be_WindowsSyslog, 0)
|
|
\#endif
|
|
, PANTHEIOS_BE_N_STDFORM_ENTRY(5, pantheios_be_file, 0)
|
|
, PANTHEIOS_BE_N_TERMINATOR_ENTRY
|
|
};
|
|
</pre>
|
|
*
|
|
* \ingroup group__backend__stock_backends__N
|
|
*
|
|
* \note This is to be used insead of PANTHEIOS_BE_N_ENTRY
|
|
*/
|
|
#define PANTHEIOS_BE_N_STDFORM_ENTRY(backEndId, be_prefix, flags) \
|
|
{ \
|
|
flags \
|
|
, backEndId \
|
|
, (int(PANTHEIOS_CALLCONV *)(PAN_CHAR_T const*,int,void const*,void*,void**))be_prefix ## _init \
|
|
, be_prefix ## _uninit \
|
|
, be_prefix ## _logEntry \
|
|
, INT_MAX \
|
|
, NULL \
|
|
}
|
|
|
|
/** \def PANTHEIOS_BE_N_FILTERED_ENTRY
|
|
*
|
|
* Defines an entry in an array of pan_be_N_t.
|
|
*
|
|
* \param backEndId The back-end identifier. Must be >0.
|
|
* \param be_prefix The prefix of all the back-end functions, e.g. <b>pantheios_be_speech</b>.
|
|
* \param severityCeiling A static severity level, used to filter out
|
|
* messages of a given severity level prior to passing to the given
|
|
* specific back-end.
|
|
* \param flags A combination of the
|
|
* \ref group__backend__stock_backends__N__flags "be.N flags" that control
|
|
* the behaviour of the given back-end.
|
|
*
|
|
* This is used in combination with PANTHEIOS_BE_N_TERMINATOR_ENTRY to
|
|
* define the set of concrete back-ends are to be attached to the program:
|
|
<pre>
|
|
pan_be_N_t PAN_BE_N_BACKEND_LIST[] =
|
|
{
|
|
PANTHEIOS_BE_N_STDFORM_ENTRY(1, pantheios_be_file, 0)
|
|
, PANTHEIOS_BE_N_STDFORM_ENTRY(2, pantheios_be_fprintf, 0)
|
|
, PANTHEIOS_BE_N_STDFORM_ENTRY(3, pantheios_be_null, 0)
|
|
\#if defined(PLATFORMSTL_OS_IS_UNIX)
|
|
, PANTHEIOS_BE_N_FILTERED_ENTRY(4, pantheios_be_syslog, PANTHEIOS_SEV_WARNING, 0)
|
|
\#elif defined(PLATFORMSTL_OS_IS_WIN32) || \
|
|
defined(PLATFORMSTL_OS_IS_WIN64)
|
|
, PANTHEIOS_BE_N_FILTERED_ENTRY(4, pantheios_be_WindowsSyslog, PANTHEIOS_SEV_WARNING, 0)
|
|
\#endif
|
|
, PANTHEIOS_BE_N_STDFORM_ENTRY(5, pantheios_be_file, 0)
|
|
, PANTHEIOS_BE_N_TERMINATOR_ENTRY
|
|
};
|
|
</pre>
|
|
*
|
|
* The output to back-end 4 is statically filtered, so that any statement
|
|
* with severity less than or equal to the specified level will be output,
|
|
* subject to dynamic filtering via pantheios_fe_isSeverityLogged().
|
|
*
|
|
* \ingroup group__backend__stock_backends__N
|
|
*/
|
|
#define PANTHEIOS_BE_N_FILTERED_ENTRY(backEndId, be_prefix, severityCeiling, flags) \
|
|
{ \
|
|
flags \
|
|
, backEndId \
|
|
, (int(PANTHEIOS_CALLCONV*)(PAN_CHAR_T const*,int,void const*,void*,void**))be_prefix ## _init \
|
|
, be_prefix ## _uninit \
|
|
, be_prefix ## _logEntry \
|
|
, severityCeiling \
|
|
, NULL \
|
|
}
|
|
|
|
/** \def PANTHEIOS_BE_N_TERMINATOR_ENTRY
|
|
*
|
|
* Defines a terminating entry in an array of pan_be_N_t.
|
|
*
|
|
* \ingroup group__backend__stock_backends__N
|
|
*
|
|
* \see PANTHEIOS_BE_N_STDFORM_ENTRY
|
|
*/
|
|
#define PANTHEIOS_BE_N_TERMINATOR_ENTRY { 0, 0, NULL, NULL, NULL, -1, NULL }
|
|
|
|
/* /////////////////////////////////////////////////////////////////////////
|
|
* External Declarations
|
|
*/
|
|
|
|
/** The application-defined array of back-end descriptors that specify what
|
|
* concrete back-ends are to be attached to the program.
|
|
*
|
|
* \note The array must be defined with a last terminator element whose
|
|
* <code>pfnInit</code> member is <code>NULL</code>.
|
|
*
|
|
* \ingroup group__backend__stock_backends__N
|
|
*/
|
|
PANTHEIOS_EXTERN_C pan_be_N_t PAN_BE_N_BACKEND_LIST[];
|
|
|
|
/* ////////////////////////////////////////////////////////////////////// */
|
|
|
|
#endif /* PANTHEIOS_INCL_PANTHEIOS_FRONTENDS_H_BE_N */
|
|
|
|
/* ///////////////////////////// end of file //////////////////////////// */
|