Exemplo n.º 1
0
int PASCAL WinMain( HINSTANCE instance,
                    HINSTANCE previous_instance,
                    LPSTR cmd_line,
                    int cmd_show )
{
  //
  // Win32 locals.
  //

  HWND window = 0;
  MSG msg;

  //
  // Miles locals
  //

  HDIGDRIVER digital=0;


  //
  // Try to create our window.
  //

  window = Build_window_handle( instance,
                                previous_instance );
  if ( !window )
  {
    MessageBox( 0,
                "Error creating window.",
                "Windows",
                MB_OK | MB_ICONSTOP );
    return( 1 );
  }

  //
  // Open the Miles Sound System.

  AIL_startup();

  #ifdef BINK51
  digital = AIL_open_digital_driver( 44100, 16, MSS_MC_51_DISCRETE, 0 );
  #else
  digital = AIL_open_digital_driver( 44100, 16, 2, 0 );
  #endif
  
  if ( !digital )
  {
    MessageBox( 0,
                AIL_last_error( ),
                "Error opening Miles",
                MB_OK | MB_ICONSTOP );
    return( 2 );
  }


  //
  //
  // Tell Bink to use the Miles Sound System (must be before BinkOpen)!
  //

  BinkSoundUseMiles( digital );

  //
  // Try to open the Bink file.
  //

  #ifdef BINK51
  {
    //
    // Tell Bink to play all of the 5.1 tracks
    //

    S32 volumes[ 6 ];
    U32 TrackIDsToPlay[ 4 ] = { 0, 1, 2, 3 };
  
    BinkSetSoundTrack( 4, TrackIDsToPlay );
  
    //
    // Try to open the Bink file.
    //
  
    Bink = BinkOpen( cmd_line, BINKSNDTRACK );
 
    //
    // Now route the sound tracks to the correct speaker
    //
  
    volumes[ 0 ] = 32768;  volumes[ 1 ] = 32768; volumes[ 2 ] = 0;  volumes[ 3 ] = 0; volumes[ 4 ] = 0;  volumes[ 5 ] = 0;
    BinkSetMixBinVolumes( Bink, 0, 0, volumes, 6 );
    volumes[ 0 ] = 0;  volumes[ 1 ] = 0; 

    volumes[ 2 ] = 32768;
    BinkSetMixBinVolumes( Bink, 1, 0, volumes, 6 );
    volumes[ 2 ] = 0;  

    volumes[ 3 ] = 32768;
    BinkSetMixBinVolumes( Bink, 2, 0, volumes, 6 );
    volumes[ 3 ] = 0;  

    volumes[ 4 ] = 32768; volumes[ 5 ] = 32768;
    BinkSetMixBinVolumes( Bink, 3, 0, volumes, 6 );
  }
  #else

    Bink = BinkOpen( cmd_line, 0 );

  #endif

  if ( !Bink )
  {
    MessageBox( 0,
                BinkGetError( ),
                "Bink Error",
                MB_OK | MB_ICONSTOP );

    DestroyWindow( window );
    return( 3 );
  }


  //
  // Try to open the Bink buffer.
  //

  Bink_buffer = BinkBufferOpen( window, Bink->Width, Bink->Height, 0 );
  if ( !Bink_buffer )
  {
    MessageBox( 0,
                BinkBufferGetError( ),
                "Bink Error",
                MB_OK | MB_ICONSTOP );

    DestroyWindow( window );
    BinkClose( Bink );

    return( 4 );
  }

  //
  // Size the window such that its client area exactly fits our Bink movie.
  //

  SetWindowPos( window, 0,
                0, 0,
                Bink_buffer->WindowWidth,
                Bink_buffer->WindowHeight,
                SWP_NOMOVE );

  //
  // Now display the window and start the message loop.
  //

  ShowWindow( window, cmd_show );

  for ( ; ; )
  {
    //
    // Are there any messages to handle?
    //

    if ( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )
    {
      //
      // Yup, handle them.
      //

      if ( msg.message == WM_QUIT )
        break;

      TranslateMessage( &msg );
      DispatchMessage( &msg );
    }
    else
    {
      //
      // Is it time for a new Bink frame?
      //

      if ( !BinkWait( Bink ) )
      {
        //
        // Yup, draw the next frame.
        //

        Show_next_frame( Bink,
                         Bink_buffer,
                         window );
      }
      else
      {
        //
        // Nope, give the rest of the system a chance to run (1 ms).
        //

        Sleep( 1 );
      }

    }
  }

  //
  // Close the Bink file.
  //

  if ( Bink )
  {
    BinkClose( Bink );
    Bink = 0;
  }

  //
  // Close the Bink buffer.
  //

  if ( Bink_buffer )
  {
    BinkBufferClose( Bink_buffer );
    Bink_buffer = 0;
  }

  //
  // Close Miles.
  //

  if ( digital )
  {
    AIL_close_digital_driver( digital );
    digital = 0;
  }

  AIL_shutdown( );

  //
  // And exit.
  //

  return( 0 );
}
Exemplo n.º 2
0
int PASCAL WinMain( HINSTANCE instance,
                    HINSTANCE previous_instance,
                    LPSTR cmd_line,
                    int cmd_show )
{
  //
  // Win32 locals.
  //

  HWND window = 0;
  MSG msg;

  //
  // Miles locals
  //

  HDIGDRIVER digital=0;


  //
  // Try to create our window.
  //

  window = Build_window_handle( instance,
                                previous_instance );
  if ( !window )
  {
    MessageBox( 0,
                "Error creating window.",
                "Windows",
                MB_OK | MB_ICONSTOP );
    return( 1 );
  }

  //
  // Open the Miles Sound System.

  AIL_startup();

  digital = AIL_open_digital_driver( 44100, 16, 2, 0 );
  if ( !digital )
  {
    MessageBox( 0,
                AIL_last_error( ),
                "Error opening Miles",
                MB_OK | MB_ICONSTOP );
    return( 2 );
  }


  //
  //
  // Tell Bink to use the Miles Sound System (must be before BinkOpen)!
  //

  BinkSoundUseMiles( digital );

  //
  // Try to open the Bink file.
  //

  Bink = BinkOpen( cmd_line, 0 );
  if ( !Bink )
  {
    MessageBox( 0,
                BinkGetError( ),
                "Bink Error",
                MB_OK | MB_ICONSTOP );

    DestroyWindow( window );
    return( 3 );
  }


  //
  // Try to open the Bink buffer.
  //

  Bink_buffer = BinkBufferOpen( window, Bink->Width, Bink->Height, 0 );
  if ( !Bink_buffer )
  {
    MessageBox( 0,
                BinkBufferGetError( ),
                "Bink Error",
                MB_OK | MB_ICONSTOP );

    DestroyWindow( window );
    BinkClose( Bink );

    return( 4 );
  }

  //
  // Size the window such that its client area exactly fits our Bink movie.
  //

  SetWindowPos( window, 0,
                0, 0,
                Bink_buffer->WindowWidth,
                Bink_buffer->WindowHeight,
                SWP_NOMOVE );

  //
  // Now display the window and start the message loop.
  //

  ShowWindow( window, cmd_show );

  for ( ; ; )
  {
    //
    // Are there any messages to handle?
    //

    if ( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )
    {
      //
      // Yup, handle them.
      //

      if ( msg.message == WM_QUIT )
        break;

      TranslateMessage( &msg );
      DispatchMessage( &msg );
    }
    else
    {
      //
      // Is it time for a new Bink frame?
      //

      if ( !BinkWait( Bink ) )
      {
        //
        // Yup, draw the next frame.
        //

        Show_next_frame( Bink,
                         Bink_buffer,
                         window );
      }
      else
      {
        //
        // Nope, give the rest of the system a chance to run (500 MICROseconds).
        //

        Good_sleep_us( 500 );
      }

    }
  }

  //
  // Close the Bink file.
  //

  if ( Bink )
  {
    BinkClose( Bink );
    Bink = 0;
  }

  //
  // Close the Bink buffer.
  //

  if ( Bink_buffer )
  {
    BinkBufferClose( Bink_buffer );
    Bink_buffer = 0;
  }

  //
  // Close Miles.
  //

  if ( digital )
  {
    AIL_close_digital_driver( digital );
    digital = 0;
  }

  AIL_shutdown( );

  //
  // And exit.
  //

  return( 0 );
}