[GME-commit] GMESRC/GME/Gme EmergencySaveDlg.cpp, NONE, 1.1 EmergencySaveDlg.h, NONE, 1.1 ExceptionHandler.cpp, 1.1, 1.2 GME.rc, 1.168, 1.169 GME.vcproj, 1.8, 1.9 GMEApp.cpp, 1.151, 1.152 GMEApp.h, 1.41, 1.42 GMEView.cpp, 1.199, 1.200 GMEView.h, 1.82, 1.83 MainFrm.cpp, 1.42, 1.43 MainFrm.h, 1.32, 1.33 resource.h, 1.79, 1.80

Log messages of CVS commits gme-commit at list.isis.vanderbilt.edu
Thu Apr 10 18:02:10 CDT 2008


Update of /project/gme-repository/GMESRC/GME/Gme
In directory escher:/tmp/cvs-serv14788/Gme

Modified Files:
	ExceptionHandler.cpp GME.rc GME.vcproj GMEApp.cpp GMEApp.h 
	GMEView.cpp GMEView.h MainFrm.cpp MainFrm.h resource.h 
Added Files:
	EmergencySaveDlg.cpp EmergencySaveDlg.h 
Log Message:
Further developments of the Emergency save: dialog

CVS User:  (csaba)

--- NEW FILE: EmergencySaveDlg.cpp ---
// EmergencySaveDlg.cpp : implementation file
//

#include "stdafx.h"
#include "EmergencySaveDlg.h"


/////////////////////////////////////////////////////////////////////////////
// EmergencySaveDlg dialog

IMPLEMENT_DYNAMIC(EmergencySaveDlg, CDialog)
EmergencySaveDlg::EmergencySaveDlg(CWnd* pParent):
	CDialog(EmergencySaveDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(EmergencySaveDlg)
	m_minidumpChecked = FALSE;
	//}}AFX_DATA_INIT
}

EmergencySaveDlg::~EmergencySaveDlg()
{
}

void EmergencySaveDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(EmergencySaveDlg)
	DDX_Control(pDX, IDOK, m_buttonOK);
	DDX_Control(pDX, IDC_MINIDUMP_CHECK, m_checkboxMinidump);
	DDX_Control(pDX, IDC_EMERGENCY_INFO_STATIC, m_staticEmergencySaveInfo);
	DDX_Control(pDX, IDC_MINIDUMP_INFO_STATIC, m_staticMinidumpSaveInfo);
	DDX_Check(pDX, IDC_MINIDUMP_CHECK, m_minidumpChecked);
	DDX_Text(pDX, IDC_EMERGENCY_INFO_STATIC, m_strEmergencySaveInfo);
	DDX_Text(pDX, IDC_MINIDUMP_INFO_STATIC, m_strMinidumpSaveInfo);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(EmergencySaveDlg, CDialog)
	//{{AFX_MSG_MAP(CDialogList)
	ON_BN_CLICKED(IDC_MINIDUMP_CHECK, OnMinidumpCheckboxClicked)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


// EmergencySaveDlg message handlers
BOOL EmergencySaveDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	m_checkboxMinidump.SetCheck((m_minidumpChecked == FALSE) ? 0 : 1);
	m_staticEmergencySaveInfo.SetWindowText(m_strEmergencySaveInfo);
	m_staticMinidumpSaveInfo.SetWindowText(m_strMinidumpSaveInfo);

	return TRUE;
}

void EmergencySaveDlg::OnMinidumpCheckboxClicked()
{
	m_minidumpChecked = (m_checkboxMinidump.GetCheck() == 0 ? FALSE : TRUE);
}

void EmergencySaveDlg::SetStrings(CString emergencySaveInfo, CString minidumpSaveInfo)
{
	m_strEmergencySaveInfo = emergencySaveInfo;
	m_strMinidumpSaveInfo = minidumpSaveInfo;
}

BOOL EmergencySaveDlg::ShouldWriteMiniDump(void)
{
	return m_minidumpChecked;
}


Index: GMEApp.h
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Gme/GMEApp.h,v
retrieving revision 1.41
retrieving revision 1.42
diff -C2 -d -r1.41 -r1.42
*** GMEApp.h	8 Apr 2008 21:30:45 -0000	1.41
--- GMEApp.h	10 Apr 2008 23:02:08 -0000	1.42
***************
*** 40,43 ****
--- 40,44 ----
  {
  	friend class CGMEOLEApp;
+ 	friend class ExceptionHandler;
  public:
  	virtual BOOL PreTranslateMessage(MSG* pMsg);
***************
*** 68,76 ****
  	inline bool isMgaProj()       const { return proj_type_is_mga; }
  	inline CString connString() const { return currentConnection; }
  private:
- 	
  	virtual int Run();
  	static void EmergencyTerminate();
! 	bool EmergencySave();
  	bool proj_type_is_mga;
  	bool proj_type_is_xmlbackend;
--- 69,83 ----
  	inline bool isMgaProj()       const { return proj_type_is_mga; }
  	inline CString connString() const { return currentConnection; }
+ 
  private:
  	virtual int Run();
  	static void EmergencyTerminate();
! 	enum EmergencySaveMode {
! 		SaveAndBringUpMessageBox	= 1,
! 		BringUpDialogOnly			= 2,
! 		DoTheSaveOnly				= 3
! 	};
! 	BOOL EmergencySave(EmergencySaveMode saveMode);
! 	CString emergencyBackupName;
  	bool proj_type_is_mga;
  	bool proj_type_is_xmlbackend;

Index: GMEView.h
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Gme/GMEView.h,v
retrieving revision 1.82
retrieving revision 1.83
diff -C2 -d -r1.82 -r1.83
*** GMEView.h	27 Mar 2008 21:43:08 -0000	1.82
--- GMEView.h	10 Apr 2008 23:02:08 -0000	1.83
***************
*** 479,482 ****
--- 479,493 ----
  	afx_msg void OnUpdateJumpAlongConnection( CCmdUI* pCmdUI );
  	afx_msg void OnUpdateBackAlongConnection( CCmdUI* pCmdUI );
+ 	afx_msg void OnCrashTestIllegalWrite();
+ 	afx_msg void OnCrashTestIllegalRead();
+ 	afx_msg void OnCrashTestIllegalReadInCRuntime();
+ 	afx_msg void OnCrashTestIllegalCodeRead();
+ 	afx_msg void OnCrashTestDivideByZero();
+ 	afx_msg void OnUpdateCrashTestMenu(CCmdUI* pCmdUI);
+ 	afx_msg void OnUpdateCrashTestIllegalWrite(CCmdUI* pCmdUI);
+ 	afx_msg void OnUpdateCrashTestIllegalRead(CCmdUI* pCmdUI);
+ 	afx_msg void OnUpdateCrashTestIllegalReadInCRuntime(CCmdUI* pCmdUI);
+ 	afx_msg void OnUpdateCrashTestIllegalCodeRead(CCmdUI* pCmdUI);
+ 	afx_msg void OnUpdateCrashTestDivideByZero(CCmdUI* pCmdUI);
  	afx_msg void OnShowSelectedModel();
  	afx_msg void OnFocusBrowser();

Index: MainFrm.cpp
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Gme/MainFrm.cpp,v
retrieving revision 1.42
retrieving revision 1.43
diff -C2 -d -r1.42 -r1.43
*** MainFrm.cpp	8 Apr 2008 21:30:45 -0000	1.42
--- MainFrm.cpp	10 Apr 2008 23:02:08 -0000	1.43
***************
*** 11,16 ****
  #include "GMEEventLogger.h"
  #include "..\XmlBackEnd\svauto.h"
- #include ".\mainfrm.h"
- #include "CrashTest.h"
  #include <sys/types.h>
  #include <sys/stat.h>
--- 11,14 ----
***************
*** 90,98 ****
  	ON_COMMAND(ID_VIEW_CLEARCONSOLE, OnViewClearConsole)
  	ON_UPDATE_COMMAND_UI(ID_VIEW_CLEARCONSOLE, OnUpdateViewClearConsole)
- 	ON_COMMAND(ID_CRASHTEST_ILLEGALWRITE, OnCrashTestIllegalWrite)
- 	ON_COMMAND(ID_CRASHTEST_ILLEGALREAD, OnCrashTestIllegalRead)
- 	ON_COMMAND(ID_CRASHTEST_ILLEGALREADINCRUNTIME, OnCrashTestIllegalReadInCRuntime)
- 	ON_COMMAND(ID_CRASHTEST_ILLEGALCODEREAD, OnCrashTestIllegalCodeRead)
- 	ON_COMMAND(ID_CRASHTEST_DIVIDEBYZERO, OnCrashTestDivideByZero)
  	ON_WM_CLOSE()
  	ON_WM_DROPFILES()
--- 88,91 ----
***************
*** 1001,1029 ****
  {
  	pCmdUI->Enable();
- }
- 
- void CMainFrame::OnCrashTestIllegalWrite(void) 
- {
- 	CrashTest::IllegalWrite();
- }
- 
- void CMainFrame::OnCrashTestIllegalRead(void) 
- {
- 	CrashTest::IllegalRead();
- }
- 
- void CMainFrame::OnCrashTestIllegalReadInCRuntime(void) 
- {
- 	CrashTest::IllegalReadInCRuntime();
- }
- 
- void CMainFrame::OnCrashTestIllegalCodeRead(void) 
- {
- 	CrashTest::IllegalCodeRead();
- }
- 
- void CMainFrame::OnCrashTestDivideByZero(void) 
- {
- 	CrashTest::DivideByZero();
  }
  
--- 994,997 ----

Index: MainFrm.h
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Gme/MainFrm.h,v
retrieving revision 1.32
retrieving revision 1.33
diff -C2 -d -r1.32 -r1.33
*** MainFrm.h	8 Apr 2008 21:30:45 -0000	1.32
--- MainFrm.h	10 Apr 2008 23:02:08 -0000	1.33
***************
*** 136,144 ****
  	afx_msg void OnViewClearConsole();
  	afx_msg void OnUpdateViewClearConsole( CCmdUI* pCmdUI);
- 	afx_msg void OnCrashTestIllegalWrite();
- 	afx_msg void OnCrashTestIllegalRead();
- 	afx_msg void OnCrashTestIllegalReadInCRuntime();
- 	afx_msg void OnCrashTestIllegalCodeRead();
- 	afx_msg void OnCrashTestDivideByZero();
  	afx_msg void CMainFrame::OnClose();
  	afx_msg void OnDropFiles(HDROP);
--- 136,139 ----

Index: resource.h
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Gme/resource.h,v
retrieving revision 1.79
retrieving revision 1.80
diff -C2 -d -r1.79 -r1.80
*** resource.h	8 Apr 2008 21:30:45 -0000	1.79
--- resource.h	10 Apr 2008 23:02:08 -0000	1.80
***************
*** 78,81 ****
--- 78,83 ----
  #define IDD_CONNECTIVITYDIALOG          216
  #define IDR_PORTCONTEXT_MENU            217
+ #define IDR_CRASH_TEST_MENU             218
+ #define IDD_EMERGENCY_DIALOG            219
  #define IDC_NAME                        1000
  #define IDC_TYPENAME                    1001
***************
*** 98,101 ****
--- 100,104 ----
  #define IDC_PRIORITY_CHECK              1017
  #define IDC_CHECK_SPLITTOSUBDIRS        1017
+ #define IDC_MINIDUMP_CHECK              1017
  #define IDC_MODELETC                    1018
  #define IDC_PRIORITY_CHECK2             1018
***************
*** 188,191 ****
--- 191,196 ----
  #define IDC_PARTBROWSERCTRL1            1116
  #define IDC_LIST1                       1124
+ #define IDC_EMERGENCY_INFO_STATIC       1125
+ #define IDC_MINIDUMP_INFO_STATIC        1126
  #define IDD_PRINT_DIALOG                1538
  #define IDD_PRINTSETUP_DIALOG           1539
***************
*** 417,421 ****
--- 422,431 ----
  #define ID_JUMPALONGCONN                33055
  #define ID_BACKALONGCONN                33056
+ #define IDS_EMERGENC_YXML               33057
+ #define IDS_EMERGENCY_XML               33057
+ #define IDS_EMERGENCY_PROJ              33058
  #define ID_JUMPTOFIRSTOBJ               33059
+ #define IDS_EMERGENCY_NOPROJ            33059
+ #define IDS_CRASHDUMP_INFO              33060
  #define ID_JUMPTONEXTOBJ                33061
  #define ID_SHOWCONTEXTMENU              33063
***************
*** 424,428 ****
  #define ID_PORTCNTX_REVERSECONNECTION   33071
  #define ID_PORTCNTX_FOLLOWCONNECTION    33072
- #define ID_DEBUG_CRASHTEST              33080
  #define ID_CRASHTEST_ILLEGALWRITE       33081
  #define ID_CRASHTEST_ILLEGALREAD        33082
--- 434,437 ----
***************
*** 441,447 ****
  #ifndef APSTUDIO_READONLY_SYMBOLS
  #define _APS_3D_CONTROLS                     1
! #define _APS_NEXT_RESOURCE_VALUE        218
  #define _APS_NEXT_COMMAND_VALUE         33086
! #define _APS_NEXT_CONTROL_VALUE         1125
  #define _APS_NEXT_SYMED_VALUE           115
  #endif
--- 450,456 ----
  #ifndef APSTUDIO_READONLY_SYMBOLS
  #define _APS_3D_CONTROLS                     1
! #define _APS_NEXT_RESOURCE_VALUE        220
  #define _APS_NEXT_COMMAND_VALUE         33086
! #define _APS_NEXT_CONTROL_VALUE         1127
  #define _APS_NEXT_SYMED_VALUE           115
  #endif

Index: GMEView.cpp
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Gme/GMEView.cpp,v
retrieving revision 1.199
retrieving revision 1.200
diff -C2 -d -r1.199 -r1.200
*** GMEView.cpp	27 Mar 2008 21:43:08 -0000	1.199
--- GMEView.cpp	10 Apr 2008 23:02:08 -0000	1.200
***************
*** 20,23 ****
--- 20,24 ----
  #include "GmePrintDialog.h"
  #include "ConnityDlg.h"
+ #include "CrashTest.h"
  
  #include "Autoroute/AutoRouter.h"
***************
*** 341,344 ****
--- 342,356 ----
  	ON_UPDATE_COMMAND_UI(ID_JUMPALONGCONN, OnUpdateJumpAlongConnection)
  	ON_UPDATE_COMMAND_UI(ID_BACKALONGCONN, OnUpdateBackAlongConnection)
+ 	ON_COMMAND(ID_CRASHTEST_ILLEGALWRITE, OnCrashTestIllegalWrite)
+ 	ON_COMMAND(ID_CRASHTEST_ILLEGALREAD, OnCrashTestIllegalRead)
+ 	ON_COMMAND(ID_CRASHTEST_ILLEGALREADINCRUNTIME, OnCrashTestIllegalReadInCRuntime)
+ 	ON_COMMAND(ID_CRASHTEST_ILLEGALCODEREAD, OnCrashTestIllegalCodeRead)
+ 	ON_COMMAND(ID_CRASHTEST_DIVIDEBYZERO, OnCrashTestDivideByZero)
+ 	ON_UPDATE_COMMAND_UI(IDR_CRASH_TEST_MENU, OnUpdateCrashTestMenu)
+ 	ON_UPDATE_COMMAND_UI(ID_CRASHTEST_ILLEGALWRITE, OnUpdateCrashTestIllegalWrite)
+ 	ON_UPDATE_COMMAND_UI(ID_CRASHTEST_ILLEGALREAD, OnUpdateCrashTestIllegalRead)
+ 	ON_UPDATE_COMMAND_UI(ID_CRASHTEST_ILLEGALREADINCRUNTIME, OnUpdateCrashTestIllegalReadInCRuntime)
+ 	ON_UPDATE_COMMAND_UI(ID_CRASHTEST_ILLEGALCODEREAD, OnUpdateCrashTestIllegalCodeRead)
+ 	ON_UPDATE_COMMAND_UI(ID_CRASHTEST_DIVIDEBYZERO, OnUpdateCrashTestDivideByZero)
  	ON_COMMAND(ID_CNTX_PREFERENCES, OnCntxPreferences)
  	ON_COMMAND(ID_EDIT_PREFERENCES, OnEditPreferences)
***************
*** 4559,4562 ****
--- 4571,4579 ----
  				CMenu *submenu = menu.GetSubMenu(0);
  				currentAspect->InitContextMenu(submenu);
+ #if defined (_DEBUG)
+ 				CMenu crashTestMenu;
+ 				crashTestMenu.LoadMenu(IDR_CRASH_TEST_MENU);
+ 				submenu->AppendMenu(MF_POPUP, (UINT_PTR)((HMENU)crashTestMenu), "Debug");
+ #endif
  				submenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
  					   							global.x,global.y,GetParent());
***************
*** 5979,5982 ****
--- 5996,6054 ----
  {
  	pCmdUI->Enable( areConnsForSels( selected, true));
+ }
+ 
+ void CGMEView::OnCrashTestIllegalWrite(void) 
+ {
+ 	CrashTest::IllegalWrite();
+ }
+ 
+ void CGMEView::OnCrashTestIllegalRead(void) 
+ {
+ 	CrashTest::IllegalRead();
+ }
+ 
+ void CGMEView::OnCrashTestIllegalReadInCRuntime(void) 
+ {
+ 	CrashTest::IllegalReadInCRuntime();
+ }
+ 
+ void CGMEView::OnCrashTestIllegalCodeRead(void) 
+ {
+ 	CrashTest::IllegalCodeRead();
+ }
+ 
+ void CGMEView::OnCrashTestDivideByZero(void) 
+ {
+ 	CrashTest::DivideByZero();
+ }
+ 
+ void CGMEView::OnUpdateCrashTestMenu(CCmdUI* pCmdUI)
+ {
+ 	pCmdUI->Enable();
+ }
+ 
+ void CGMEView::OnUpdateCrashTestIllegalWrite(CCmdUI* pCmdUI)
+ {
+ 	pCmdUI->Enable();
+ }
+ 
+ void CGMEView::OnUpdateCrashTestIllegalRead(CCmdUI* pCmdUI)
+ {
+ 	pCmdUI->Enable();
+ }
+ 
+ void CGMEView::OnUpdateCrashTestIllegalReadInCRuntime(CCmdUI* pCmdUI)
+ {
+ 	pCmdUI->Enable();
+ }
+ 
+ void CGMEView::OnUpdateCrashTestIllegalCodeRead(CCmdUI* pCmdUI)
+ {
+ 	pCmdUI->Enable();
+ }
+ 
+ void CGMEView::OnUpdateCrashTestDivideByZero(CCmdUI* pCmdUI)
+ {
+ 	pCmdUI->Enable();
  }
  

Index: GMEApp.cpp
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Gme/GMEApp.cpp,v
retrieving revision 1.151
retrieving revision 1.152
diff -C2 -d -r1.151 -r1.152
*** GMEApp.cpp	8 Apr 2008 21:30:45 -0000	1.151
--- GMEApp.cpp	10 Apr 2008 23:02:08 -0000	1.152
***************
*** 29,32 ****
--- 29,33 ----
  #include "GMEPrintDialog.h"
  #include "ExceptionHandler.h"
+ #include "EmergencySaveDlg.h"
  
  #ifdef _DEBUG
***************
*** 389,418 ****
  void CGMEApp::EmergencyTerminate()
  {
! 	theApp.EmergencySave();
  }
  
! bool CGMEApp::EmergencySave()
! {	
  	CGMEEventLogger::LogGMEEvent("EMERGENCY EVENT\r\n");
  	if (mgaProject && (proj_type_is_mga || proj_type_is_xmlbackend)) {
! 		CString embackupname = currentConnection;
! 		int p = embackupname.ReverseFind('.');
! 		if ((p == -1) || embackupname.Find('\\', p) != -1)
! 			p = embackupname.GetLength();
! 		CString emcode("-emergency");
! 		static emnum;
! 		char emfield[10];
! 		sprintf(emfield, "%d", ++emnum);
! 		emcode += emfield;
! 		embackupname.Insert(p, emcode);
  #pragma warning(disable: 4310) // cast truncates constant value
! 		HRESULT hr = mgaProject->Save(PutInBstr(embackupname), VARIANT_TRUE);
  #pragma warning(default: 4310) // cast truncates constant value
  		if (proj_type_is_xmlbackend) {
! 			AfxMessageBox("Emergency event. Please, restart GME. Your current work is found in the local checkout directory.");
  		} else {
! 			char buf[200];
! 			sprintf(buf, "Emergency event. Your current work %s been saved to %s.\nThe original project file has not been modified.\nWe apologize for the inconvenience.", (hr == S_OK)? "has" : "may have", embackupname);
! 			AfxMessageBox(buf);
  
  			m_RecentProjectList.Add(embackupname);
--- 390,429 ----
  void CGMEApp::EmergencyTerminate()
  {
! 	theApp.EmergencySave(SaveAndBringUpMessageBox);
  }
  
! BOOL CGMEApp::EmergencySave(EmergencySaveMode saveMode)
! {
  	CGMEEventLogger::LogGMEEvent("EMERGENCY EVENT\r\n");
+ 	CString emergencySaveMsg;
+ 	CString embackupname;
  	if (mgaProject && (proj_type_is_mga || proj_type_is_xmlbackend)) {
! 		if (saveMode == DoTheSaveOnly && emergencyBackupName.GetLength() > 0) {
! 			embackupname = emergencyBackupName;
! 		} else {
! 			embackupname = currentConnection;
! 			int p = embackupname.ReverseFind('.');
! 			if ((p == -1) || embackupname.Find('\\', p) != -1)
! 				p = embackupname.GetLength();
! 			CString emcode("-emergency");
! 			static emnum;
! 			char emfield[10];
! 			sprintf(emfield, "%d", ++emnum);
! 			emcode += emfield;
! 			embackupname.Insert(p, emcode);
! 		}
! 		HRESULT hr = S_OK;
! 		if (saveMode == SaveAndBringUpMessageBox || saveMode == DoTheSaveOnly) {
  #pragma warning(disable: 4310) // cast truncates constant value
! 			hr = mgaProject->Save(PutInBstr(embackupname), VARIANT_TRUE);
  #pragma warning(default: 4310) // cast truncates constant value
+ 			emergencyBackupName.Empty();
+ 		}
  		if (proj_type_is_xmlbackend) {
! 			if (saveMode != DoTheSaveOnly)
! 				emergencySaveMsg.LoadString(IDS_EMERGENCY_XML);
  		} else {
! 			if (saveMode != DoTheSaveOnly)
! 				emergencySaveMsg.FormatMessage(IDS_EMERGENCY_PROJ, (hr == S_OK)? "has" : "may have", embackupname);
  
  			m_RecentProjectList.Add(embackupname);
***************
*** 420,426 ****
  		}
  	} else {
! 		AfxMessageBox("Emergency event. Please, restart GME.");
  	}
! 	return true;
  }
  
--- 431,456 ----
  		}
  	} else {
! 		if (saveMode != DoTheSaveOnly)
! 			emergencySaveMsg.LoadString(IDS_EMERGENCY_NOPROJ);
  	}
! 	if (saveMode == SaveAndBringUpMessageBox) {
! 		AfxMessageBox(emergencySaveMsg);
! 	} else if (saveMode == BringUpDialogOnly) {
! 		emergencyBackupName = embackupname;
! 		CString miniDumpMsg;
! 		miniDumpMsg.LoadString(IDS_CRASHDUMP_INFO);
! 		EmergencySaveDlg cdl(NULL);
! 		cdl.SetStrings(emergencySaveMsg, miniDumpMsg);
! 		if (cdl.DoModal() == IDOK) {
! 			if (cdl.ShouldWriteMiniDump())
! 				OutputDebugString("Should write Minidump\n");
! 			else
! 				OutputDebugString("Should not write Minidump\n");
! 		} else {
! 			OutputDebugString("Escaped\n");
! 		}
! 		return cdl.ShouldWriteMiniDump();
! 	}
! 	return TRUE;
  }
  
***************
*** 431,440 ****
  	} else {
  		__try {
- 			OutputDebugString("CWinApp::Run\n");
  			return CWinApp::Run();
  		}
  		__except(ExceptionHandler::UnhandledExceptionFilterOfMain(GetExceptionCode(), GetExceptionInformation())) {
! 			EmergencySave();
! 
  
  			// Modified by Peter:let's exit after emergency event
--- 461,468 ----
  	} else {
  		__try {
  			return CWinApp::Run();
  		}
  		__except(ExceptionHandler::UnhandledExceptionFilterOfMain(GetExceptionCode(), GetExceptionInformation())) {
! 			EmergencySave(DoTheSaveOnly);
  
  			// Modified by Peter:let's exit after emergency event

Index: GME.vcproj
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Gme/GME.vcproj,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** GME.vcproj	8 Apr 2008 21:30:45 -0000	1.8
--- GME.vcproj	10 Apr 2008 23:02:08 -0000	1.9
***************
*** 437,440 ****
--- 437,443 ----
  			</File>
  			<File
+ 				RelativePath=".\EmergencySaveDlg.cpp">
+ 			</File>
+ 			<File
  				RelativePath="EnumVar.cpp">
  				<FileConfiguration
***************
*** 1479,1482 ****
--- 1482,1488 ----
  			<File
  				RelativePath=".\DynMenu.h">
+ 			</File>
+ 			<File
+ 				RelativePath=".\EmergencySaveDlg.h">
  			</File>
  			<File

--- NEW FILE: EmergencySaveDlg.h ---
#if !defined(AFX_DIALOGLIST_H__56AB0CFA_ADAB_49E8_8215_2BECE389A707__INCLUDED_)
#define AFX_DIALOGLIST_H__56AB0CFA_ADAB_49E8_8215_2BECE389A707__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// EmergencySaveDlg.h : header file
//

/////////////////////////////////////////////////////////////////////////////
// EmergencySaveDlg dialog

#include "resource.h"


class EmergencySaveDlg: public CDialog
{
	DECLARE_DYNAMIC(EmergencySaveDlg)

public:
	EmergencySaveDlg(CWnd* pParent = NULL);
	virtual ~EmergencySaveDlg();

// Dialog Data
	//{{AFX_DATA(EmergencySaveDlg)
	enum { IDD = IDD_EMERGENCY_DIALOG };
	CButton	m_buttonOK;
	CButton	m_checkboxMinidump;
	CStatic	m_staticEmergencySaveInfo;
	CStatic	m_staticMinidumpSaveInfo;
	BOOL	m_minidumpChecked;
	CString	m_strEmergencySaveInfo;
	CString	m_strMinidumpSaveInfo;
	//}}AFX_DATA

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(EmergencySaveDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	afx_msg void OnMinidumpCheckboxClicked();
	//}}AFX_VIRTUAL


	// Generated message map functions
	//{{AFX_MSG(EmergencySaveDlg)
	virtual BOOL OnInitDialog();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()

public:
	void	SetStrings(CString emergencySaveInfo, CString minidumpSaveInfo);
	BOOL	ShouldWriteMiniDump(void);
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_DIALOGLIST_H__56AB0CFA_ADAB_49E8_8215_2BECE389A707__INCLUDED_)

Index: ExceptionHandler.cpp
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Gme/ExceptionHandler.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** ExceptionHandler.cpp	8 Apr 2008 21:30:45 -0000	1.1
--- ExceptionHandler.cpp	10 Apr 2008 23:02:08 -0000	1.2
***************
*** 36,39 ****
--- 36,40 ----
  #include "ExceptionXMLTags.h"
  #include "GMEVersion.h"
+ #include "GMEApp.h"
  #include <float.h>
  
***************
*** 432,441 ****
  	EnterCriticalSection(&m_crashDumpLock);
  
! 	LoadDbgHelpDll();
! 	GenerateUserStreamData(msg, pExp);
! 	OutputDebugString(m_UserCrashData);
! 	TCHAR generatedFileName[MAX_PATH];
! 	GenerateFileName(generatedFileName);
! 	GenerateMiniDump(pExp, generatedFileName);
  
  	LeaveCriticalSection(&m_crashDumpLock);
--- 433,446 ----
  	EnterCriticalSection(&m_crashDumpLock);
  
! 	m_createMinidump = theApp.EmergencySave(CGMEApp::BringUpDialogOnly);
! 
! 	if (m_createMinidump) {
! 		LoadDbgHelpDll();
! 		GenerateUserStreamData(msg, pExp);
! 		OutputDebugString(m_UserCrashData);
! 		TCHAR generatedFileName[MAX_PATH];
! 		GenerateFileName(generatedFileName);
! 		GenerateMiniDump(pExp, generatedFileName);
! 	}
  
  	LeaveCriticalSection(&m_crashDumpLock);

Index: GME.rc
===================================================================
RCS file: /project/gme-repository/GMESRC/GME/Gme/GME.rc,v
retrieving revision 1.168
retrieving revision 1.169
diff -C2 -d -r1.168 -r1.169
*** GME.rc	8 Apr 2008 21:30:45 -0000	1.168
--- GME.rc	10 Apr 2008 23:02:08 -0000	1.169
***************
*** 243,264 ****
          MENUITEM "&About GME...",               ID_APP_ABOUT
      END
- #ifdef _DEBUG
-     POPUP "&Debug"
-     BEGIN
-         POPUP "Crash Test"
-         BEGIN
-             MENUITEM "Illegal write",               ID_CRASHTEST_ILLEGALWRITE
- 
-             MENUITEM "Illegal Read",                ID_CRASHTEST_ILLEGALREAD
-             MENUITEM "Illegal Read in C runtime",   ID_CRASHTEST_ILLEGALREADINCRUNTIME
- 
-             MENUITEM "Illegal code read (jump to zero address)", 
-                                                     ID_CRASHTEST_ILLEGALCODEREAD
- 
-             MENUITEM "Divide by zero",              ID_CRASHTEST_DIVIDEBYZERO
- 
-         END
-     END
- #endif
  END
  
--- 243,246 ----
***************
*** 380,401 ****
          MENUITEM "&Arrange Icons",              ID_WINDOW_ARRANGE
      END
- #ifdef _DEBUG
-     POPUP "&Debug"
-     BEGIN
-         POPUP "Crash Test"
-         BEGIN
-             MENUITEM "Illegal write",               ID_CRASHTEST_ILLEGALWRITE
- 
-             MENUITEM "Illegal Read",                ID_CRASHTEST_ILLEGALREAD
-             MENUITEM "Illegal Read in C runtime",   ID_CRASHTEST_ILLEGALREADINCRUNTIME
- 
-             MENUITEM "Illegal code read (jump to zero address)", 
-                                                     ID_CRASHTEST_ILLEGALCODEREAD
- 
-             MENUITEM "Divide by zero",              ID_CRASHTEST_DIVIDEBYZERO
- 
-         END
-     END
- #endif
      POPUP "&Help"
      BEGIN
--- 362,365 ----
***************
*** 653,656 ****
--- 617,634 ----
  END
  
+ IDR_CRASH_TEST_MENU MENU 
+ BEGIN
+     POPUP "Crash Test"
+     BEGIN
+         MENUITEM "Illegal write",               ID_CRASHTEST_ILLEGALWRITE
+         MENUITEM "Illegal Read",                ID_CRASHTEST_ILLEGALREAD
+         MENUITEM "Illegal Read in C runtime",   ID_CRASHTEST_ILLEGALREADINCRUNTIME
+ 
+         MENUITEM "Illegal code read (jump to zero address)", 
+                                                 ID_CRASHTEST_ILLEGALCODEREAD
+         MENUITEM "Divide by zero",              ID_CRASHTEST_DIVIDEBYZERO
+     END
+ END
+ 
  
  /////////////////////////////////////////////////////////////////////////////
***************
*** 743,747 ****
  FONT 10, "MS Sans Serif", 0, 0, 0x0
  BEGIN
!     CTEXT           GME_VERSION_STR,IDC_STATIC,7,65,165,8,SS_NOPREFIX
      CTEXT           "Copyright © 2000-2008 Vanderbilt University",IDC_STATIC,
                      7,135,165,8
--- 721,725 ----
  FONT 10, "MS Sans Serif", 0, 0, 0x0
  BEGIN
!     CTEXT           "8.2.22",IDC_STATIC,7,65,165,8,SS_NOPREFIX
      CTEXT           "Copyright © 2000-2008 Vanderbilt University",IDC_STATIC,
                      7,135,165,8
***************
*** 1163,1166 ****
--- 1141,1159 ----
  END
  
+ IDD_EMERGENCY_DIALOG DIALOGEX 0, 0, 315, 147
+ STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | 
+     WS_SYSMENU
+ CAPTION "Emergency Save and CrashDump"
+ FONT 8, "MS Shell Dlg", 400, 0, 0x1
+ BEGIN
+     DEFPUSHBUTTON   "OK",IDOK,258,126,50,14
+     CONTROL         "Write MiniDump crash report",IDC_MINIDUMP_CHECK,"Button",
+                     BS_AUTOCHECKBOX | WS_TABSTOP,7,98,301,17
+     LTEXT           "Emergency Save Information",IDC_EMERGENCY_INFO_STATIC,7,
+                     7,301,24
+     LTEXT           "MiniDump crash dump information",
+                     IDC_MINIDUMP_INFO_STATIC,7,35,301,57
+ END
+ 
  
  /////////////////////////////////////////////////////////////////////////////
***************
*** 1367,1370 ****
--- 1360,1371 ----
          BOTTOMMARGIN, 79
      END
+ 
+     IDD_EMERGENCY_DIALOG, DIALOG
+     BEGIN
+         LEFTMARGIN, 7
+         RIGHTMARGIN, 308
+         TOPMARGIN, 7
+         BOTTOMMARGIN, 140
+     END
  END
  #endif    // APSTUDIO_INVOKED
***************
*** 1725,1728 ****
--- 1726,1733 ----
  BEGIN
      ID_BACKALONGCONN        "Jump to the source of an incoming connection\nJump Along Incoming Connection"
+     IDS_EMERGENCY_XML       "Emergency event. Please, restart GME. Your current work is found in the local checkout directory."
+     IDS_EMERGENCY_PROJ      "Emergency event. Your current work %1 been saved to %2.\nThe original project file has not been modified.\nWe apologize for the inconvenience."
+     IDS_EMERGENCY_NOPROJ    "Emergency event. Please, restart GME."
+     IDS_CRASHDUMP_INFO      "The program can generate a Microsoft MiniDump type crash report about this particular crash issue. Developers can use this to analyze the crash, so it can significantly improve the quality of the program. The native Micorosft and the XML data in the file contains call stack, register dump, and other crash related information. We need your help to improve GME! If your project is not classified, please check the checkbox below to generate the crash dump and send us the resulting .dmp file. Thanks for your help and we appologize about the crash!"
  END
  



More information about the GME-commit mailing list