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.
 
 
 
 

201 lines
9.0 KiB

/* /////////////////////////////////////////////////////////////////////////
* File: pantheios/util/backends/arguments.h
*
* Purpose: Pantheios back end API
*
* Created: 21st June 2005
* Updated: 10th August 2009
*
* Home: http://www.pantheios.org/
*
* Copyright (c) 2005-2009, Matthew Wilson and Synesis Software
* Copyright (c) 1999-2005, Synesis Software and Matthew Wilson
* All rights reserved.
*
* 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/util/backends/arguments.h
*
* [C, C++] Definition of the back-end parsing functions.
*/
#ifndef PANTHEIOS_INCL_PANTHEIOS_UTIL_BACKENDS_H_ARGUMENTS
#define PANTHEIOS_INCL_PANTHEIOS_UTIL_BACKENDS_H_ARGUMENTS
/* /////////////////////////////////////////////////////////////////////////
* Version information
*/
#ifndef PANTHEIOS_DOCUMENTATION_SKIP_SECTION
# define PANTHEIOS_VER_PANTHEIOS_UTIL_BACKENDS_H_ARGUMENTS_MAJOR 2
# define PANTHEIOS_VER_PANTHEIOS_UTIL_BACKENDS_H_ARGUMENTS_MINOR 1
# define PANTHEIOS_VER_PANTHEIOS_UTIL_BACKENDS_H_ARGUMENTS_REVISION 1
# define PANTHEIOS_VER_PANTHEIOS_UTIL_BACKENDS_H_ARGUMENTS_EDIT 22
#endif /* !PANTHEIOS_DOCUMENTATION_SKIP_SECTION */
/* /////////////////////////////////////////////////////////////////////////
* Includes
*/
#ifndef PANTHEIOS_INCL_PANTHEIOS_H_PANTHEIOS
# include <pantheios/pantheios.h>
#endif /* !PANTHEIOS_INCL_PANTHEIOS_H_PANTHEIOS */
/* /////////////////////////////////////////////////////////////////////////
* Parsing functions
*/
/** Parses a single boolean back-end argument
*
* \ingroup group__backend
*
* Searches the argument slices list for an argument of the given name. If
* it has one of the values ['yes', 'true', 'no', 'false'] the flags
* parameter is adjusted to either set or remove the flagValue value, as
* directed by the flagSuppressesAction parameter, and the argument is
* marked as having been processed by setting its length to 0.
*
* \param numArgs Number of elements in the argument array. May be 0
* \param args Pointer to the base of the argument array. May only be NULL
* if numArgs is 0
* \param argName The name of the value to look for. May not be NULL
* \param flagSuppressesAction Indicates whether the flagValue is a
* suppression flag, such as PANTHEIOS_BE_INIT_F_NO_SEVERITY, rather than
* an activation flag, such as PANTHEIOS_BE_INIT_F_USE_SYSTEM_TIME.
* \param flagValue A flag value, such as PANTHEIOS_BE_INIT_F_NO_SEVERITY
* \param flags A pointer to a flags variable whose value may be modified
* upon a successful match. May not be NULL.
*
* \return An indication of whether a valid argument was found
* \retval 0 No matching arguments were found, or the argument was found but
* did not have boolean values
* \retval 1 An argument with the given name, and with values interpretable as
* boolean, was found.
*
* \pre NULL != args || 0 == numArgs
* \pre NULL != argName
* \pre NULL != flags
*/
PANTHEIOS_CALL(int) pantheios_be_parseBooleanArg(size_t numArgs
#ifdef PANTHEIOS_NO_NAMESPACE
, pan_slice_t* const args
, pan_char_t const* argName
, int flagSuppressesAction
, pan_uint32_t flagValue
, pan_uint32_t* flags);
#else /* ? PANTHEIOS_NO_NAMESPACE */
, pantheios::pan_slice_t* const args
, pantheios::pan_char_t const* argName
, int flagSuppressesAction
, pantheios::pan_uint32_t flagValue
, pantheios::uint32_t* flags);
#endif /* PANTHEIOS_NO_NAMESPACE */
/** Parses a single string back-end argument
*
* \ingroup group__backend
*
* Searches the argument slices list for an argument of the given name. If
* found, it transfers the slice (i.e. copies the pointers) to the given
* argument value parameter.
*
* \param numArgs Number of elements in the argument array. May be 0
* \param args Pointer to the base of the argument array. May only be NULL
* if numArgs is 0
* \param argName The name of the value to look for. May not be NULL
* \param argValue A pointer to a slice that will receive the value part of
* an argument if successfully matched. May not be NULL.
*
* \pre NULL != args || 0 == numArgs
* \pre NULL != argName
* \pre NULL != argValue
*/
PANTHEIOS_CALL(int) pantheios_be_parseStringArg(size_t numArgs
#ifdef PANTHEIOS_NO_NAMESPACE
, pan_slice_t* const args
, pan_char_t const* argName
, pan_slice_t* argValue);
#else /* ? PANTHEIOS_NO_NAMESPACE */
, pantheios::pan_slice_t* const args
, pantheios::pan_char_t const* argName
, pantheios::pan_slice_t* argValue);
#endif /* PANTHEIOS_NO_NAMESPACE */
/** Parses the stock back-end arguments
*
* \ingroup group__backend
*
* Searches the argument slices list for the arguments associated with all
* stock \ref group__backend__init__flags. For each argument found (and
* having an appropriate value; see pantheios_be_parseBooleanArg()) its
* value is processed, the flags parameter's value is adjusted
* accordingly, and the argument slice's length is set to 0 to indicate
* that it has been successfully processed. Returns the number of arguments
* successfully matched.
*
* Recognises the following argument names:
* - "showProcessId" (Boolean)
* - "showTime" (Boolean)
* - "showSeverity" (Boolean)
* - "useSystemTime" (Boolean)
* - "showDetailsAtStart" (Boolean)
* - "useUnixFormat" (Boolean)
* - "showDate" (Boolean)
* - "showTime" (Boolean)
* - "highResolution" (Boolean)
* - "lowResolution" (Boolean)
*
* \param numArgs Number of elements in the argument array. May be 0
* \param args Pointer to the base of the argument array. May only be NULL
* if numArgs is 0
* \param flags A pointer to a flags variable whose value may be modified
* upon a successful matches. May not be NULL.
*
* \return The number of arguments successfully matched
*
* \pre NULL != args || 0 == numArgs
* \pre NULL != flags
*/
PANTHEIOS_CALL(int) pantheios_be_parseStockArgs(size_t numArgs
#ifdef PANTHEIOS_NO_NAMESPACE
, pan_slice_t* const args
, pan_uint32_t* flags);
#else /* ? PANTHEIOS_NO_NAMESPACE */
, pantheios::pan_slice_t* const args
, pantheios::uint32_t* flags);
#endif /* PANTHEIOS_NO_NAMESPACE */
/* ////////////////////////////////////////////////////////////////////// */
#endif /* !PANTHEIOS_INCL_PANTHEIOS_UTIL_BACKENDS_H_ARGUMENTS */
/* ///////////////////////////// end of file //////////////////////////// */