Source code of Windows XP (NT5)
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

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