182 lines
4.0 KiB
C++
182 lines
4.0 KiB
C++
|
|
|
|
// Microsoft Windows
|
|
|
|
// Copyright (C) Microsoft Corporation, 1996 - 1999
|
|
|
|
// File: tcbfile.cpp
|
|
|
|
// Contents: cbfile tests
|
|
|
|
// History: 13-Aug-1997 pberkman created
|
|
|
|
|
|
|
|
#include "global.hxx"
|
|
|
|
#include "cbfile.hxx"
|
|
|
|
CRITICAL_SECTION MyCriticalSection;
|
|
|
|
void _DumpIndex(cBFile_ *pcBFile);
|
|
void _DumpHeader(cBFile_ *pcBFile);
|
|
|
|
DWORD dwTotal;
|
|
|
|
extern "C" int __cdecl wmain(int argc, WCHAR **wargv)
|
|
{
|
|
WCHAR *pwszFile;
|
|
DWORD dwExpectedReturn;
|
|
BOOL fVerbose;
|
|
int iRet;
|
|
|
|
cWArgv_ *pArgs;
|
|
|
|
COleDateTime tStart;
|
|
COleDateTime tEnd;
|
|
COleDateTimeSpan tsTotal;
|
|
|
|
cBFile_ *pcBFile;
|
|
BOOL fCreatedOK = FALSE;
|
|
|
|
pcBFile = NULL;
|
|
dwTotal = 0;
|
|
iRet = 0;
|
|
dwExpectedReturn = S_OK;
|
|
|
|
InitializeCriticalSection(&MyCriticalSection);
|
|
|
|
if (!(pArgs = new cWArgv_((HINSTANCE)GetModuleHandle(NULL))))
|
|
{
|
|
goto MemoryError;
|
|
}
|
|
|
|
pArgs->AddUsageText(IDS_USAGETEXT_USAGE, IDS_USAGETEXT_OPTIONS,
|
|
IDS_USAGETEXT_CMDFILE, IDS_USAGETEXT_ADD,
|
|
IDS_USAGETEXT_OPTPARAM);
|
|
|
|
pArgs->Add2List(IDS_PARAM_HELP, IDS_PARAMTEXT_HELP, WARGV_VALUETYPE_BOOL, (void *)FALSE);
|
|
pArgs->Add2List(IDS_PARAM_VERBOSE, IDS_PARAMTEXT_VERBOSE, WARGV_VALUETYPE_BOOL, (void *)FALSE);
|
|
|
|
pArgs->Fill(argc, wargv);
|
|
|
|
if (pArgs->GetValue(IDS_PARAM_HELP))
|
|
{
|
|
wprintf(L"%s\n", pArgs->GetUsageString());
|
|
goto NeededHelp;
|
|
}
|
|
|
|
if (!(pwszFile = pArgs->GetFileName()))
|
|
{
|
|
wprintf(L"%s\n", pArgs->GetUsageString());
|
|
goto ParamError;
|
|
}
|
|
|
|
fVerbose = (BOOL)((DWORD_PTR)pArgs->GetValue(IDS_PARAM_VERBOSE));
|
|
|
|
if (!(pcBFile = new cBFile_(&MyCriticalSection, L".\\", pwszFile, 1, 1, BFILE_VERSION_1, &fCreatedOK)))
|
|
{
|
|
goto MemoryError;
|
|
}
|
|
|
|
if (!fCreatedOK)
|
|
{
|
|
goto DBError;
|
|
}
|
|
|
|
if (!(pcBFile->Initialize()))
|
|
{
|
|
goto DBError;
|
|
}
|
|
|
|
|
|
// start our timer
|
|
|
|
tStart = COleDateTime::GetCurrentTime();
|
|
|
|
|
|
// dump the file's index
|
|
|
|
_DumpIndex(pcBFile);
|
|
|
|
|
|
// dump the file's header
|
|
|
|
_DumpHeader(pcBFile);
|
|
|
|
tEnd = COleDateTime::GetCurrentTime();
|
|
tsTotal = tEnd - tStart;
|
|
|
|
printf("\n");
|
|
printf("\nProcessing time: %s", (LPCSTR)tsTotal.Format("%D:%H:%M:%S"));
|
|
printf("\nAverage seconds per: %f", (double)tsTotal.GetTotalSeconds() / (double)dwTotal);
|
|
printf("\n");
|
|
|
|
iRet = 0;
|
|
|
|
CommonReturn:
|
|
DeleteCriticalSection(&MyCriticalSection);
|
|
|
|
DELETE_OBJECT(pArgs);
|
|
DELETE_OBJECT(pcBFile);
|
|
|
|
return(iRet);
|
|
|
|
ErrorReturn:
|
|
iRet = 1;
|
|
goto CommonReturn;
|
|
|
|
TRACE_ERROR_EX(DBG_SS_APP, MemoryError);
|
|
TRACE_ERROR_EX(DBG_SS_APP, ParamError);
|
|
TRACE_ERROR_EX(DBG_SS_APP, NeededHelp);
|
|
TRACE_ERROR_EX(DBG_SS_APP, DBError);
|
|
}
|
|
|
|
void _DumpIndex(cBFile_ *pcBFile)
|
|
{
|
|
BYTE *pb;
|
|
DWORD dwIdx;
|
|
DWORD dwRecOffset;
|
|
DWORD i;
|
|
|
|
pb = new BYTE[pcBFile->KeySize()];
|
|
|
|
dwIdx = 0;
|
|
|
|
while (pcBFile->GetDumpKey(dwIdx, pb, &dwRecOffset))
|
|
{
|
|
printf("\n");
|
|
|
|
for (i = 0; i < pcBFile->KeySize(); i++)
|
|
{
|
|
printf("%02.2X", (int)pb[i]);
|
|
}
|
|
|
|
printf(" --> %lu", dwRecOffset);
|
|
|
|
dwTotal++;
|
|
|
|
dwIdx++;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
void _DumpHeader(cBFile_ *pcBFile)
|
|
{
|
|
BFILE_HEADER sHeader;
|
|
|
|
if (pcBFile->GetHeader(&sHeader))
|
|
{
|
|
printf("\n");
|
|
printf("\nHeader:");
|
|
printf("\n fDirty: %s", (sHeader.fDirty) ? "TRUE" : "FALSE");
|
|
printf("\n sVersion: %lu", (DWORD)sHeader.sVersion);
|
|
printf("\n sIntVersion: %lu", (DWORD)sHeader.sIntVersion);
|
|
printf("\n cbSortedEOF: %lu", sHeader.cbSortedEOF);
|
|
printf("\n cbKey: %lu", sHeader.cbKey);
|
|
printf("\n cbData: %lu", sHeader.cbData);
|
|
printf("\n dwLastRecNum: %lu", sHeader.dwLastRecNum);
|
|
}
|
|
}
|