windows-nt/Source/XPSP1/NT/com/ole32/stg/props/nffdrt/args.cxx
2020-09-26 16:20:57 +08:00

177 lines
4.5 KiB
C++

#include "pch.hxx"
#include "tbtest.hxx"
DWORD g_NoOpenStg = FALSE;
DWORD g_CreateStg = FALSE;
DWORD g_AnyStorage = FALSE;
DWORD g_ReleaseStg = FALSE;
DWORD g_AddRefStg = FALSE;
DWORD g_NoOpenStm = FALSE;
DWORD g_CreateStm = FALSE;
DWORD g_ReadStm = FALSE;
DWORD g_WriteStm = FALSE;
DWORD g_AddRefStm = FALSE;
DWORD g_SetClass = FALSE;
DWORD g_Stat = FALSE;
DWORD g_OplockFile = FALSE;
DWORD g_UseUpdater = FALSE;
DWORD g_Pause = FALSE;
DWORD g_SuppressTime = FALSE;
DWORD g_CheckTime = FALSE;
DWORD g_CheckIsStg = FALSE;
WCHAR g_tszFileName[ MAX_PATH ] = { L"001.bmp" };
void
StrLower( char *sz)
{
while('\0' != *sz)
{
if(*sz >= 'A' && *sz <= 'Z')
*sz += ('a' - 'A');
sz++;
}
}
void
Usage(WCHAR *wszApp)
{
wprintf(L"%s options:\n", wszApp);
printf(" -noopenstg\tDon't Open the file with IStorage.\n");
printf("\t\tpstg->operations are not allowed.\n");
printf(" -createstg\tOpen IStorage file for CreateStg(CREATE).\n");
printf("\t\t\tOtherwise open with OpenStg()\n");
printf(" -any\t\tOpen with STGFMT_ANY. Otherwise use STGFMT_FILE\n");
printf(" -releasestg\t\tRelease Storage before stream R/W\n");
printf(" -addrefstg\t\tExtra Addref and release after creation\n");
printf("\n");
printf(" -noopenstm\tDon't open a stream.");
printf(" pstm->operations not allowed\n");
printf(" -createstm\tOpen w/ CreateStm(CREATE). (otherwise OpenStm())\n");
printf(" -readstm\tRead from the stream. Mode is R/W\n");
printf(" -writestm\tWrite to the stream. Mode is R/W\n");
printf(" -addrefstm\t\tExtra Addref and release after creation\n");
printf("\n");
printf(" -setclass\tCall pstg->SetClass()\n");
printf(" -stat\t\tCall pstg->Stat()\n");
printf("\n");
printf(" -oplock\tOpen IStorage for Oplocking\n");
printf(" -useupdater\tStart Updater and call IFilterStatus::PreFilter()\n");
printf(" -pause\tPause before IO operations\n");
printf(" -suppresstime\tCall ITimeAndNotifyControl->SuppressChanges\n");
printf(" -checktime\tGet and print the FileTime before and after test\n");
printf(" -checkisstg\tCall StgIsStorageFile before tring to Open Storage\n");
}
void
ParseArgs(
int cArgs,
WCHAR **pwszArgs)
{
WCHAR *wszApp = *pwszArgs;
++pwszArgs;
while( (--cArgs > 0) && ( ('-' == **pwszArgs) || ('/' == **pwszArgs) ) )
{
WCHAR *wszArg = *pwszArgs;
++wszArg; // Advance over the '-'
_wcslwr(wszArg);
if(0 == wcscmp(L"noopenstg", wszArg))
g_NoOpenStg = TRUE;
else if(0 == wcscmp(L"createstg", wszArg))
g_CreateStg = TRUE;
else if(0 == wcscmp(L"any", wszArg))
g_AnyStorage = TRUE;
else if(0 == wcscmp(L"releasestg", wszArg))
g_ReleaseStg = TRUE;
else if(0 == wcscmp(L"addrefstg", wszArg))
g_AddRefStg = TRUE;
else if(0 == wcscmp(L"noopenstream", wszArg))
g_NoOpenStm = TRUE;
else if(0 == wcscmp(L"createstm", wszArg))
g_CreateStm = TRUE;
else if(0 == wcscmp(L"readstm", wszArg))
g_ReadStm = TRUE;
else if(0 == wcscmp(L"writestm", wszArg))
g_WriteStm = TRUE;
else if(0 == wcscmp(L"addrefstm", wszArg))
g_AddRefStm = TRUE;
else if(0 == wcscmp(L"setclass", wszArg))
g_SetClass = TRUE;
else if(0 == wcscmp(L"stat", wszArg))
g_Stat = TRUE;
else if(0 == wcscmp(L"oplock", wszArg))
g_OplockFile = TRUE;
else if(0 == wcscmp(L"useupdater", wszArg))
g_UseUpdater = TRUE;
else if(0 == wcscmp(L"pause", wszArg))
g_Pause = TRUE;
else if(0 == wcscmp(L"suppresstime", wszArg))
g_SuppressTime = TRUE;
else if(0 == wcscmp(L"checktime", wszArg))
g_CheckTime = TRUE;
else if(0 == wcscmp(L"checkisstg", wszArg))
g_CheckIsStg = TRUE;
else
{
printf("unknown argument '%s'\n", *pwszArgs);
Usage(wszApp);
exit(0);
}
++pwszArgs;
}
if(0 < cArgs)
{
wcscpy( g_tszFileName, *pwszArgs );
++pwszArgs;
--cArgs;
}
if(0 < cArgs)
{
printf("extra arguments ignored: ");
while(--cArgs >= 0)
{
wprintf( L" %s", *pwszArgs);
++pwszArgs;
}
Usage(wszApp);
printf("\n");
exit(0);
}
return;
}