///////////////////////////////////////////////////////////
//                                                       //
//  PC MAGAZIN - Demo Projekt                            //
//                                                       //
//  Routinen für die MIDAS Schnittstelle                 //
//                                                       //
///////////////////////////////////////////////////////////
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <mmsystem.h>
#include <ddeml.h>
#include <process.h>
#include <stdio.h>
#include "midasdll.h"

// Gibt Fehlermeldung aus
void MIDASerror(void)
{
    char *errorMessage;

    errorMessage = MIDASgetErrorMessage( MIDASgetLastError() );

    MessageBox(NULL, errorMessage, "MIDAS Fehler !",
        MB_APPLMODAL | MB_ICONSTOP | MB_OK);
    
	MIDASclose();
    
	ExitProcess(1);
}

// Stoppt das Abspielen eines Modules und gibt den Speicher frei
void StopFreeModule(MIDASmodulePlayHandle playHandle, MIDASmodule module)
{
    if ( module == NULL ) return;

    if ( playHandle )
        if ( !MIDASstopModule( playHandle ) ) MIDASerror();

    if ( !MIDASfreeModule( module ) ) MIDASerror();
}

// Lädt ein Module
MIDASmodule LoadModule(char *fileName)
{
    MIDASmodule module;
    char        *errorMessage;

    if ( (module = MIDASloadModule( fileName )) == NULL )
    {
        errorMessage = MIDASgetErrorMessage( MIDASgetLastError() );
        MessageBox( NULL, errorMessage, "Fehler beim laden des Modules",
            MB_APPLMODAL | MB_ICONSTOP | MB_OK);
        return NULL;
    }

    return module;
}

// Beginnt mit dem Abspielen eines Modules
MIDASmodulePlayHandle PlayModule(MIDASmodule module)
{
    MIDASmoduleInfo			moduleInfo;
    MIDASmodulePlayHandle	playHandle;

    if ( (playHandle = MIDASplayModule( module, TRUE )) == 0 )
        MIDASerror();

    if ( !MIDASgetModuleInfo( module, &moduleInfo ) )
        MIDASerror();

    return playHandle;
}

// Initialisiert MIDAS
void InitMIDAS(void)
{
    char message[512];
    
    MIDASsetOption( MIDAS_OPTION_FORCE_NO_SOUND, FALSE );

    while ( !MIDASinit() )
    {
        if ( MessageBox( NULL, message, "Fehler beim Initialisieren",
                         MB_APPLMODAL | MB_ICONSTOP | MB_OKCANCEL) == IDCANCEL )
        {
            MIDASsetOption( MIDAS_OPTION_FORCE_NO_SOUND, TRUE );
            if ( !MIDASinit() ) MIDASerror();
        }
    }

    if ( !MIDASstartBackgroundPlay(0) ) MIDASerror();
}

// Beendet MIDAS
void CloseMIDAS(void)
{
	if ( !MIDASstopBackgroundPlay() ) MIDASerror();

    if ( !MIDASclose() ) MIDASerror();
}

// Startet das MIDAS Interface
void StartupMIDAS(void)
{
    MIDASstartup();
}
