// -------------------------------------------------------------------------------- // Utility.h // -------------------------------------------------------------------------------- #ifndef __UTILITY_H #define __UTILITY_H // -------------------------------------------------------------------------------- // Depends // -------------------------------------------------------------------------------- #include // -------------------------------------------------------------------------------- // DWORDALIGN // -------------------------------------------------------------------------------- #define DWORDALIGN(_cb) ((_cb % 4 != 0) ? (_cb += (4 - (_cb % 4))) : _cb) // -------------------------------------------------------------------------------- // DIRTYPE // -------------------------------------------------------------------------------- typedef enum tagDIRTYPE { DIR_IS_ROOT, DIR_IS_LOCAL, DIR_IS_NEWS, DIR_IS_IMAP } DIRTYPE; // -------------------------------------------------------------------------------- // ACCOUNTINFO // -------------------------------------------------------------------------------- typedef struct tagACCOUNTINFO *LPACCOUNTINFO; typedef struct tagACCOUNTINFO { CHAR szAcctId[CCHMAX_ACCOUNT_NAME]; CHAR szAcctName[CCHMAX_ACCOUNT_NAME]; CHAR szDirectory[MAX_PATH]; CHAR szDataDir[MAX_PATH]; CHAR szServer[CCHMAX_SERVER_NAME]; DWORD dwServer; } ACCOUNTINFO; // -------------------------------------------------------------------------------- // ACCOUNTTABLE // -------------------------------------------------------------------------------- typedef struct tagACCOUNTTABLE { DWORD cAccounts; LPACCOUNTINFO prgAccount; } ACCOUNTTABLE, *LPACCOUNTTABLE; // -------------------------------------------------------------------------------- // FILETYPE // -------------------------------------------------------------------------------- typedef enum tagFILETYPE { FILE_IS_LOCAL_MESSAGES, FILE_IS_NEWS_MESSAGES, FILE_IS_IMAP_MESSAGES, FILE_IS_POP3UIDL, FILE_IS_LOCAL_FOLDERS, FILE_IS_IMAP_FOLDERS, FILE_IS_NEWS_SUBLIST, FILE_IS_NEWS_GRPLIST } FILETYPE; // -------------------------------------------------------------------------------- // ENUMFILEINFO // -------------------------------------------------------------------------------- typedef struct tagENUMFILEINFO { LPSTR pszExt; LPSTR pszFoldFile; LPSTR pszUidlFile; LPSTR pszSubList; LPSTR pszGrpList; BOOL fFindV1News; } ENUMFILEINFO, *LPENUMFILEINFO; // -------------------------------------------------------------------------------- // FILEINFO // -------------------------------------------------------------------------------- typedef struct tagFILEINFO *LPFILEINFO; typedef struct tagFILEINFO { CHAR szFilePath[MAX_PATH + MAX_PATH]; CHAR szDstFile[MAX_PATH + MAX_PATH]; CHAR szAcctId[CCHMAX_ACCOUNT_NAME]; CHAR szFolder[255]; DWORD fMigrate; HRESULT hrMigrate; DWORD dwLastError; DWORD cbFile; DWORD cRecords; DWORD cProgInc; DWORD cProgCur; DWORD cProgMax; FILETYPE tyFile; DWORD dwServer; DWORD idFolder; BOOL fInStore; DWORD cUnread; DWORD cMessages; LPFILEINFO pNext; } FILEINFO; // -------------------------------------------------------------------------------- // PROGRESSINFO // -------------------------------------------------------------------------------- typedef struct tagPROGRESSINFO { HWND hwndProgress; DWORD cCurrent; DWORD cMax; DWORD cPercent; } PROGRESSINFO, *LPPROGRESSINFO; // -------------------------------------------------------------------------------- // Prototypes // -------------------------------------------------------------------------------- HRESULT EnumerateStoreFiles(LPCSTR pszPath, DIRTYPE tyDir, LPCSTR pszSubDir, LPENUMFILEINFO pEnumInfo, LPFILEINFO *ppHead); HRESULT FreeFileList(LPFILEINFO *ppHead); INT_PTR CALLBACK MigrageDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); void IncrementProgress(LPPROGRESSINFO pProgress, LPFILEINFO pInfo); HRESULT WriteMigrationLogFile(HRESULT hrMigrate, DWORD dwLastError, LPCSTR pszStoreRoot, LPCSTR pszMigrate, LPCSTR pszCmdLine, LPFILEINFO pHeadFile); HRESULT BlobReadData(LPBYTE lpbBlob, ULONG cbBlob, ULONG *pib, LPBYTE lpbData, ULONG cbData); HRESULT GetAvailableDiskSpace(LPCSTR pszFilePath, DWORDLONG *pdwlFree); void ReplaceExtension(LPCSTR pszFilePath, LPCSTR pszExtNew, LPSTR pszFilePathNew, int cchFilePathNew); HRESULT MyWriteFile(HANDLE hFile, DWORD faAddress, LPVOID pData, DWORD cbData); void SetProgressFile(LPPROGRESSINFO pProgress, LPFILEINFO pInfo); UINT MigrateMessageBox(LPCSTR pszMsg, UINT uType); void InitializeCounters(LPMEMORYFILE pFile, LPFILEINFO pInfo, LPDWORD pcMax, LPDWORD pcbNeeded, BOOL fInflate); HRESULT BuildAccountTable(HKEY hkeyBase, LPCSTR pszRegRoot, LPCSTR pszStoreRoot, LPACCOUNTTABLE pAcctTbl); #endif // __UTILITY_H