#include #include #include #include #include "other.h" extern int g_Flag_a; extern int g_Flag_b; extern int g_Flag_c; extern int g_Flag_d; extern int g_Flag_e; extern int g_Flag_f; extern TCHAR * g_Flag_f_Data; extern int g_Flag_g; extern int g_Flag_z; extern TCHAR * g_Flag_z_Data; void OutputToConsole(TCHAR *szInsertionStringFormat, TCHAR *szInsertionString) { TCHAR BigString[1000]; _stprintf(BigString,szInsertionStringFormat,szInsertionString); _tprintf(BigString); return; } void OutputToConsole(TCHAR *szInsertionStringFormat, int iTheInteger) { TCHAR BigString[1000]; _stprintf(BigString,szInsertionStringFormat,iTheInteger); _tprintf(BigString); return; } void OutputToConsole(TCHAR *szString) { _tprintf(szString); return; } void DumpOutCommonEntries(MyFileList *pTheMasterFileList1, MyFileList *pTheMasterFileList2) { MyFileList *t = NULL; MyFileList *t2 = NULL; t = pTheMasterFileList1->next; while (t != pTheMasterFileList1) { // // Loop thru all of list 2 looking for this entry // t2 = pTheMasterFileList2->next; while (t2 != pTheMasterFileList2) { if (0 == _tcsicmp(t->szFileNameEntry, t2->szFileNameEntry)) { //OutputToConsole(_T("%s\r\n"),t->szFileNameEntry); OutputToConsole(_T("%s\n"),t->szFileNameEntry); } t2 = t2->next; } // Get the next entry from list 2 t = t->next; } return; } void DumpOutLinkedFileList(MyFileList *pTheMasterFileList) { MyFileList *t = NULL; t = pTheMasterFileList->next; while (t != pTheMasterFileList) { //OutputToConsole(_T("%s\r\n"),t->szFileNameEntry); OutputToConsole(_T("%s\n"),t->szFileNameEntry); t = t->next; } return; } void DumpOutDifferences(MyFileList *pTheMasterFileList1, MyFileList *pTheMasterFileList2) { int iFound = FALSE; MyFileList *t = NULL; MyFileList *t2 = NULL; // Loop thru list #1 t = pTheMasterFileList1->next; while (t != pTheMasterFileList1) { // // Loop thru all of list 2 looking for this entry // iFound = FALSE; t2 = pTheMasterFileList2->next; while (t2 != pTheMasterFileList2 && iFound != TRUE) { if (0 == _tcsicmp(t->szFileNameEntry, t2->szFileNameEntry)) {iFound = TRUE;} t2 = t2->next; } if (FALSE == iFound) { //OutputToConsole(_T("%s\r\n"),t->szFileNameEntry); OutputToConsole(_T("%s\n"),t->szFileNameEntry); } // Get the next entry from list 2 t = t->next; } // Loop thru list #2 t2 = pTheMasterFileList2->next; while (t2 != pTheMasterFileList2) { // // Loop thru all of list 2 looking for this entry // iFound = FALSE; t = pTheMasterFileList1->next; while (t != pTheMasterFileList1 && iFound != TRUE) { if (0 == _tcsicmp(t2->szFileNameEntry, t->szFileNameEntry)) {iFound = TRUE;} t = t->next; } if (FALSE == iFound) { //OutputToConsole(_T("%s\r\n"),t2->szFileNameEntry); OutputToConsole(_T("%s\n"),t2->szFileNameEntry); } // Get the next entry from list 2 t2 = t2->next; } return; } void ReadFileIntoList(LPTSTR szTheFileNameToOpen,MyFileList *pListToFill) { ifstream inputfile; char fileinputbuffer[_MAX_PATH]; TCHAR UnicodeFileBuf[_MAX_PATH]; TCHAR UnicodeFileBuf_Real[_MAX_PATH]; TCHAR szDrive_only[_MAX_DRIVE]; TCHAR szPath_only[_MAX_PATH]; TCHAR szFilename_only[_MAX_FNAME]; TCHAR szFilename_ext_only[_MAX_EXT]; char szAnsiFileName[_MAX_PATH]; WideCharToMultiByte( CP_ACP, 0, (TCHAR*)szTheFileNameToOpen, -1, szAnsiFileName, _MAX_PATH, NULL, NULL ); // Read flat file and put into huge array inputfile.open(szAnsiFileName, ios::in); inputfile.getline(fileinputbuffer, sizeof(fileinputbuffer)); do { if (*fileinputbuffer) { // convert to unicode. MultiByteToWideChar(CP_ACP, 0, (LPCSTR)fileinputbuffer, -1, (LPTSTR) UnicodeFileBuf, _MAX_PATH); _tcscpy(UnicodeFileBuf_Real, UnicodeFileBuf); if (TRUE == g_Flag_c) { // take out the path and only store the filename. _tsplitpath(UnicodeFileBuf, NULL, NULL, szFilename_only, szFilename_ext_only); _tcscpy(UnicodeFileBuf_Real, szFilename_only); _tcscat(UnicodeFileBuf_Real, szFilename_ext_only); _tcscat(UnicodeFileBuf_Real, _T("\0\0")); } else if (TRUE == g_Flag_d) { // take out the path and only store the filename. _tsplitpath(UnicodeFileBuf, szDrive_only, szPath_only, NULL, NULL); _tcscpy(UnicodeFileBuf_Real, szDrive_only); _tcscat(UnicodeFileBuf_Real, szPath_only); _tcscat(UnicodeFileBuf_Real, _T("\0\0")); } // // trim spaces or tabs from either side // if (TRUE == g_Flag_e) { TCHAR *p; p = UnicodeFileBuf_Real; _tcscpy(UnicodeFileBuf_Real,StripWhitespace(p)); } // // remove everything after the "=" character // #ifndef _WIN64 if (TRUE == g_Flag_f) { TCHAR *p = NULL; TCHAR *pDest = NULL; TCHAR MyDelim = _T('='); p = UnicodeFileBuf_Real; // check if there is a defined delimiter. if( _tcsicmp((const wchar_t *) &g_Flag_f_Data, _T("") ) != 0) { MyDelim = (TCHAR) &g_Flag_f_Data[0]; } pDest = _tcsrchr(p, MyDelim); if (pDest){*pDest = _T('\0');} } #endif // // Trim any /r/n characters from the end. // TCHAR *p; p = UnicodeFileBuf_Real; _tcscpy(UnicodeFileBuf_Real,StripLineFeedReturns(p)); MyFileList *pNew = NULL; pNew = (MyFileList *)calloc(1, sizeof(MyFileList)); if (pNew) { //OutputToConsole(_T("Entry=%s"),UnicodeFileBuf_Real); _tcscpy(pNew->szFileNameEntry, UnicodeFileBuf_Real); pNew->prev = NULL; pNew->next = NULL; } // Add it in there. AddToLinkedListFileList(pListToFill, pNew); } } while (inputfile.getline(fileinputbuffer, sizeof(fileinputbuffer))); inputfile.close(); return; } void AddToLinkedListFileList(MyFileList *pMasterList,MyFileList *pEntryToadd) { MyFileList *pTempMasterList; int i; int bFound = FALSE; BOOL fReplace = TRUE; if (!pEntryToadd) {return;} pTempMasterList = pMasterList->next; while (pTempMasterList != pMasterList) { i = _tcsicmp(pTempMasterList->szFileNameEntry, pEntryToadd->szFileNameEntry); // if the next entry in the list is less than what we have. // then if (i < 0) { pTempMasterList = pTempMasterList->next; // continue } if (i == 0) { if (fReplace) { // replace pTempMasterList pEntryToadd->next = pTempMasterList->next; pEntryToadd->prev = pTempMasterList->prev; (pTempMasterList->prev)->next = pEntryToadd; (pTempMasterList->next)->prev = pEntryToadd; free(pTempMasterList); } else { // don't replace pTempMasterList free(pEntryToadd); } return; } if (i > 0) { // location found: insert before pTempMasterList break; } } // insert before pTempMasterList pEntryToadd->next = pTempMasterList; pEntryToadd->prev = pTempMasterList->prev; (pTempMasterList->prev)->next = pEntryToadd; pTempMasterList->prev = pEntryToadd; return; } void FreeLinkedFileList(MyFileList *pList) { if (!pList) {return;} MyFileList *t = NULL, *p = NULL; t = pList->next; while (t != pList) { p = t->next; free(t); t = p; } t->prev = t; t->next = t; return; } BOOL IsFileExist(LPCTSTR szFile) { // Check if the file has expandable Environment strings LPTSTR pch = NULL; pch = _tcschr( (LPTSTR) szFile, _T('%')); if (pch) { TCHAR szValue[_MAX_PATH]; _tcscpy(szValue,szFile); if (!ExpandEnvironmentStrings( (LPCTSTR)szFile, szValue, _MAX_PATH)) {_tcscpy(szValue,szFile);} return (GetFileAttributes(szValue) != 0xFFFFFFFF); } else { return (GetFileAttributes(szFile) != 0xFFFFFFFF); } } //*************************************************************************** //* NAME: StripWhitespace * //* SYNOPSIS: Strips spaces and tabs from both sides of given string. * //*************************************************************************** LPSTR StripWhitespaceA( LPSTR pszString ) { LPSTR pszTemp = NULL; if ( pszString == NULL ) { return NULL; } while ( *pszString == ' ' || *pszString == '\t' ) { pszString += 1; } // Catch case where string consists entirely of whitespace or empty string. if ( *pszString == '\0' ) { return pszString; } pszTemp = pszString; pszString += lstrlenA(pszString) - 1; while ( *pszString == ' ' || *pszString == '\t' ) { *pszString = '\0'; pszString -= 1; } return pszTemp; } //*************************************************************************** //* NAME: StripWhitespace * //* SYNOPSIS: Strips spaces and tabs from both sides of given string. * //*************************************************************************** LPTSTR StripWhitespace(LPTSTR pszString ) { LPTSTR pszTemp = NULL; if ( pszString == NULL ) { return NULL; } while ( *pszString == _T(' ') || *pszString == _T('\t') ) { pszString += 1; } // Catch case where string consists entirely of whitespace or empty string. if ( *pszString == _T('\0') ) { return pszString; } pszTemp = pszString; pszString += lstrlenW(pszString) - 1; while ( *pszString == _T(' ') || *pszString == _T('\t') ) { *pszString = _T('\0'); pszString -= 1; } return pszTemp; } //*************************************************************************** //* NAME: StripLineFeedReturns * //* SYNOPSIS: Strips linefeeds and returns from both sides of given string* //*************************************************************************** LPTSTR StripLineFeedReturns(LPTSTR pszString ) { LPTSTR pszTemp = NULL; if ( pszString == NULL ) { return NULL; } while ( *pszString == _T('\n') || *pszString == _T('\r') ) { pszString += 1; } // Catch case where string consists entirely of whitespace or empty string. if ( *pszString == _T('\0') ) { return pszString; } pszTemp = pszString; pszString += lstrlenW(pszString) - 1; while ( *pszString == _T('\n') || *pszString == _T('\r') ) { *pszString = _T('\0'); pszString -= 1; } return pszTemp; }