Blame winpr/include/winpr/cmdline.h

Packit Service fa4841
/**
Packit Service fa4841
 * WinPR: Windows Portable Runtime
Packit Service fa4841
 * Command-Line Utils
Packit Service fa4841
 *
Packit Service fa4841
 * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
Packit Service fa4841
 *
Packit Service fa4841
 * Licensed under the Apache License, Version 2.0 (the "License");
Packit Service fa4841
 * you may not use this file except in compliance with the License.
Packit Service fa4841
 * You may obtain a copy of the License at
Packit Service fa4841
 *
Packit Service fa4841
 *     http://www.apache.org/licenses/LICENSE-2.0
Packit Service fa4841
 *
Packit Service fa4841
 * Unless required by applicable law or agreed to in writing, software
Packit Service fa4841
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit Service fa4841
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit Service fa4841
 * See the License for the specific language governing permissions and
Packit Service fa4841
 * limitations under the License.
Packit Service fa4841
 */
Packit Service fa4841
Packit Service fa4841
#ifndef WINPR_CMDLINE_H
Packit Service fa4841
#define WINPR_CMDLINE_H
Packit Service fa4841
Packit Service fa4841
#include <winpr/winpr.h>
Packit Service fa4841
#include <winpr/wtypes.h>
Packit Service fa4841
Packit Service fa4841
/* Command-Line Argument Flags */
Packit Service fa4841
Packit Service fa4841
#define COMMAND_LINE_INPUT_FLAG_MASK 0x0000FFFF
Packit Service fa4841
#define COMMAND_LINE_OUTPUT_FLAG_MASK 0xFFFF0000
Packit Service fa4841
Packit Service fa4841
/* Command-Line Argument Input Flags */
Packit Service fa4841
Packit Service fa4841
#define COMMAND_LINE_VALUE_FLAG 0x00000001
Packit Service fa4841
#define COMMAND_LINE_VALUE_REQUIRED 0x00000002
Packit Service fa4841
#define COMMAND_LINE_VALUE_OPTIONAL 0x00000004
Packit Service fa4841
#define COMMAND_LINE_VALUE_BOOL 0x00000008
Packit Service fa4841
Packit Service fa4841
#define COMMAND_LINE_ADVANCED 0x00000100
Packit Service fa4841
#define COMMAND_LINE_PRINT 0x00000200
Packit Service fa4841
#define COMMAND_LINE_PRINT_HELP 0x00000400
Packit Service fa4841
#define COMMAND_LINE_PRINT_VERSION 0x00000800
Packit Service fa4841
#define COMMAND_LINE_PRINT_BUILDCONFIG 0x00001000
Packit Service fa4841
Packit Service fa4841
/* Command-Line Argument Output Flags */
Packit Service fa4841
Packit Service fa4841
#define COMMAND_LINE_ARGUMENT_PRESENT 0x80000000
Packit Service fa4841
#define COMMAND_LINE_VALUE_PRESENT 0x40000000
Packit Service fa4841
Packit Service fa4841
/* Command-Line Parsing Flags */
Packit Service fa4841
Packit Service fa4841
#define COMMAND_LINE_SIGIL_NONE 0x00000001
Packit Service fa4841
#define COMMAND_LINE_SIGIL_SLASH 0x00000002
Packit Service fa4841
#define COMMAND_LINE_SIGIL_DASH 0x00000004
Packit Service fa4841
#define COMMAND_LINE_SIGIL_DOUBLE_DASH 0x00000008
Packit Service fa4841
#define COMMAND_LINE_SIGIL_PLUS_MINUS 0x00000010
Packit Service fa4841
#define COMMAND_LINE_SIGIL_ENABLE_DISABLE 0x00000020
Packit Service fa4841
#define COMMAND_LINE_SIGIL_NOT_ESCAPED 0x00000040
Packit Service fa4841
Packit Service fa4841
#define COMMAND_LINE_SEPARATOR_COLON 0x00000100
Packit Service fa4841
#define COMMAND_LINE_SEPARATOR_EQUAL 0x00000200
Packit Service fa4841
#define COMMAND_LINE_SEPARATOR_SPACE 0x00000400
Packit Service fa4841
Packit Service fa4841
/* Supress COMMAND_LINE_ERROR_NO_KEYWORD return. */
Packit Service fa4841
#define COMMAND_LINE_IGN_UNKNOWN_KEYWORD 0x00001000
Packit Service fa4841
#define COMMAND_LINE_SILENCE_PARSER 0x00002000
Packit Service fa4841
Packit Service fa4841
/* Command-Line Parsing Error Codes */
Packit Service fa4841
Packit Service fa4841
#define COMMAND_LINE_ERROR -1000
Packit Service fa4841
#define COMMAND_LINE_ERROR_NO_KEYWORD -1001
Packit Service fa4841
#define COMMAND_LINE_ERROR_UNEXPECTED_VALUE -1002
Packit Service fa4841
#define COMMAND_LINE_ERROR_MISSING_VALUE -1003
Packit Service fa4841
#define COMMAND_LINE_ERROR_MISSING_ARGUMENT -1004
Packit Service fa4841
#define COMMAND_LINE_ERROR_UNEXPECTED_SIGIL -1005
Packit Service fa4841
#define COMMAND_LINE_ERROR_MEMORY -1006
Packit Service fa4841
#define COMMAND_LINE_ERROR_LAST -1999
Packit Service fa4841
Packit Service fa4841
/* Command-Line Parsing Status Codes */
Packit Service fa4841
Packit Service fa4841
#define COMMAND_LINE_STATUS_PRINT -2001
Packit Service fa4841
#define COMMAND_LINE_STATUS_PRINT_HELP -2002
Packit Service fa4841
#define COMMAND_LINE_STATUS_PRINT_VERSION -2003
Packit Service fa4841
#define COMMAND_LINE_STATUS_PRINT_BUILDCONFIG -2004
Packit Service fa4841
Packit Service fa4841
/* Command-Line Macros */
Packit Service fa4841
Packit Service fa4841
#define CommandLineSwitchStart(_arg) \
Packit Service fa4841
	if (0)                           \
Packit Service fa4841
	{                                \
Packit Service fa4841
	}
Packit Service fa4841
#define CommandLineSwitchCase(_arg, _name) else if (strcmp(_arg->Name, _name) == 0)
Packit Service fa4841
#define CommandLineSwitchDefault(_arg) else
Packit Service fa4841
#define CommandLineSwitchEnd(_arg)
Packit Service fa4841
Packit Service fa4841
#define BoolValueTrue ((LPSTR)1)
Packit Service fa4841
#define BoolValueFalse ((LPSTR)0)
Packit Service fa4841
Packit Service fa4841
typedef struct _COMMAND_LINE_ARGUMENT_A COMMAND_LINE_ARGUMENT_A;
Packit Service fa4841
typedef struct _COMMAND_LINE_ARGUMENT_W COMMAND_LINE_ARGUMENT_W;
Packit Service fa4841
Packit Service fa4841
struct _COMMAND_LINE_ARGUMENT_A
Packit Service fa4841
{
Packit Service fa4841
	LPCSTR Name;
Packit Service fa4841
	DWORD Flags;
Packit Service fa4841
	LPCSTR Format;
Packit Service fa4841
	LPCSTR Default;
Packit Service fa4841
	LPSTR Value;
Packit Service fa4841
	LONG Index;
Packit Service fa4841
	LPCSTR Alias;
Packit Service fa4841
	LPCSTR Text;
Packit Service fa4841
};
Packit Service fa4841
Packit Service fa4841
struct _COMMAND_LINE_ARGUMENT_W
Packit Service fa4841
{
Packit Service fa4841
	LPCWSTR Name;
Packit Service fa4841
	DWORD Flags;
Packit Service fa4841
	LPCSTR Format;
Packit Service fa4841
	LPWSTR Default;
Packit Service fa4841
	LPWSTR Value;
Packit Service fa4841
	LONG Index;
Packit Service fa4841
	LPCWSTR Alias;
Packit Service fa4841
	LPCWSTR Text;
Packit Service fa4841
};
Packit Service fa4841
Packit Service fa4841
#ifdef UNICODE
Packit Service fa4841
#define COMMAND_LINE_ARGUMENT COMMAND_LINE_ARGUMENT_W
Packit Service fa4841
#else
Packit Service fa4841
#define COMMAND_LINE_ARGUMENT COMMAND_LINE_ARGUMENT_A
Packit Service fa4841
#endif
Packit Service fa4841
Packit Service fa4841
typedef int (*COMMAND_LINE_PRE_FILTER_FN_A)(void* context, int index, int argc, LPSTR* argv);
Packit Service fa4841
typedef int (*COMMAND_LINE_PRE_FILTER_FN_W)(void* context, int index, int argc, LPWSTR* argv);
Packit Service fa4841
Packit Service fa4841
typedef int (*COMMAND_LINE_POST_FILTER_FN_A)(void* context, COMMAND_LINE_ARGUMENT_A* arg);
Packit Service fa4841
typedef int (*COMMAND_LINE_POST_FILTER_FN_W)(void* context, COMMAND_LINE_ARGUMENT_W* arg);
Packit Service fa4841
Packit Service fa4841
#ifdef __cplusplus
Packit Service fa4841
extern "C"
Packit Service fa4841
{
Packit Service fa4841
#endif
Packit Service fa4841
Packit Service fa4841
	WINPR_API int CommandLineClearArgumentsA(COMMAND_LINE_ARGUMENT_A* options);
Packit Service fa4841
	WINPR_API int CommandLineClearArgumentsW(COMMAND_LINE_ARGUMENT_W* options);
Packit Service fa4841
Packit Service fa4841
	WINPR_API int CommandLineParseArgumentsA(int argc, LPSTR* argv,
Packit Service fa4841
	                                         COMMAND_LINE_ARGUMENT_A* options, DWORD flags,
Packit Service fa4841
	                                         void* context, COMMAND_LINE_PRE_FILTER_FN_A preFilter,
Packit Service fa4841
	                                         COMMAND_LINE_POST_FILTER_FN_A postFilter);
Packit Service fa4841
	WINPR_API int CommandLineParseArgumentsW(int argc, LPWSTR* argv,
Packit Service fa4841
	                                         COMMAND_LINE_ARGUMENT_W* options, DWORD flags,
Packit Service fa4841
	                                         void* context, COMMAND_LINE_PRE_FILTER_FN_W preFilter,
Packit Service fa4841
	                                         COMMAND_LINE_POST_FILTER_FN_W postFilter);
Packit Service fa4841
Packit Service fa4841
	WINPR_API COMMAND_LINE_ARGUMENT_A* CommandLineFindArgumentA(COMMAND_LINE_ARGUMENT_A* options,
Packit Service fa4841
	                                                            LPCSTR Name);
Packit Service fa4841
	WINPR_API COMMAND_LINE_ARGUMENT_W* CommandLineFindArgumentW(COMMAND_LINE_ARGUMENT_W* options,
Packit Service fa4841
	                                                            LPCWSTR Name);
Packit Service fa4841
Packit Service fa4841
	WINPR_API COMMAND_LINE_ARGUMENT_A*
Packit Service fa4841
	CommandLineFindNextArgumentA(COMMAND_LINE_ARGUMENT_A* argument);
Packit Service fa4841
Packit Service fa4841
	WINPR_API char** CommandLineParseCommaSeparatedValues(const char* list, size_t* count);
Packit Service fa4841
Packit Service fa4841
	WINPR_API char** CommandLineParseCommaSeparatedValuesEx(const char* name, const char* list,
Packit Service fa4841
	                                                        size_t* count);
Packit Service fa4841
Packit Service fa4841
#ifdef __cplusplus
Packit Service fa4841
}
Packit Service fa4841
#endif
Packit Service fa4841
Packit Service fa4841
#ifdef UNICODE
Packit Service fa4841
#define CommandLineClearArguments CommandLineClearArgumentsW
Packit Service fa4841
#define CommandLineParseArguments CommandLineParseArgumentsW
Packit Service fa4841
#define CommandLineFindArgument CommandLineFindArgumentW
Packit Service fa4841
#else
Packit Service fa4841
#define CommandLineClearArguments CommandLineClearArgumentsA
Packit Service fa4841
#define CommandLineParseArguments CommandLineParseArgumentsA
Packit Service fa4841
#define CommandLineFindArgument CommandLineFindArgumentA
Packit Service fa4841
#endif
Packit Service fa4841
Packit Service fa4841
#endif /* WINPR_CMDLINE_H */