//////////////////////////////////////////////////////////////////////
CLogFile::CLogFile(LPCTSTR szLogName, LPCTSTR szLogPath /*= NULL*/, BOOL bDeleteExisting /*=FALSE*/)
+ : m_nMaxSize(1024576)
+ , m_bEnabled(FALSE)
+// CString m_strLogPath
{
TCHAR temp[MAX_PATH];
- m_nMaxSize = 1024576;
+
// build the path to the logfile
if (szLogPath != NULL
void CLogFile::Write(DWORD idFormatString, ...)
{
- TCHAR buf[2048]=_T("");
+ if (!m_bEnabled)
+ return;
+
+ TCHAR buf[2048]=_T("");
CString strFormat;
+
if (strFormat.LoadString(idFormatString))
{
va_list arglist;
_tcscat(buf, _T("\n"));
FILE *f;
-#ifndef _UNICODE
- if ((f=fopen(m_strLogPath, _T("a"))) != NULL)
-#else
- if ((f=wfopen(m_strLogPath, L"a")) != NULL)
-#endif
+ if ((f=_tfopen(m_strLogPath, _T("a"))) != NULL)
{
_fputts(buf, f);
void CLogFile::WriteError(CString JobID, CString ProcessID, CString Event, long ecode, CString CIndex)
{
+ if (!m_bEnabled)
+ return;
JobID.TrimRight();
ProcessID.TrimRight();
void CLogFile::Prune(FILE *f)
{
- TCHAR buf[8196];
+ TCHAR buf[8196] = {0};
DWORD amt;
TCHAR tempfile[MAX_PATH];
FILE *tf;
CLogFile(LPCTSTR szLogName, LPCTSTR szLogPath = NULL, BOOL bDeleteExisting = FALSE);
- void Prune(FILE *f);
void Write(LPCTSTR pszFormat, ...);
void Write(DWORD idFormatString, ...);
virtual ~CLogFile();
void SetMaxLogSize(DWORD dwMax) { m_nMaxSize = dwMax; }
- CString GetPath() { return m_strLogPath; }
+ CString GetPath() const { return m_strLogPath; }
+ void EnableLogging(BOOL enable) { m_bEnabled = enable; }
+
protected:
- DWORD m_nMaxSize;
- CString m_strLogPath;
+ void Prune(FILE *f);
+
+ DWORD m_nMaxSize;
+ BOOL m_bEnabled;
+ CString m_strLogPath;
};
return FALSE;
}
+long GetFileModTime(LPCTSTR szPath)
+{
+ if (!szPath || !szPath[0]) return 0;
+ struct stat mystats;
+ memset(&mystats, 0, sizeof(mystats));
+ int stat_result = stat(szPath, &mystats);
+ if (stat_result!=0)
+ return 0;
+ return mystats.st_mtime;
+}
+
DWORD GetFileSizeEx(LPCTSTR szFilename)
{
WIN32_FIND_DATA ffi;
CString ConvertPath2PS(LPCTSTR szPath)
{
CString result(_T(""));
- TCHAR path[MAX_PATH];
+ TCHAR path[_MAX_PATH] = {0};
_tcscpy(path,szPath);
replace_char(path, _T('\\'), _T('//'));
assert(ext[0] != _T('.'));
if (!((p=_tcsrchr(name,_T('.'))) != NULL
- && !_tcscmp(p+1,ext)))
+ && !_tcsicmp(p+1,ext)))
{
_tcscat(name,_T("."));
_tcscat(name,ext);
BOOL MkDirEx(LPCTSTR filename)
{
- TCHAR tempPath[MAX_PATH];
+ TCHAR tempPath[_MAX_PATH] = {0};
LPTSTR p;
_tcscpy(tempPath, filename);
CString LegalizeFileName(LPCTSTR szFileName)
{
- TCHAR tempname[MAX_PATH];
+ TCHAR tempname[_MAX_PATH] = {0};
LPTSTR p;
_tcscpy(tempname, szFileName);
BOOL IsLocalPath(LPCTSTR path)
{
- _TCHAR finalpath[_MAX_PATH];
- _TCHAR temppath[_MAX_PATH];
- _TCHAR uncname[_MAX_PATH];
- _TCHAR computername[_MAX_PATH];
+ _TCHAR finalpath[_MAX_PATH] = {0};
+ _TCHAR temppath[_MAX_PATH] = {0};
+ _TCHAR uncname[_MAX_PATH] = {0};
+ _TCHAR computername[_MAX_PATH] = {0};
BOOL bUNC=FALSE;
BOOL bLocal=FALSE;
CString GetModulePath(HMODULE hModule /* = NULL*/)
{
- TCHAR path[MAX_PATH], temp[MAX_PATH];
- GetModuleFileName(hModule, temp, MAX_PATH);
+ TCHAR path[MAX_PATH] = {0};
+ TCHAR temp[MAX_PATH] = {0};
+ GetModuleFileName(hModule, temp, _MAX_PATH);
split_filename(temp, path, NULL, NULL);
- return CString(path);
+ return path;
}
LPSYSTEMTIME pMod,
LPSYSTEMTIME pCreate =NULL,
LPSYSTEMTIME pAccess =NULL);
+long GetFileModTime(LPCTSTR szPath);
DWORD GetFileSizeEx(LPCTSTR szFilename);
CString GetCDPath();
BOOL HaveAdminAccess();
extern CLogFile gLog;
-extern bool gWriteLog;
int compare_files (LPCTSTR, LPCTSTR, LPCTSTR, LPCTSTR, CDiffContext*, int);
int excluded_filename (char const *f);
/* If this is directory comparison, perhaps we have a file
that exists only in one of the directories. */
- if (gWriteLog) gLog.Write(_T("Comparing: n0=%s, n1=%s, d0=%s, d1=%s"), name0, name1, dir0, dir1);
+ gLog.Write(_T("Comparing: n0=%s, n1=%s, d0=%s, d1=%s"), name0, name1, dir0, dir1);
if (! ((name0 != 0 && name1 != 0)
|| (unidirectional_new_file_flag && name1 != 0)
name = name1;
}
pCtx->AddDiff(name, dir0, dir1, inf[0].stat.st_mtime, inf[1].stat.st_mtime, code);
- if (gWriteLog) gLog.Write(_T("\tUnique\r\n"));
+ gLog.Write(_T("\tUnique\r\n"));
if (free0)
free (free0);
if (free1)
}
else
{
- if (gWriteLog) gLog.Write(_T("\tDirs found.\r\n"));
+ gLog.Write(_T("\tDirs found.\r\n"));
CDiffContext ctx(inf[0].name, inf[1].name, *pCtx);
val = diff_dirs (&ctx, depth);
&& (entire_new_file_flag
|| (unidirectional_new_file_flag && inf[0].desc == -1)))
{
- if (gWriteLog) gLog.Write(_T("\tDirs found.\r\n"));
+ gLog.Write(_T("\tDirs found.\r\n"));
CDiffContext ctx(inf[0].name, inf[1].name, *pCtx);
val = diff_dirs (&ctx, depth);
}
if(val==2)
{
pCtx->AddDiff(name0, dir0, dir1, inf[0].stat.st_mtime, inf[1].stat.st_mtime, FILE_ERROR);
- if (gWriteLog) gLog.Write(_T("\t%s.\r\n"), val==2? "error":"different");
+ gLog.Write(_T("\t%s.\r\n"), val==2? "error":"different");
}
else if (diff_flag)
{
val = 1;
pCtx->AddDiff(name0, dir0, dir1, inf[0].stat.st_mtime, inf[1].stat.st_mtime, FILE_BINDIFF);
- if (gWriteLog) gLog.Write(_T("\tbinary.\r\n"));
+ gLog.Write(_T("\tdiffenent binary.\r\n"));
}
else
{
if (val==2 || val == 1)
{
pCtx->AddDiff(name0, dir0, dir1, inf[0].stat.st_mtime, inf[1].stat.st_mtime, (BYTE)(val==2? FILE_ERROR:FILE_DIFF));
- if (gWriteLog) gLog.Write(_T("\t%s.\r\n"), val==2? "error":"different");
+ gLog.Write(_T("\t%s.\r\n"), val==2? "error":"different");
}
}
}
message ("Files %s and %s are identical\n",
inf[0].name, inf[1].name);
pCtx->AddDiff(name0, dir0, dir1, inf[0].stat.st_mtime, inf[1].stat.st_mtime, FILE_SAME);
- if (gWriteLog) gLog.Write(_T("\tidentical.\r\n"));
+ gLog.Write(_T("\tidentical.\r\n"));
}
else
{
static char THIS_FILE[] = __FILE__;
#endif
-
-CLogFile gLog(_T("WinMerge.log"), NULL, TRUE);
-bool gWriteLog = true;
-
-
+extern CLogFile gLog;
/////////////////////////////////////////////////////////////////////////////
// CDirDoc
ASSERT(m_pCtxt != NULL);
BeginWaitCursor();
- if (gWriteLog) gLog.Write(_T("Starting directory scan:\r\n\tLeft: %s\r\n\tRight: %s\r\n"),
+ gLog.Write(_T("Starting directory scan:\r\n\tLeft: %s\r\n\tRight: %s\r\n"),
m_pCtxt->m_strLeft, m_pCtxt->m_strRight);
m_pCtxt->RemoveAll();
compare_files (0, (char const *)(LPCTSTR)m_pCtxt->m_strLeft,
0, (char const *)(LPCTSTR)m_pCtxt->m_strRight, m_pCtxt, 0);
- if (gWriteLog) gLog.Write(_T("Directory scan complete\r\n"));
+ gLog.Write(_T("Directory scan complete\r\n"));
CString s;
AfxFormatString2(s, IDS_DIRECTORY_WINDOW_STATUS_FMT, m_pCtxt->m_strLeft, m_pCtxt->m_strRight);
static void UpdateTimes(DIFFITEM * pdi)
{
CString sLeft = (CString)pdi->lpath + _T("\\") + pdi->filename;
- pdi->ltime = GetModTime(sLeft);
+ pdi->ltime = GetFileModTime(sLeft);
CString sRight = (CString)pdi->rpath + _T("\\") + pdi->filename;
- pdi->rtime = GetModTime(sRight);
+ pdi->rtime = GetFileModTime(sRight);
}
static CString
m_pCtxt = pCtxt;
}
-BOOL CDirDoc::UpdateItemStatus( LPCTSTR pathLeft, LPCTSTR pathRight,
- UINT status )
+BOOL CDirDoc::UpdateItemStatus(LPCTSTR pathLeft, LPCTSTR pathRight,
+ UINT status)
{
TCHAR path1[_MAX_PATH] = {0};
TCHAR path2[_MAX_PATH] = {0};
}
return found;
}
+CDirView * CDirDoc::SetView(CDirView * newView)
+{
+ CDirView * currentView = m_pView;
+ m_pView = newView;
+ return currentView;
+}
public:
// Operations
public:
- CDirView *m_pView;
CDirView * GetMainView();
// Overrides
void Rescan();
CDiffContext *m_pCtxt;
virtual ~CDirDoc();
+ CDirView *SetView( CDirView *newView );
+ CDirView *GetView() { return m_pView; }
+
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
+
+ // Implementation data
+private:
+ CDirView *m_pView;
+
};
//{{AFX_INSERT_LOCATION}}
CListViewEx::OnInitialUpdate();
m_sortColumn = -1; // start up in no sorted order.
m_pList = &GetListCtrl();
- GetDocument()->m_pView = this;
+ GetDocument()->SetView(this);
// Replace standard header with sort header
if (HWND hWnd = ListView_GetHeader(m_pList->m_hWnd))
m_ctlSortHeader.SubclassWindow(hWnd);
-
int w;
CString sKey;
CString sFmt(_T("WDirHdr%d")), sSect(_T("DirView"));
pCmdUI->Enable(sel>=0);
}
+UINT CDirView::GetSelectedCount() const
+{
+ return m_pList->GetSelectedCount();
+}
+
+int CDirView::GetFirstSelectedInd()
+{
+ int sel =- 1;
+ sel = m_pList->GetNextItem(sel, LVNI_SELECTED);
+
+ return sel;
+}
+DIFFITEM CDirView::GetNextSelectedInd(int &ind)
+{
+ DIFFITEM di = {0};
+ int sel =- 1;
+
+ sel = m_pList->GetNextItem(ind, LVNI_SELECTED);
+ di = GetDiffItem(ind);
+ ind = sel;
+
+ return di;
+}
+
+DIFFITEM CDirView::GetItemAt(int ind)
+{
+ DIFFITEM di = { 0 };
+ if (ind != -1)
+ {
+ di = GetDiffItem(ind);
+ }
+ return di;
+}
void DeleteAllDisplayItems();
int GetItemIndex(DWORD key);
+ UINT GetSelectedCount() const;
+ int GetFirstSelectedInd();
+ DIFFITEM GetNextSelectedInd(int &ind);
+ DIFFITEM GetItemAt(int ind);
// Implementation types
private:
extern int recursive;
CMainFrame *mf = NULL;
-extern CLogFile gLog;
-extern bool gWriteLog;
+CLogFile gLog(_T("WinMerge.log"), NULL, TRUE);
// add a
static void add_regexp PARAMS((struct regexp_list **, char const*));
m_nTabType = theApp.GetProfileInt(_T("Settings"), _T("TabType"), 0);
m_bIgnoreRegExp = theApp.GetProfileInt(_T("Settings"), _T("IgnoreRegExp"), FALSE);
m_sPattern = theApp.GetProfileString(_T("Settings"), _T("RegExps"), NULL);
+ // TODO: read preference for logging
if (m_strVssPath.IsEmpty())
{
2003-02-08 Perry
DirDoc.*: Changed from strftime to COleDateTime::Format (respects user prefs).
First half of [ 679692 ] Update after editing (with code combination).
+ [ 682505 ] API changes for CLog, CDirView and CDirDoc
+ 2nd half of [ 679692 ] Update after editing
+
+
2003-02-07
Added 24 missing languages