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
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							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 //////////////////////////// */
							 |