class TMyApp : public TApplication
{
 public:
  TMyApp();

};

TMyApp::TMyApp() :
        TProgInit(*TMyApp::initStatusLine,&TMyApp::initMenuBar, &TMyApp::initDeskTop)
{  };

TApplication::TApplication() :
    TProgInit( TApplication::initStatusLine,
                  TApplication::initMenuBar,
                  TApplication::initDeskTop
                )
{
    initHistory();
}


TProgInit::TProgInit( TStatusLine *(*cStatusLine)( TRect ), 
                            TMenuBar *(*cMenuBar)( TRect ), 
                            TDeskTop *(*cDeskTop )( TRect ) 
                          ) :                               
    createStatusLine( cStatusLine ),                        
    createMenuBar( cMenuBar ),                              
    createDeskTop( cDeskTop )                               
{                                                           
}

class TApplication : public TProgram
{

protected:

    TApplication();
    virtual ~TApplication();

    virtual void suspend();
    virtual void resume();

};

