mirror of https://github.com/tongzx/nt5src
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.
259 lines
9.1 KiB
259 lines
9.1 KiB
/*****************************************************************************\
|
|
|
|
Author: Corey Morgan (coreym)
|
|
|
|
Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
\*****************************************************************************/
|
|
|
|
#ifndef _VARG_H_012599_
|
|
#define _VARG_H_012599_
|
|
|
|
#define MAXSTR 1024
|
|
|
|
#define VARG_HELP_ALL (-1)
|
|
|
|
#define VARG_TYPE_INT 0
|
|
#define VARG_TYPE_BOOL 1
|
|
#define VARG_TYPE_STR 2
|
|
#define VARG_TYPE_HELP 3
|
|
#define VARG_TYPE_DEBUG 4
|
|
#define VARG_TYPE_MSZ 5
|
|
#define VARG_TYPE_LAST 6
|
|
#define VARG_TYPE_INI 7
|
|
#define VARG_TYPE_TIME 8
|
|
#define VARG_TYPE_DATE 9
|
|
|
|
#define VARG_FLAG_OPTIONAL 0x00000001
|
|
#define VARG_FLAG_REQUIRED 0x00000002
|
|
#define VARG_FLAG_DEFAULTABLE 0x00000004
|
|
#define VARG_FLAG_NOFLAG 0x00000008
|
|
#define VARG_FLAG_HIDDEN 0x00000010
|
|
#define VARG_FLAG_VERB 0x00000020
|
|
#define VARG_FLAG_EXPANDFILES 0x00000040
|
|
#define VARG_FLAG_EXHELP 0x00000080
|
|
#define VARG_FLAG_DARKEN 0x00000100
|
|
#define VARG_FLAG_FLATHELP 0x00000200
|
|
#define VARG_FLAG_CHOMP 0x00000400
|
|
#define VARG_FLAG_LITERAL 0x00000800
|
|
#define VARG_FLAG_ARG_DEFAULT 0x00001000
|
|
#define VARG_FLAG_ARG_FILENAME 0x00002000
|
|
#define VARG_FLAG_ARG_DATE 0x00004000
|
|
#define VARG_FLAG_ARG_TIME 0x00008000
|
|
#define VARG_FLAG_NEGATE 0x00010000
|
|
#define VARG_FLAG_RCDEFAULT 0x00020000
|
|
#define VARG_FLAG_ADVERB 0x00100000
|
|
#define VARG_FLAG_OPT_ADV 0x00200000
|
|
#define VARG_FLAG_REQ_ADV 0x00400000
|
|
|
|
#define VARG_FLAG_DODEFAULT 0x01000000
|
|
#define VARG_FLAG_BADSYNTAX 0x02000000
|
|
|
|
#define VARG_CF_OVERWRITE 0x00000001
|
|
#define VARG_CF_EXISTS 0x00000002
|
|
#define VARG_CF_PROMPT 0x00000004
|
|
|
|
#define IDS_PROGRAM_DESCRIPTION 500
|
|
|
|
#define IDS_PARAM_DEBUG 501
|
|
#define IDS_PARAM_HELP 502
|
|
#define IDS_PARAM_SETTINGS 511
|
|
|
|
#define IDS_ARG_DEFAULT 503
|
|
#define IDS_ARG_FILENAME 504
|
|
#define IDS_ARG_TIME 505
|
|
#define IDS_ARG_DATE 506
|
|
#define IDS_ARG_TOKEN 507
|
|
#define IDS_ARG_PREFIX 508
|
|
#define IDS_ARG_YES 512
|
|
#define IDS_VERB_PREFIX 509
|
|
|
|
#define IDS_MESSAGE_ARG_DUP 550
|
|
#define IDS_MESSAGE_BADSYNTAX 551
|
|
#define IDS_MESSAGE_UNKNOWNPARAM 552
|
|
#define IDS_MESSAGE_AND 553
|
|
#define IDS_MESSAGE_REQUIRES 554
|
|
#define IDS_MESSAGE_MISSING 555
|
|
#define IDS_MESSAGE_NOVERB 556
|
|
#define IDS_MESSAGE_UNKNOWN 557
|
|
#define IDS_MESSAGE_ERROR 558
|
|
#define IDS_MESSAGE_EXCLUSIVE 559
|
|
#define IDS_MESSAGE_VERB 560
|
|
#define IDS_MESSAGE_VERBS 561
|
|
#define IDS_MESSAGE_LINEOPT 562
|
|
#define IDS_MESSAGE_PARAMETERS 563
|
|
#define IDS_MESSAGE_OPTIONS 564
|
|
#define IDS_MESSAGE_INISYNT 565
|
|
#define IDS_MESSAGE_USAGE 566
|
|
#define IDS_MESSAGE_BADTIME 567
|
|
#define IDS_MESSAGE_INCORRECT 568
|
|
#define IDS_CF_OVERWRITE 569
|
|
#define IDS_MESSAGE_MSR 570
|
|
#define IDS_MESSAGE_SUCCESS 571
|
|
#define IDS_MESSAGE_DEFAULT 572
|
|
#define IDS_MESSAGE_NEGATE 573
|
|
#define IDS_MESSAGE_HELPTEXT 574
|
|
#define IDS_MESSAGE_ERROR_DBG 575
|
|
#define IDS_MESSAGE_WARNING_DBG 576
|
|
#define IDS_MESSAGE_WARNING 577
|
|
#define IDS_MESSAGE_EXAMPLES 578
|
|
|
|
#define VARG_BOOL( id, flags, value ) id,0,0, NULL,NULL,NULL, VARG_TYPE_BOOL, flags, (CMD_TYPE)value, 0,0,0,NULL,
|
|
#define VARG_STR( id, flags, value ) id,0,0, NULL,NULL,NULL, VARG_TYPE_STR, flags, (CMD_TYPE)value, 0,0,0,NULL,
|
|
#define VARG_MSZ( id, flags, value ) id,0,0, NULL,NULL,NULL, VARG_TYPE_MSZ, flags, (CMD_TYPE)value, 0,0,0,NULL,
|
|
#define VARG_TIME( id, flags ) id,0,0, NULL,NULL,NULL, VARG_TYPE_TIME, flags, (CMD_TYPE)0, 0,0,0,NULL,
|
|
#define VARG_DATE( id, flags ) id,0,0, NULL,NULL,NULL, VARG_TYPE_DATE, flags, (CMD_TYPE)0, 0,0,0,NULL,
|
|
#define VARG_INT( id, flags, value ) id,0,0, NULL,NULL,NULL, VARG_TYPE_INT, flags, (CMD_TYPE)value, 0,0,0,NULL,
|
|
#define VARG_INI( id, flags, value ) id,0,0, NULL,NULL,NULL, VARG_TYPE_INI, flags|VARG_FLAG_ARG_FILENAME|VARG_FLAG_CHOMP, (CMD_TYPE)value, 0,0,0,NULL,
|
|
#define VARG_DEBUG( flags ) IDS_PARAM_DEBUG,0,0, NULL,NULL,NULL, VARG_TYPE_DEBUG, flags, (CMD_TYPE)0, 0,0,0,NULL,
|
|
#define VARG_HELP( flags ) IDS_PARAM_HELP,0,0, NULL,NULL,NULL, VARG_TYPE_HELP, flags, (CMD_TYPE)FALSE, 0,0,0,NULL,
|
|
#define VARG_TERMINATOR 0,0,0, NULL,NULL,NULL, VARG_TYPE_LAST, 0, (CMD_TYPE)0, 0,0,0,NULL
|
|
|
|
#define VARG_ADJECTIVE 0xFFFF0000
|
|
#define VARG_EXCLUSIVE 0x000000FF
|
|
#define VARG_INCLUSIVE 0x0000FF00
|
|
#define VARG_CONDITION 0x00FF0000
|
|
#define VARG_GROUPEXCL 0xFF000000
|
|
|
|
#define VARG_EXCL( x ) ((DWORD)(x))
|
|
#define VARG_INCL( x ) ((DWORD)((x) << 8 ))
|
|
#define VARG_COND( x ) ((DWORD)((x) << 16))
|
|
#define VARG_GRPX( i, x ) ((DWORD)(((i<<4)|x) << 24))
|
|
|
|
#define VARG_DECLARE_COMMANDS VARG_RECORD Commands[] = {
|
|
#define VARG_DECLARE_NAMES VARG_TERMINATOR }; typedef enum _Commands {
|
|
#define VARG_DECLARE_FORMAT };void VArgDeclareFormat() {
|
|
#define VARG_DECLARE_END }
|
|
#define VARG_VERB( e, v ) Commands[e].dwVerb = (v & 0x0000FFFF);
|
|
#define VARG_GROUP( e, g ) Commands[e].dwSet |= g;
|
|
#define VARG_ADVERB( e, v, a ) Commands[e].dwVerb = ( v & 0x0000FFFF) | (a<<16);
|
|
#define VARG_EXHELP( e, rc ) Commands[e].fFlag |= VARG_FLAG_EXHELP; Commands[e].idExHelp = rc;
|
|
|
|
#define ASSIGN_STRING_RC( dest, src, c ) \
|
|
if( IsEmpty( src ) || _tcscmp( src, c )==0 ){ \
|
|
ASSIGN_STRING( dest, NULL ); \
|
|
}else{ \
|
|
ASSIGN_STRING( dest, src ); \
|
|
} \
|
|
|
|
#define ASSIGN_STRING( dest, src ) \
|
|
if( !IsEmpty(src) ){ \
|
|
LPTSTR s = src; /*in case dest==src*/ \
|
|
DWORD dwSize = (_tcslen(src)+2)*sizeof(TCHAR); \
|
|
dest = (LPTSTR)VARG_ALLOC( dwSize ); \
|
|
if( NULL != dest ){ \
|
|
ZeroMemory( dest, dwSize ); \
|
|
_tcscpy( dest, s ); \
|
|
} \
|
|
}else{ \
|
|
dest = (LPTSTR)VARG_ALLOC( 2*sizeof(TCHAR) ); \
|
|
if( NULL != dest ){ \
|
|
_tcscpy(dest, _T("") ); \
|
|
} \
|
|
} \
|
|
|
|
#ifdef UNICODE
|
|
#define MultiByteToChar( a, c ) MultiByteToWideChar( _getmbcp(), 0, (LPCSTR)&a, 1, &c, 1 )
|
|
#else
|
|
#define MultiByteToChar( a, c ) a = c
|
|
#endif
|
|
|
|
#define VARG_ALLOC( s ) HeapAlloc( GetProcessHeap(), 0, s )
|
|
#define VARG_FREE( s ) if( s != NULL ) { HeapFree( GetProcessHeap(), 0, s ); }
|
|
#define VARG_REALLOC( p, s ) HeapReAlloc( GetProcessHeap(), 0, p, s )
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
#define CMD_TYPE void*
|
|
|
|
#pragma warning ( disable : 4201 )
|
|
|
|
typedef struct _VARG_RECORD
|
|
{
|
|
LONG idParam;
|
|
LONG idExHelp;
|
|
DWORD dwSet;
|
|
LPTSTR strArg1;
|
|
LPTSTR strArg2;
|
|
LPTSTR strParam;
|
|
int fType;
|
|
DWORD fFlag;
|
|
union{
|
|
void* vValue;
|
|
LPTSTR strValue;
|
|
ULONG nValue;
|
|
BOOL bValue;
|
|
SYSTEMTIME stValue;
|
|
};
|
|
BOOL bDefined;
|
|
BOOL bNegated;
|
|
DWORD dwVerb;
|
|
void (*fntValidation)(int);
|
|
} VARG_RECORD, *PVARG_RECORD;
|
|
|
|
#pragma warning ( default : 4201 )
|
|
|
|
void ParseCmd(int argc, LPTSTR argv[] );
|
|
void VArgDeclareFormat();
|
|
void DisplayCommandLineHelp();
|
|
void DisplayDebugInfo();
|
|
|
|
ULONG MszStrLen( LPTSTR mszBuffer );
|
|
HRESULT AddStringToMsz( LPTSTR* mszBuffer, LPTSTR strValue );
|
|
HRESULT ValidateCommands();
|
|
|
|
void PrintError( HRESULT hr );
|
|
void PrintErrorEx( HRESULT hr, LPTSTR strModule, ... );
|
|
void PrintDate( SYSTEMTIME* st );
|
|
int PrintDateEx( SHORT color, SYSTEMTIME* st );
|
|
|
|
LANGID WINAPI
|
|
VSetThreadUILanguage(
|
|
WORD wReserved
|
|
);
|
|
|
|
int PrintMessage( WORD color, LONG id, ... );
|
|
void Chomp(LPTSTR pszLine);
|
|
|
|
HRESULT GetUserInput(
|
|
LPTSTR strBuffer,
|
|
ULONG lSize,
|
|
BOOL bEcho
|
|
);
|
|
|
|
HRESULT
|
|
ParseTime(
|
|
LPTSTR strTime,
|
|
SYSTEMTIME* pstTime,
|
|
BOOL bDate
|
|
);
|
|
|
|
HRESULT
|
|
ExpandFiles(
|
|
LPTSTR* mszFiles,
|
|
BOOL bMultiple
|
|
);
|
|
|
|
HRESULT
|
|
CheckFile(
|
|
LPTSTR strFile,
|
|
DWORD dwFlags
|
|
);
|
|
|
|
void FreeCmd();
|
|
|
|
extern VARG_RECORD Commands[];
|
|
|
|
extern WORD g_debug;
|
|
extern WORD g_light;
|
|
extern WORD g_dark;
|
|
extern WORD g_normal;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif //_VARG_H_012599_
|