⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mgt.cpp

📁 通过VC源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
* Inputs:
*       BYTE status: Status byte
* Result: void
*       
* Effect: 
*       Sets the state of the controls to the input status flags
* Notes:
*	Uses optimized update to reduce flicker
****************************************************************************/

void CSimulatorDlg::OutStatusToControls(BYTE status)
    {
     optimizedSet(c_ErrOut,  status, REGISTER_OUT_STATUS_ERR );
     optimizedSet(c_UndOut,  status, REGISTER_OUT_STATUS_UND );
     optimizedSet(c_BusyOut, status, REGISTER_OUT_STATUS_BUSY);
     optimizedSet(c_IntOut,  status, REGISTER_OUT_STATUS_INT );
     optimizedSet(c_DoneOut, status, REGISTER_OUT_STATUS_DONE);
     updateControls(FALSE); // handle any induced dependencies
    }

/****************************************************************************
*                      CSimulatorDlg::OutControlsToStatus
* Result: BYTE
*       A status byte representing the current state in the controls
****************************************************************************/

BYTE CSimulatorDlg::OutControlsToStatus()
    {
     BYTE result = 0;
     if(c_ErrOut.GetCheck() == BST_CHECKED)
	result |= REGISTER_OUT_STATUS_ERR;
     if(c_UndOut.GetCheck() == BST_CHECKED)
	result |= REGISTER_OUT_STATUS_UND;
     if(c_BusyOut.GetCheck() == BST_CHECKED)
	result |= REGISTER_OUT_STATUS_BUSY;
     if(c_IntOut.GetCheck() == BST_CHECKED)
	result |= REGISTER_OUT_STATUS_INT;
     if(c_DoneOut.GetCheck() == BST_CHECKED)
	result |= REGISTER_OUT_STATUS_DONE;
     return result;
    }

/****************************************************************************
*                       CSimulatorDlg::OnUpdateControls
* Inputs:
*       WPARAM: ignored
*	LPARAM: ignored
* Result: LRESULT
*       void, 0 always
* Effect: 
*       Updates the controls
****************************************************************************/

LRESULT CSimulatorDlg::OnUpdateControls(WPARAM, LPARAM)
    {
     updateControls();
     return 0;
    }

/****************************************************************************
*                        CSimulatorDlg::logErrorChange
* Inputs:
*       CButton & ctl: Control that has changed
* Result: void
*       
* Effect: 
*       Logs the error injection control state change
****************************************************************************/

void CSimulatorDlg::logErrorChange(CButton & ctl)
    {
     CString s;
     ctl.GetWindowText(s);
     TraceItem * item = new TraceItem(TRACE_TYPE_ANNOTATION, ctl.GetCheck(), s);
     c_Trace.AddString(item);
    }

/****************************************************************************
*                          CSimulatorDlg::OnAppAbout
* Result: void
*       
* Effect: 
*       ABOUT box
****************************************************************************/

void CSimulatorDlg::OnAppAbout() 
{
 doAbout();	
}

/****************************************************************************
*                          CSimulatorDlg::OnFileExit
* Result: void
*       
* Effect: 
*       Exits the program
****************************************************************************/

void CSimulatorDlg::OnFileExit() 
{
 OnOK();
}

/****************************************************************************
*                          CSimulatorDlg::OnFileSave
* Result: void
*       
* Effect: 
*       Saves the contents of the transcript
****************************************************************************/

void CSimulatorDlg::OnFileSave() 
{
 doSave(TRUE);
 c_Trace.SetModified(FALSE);
}

/****************************************************************************
*                         CSimulatorDlg::OnFileSaveAs
* Result: void
*       
* Effect: 
*       Saves the contents of the trace buffer
****************************************************************************/

void CSimulatorDlg::OnFileSaveAs() 
{
 doSave(FALSE);
 c_Trace.SetModified(FALSE);
}

/****************************************************************************
*                         CSimulatorDlg::OnHelpIndex
* Result: void
*       
* Effect: 
*       Calls Help system
****************************************************************************/

void CSimulatorDlg::OnHelpIndex() 
{
 WinHelp(0, HELP_CONTENTS);	
}

/****************************************************************************
*                           CSimulatorDlg::OnDebug
* Result: void
*       
* Effect: 
*       Toggles the debug flag
****************************************************************************/

void CSimulatorDlg::OnDebug() 
{
 debug = !debug;	
}

void CSimulatorDlg::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu) 
{
	CDialog::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
	
 	CMenu * menu = GetMenu();

 	menu->EnableMenuItem(ID_EDIT_CLEAR, c_Trace.GetCount() > 0 
						? MF_ENABLED
						: MF_GRAYED);

	menu->EnableMenuItem(ID_FILE_SAVE, c_Trace.GetCount() > 0 &&
					   c_Trace.GetModified()
					   	? MF_ENABLED
						: MF_GRAYED);

	menu->EnableMenuItem(ID_FILE_SAVE_AS, c_Trace.GetCount() > 0
						? MF_ENABLED
						: MF_GRAYED);
	
	menu->CheckMenuItem(IDM_DEBUG, debug ? MF_CHECKED : MF_UNCHECKED);

	menu->EnableMenuItem(IDM_SETUP_IRQ, manual ? MF_ENABLED : MF_GRAYED);
}

/****************************************************************************
*                         CSimulatorDlg::OnOpenFailed
* Inputs:
*       WPARAM: ignored
*	LPARAM lParam: GetLastError()
* Result: LRESULT
*       0, always
* Effect: 
*       Notifies user that the device open failed
****************************************************************************/

LRESULT CSimulatorDlg::OnOpenFailed(WPARAM, LPARAM lParam)
    {
     CString s;
     s.LoadString(IDS_OPEN_FAILED);
     s += _T("\r\n");
     s += formatError(lParam);
     
     AfxMessageBox(s, MB_ICONERROR | MB_OK);
     return 0;
    }

/****************************************************************************
*                            CSimulatorDlg::doSave
* Inputs:
*       BOOL mode: TRUE to Save, FALSE to SaveAs
* Result: void
*       
* Effect: 
*       Does a save
****************************************************************************/

void CSimulatorDlg::doSave(BOOL mode)
    {
     BOOL prompt = FALSE;

     if(mode)
        { /* Save */
	 if(SaveFileName.GetLength() == 0)
	    { /* no file name set */
	     prompt = TRUE;
	    } /* no file name set */
	} /* Save */
     else
        { /* SaveAs */
	 prompt = TRUE;
	} /* SaveAs */

     CString name;
     if(prompt)
        { /* get file name */
	 CString filter;
	 filter.LoadString(IDS_FILTER);
	 CFileDialog dlg(FALSE, _T(".trc"), NULL, 
	 		 OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
	                 filter);

         CString s;
	 s.LoadString(mode ? IDS_FILE_SAVE : IDS_FILE_SAVE_AS);
	 dlg.m_ofn.lpstrTitle = s;

	 switch(dlg.DoModal())
	    { /* domodal */
	     case 0: // should never happen
	     case IDCANCEL:
		     return;
	    } /* domodal */

	 // We get here, it must be IDOK

	 name = dlg.GetPathName();
	} /* get file name */
     else
        { /* already has name */
	 name = SaveFileName;
	} /* already has name */

     TRY
	{
	 CStdioFile f(name, CFile::modeCreate | CFile::modeWrite | CFile::shareExclusive);
	 for(int i = 0; i < c_Trace.GetCount(); i++)
	    { /* write each */
	     TraceItem * e = (TraceItem *)c_Trace.GetItemDataPtr(i);
	     f.WriteString(e->display(c_Trace.getTimeBase()));
	    } /* write each */

	 f.Close();

	 SaveFileName = name;

	 c_Trace.SetModified(FALSE);
	}
     CATCH(CFileException, e)
        { /* error */
	 AfxMessageBox(IDS_FILE_OPEN_FAILED, MB_ICONERROR | MB_OK);
	 // TODO: Make this report a meaningful error (it's 5am and I want
	 // to finish this before I leave for a trip later today!)
	 return; // return without doing anything further
	} /* error */
     END_CATCH
     
    }

/****************************************************************************
*                   CSimulatorDlg::OpenRegisterTransaction
* Inputs:
*       LPCTSTR where: Trace string
* Result: void
*       
* Effect: 
*       Opens a register transaction
****************************************************************************/

void CSimulatorDlg::OpenRegisterTransaction(LPCTSTR where)
    {
     if(debug)
        { /* debug */
	 CString s;
	 s.Format(_T("(((Register (%s)"), where);
	 TraceItem * e = new TraceItem(TRACE_TYPE_COMMENT, s);
	 c_Trace.AddString(e);
	} /* debug */
     registers.read();

     if(regdisp != NULL)
	regdisp->SendMessage(UWM_UPDATE_REGS, 0, (LPARAM)&registers);
    }

/****************************************************************************
*                   CSimulatorDlg::CloseRegisterTransaction
* Inputs:
*       LPCTSTR where: Trace string
* Result: void
*       
* Effect: 
*       Closes a register transaction
****************************************************************************/

void CSimulatorDlg::CloseRegisterTransaction(LPCTSTR where)
    {
     if(debug)
        { /* debug */
	 CString s;
	 s.Format(_T("))) Register (%s)"), where);
	 TraceItem * e = new TraceItem(TRACE_TYPE_COMMENT, s);
	 c_Trace.AddString(e);
	} /* debug */
     if(regdisp != NULL)
	regdisp->SendMessage(UWM_UPDATE_REGS, 0, (LPARAM)&registers);
     registers.write();
    }

/****************************************************************************
*                         CSimulatorDlg::OnRegClose
* Inputs:
*       WPARAM: ignored
*	LPARAM: ignored
* Result: LRESULT
*       0, always
* Effect: 
*       The register display has closed
****************************************************************************/

LRESULT CSimulatorDlg::OnRegClose(WPARAM, LPARAM)
    {
     regdisp = NULL;
     return 0;
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -