Your APP::LOOP function can be a very light weight function if you like. Once APP::BEGIN has finished preparing all your variables, data, media loading, e.t.c your loop code can simply be a sequence of high level function calls, i.e:
void app::Loop ( void )
{
switch ( app::m_iState )
{
case 1 : TitleLoop(); break;
case 2 : MoreLoadingLoop(); break;
case 3 : GameLoop(); break;
case 4 : GameOverLoop(); break;
case 5 : GameWinLoop(); break;
case 6 : ResetGame(); break;
}
}
As you can see, the loop becomes a very nice piece of code to read, breaking up your logic as you see fit. The switch case approach of controlling your logic is often called a 'state engine'.
I drink tea, and in my spare time I write software.