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 ); }
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 ); }