From d285dc45951b519af500a8bf31ebd162688cf1d6 Mon Sep 17 00:00:00 2001 From: Rom Walton Date: Fri, 3 Dec 2004 21:35:25 +0000 Subject: [PATCH] *** empty log message *** svn path=/trunk/boinc/; revision=4732 --- checkin_notes | 8 +++ clientgui/BOINCGUIApp.cpp | 17 +++-- clientgui/MainDocument.cpp | 2 - clientgui/MainFrame.cpp | 128 ++++++++++++++++++------------------- clientgui/stdwx.h | 1 + 5 files changed, 83 insertions(+), 73 deletions(-) diff --git a/checkin_notes b/checkin_notes index 56fff69068..bcc93e29ff 100755 --- a/checkin_notes +++ b/checkin_notes @@ -20622,3 +20622,11 @@ Bruce 3 Dec 2004 - Enabled automatic emailing of CVS diffs to the boinc_cvs email list. This is done by adding a 'syncmail' script in the CVSROOT/ directory and adding an extra line at the end of CVSROOT/loginfo. + +Rom 3 Dec 2004 + - Change which wxLogTrace prototype we are using in MainFrame.cpp and + enable that trace mask in BOINCGUIApp.cpp + + clientgui/ + BOINCGUIApp.cpp + MainFrame.cpp diff --git a/clientgui/BOINCGUIApp.cpp b/clientgui/BOINCGUIApp.cpp index 5d17661673..6ad3ce0fe4 100644 --- a/clientgui/BOINCGUIApp.cpp +++ b/clientgui/BOINCGUIApp.cpp @@ -38,18 +38,17 @@ IMPLEMENT_DYNAMIC_CLASS(CBOINCGUIApp, wxApp) bool CBOINCGUIApp::OnInit() { + // Setup application and company information + SetVendorName(wxT("Space Sciences Laboratory, U.C. Berkeley")); + SetAppName(wxT("BOINC Manager")); + // Setup variables with default values m_bBOINCStartedByManager = false; m_bFrameVisible = true; m_lBOINCCoreProccessId = 0; - // Setup application and company information - SetVendorName(wxT("Space Sciences Laboratory, U.C. Berkeley")); - SetAppName(wxT("BOINC Manager")); - - // Commandline parsing is done in wxApp::OnInit() - if (!wxApp::OnInit()) - return false; + // Enable Trace Masks + wxLog::AddTraceMask( wxT("Function Start/End") ); // Enable the in memory virtual file system for // storing images @@ -58,6 +57,10 @@ bool CBOINCGUIApp::OnInit() // Enable known image types wxImage::AddHandler(new wxXPMHandler); + // Commandline parsing is done in wxApp::OnInit() + if (!wxApp::OnInit()) + return false; + // Initialize the internationalization module m_pLocale = new wxLocale(); wxASSERT(NULL != m_pLocale); diff --git a/clientgui/MainDocument.cpp b/clientgui/MainDocument.cpp index 7f9740c647..be6c4de4f4 100644 --- a/clientgui/MainDocument.cpp +++ b/clientgui/MainDocument.cpp @@ -26,8 +26,6 @@ static volatile const char *BOINCrcsid="$Id$"; #pragma implementation "MainDocument.h" #endif -#include - #include "stdwx.h" #include "BOINCGUIApp.h" #include "MainDocument.h" diff --git a/clientgui/MainFrame.cpp b/clientgui/MainFrame.cpp index a81692b065..4a5a7f8fd4 100644 --- a/clientgui/MainFrame.cpp +++ b/clientgui/MainFrame.cpp @@ -79,8 +79,8 @@ END_EVENT_TABLE () CMainFrame::CMainFrame() { - wxLogTrace(wxT("CMainFrame::CMainFrame - Default Constructor Function Begin")); - wxLogTrace(wxT("CMainFrame::CMainFrame - Default Constructor Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::CMainFrame - Default Constructor Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::CMainFrame - Default Constructor Function End")); } @@ -88,7 +88,7 @@ CMainFrame::CMainFrame(wxString strTitle) : wxFrame ((wxFrame *)NULL, -1, strTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE) { - wxLogTrace(wxT("CMainFrame::CMainFrame - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::CMainFrame - Function Begin")); m_pMenubar = NULL; m_pNotebook = NULL; @@ -124,13 +124,13 @@ CMainFrame::CMainFrame(wxString strTitle) : RestoreState(); - wxLogTrace(wxT("CMainFrame::CMainFrame - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::CMainFrame - Function End")); } CMainFrame::~CMainFrame() { - wxLogTrace(wxT("CMainFrame::~CMainFrame - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::~CMainFrame - Function Begin")); wxASSERT(NULL != m_pFrameRenderTimer); wxASSERT(NULL != m_pFrameTaskPanelRenderTimer); @@ -167,13 +167,13 @@ CMainFrame::~CMainFrame() if (m_pMenubar) wxCHECK_RET(DeleteMenu(), _T("Failed to delete menu bar.")); - wxLogTrace(wxT("CMainFrame::~CMainFrame - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::~CMainFrame - Function End")); } bool CMainFrame::CreateMenu() { - wxLogTrace(wxT("CMainFrame::CreateMenu - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::CreateMenu - Function Begin")); // File menu wxMenu *menuFile = new wxMenu; @@ -266,14 +266,14 @@ bool CMainFrame::CreateMenu() ); SetMenuBar(m_pMenubar); - wxLogTrace(wxT("CMainFrame::CreateMenu - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::CreateMenu - Function End")); return true; } bool CMainFrame::CreateNotebook() { - wxLogTrace(wxT("CMainFrame::CreateNotebook - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::CreateNotebook - Function Begin")); // create frame panel wxPanel *pPanel = new wxPanel(this, -1, wxDefaultPosition, wxDefaultSize, @@ -301,7 +301,7 @@ bool CMainFrame::CreateNotebook() CreateNotebookPage( new CViewMessages( m_pNotebook ) ); CreateNotebookPage( new CViewResources( m_pNotebook ) ); - wxLogTrace(wxT("CMainFrame::CreateNotebook - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::CreateNotebook - Function End")); return true; } @@ -309,7 +309,7 @@ bool CMainFrame::CreateNotebook() template < class T > bool CMainFrame::CreateNotebookPage(T pwndNewNotebookPage) { - wxLogTrace(wxT("CMainFrame::CreateNotebookPage - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::CreateNotebookPage - Function Begin")); wxImageList* pImageList; wxInt32 iImageIndex = 0; @@ -329,14 +329,14 @@ bool CMainFrame::CreateNotebookPage(T pwndNewNotebookPage) iImageIndex = pImageList->Add(wxBitmap(pwndNewNotebookPage->GetViewIcon()), wxColour(255, 0, 255)); m_pNotebook->AddPage(pwndNewNotebookPage, pwndNewNotebookPage->GetViewName(), TRUE, iImageIndex); - wxLogTrace(wxT("CMainFrame::CreateNotebookPage - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::CreateNotebookPage - Function End")); return true; } bool CMainFrame::CreateStatusbar() { - wxLogTrace(wxT("CMainFrame::CreateStatusbar - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::CreateStatusbar - Function Begin")); if (m_pStatusbar) return true; @@ -358,23 +358,23 @@ bool CMainFrame::CreateStatusbar() SendSizeEvent(); - wxLogTrace(wxT("CMainFrame::CreateStatusbar - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::CreateStatusbar - Function End")); return true; } bool CMainFrame::DeleteMenu() { - wxLogTrace(wxT("CMainFrame::DeleteMenu - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::DeleteMenu - Function Begin")); - wxLogTrace(wxT("CMainFrame::DeleteMenu - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::DeleteMenu - Function End")); return true; } bool CMainFrame::DeleteNotebook() { - wxLogTrace(wxT("CMainFrame::DeleteNotebook - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::DeleteNotebook - Function Begin")); wxImageList* pImageList; @@ -387,14 +387,14 @@ bool CMainFrame::DeleteNotebook() if (pImageList) delete pImageList; - wxLogTrace(wxT("CMainFrame::DeleteNotebook - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::DeleteNotebook - Function End")); return true; } bool CMainFrame::DeleteStatusbar() { - wxLogTrace(wxT("CMainFrame::DeleteStatusbar - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::DeleteStatusbar - Function Begin")); if (!m_pStatusbar) return true; @@ -406,14 +406,14 @@ bool CMainFrame::DeleteStatusbar() SendSizeEvent(); - wxLogTrace(wxT("CMainFrame::DeleteStatusbar - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::DeleteStatusbar - Function End")); return true; } bool CMainFrame::SaveState() { - wxLogTrace(wxT("CMainFrame::SaveState - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::SaveState - Function Begin")); wxString strBaseConfigLocation = wxString(wxT("/")); wxConfigBase* pConfig = wxConfigBase::Get(FALSE); @@ -461,14 +461,14 @@ bool CMainFrame::SaveState() pConfig->SetPath(strPreviousLocation); } - wxLogTrace(wxT("CMainFrame::SaveState - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::SaveState - Function End")); return true; } bool CMainFrame::RestoreState() { - wxLogTrace(wxT("CMainFrame::RestoreState - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::RestoreState - Function Begin")); wxString strBaseConfigLocation = wxString(wxT("/")); wxConfigBase* pConfig = wxConfigBase::Get(FALSE); @@ -526,24 +526,24 @@ bool CMainFrame::RestoreState() } - wxLogTrace(wxT("CMainFrame::RestoreState - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::RestoreState - Function End")); return true; } void CMainFrame::OnHide( wxCommandEvent& WXUNUSED(event) ) { - wxLogTrace(wxT("CMainFrame::OnHide - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnHide - Function Begin")); Hide(); - wxLogTrace(wxT("CMainFrame::OnHide - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnHide - Function End")); } void CMainFrame::OnActivitySelection( wxCommandEvent& event ) { - wxLogTrace(wxT("CMainFrame::OnActivitySelection - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnActivitySelection - Function Begin")); CMainDocument* pDoc = wxGetApp().GetDocument(); @@ -563,13 +563,13 @@ void CMainFrame::OnActivitySelection( wxCommandEvent& event ) break; } - wxLogTrace(wxT("CMainFrame::OnActivitySelection - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnActivitySelection - Function End")); } void CMainFrame::OnNetworkSelection( wxCommandEvent& event ) { - wxLogTrace(wxT("CMainFrame::OnNetworkSelection - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnNetworkSelection - Function Begin")); CMainDocument* pDoc = wxGetApp().GetDocument(); @@ -591,13 +591,13 @@ void CMainFrame::OnNetworkSelection( wxCommandEvent& event ) break; } - wxLogTrace(wxT("CMainFrame::OnNetworkSelection - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnNetworkSelection - Function End")); } void CMainFrame::OnRunBenchmarks( wxCommandEvent& WXUNUSED(event) ) { - wxLogTrace(wxT("CMainFrame::OnRunBenchmarks - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnRunBenchmarks - Function Begin")); CMainDocument* pDoc = wxGetApp().GetDocument(); wxASSERT(NULL != m_pNotebook); @@ -607,13 +607,13 @@ void CMainFrame::OnRunBenchmarks( wxCommandEvent& WXUNUSED(event) ) m_pNotebook->SetSelection( ID_LIST_MESSAGESVIEW - ID_LIST_BASE ); pDoc->RunBenchmarks(); - wxLogTrace(wxT("CMainFrame::OnRunBenchmarks - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnRunBenchmarks - Function End")); } void CMainFrame::OnSelectComputer( wxCommandEvent& WXUNUSED(event) ) { - wxLogTrace(wxT("CMainFrame::OnSelectComputer - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnSelectComputer - Function Begin")); wxInt32 iRetVal = -1; wxString strMachine = wxEmptyString; @@ -635,23 +635,23 @@ void CMainFrame::OnSelectComputer( wxCommandEvent& WXUNUSED(event) ) wxICON_ERROR ); - wxLogTrace(wxT("CMainFrame::OnSelectComputer - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnSelectComputer - Function End")); } void CMainFrame::OnExit( wxCommandEvent& WXUNUSED(event) ) { - wxLogTrace(wxT("CMainFrame::OnExit - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnExit - Function Begin")); Close(true); - wxLogTrace(wxT("CMainFrame::OnExit - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnExit - Function End")); } void CMainFrame::OnToolsOptions( wxCommandEvent& WXUNUSED(event) ) { - wxLogTrace(wxT("CMainFrame::OnToolsOptions - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnToolsOptions - Function Begin")); CMainDocument* pDoc = wxGetApp().GetDocument(); CDlgOptions* pDlg = new CDlgOptions(this); @@ -732,13 +732,13 @@ void CMainFrame::OnToolsOptions( wxCommandEvent& WXUNUSED(event) ) if (pDlg) pDlg->Destroy(); - wxLogTrace(wxT("CMainFrame::OnToolsOptions - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnToolsOptions - Function End")); } void CMainFrame::OnAbout( wxCommandEvent& WXUNUSED(event) ) { - wxLogTrace(wxT("CMainFrame::OnAbout - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnAbout - Function Begin")); CDlgAbout* pDlg = new CDlgAbout(this); wxASSERT(NULL != pDlg); @@ -748,13 +748,13 @@ void CMainFrame::OnAbout( wxCommandEvent& WXUNUSED(event) ) if (pDlg) pDlg->Destroy(); - wxLogTrace(wxT("CMainFrame::OnAbout - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnAbout - Function End")); } void CMainFrame::OnUpdateActivitySelection( wxUpdateUIEvent& event ) { - wxLogTrace(wxT("CMainFrame::OnUpdateActivitySelection - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnUpdateActivitySelection - Function Begin")); CMainDocument* pDoc = wxGetApp().GetDocument(); wxMenuBar* pMenuBar = GetMenuBar(); @@ -785,13 +785,13 @@ void CMainFrame::OnUpdateActivitySelection( wxUpdateUIEvent& event ) break; } - wxLogTrace(wxT("CMainFrame::OnUpdateActivitySelection - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnUpdateActivitySelection - Function End")); } void CMainFrame::OnUpdateNetworkSelection( wxUpdateUIEvent& event ) { - wxLogTrace(wxT("CMainFrame::OnUpdateNetworkSelection - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnUpdateNetworkSelection - Function Begin")); CMainDocument* pDoc = wxGetApp().GetDocument(); wxMenuBar* pMenuBar = GetMenuBar(); @@ -822,13 +822,13 @@ void CMainFrame::OnUpdateNetworkSelection( wxUpdateUIEvent& event ) break; } - wxLogTrace(wxT("CMainFrame::OnUpdateNetworkSelection - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnUpdateNetworkSelection - Function End")); } void CMainFrame::OnIdle( wxIdleEvent& event ) { - wxLogTrace(wxT("CMainFrame::OnIdle - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnIdle - Function Begin")); CMainDocument* pDoc = wxGetApp().GetDocument(); @@ -840,26 +840,26 @@ void CMainFrame::OnIdle( wxIdleEvent& event ) event.Skip(); - wxLogTrace(wxT("CMainFrame::OnIdle - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnIdle - Function End")); } void CMainFrame::OnClose( wxCloseEvent& event ) { - wxLogTrace(wxT("CMainFrame::OnClose - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnClose - Function Begin")); if ( !event.CanVeto() ) Destroy(); else Hide(); - wxLogTrace(wxT("CMainFrame::OnClose - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnClose - Function End")); } void CMainFrame::OnSize( wxSizeEvent& event ) { - wxLogTrace(wxT("CMainFrame::OnSize - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnSize - Function Begin")); if ( IsShown() ) { @@ -886,13 +886,13 @@ void CMainFrame::OnSize( wxSizeEvent& event ) event.Skip(); - wxLogTrace(wxT("CMainFrame::OnSize - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnSize - Function End")); } void CMainFrame::OnChar( wxKeyEvent& event ) { - wxLogTrace(wxT("CMainFrame::OnChar - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnChar - Function Begin")); if ( IsShown() ) { @@ -912,13 +912,13 @@ void CMainFrame::OnChar( wxKeyEvent& event ) event.Skip(); - wxLogTrace(wxT("CMainFrame::OnChar - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnChar - Function End")); } void CMainFrame::OnNotebookSelectionChanged( wxNotebookEvent& event ) { - wxLogTrace(wxT("CMainFrame::OnNotebookSelectionChanged - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnNotebookSelectionChanged - Function Begin")); if ( (-1 != event.GetSelection()) && IsShown() ) { @@ -940,13 +940,13 @@ void CMainFrame::OnNotebookSelectionChanged( wxNotebookEvent& event ) event.Skip(); - wxLogTrace(wxT("CMainFrame::OnNotebookSelectionChanged - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnNotebookSelectionChanged - Function End")); } void CMainFrame::OnListSelected( wxListEvent& event ) { - wxLogTrace(wxT("CMainFrame::OnListSelected - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnListSelected - Function Begin")); if ( IsShown() ) { @@ -966,13 +966,13 @@ void CMainFrame::OnListSelected( wxListEvent& event ) event.Skip(); - wxLogTrace(wxT("CMainFrame::OnListSelected - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnListSelected - Function End")); } void CMainFrame::OnListDeselected( wxListEvent& event ) { - wxLogTrace(wxT("CMainFrame::OnListDeselected - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnListDeselected - Function Begin")); if ( IsShown() ) { @@ -992,13 +992,13 @@ void CMainFrame::OnListDeselected( wxListEvent& event ) event.Skip(); - wxLogTrace(wxT("CMainFrame::OnListDeselected - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnListDeselected - Function End")); } void CMainFrame::OnFrameRender( wxTimerEvent &event ) { - wxLogTrace(wxT("CMainFrame::OnFrameRender - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnFrameRender - Function Begin")); if ( IsShown() ) { @@ -1035,13 +1035,13 @@ void CMainFrame::OnFrameRender( wxTimerEvent &event ) event.Skip(); - wxLogTrace(wxT("CMainFrame::OnFrameRender - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnFrameRender - Function End")); } void CMainFrame::OnListPanelRender( wxTimerEvent &event ) { - wxLogTrace(wxT("CMainFrame::OnListPanelRender - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnListPanelRender - Function Begin")); if ( IsShown() ) { @@ -1061,13 +1061,13 @@ void CMainFrame::OnListPanelRender( wxTimerEvent &event ) event.Skip(); - wxLogTrace(wxT("CMainFrame::OnListPanelRender - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnListPanelRender - Function End")); } void CMainFrame::OnTaskPanelRender( wxTimerEvent &event ) { - wxLogTrace(wxT("CMainFrame::OnTaskPanelRender - Function Begin")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnTaskPanelRender - Function Begin")); if ( IsShown() ) { @@ -1087,6 +1087,6 @@ void CMainFrame::OnTaskPanelRender( wxTimerEvent &event ) event.Skip(); - wxLogTrace(wxT("CMainFrame::OnTaskPanelRender - Function End")); + wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnTaskPanelRender - Function End")); } diff --git a/clientgui/stdwx.h b/clientgui/stdwx.h index 486999d00b..590efafe89 100644 --- a/clientgui/stdwx.h +++ b/clientgui/stdwx.h @@ -124,6 +124,7 @@ #include #include + // C++ headers #include #include