/*
* SimpleApp.cpp
* Autor: Pawe Gala
*/

#include <e32base.h>
#include <e32cons.h>    // CConsoleBase

// Definicje panik
_LIT( KKategoria, "SimpleApp" );

enum TTypPaniki
    {
    EBrakStosuCleanupStack = 1,
    EBrakKonsoli
    };

// Wskanik na obiekt konsoli
LOCAL_D CConsoleBase* konsola;

// Kod waciwy programu
LOCAL_C void MainL()
    {
    // ...
    }

LOCAL_C void UtworzKonsoleL()
    {
    // Okno konsoli zajmowa bdzie powierzchni caego ekranu.
    _LIT( KTekstTytulowy, "Konsola SimpleApp" );
    konsola = Console::NewL( KTekstTytulowy, TSize( KConsFullScreen, KConsFullScreen ) );
    }

LOCAL_C void ActiveMainL()
    {
    CActiveScheduler* zarzAkt = new( ELeave ) CActiveScheduler();
    CActiveScheduler::Install( zarzAkt );
    CleanupStack::PushL( zarzAkt );
    
    MainL();
    
    CActiveScheduler::Start();
    CleanupStack::PopAndDestroy( zarzAkt );
    }

// Punkt wejcia do procesu aplikacji  funkcja wywoywana przez system operacyjny
GLDEF_C TInt E32Main()
    {
    __UHEAP_MARK;
    CTrapCleanup* cleanupStack = CTrapCleanup::New();
    __ASSERT_ALWAYS( cleanupStack, User::Panic( KKategoria, EBrakStosuCleanupStack ) );
    
    TRAPD( blad, UtworzKonsoleL() );
    __ASSERT_ALWAYS( konsola, User::Panic( KKategoria, EBrakStosuCleanupStack ) );
    
    TRAP( blad, ActiveMainL() );
    if( blad )
        {
        _LIT( KomunikatBledu, "Blad w funkcji glownej (%d)\r\n" );
        konsola->Printf( KomunikatBledu, blad );
        
        // Prba obsugi bdu
        
        _LIT( KZakonczProgram, "Wcisnij dowolny klawisz..." );
        konsola->Printf( KZakonczProgram );
        konsola->Getch();
        }
    
    delete konsola;
    delete cleanupStack;
    __UHEAP_MARKEND;
    return KErrNone;
    }
