⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clp.h

📁 Click is a modular router toolkit. To use it you ll need to know how to compile and install the sof
💻 H
字号:
/* -*- related-file-name: "../../lib/clp.c" -*- */#ifndef LCDF_CLP_H#define LCDF_CLP_H#ifdef __cplusplusextern "C" {#endif/* clp.h - Public interface to CLP. * This file is part of CLP, the command line parser package. * * Copyright (c) 1997-2008 Eddie Kohler, ekohler@gmail.com * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, subject to the conditions * listed in the Click LICENSE file, which is available in full at * http://www.pdos.lcs.mit.edu/click/license.html. The conditions include: you * must preserve this copyright notice, and you cannot mention the copyright * holders in advertising related to the Software without their permission. * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This * notice is a summary of the Click LICENSE file; the license in that file is * legally binding. */typedef struct Clp_Option Clp_Option;typedef struct Clp_Parser Clp_Parser;typedef struct Clp_ParserState Clp_ParserState;/** @brief Option description. * * CLP users declare arrays of Clp_Option structures to specify what options * should be parsed. * @sa Clp_NewParser, Clp_SetOptions */struct Clp_Option {    const char *long_name;	/**< Name of long option, or NULL if the option				     has no long name. */    int short_name;		/**< Character defining short option, or 0 if				     the option has no short name. */    int option_id;		/**< User-specified ID defining option,				     returned by Clp_Next. */    int val_type;		/**< ID of option's value type, or 0 if option				     takes no value. */    int flags;			/**< Option parsing flags. */};/** @name Value types * These values describe the type of an option's argument and are used in * the Clp_Option val_type field.  For example, if an option took integers, its * Clp_Option structure would have val_type set to Clp_ValInt. *//**@{*/#define Clp_NoVal		0	/**< @brief Option takes no value. */#define Clp_ValString		1	/**< @brief Option value is an					     arbitrary string. */#define Clp_ValStringNotOption	2	/**< @brief Option value is a					     non-option string.		See Clp_DisallowOptions. */#define Clp_ValBool		3	/**< @brief Option value is a					     boolean.		Accepts "true", "false", "yes", "no", "1", and "0", or any		prefixes thereof.  The match is case-insensitive. */#define Clp_ValInt		4	/**< @brief Option value is a					     signed int.		Accepts an optional "+" or "-" sign, followed by one or more		digits.  The digits may be include a "0x" or "0X" prefix, for		a hexidecimal number, or a "0" prefix, for an octal number;		otherwise it is decimal. */#define Clp_ValUnsigned		5	/**< @brief Option value is an					     unsigned int.		Accepts an optional "+" sign, followed by one or more		digits.  The digits may be include a "0x" or "0X" prefix, for		a hexidecimal number, or a "0" prefix, for an octal number;		otherwise it is decimal. */#define Clp_ValDouble		6	/**< @brief Option value is a					     double.		Accepts a real number as defined by strtod(). */#define Clp_ValFirstUser	10	/**< @brief Value types >=					     Clp_ValFirstUser are available					     for user types. *//**@}*//** @name Option flags * These flags are used in the Clp_Option flags field. *//**@{*/#define Clp_Mandatory		(1<<0)	/**< @brief Option flag: value					     is mandatory.		It is an error if the option has no value.  This is the		default if an option has arg_type != 0 and the Clp_Optional		flag is not provided. */#define Clp_Optional		(1<<1)	/**< @brief Option flag: value					     is optional. */#define Clp_Negate		(1<<2)	/**< @brief Option flag: option					     may be negated.		--no-[long_name] will be accepted in argument lists. */#define Clp_OnlyNegated		(1<<3)	/**< @brief Option flag: option					     <em>must</em> be negated.		--no-[long_name] will be accepted in argument lists, but		--[long_name] will not.  This is the default if long_name		begins with "no-". */#define Clp_PreferredMatch	(1<<4)	/**< @brief Option flag: prefer this					     option when matching.		Prefixes of --[long_name] should map to this option, even if		other options begin with --[long_name]. *//**@}*//** @name Option character types * These flags are used in to define character types in Clp_SetOptionChar(). *//**@{*//*	Clp_NotOption		0 */#define Clp_Short		(1<<0)	/**< @brief Option character begins					     a set of short options. */#define Clp_Long		(1<<1)	/**< @brief Option character begins					     a long option. */#define Clp_ShortNegated	(1<<2)	/**< @brief Option character begins					     a set of negated short options. */#define Clp_LongNegated		(1<<3)	/**< @brief Option character begins					     a negated long option. */#define Clp_LongImplicit	(1<<4)	/**< @brief Option character can begin					     a long option, and is part of that					     long option. *//**@}*/#define Clp_NotOption		0	/**< @brief Clp_Next value: argument					     was not an option. */#define Clp_Done		-1	/**< @brief Clp_Next value: there are					     no more arguments. */#define Clp_BadOption		-2	/**< @brief Clp_Next value: argument					     was an erroneous option. */#define Clp_Error		-3	/**< @brief Clp_Next value: internal					     CLP error. */#define Clp_ValSize		40	/**< @brief Minimum size of the					     Clp_Parser val.cs field. */#define Clp_ValIntSize		10	/**< @brief Minimum size of the					     Clp_Parser val.is field. *//** @brief A value parsing function. * @param clp the parser * @param vstr the value to be parsed * @param complain if nonzero, report error messages via Clp_OptionError * @param user_data user data passed to Clp_AddType() * @return 1 if parsing succeeded, 0 otherwise */typedef int (*Clp_ValParseFunc)(Clp_Parser *clp, const char *vstr,				int complain, void *user_data);/** @brief A function for reporting option errors. * @param clp the parser * @param message error message */typedef void (*Clp_ErrorHandler)(Clp_Parser *clp, const char *message);/** @brief Command line parser. * * A Clp_Parser object defines an instance of CLP, including allowed options, * value types, and current arguments. * @sa Clp_NewParser, Clp_SetOptions, Clp_SetArguments */struct Clp_Parser {    int negated;		/**< Whether the last option was negated. */    int have_val;		/**< Whether the last option had a value. */    const char *vstr;		/**< The string value provided with the last				     option. */    union {	int i;	unsigned u;	double d;	const char *s;	void *pv;#ifdef HAVE_INT64_TYPES	int64_t i64;	uint64_t u64;#endif	char cs[Clp_ValSize];	unsigned char ucs[Clp_ValSize];	int is[Clp_ValIntSize];	unsigned us[Clp_ValIntSize];    } val;			/**< The parsed value provided with the last				     option. */    void *user_data;		/**< Uninterpreted by CLP; users can set				     arbitrarily. */    struct Clp_Internal *internal;};/** @brief Create a new Clp_Parser. */Clp_Parser *Clp_NewParser(int argc, const char * const *argv,			  int nopt, const Clp_Option *opt);/** @brief Destroy a Clp_Parser object. */void Clp_DeleteParser(Clp_Parser *clp);/** @brief Return @a clp's program name. */const char *Clp_ProgramName(Clp_Parser *clp);/** @brief Set @a clp's program name. */const char *Clp_SetProgramName(Clp_Parser *clp, const char *name);/** @brief Set @a clp's error handler function. */Clp_ErrorHandler Clp_SetErrorHandler(Clp_Parser *clp, Clp_ErrorHandler errh);/** @brief Set @a clp's UTF-8 mode. */int Clp_SetUTF8(Clp_Parser *clp, int utf8);/** @brief Set @a clp's treatment of character @a c. */int Clp_SetOptionChar(Clp_Parser *clp, int c, int type);/** @brief Set @a clp's option definitions. */int Clp_SetOptions(Clp_Parser *clp, int nopt, const Clp_Option *opt);/** @brief Set @a clp's arguments. */void Clp_SetArguments(Clp_Parser *clp, int argc, const char * const *argv);/** @brief Set whether @a clp is searching for options. */int Clp_SetOptionProcessing(Clp_Parser *clp, int on);#define Clp_DisallowOptions	(1<<0)	/**< @brief Value type flag: value					     can't be an option string.		See Clp_AddType(). *//** @brief Define a new value type for @a clp. */int Clp_AddType(Clp_Parser *clp, int val_type, int flags,		Clp_ValParseFunc parser, void *user_data);#define Clp_AllowNumbers	(1<<0)	/**< @brief String list flag: allow					   explicit numbers.		See Clp_AddStringListType() and Clp_AddStringListTypeVec(). *//** @brief Define a new string list value type for @a clp. */int Clp_AddStringListTypeVec(Clp_Parser *clp, int val_type, int flags,			     int nstrs, const char * const *strs,			     const int *vals);/** @brief Define a new string list value type for @a clp. */int Clp_AddStringListType(Clp_Parser *clp, int val_type, int flags, ...);/** @brief Parse and return the next argument from @a clp. */int Clp_Next(Clp_Parser *clp);/** @brief Return the next argument from @a clp without option parsing. */const char *Clp_Shift(Clp_Parser *clp, int allow_options);/** @brief Create a new Clp_ParserState. */Clp_ParserState *Clp_NewParserState(void);/** @brief Destroy a Clp_ParserState object. */void Clp_DeleteParserState(Clp_ParserState *state);/** @brief Save @a clp's current state in @a state. */void Clp_SaveParser(const Clp_Parser *clp, Clp_ParserState *state);/** @brief Restore parser state from @a state into @a clp. */void Clp_RestoreParser(Clp_Parser *clp, const Clp_ParserState *state);/** @brief Report a parser error. */int Clp_OptionError(Clp_Parser *clp, const char *format, ...);/** @brief Extract the current option as a string. */int Clp_CurOptionNameBuf(Clp_Parser *clp, char *buf, int len);/** @brief Extract the current option as a string. */const char *Clp_CurOptionName(Clp_Parser *clp);#ifdef __cplusplus}#endif#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -