116 lines
3.1 KiB
C++
116 lines
3.1 KiB
C++
#include "csmcmd.h"
|
|
|
|
int CFlagParam::Init(int argc, wchar_t *argv[], int& rParamsProcessed)
|
|
{
|
|
rParamsProcessed = 0;
|
|
if (argc && ('/' == argv[0][0] || '-' == argv[0][0]) && !_wcsicmp(argv[0] + 1, m_szParamName))
|
|
{
|
|
m_fExists = TRUE;
|
|
rParamsProcessed = 1;
|
|
}
|
|
|
|
return ERROR_SUCCESS;
|
|
}
|
|
|
|
int CExclFlagParam::Init(int argc, wchar_t *argv[], int& rParamsProcessed)
|
|
{
|
|
int iRes = ERROR_SUCCESS;
|
|
rParamsProcessed = 0;
|
|
if (argc &&('/' == argv[0][0] || '-' == argv[0][0]))
|
|
{
|
|
if (!_wcsicmp(&(argv[0][1]), m_szTrueParamName))
|
|
{
|
|
if (!m_fExists)
|
|
{
|
|
m_fExists = TRUE;
|
|
m_fFlag = TRUE;
|
|
rParamsProcessed = 1;
|
|
}
|
|
else
|
|
{
|
|
iRes = ERROR_INVALID_PARAMETER;
|
|
}
|
|
}
|
|
else if (!_wcsicmp(&(argv[0][1]), m_szFalseParamName))
|
|
{
|
|
if (!m_fExists)
|
|
{
|
|
m_fExists = TRUE;
|
|
m_fFlag = FALSE;
|
|
rParamsProcessed = 1;
|
|
}
|
|
else
|
|
{
|
|
iRes = ERROR_INVALID_PARAMETER;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (ERROR_INVALID_PARAMETER == iRes)
|
|
{
|
|
wcout << L"/" << m_szTrueParamName << L" and /" <<
|
|
m_szFalseParamName << L" parameters can't be used together!" << endl;
|
|
}
|
|
|
|
return iRes;
|
|
}
|
|
|
|
int CSetValueParam::Init(int argc, wchar_t *argv[], int& rParamsProcessed)
|
|
{
|
|
int iRes = ERROR_SUCCESS;
|
|
rParamsProcessed = 0;
|
|
if (('/' == argv[0][0] || '-' == argv[0][0]) && !_wcsicmp(argv[0] + 1, m_szParamName))
|
|
{
|
|
if (!m_fExists)
|
|
{
|
|
m_fExists = TRUE;
|
|
if (1 < argc && // if it's not last word in command line
|
|
'/' != argv[1][0] && // and not followed by other parameter
|
|
'-' != argv[1][0]) // Parameter values starting with '/' and '-' are not supported
|
|
{
|
|
m_szValue = argv[1];
|
|
rParamsProcessed = 2;
|
|
}
|
|
else
|
|
{
|
|
iRes = ERROR_INVALID_PARAMETER;
|
|
wcout << L"No valid value following parameter /" << m_szParamName << L"!" << endl;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
iRes = ERROR_INVALID_PARAMETER;
|
|
wcout << L"More than one instane of /" << m_szParamName << L" were found in command line!" << endl;
|
|
}
|
|
}
|
|
|
|
return iRes;
|
|
}
|
|
|
|
int ParseParams(CParamBase** pParams, const DWORD dwParamCnt, int argc, WCHAR * argv[])
|
|
{
|
|
int iRes = ERROR_SUCCESS;
|
|
int i = 0;
|
|
while (ERROR_SUCCESS == iRes && argc > i)
|
|
{
|
|
int iIncrement = 0;
|
|
for (DWORD j = 0; ERROR_SUCCESS == iRes && j < dwParamCnt; j++)
|
|
{
|
|
iRes = pParams[j]->Init(argc - i, argv + i, iIncrement);
|
|
if (ERROR_SUCCESS == iRes && 0 != iIncrement)
|
|
{
|
|
i += iIncrement;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (ERROR_SUCCESS == iRes && 0 == iIncrement)
|
|
{
|
|
iRes = ERROR_INVALID_PARAMETER;
|
|
wcout << L"Unknown parameter: " << argv[i] << endl;
|
|
}
|
|
}
|
|
|
|
return iRes;
|
|
}
|