2025-11-28 00:35:46 +09:00

339 lines
9.3 KiB
C++

#include "WSOleDB.h"
#include "cmdline.h"
using namespace std;
int CFlagParam::Init(int argc, WCHAR * argv[])
{
for (int i = 0; i < argc; i++)
{
if (('/' == argv[i][0] || '-' == argv[i][0]) && !_wcsicmp(argv[i] + 1, m_pszParamName))
{
m_fExists = TRUE;
break;
}
}
return ERROR_SUCCESS;
}
int CExclFlagParam::Init(int argc, WCHAR* argv[])
{
int iRes = ERROR_SUCCESS;
for (int i = 0; i < argc; i++)
{
if ('/' == argv[i][0] || '-' == argv[i][0])
{
if (!_wcsicmp(&(argv[i][1]), m_pszTrueParamName))
{
if (!m_fExists)
{
m_fExists = TRUE;
m_fFlag = TRUE;
}
else
{
iRes = ERROR_INVALID_PARAMETER;
}
}
else if (!_wcsicmp(&(argv[i][1]), m_pszFalseParamName))
{
if (!m_fExists)
{
m_fExists = TRUE;
m_fFlag = FALSE;
}
else
{
iRes = ERROR_INVALID_PARAMETER;
}
}
}
}
if (ERROR_INVALID_PARAMETER == iRes)
{
wcout << L"/" << m_pszTrueParamName << L" and /" <<
m_pszFalseParamName << L" parameters can't be used together!" << endl;
}
else if (!m_fExists)
{
iRes = ERROR_INVALID_PARAMETER;
}
return iRes;
}
int CSetWSTRValueParam::Init(int argc, WCHAR* argv[])
{
int iRes = ERROR_SUCCESS;
for (int i = 0; i < argc; i++)
{
if (('/' == argv[i][0] || '-' == argv[i][0]) && !_wcsicmp(argv[i] + 1, m_pszParamName))
{
m_fExists = TRUE;
if (i + 1 < argc && // if it's not last word in command line
'/' != argv[i+1][0] && // and not followed by other parameter
'-' != argv[i+1][0]) // Parameter values starting with '/' and '-' are not supported
{
m_pszValue = argv[i + 1];
}
break;
}
}
return iRes;
}
int CSetLCIDValueParam::Init(int argc, WCHAR* argv[])
{
int iRes = ERROR_SUCCESS;
for (int i = 0; i < argc; i++)
{
if (('/' == argv[i][0] || '-' == argv[i][0]) && !_wcsicmp(argv[i] + 1, m_pszParamName))
{
m_fExists = TRUE;
if (i + 1 < argc && // if it's not last word in command line
'/' != argv[i+1][0] && // and not followed by other parameter
'-' != argv[i+1][0]) // Parameter values starting with '/' and '-' are not supported
{
m_lcidValue = _wtoi(argv[i + 1]);
}
break;
}
}
return iRes;
}
int CSetIntValueParam::Init(int argc, WCHAR* argv[])
{
int iRes = ERROR_SUCCESS;
for (int i = 0; i < argc; i++)
{
if (('/' == argv[i][0] || '-' == argv[i][0]) && !_wcsicmp(argv[i] + 1, m_pszParamName))
{
m_fExists = TRUE;
if (i + 1 < argc && // if it's not last word in command line
'/' != argv[i+1][0]) // and not followed by other parameter
{
m_iValue = _wtoi(argv[i + 1]);
}
break;
}
}
return iRes;
}
int CSetSyntaxValueParam::Init(int argc, WCHAR* argv[])
{
int iRes = ERROR_SUCCESS;
for (int i = 0; i < argc; i++)
{
if (('/' == argv[i][0] || '-' == argv[i][0]) && !_wcsicmp(argv[i] + 1, m_pszParamName))
{
m_fExists = TRUE;
if (i + 1 < argc && // if it's not last word in command line
'/' != argv[i+1][0] && // and not followed by other parameter
'-' != argv[i+1][0]) // Parameter values starting with '/' and '-' are not supported
{
if (_wcsicmp(argv[i + 1], L"None") == 0)
{
m_syntaxValue = SEARCH_NO_QUERY_SYNTAX;
}
else if (_wcsicmp(argv[i + 1], L"AQS") == 0)
{
m_syntaxValue = SEARCH_ADVANCED_QUERY_SYNTAX;
}
else if (_wcsicmp(argv[i + 1], L"NQS") == 0)
{
m_syntaxValue = SEARCH_NATURAL_QUERY_SYNTAX;
}
else
{
iRes = ERROR_INVALID_PARAMETER;
wcout << argv[i + 1] << L" is not a valid query syntax!" << endl;
}
}
break;
}
}
return iRes;
}
int CSetExprValueParam::Init(int argc, WCHAR *argv[])
{
int iRes;
// This is just a param with no leading argument, and it must be the last word in the command line
m_fExists = (L'/' != argv[argc - 1][0] && L'-' != argv[argc - 1][0]);
if (m_fExists)
{
m_pszValue = argv[argc - 1];
iRes = ERROR_SUCCESS;
}
else
{
iRes = ERROR_INVALID_PARAMETER;
}
return iRes;
}
int CSetTermExpansionValueParam::Init(int argc, WCHAR* argv[])
{
int iRes = ERROR_SUCCESS;
for (int i = 0; i < argc; i++)
{
if (('/' == argv[i][0] || '-' == argv[i][0]) && !_wcsicmp(argv[i] + 1, m_pszParamName))
{
m_fExists = TRUE;
if (i + 1 < argc && // if it's not last word in command line
'/' != argv[i+1][0] && // and not followed by other parameter
'-' != argv[i+1][0]) // Parameter values starting with '/' and '-' are not supported
{
if (_wcsicmp(argv[i + 1], L"None") == 0)
{
m_expansionValue = SEARCH_TERM_NO_EXPANSION;
}
else if (_wcsicmp(argv[i + 1], L"PrefixAll") == 0)
{
m_expansionValue = SEARCH_TERM_PREFIX_ALL;
}
else if (_wcsicmp(argv[i + 1], L"StemAll") == 0)
{
m_expansionValue = SEARCH_TERM_STEM_ALL;
}
else
{
iRes = ERROR_INVALID_PARAMETER;
wcout << argv[i + 1] << L" is not a valid term expansion setting!" << endl;
}
}
break;
}
}
return iRes;
}
int CContentLocaleParam::Init(int argc, WCHAR *argv[])
{
int iRes = CSetLCIDValueParam::Init(argc, argv);
if (Empty())
{
wcout << L"/" << m_pszParamName << L" parameter must follow nonempty value!" << endl;
iRes = ERROR_INVALID_PARAMETER;
}
return iRes;
}
int CContentPropertiesParam::Init(int argc, WCHAR *argv[])
{
int iRes = CSetWSTRValueParam::Init(argc, argv);
if (Empty())
{
wcout << L"/" << m_pszParamName << L" parameter must follow nonempty value!" << endl;
iRes = ERROR_INVALID_PARAMETER;
}
return iRes;
}
int CKeywordLocaleParam::Init(int argc, WCHAR *argv[])
{
int iRes = CSetLCIDValueParam::Init(argc, argv);
if (Empty())
{
wcout << L"/" << m_pszParamName << L" parameter must follow nonempty value!" << endl;
iRes = ERROR_INVALID_PARAMETER;
}
return iRes;
}
int CMaxResultsParam::Init(int argc, WCHAR *argv[])
{
int iRes = CSetIntValueParam::Init(argc, argv);
if (Empty())
{
wcout << L"/" << m_pszParamName << L" parameter must follow nonempty value!" << endl;
iRes = ERROR_INVALID_PARAMETER;
}
return iRes;
}
int CSelectColumnsParam::Init(int argc, WCHAR *argv[])
{
int iRes = CSetWSTRValueParam::Init(argc, argv);
if (Empty())
{
wcout << L"/" << m_pszParamName << L" parameter must follow nonempty value!" << endl;
iRes = ERROR_INVALID_PARAMETER;
}
return iRes;
}
int CSortingParam::Init(int argc, WCHAR *argv[])
{
int iRes = CSetWSTRValueParam::Init(argc, argv);
if (Empty())
{
wcout << L"/" << m_pszParamName << L" parameter must follow nonempty value!" << endl;
iRes = ERROR_INVALID_PARAMETER;
}
return iRes;
}
int CSyntaxParam::Init(int argc, WCHAR *argv[])
{
int iRes = CSetSyntaxValueParam::Init(argc, argv);
if (Empty())
{
wcout << L"/" << m_pszParamName << L" parameter must follow nonempty value!" << endl;
iRes = ERROR_INVALID_PARAMETER;
}
return iRes;
}
int CTermExpansionParam::Init(int argc, WCHAR *argv[])
{
int iRes = CSetTermExpansionValueParam::Init(argc, argv);
if (Empty())
{
wcout << L"/" << m_pszParamName << L" parameter must follow nonempty value!" << endl;
iRes = ERROR_INVALID_PARAMETER;
}
return iRes;
}
int CWhereRestrictionsParam::Init(int argc, WCHAR *argv[])
{
int iRes = CSetWSTRValueParam::Init(argc, argv);
if (Empty())
{
wcout << L"/" << m_pszParamName << L" parameter must follow nonempty value!" << endl;
iRes = ERROR_INVALID_PARAMETER;
}
return iRes;
}
int CExprParam::Init(int argc, WCHAR *argv[])
{
return CSetExprValueParam::Init(argc, argv);
}
HRESULT ParseParams(CParamBase** pParams, const DWORD dwParamCnt, int argc, WCHAR * argv[])
{
int iRes = ERROR_SUCCESS;
for (DWORD i = 0; ERROR_SUCCESS == iRes && i < dwParamCnt; i++)
{
iRes = pParams[i]->Init(argc, argv);
}
return HRESULT_FROM_WIN32(iRes);
}