int _tmain(int argc, _TCHAR* argv[]) { int retVal(0); int arg = FindNextArg(argc, argv, 0); if (arg <= 0) { Help(); retVal = 1; } else { for (int i = 1; i < argc; ++i) _tprintf(_T("%s\n"), argv[i]); BinaryFind bf; { BinaryData findBuffer; findBuffer.BuildFromString(FindArgValue(argc, argv, _T("-f=")), FindArgValue(argc, argv, _T("-fs")) != NULL); if (findBuffer.DataSize() > 0) bf.SetFindPattern(findBuffer); } const TCHAR *fileOrString(argv[arg]); if (Path(fileOrString).Exists()) { Path filePath(fileOrString); HDFDCB_Data cbData = { argc, argv, bf }; if (filePath.IsDir()) { Finder f((FindCallBack)HEXDump_FindCallBack, &cbData, FindArgValue(argc, argv, _T("-mp=")), FindArgValue(argc, argv, _T("-ep="))); f.StartFind(fileOrString); } else { FindData fd(NULL, filePath, true); HEXDump_FindCallBack(fd, &cbData); } if (cbData.nFiles > 1) _tprintf(_T("Total files: %d\n"), cbData.nFiles); if (cbData.nFound > 1) { _tprintf(_T("Total files matching: %d\n"), cbData.nFound); if (cbData.nMaxMatchPerFile > 1) _tprintf(_T("max matching in a file : %d\n"), cbData.nMaxMatchPerFile); } } else { if (bf.HasFindPattern()) { bf.SetFindBuffer((const void *)fileOrString, _tcslen(fileOrString)*sizeof(fileOrString[0])); while (true) { long long findPos = bf.FindNext(); if (findPos >= 0) _tprintf(_T("%08llX\n"), findPos); else break; } } else HexDump((const void *)fileOrString, _tcslen(fileOrString)*sizeof(fileOrString[0])); } } return retVal; }
extern LPSTR _cdecl StripArg0(LPSTR lpCmdLine) { int len = strlen(lpCmdLine); int point = FindNextArg(lpCmdLine, 0, len); return &lpCmdLine[point]; }