2011-01-11 02:55:51 +00:00
using System ;
using System.Windows.Forms ;
2012-03-12 04:44:34 +00:00
#if WINDOWS
2011-01-11 02:55:51 +00:00
using SlimDX.Direct3D9 ;
using SlimDX.DirectSound ;
2011-05-23 00:33:05 +00:00
using Microsoft.VisualBasic.ApplicationServices ;
2012-03-12 04:44:34 +00:00
#endif
2011-01-11 02:55:51 +00:00
namespace BizHawk.MultiClient
{
2011-06-19 23:39:25 +00:00
static class Program
{
[STAThread]
2012-09-04 00:20:36 +00:00
unsafe static void Main ( string [ ] args )
2011-06-19 23:39:25 +00:00
{
2012-09-04 00:20:36 +00:00
//string test = BizHawk.Emulation.Consoles.Nintendo.SNES.LibsnesDll.snes_library_revision_minor().ToString();
//BizHawk.Emulation.Consoles.Nintendo.SNES.LibsnesDll.snes_init();
//BizHawk.Emulation.Consoles.Nintendo.SNES.LibsnesDll.snes_video_refresh_t myvidproc =
// (ushort* data, int width, int height) =>
// {
// };
//System.Runtime.InteropServices.GCHandle handle = System.Runtime.InteropServices.GCHandle.Alloc(myvidproc);
////IntPtr ip = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(myvidproc);
//BizHawk.Emulation.Consoles.Nintendo.SNES.LibsnesDll.snes_set_video_refresh(myvidproc);
//byte[] rom = System.IO.File.ReadAllBytes("d:\\Super Mario World (US).smc");
//BizHawk.Emulation.Consoles.Nintendo.SNES.LibsnesDll.snes_load_cartridge_normal(null, rom, rom.Length);
//BizHawk.Emulation.Consoles.Nintendo.SNES.LibsnesDll.snes_power();
//int framectr = 0;
//for (; ; )
//{
// framectr++;
// BizHawk.Emulation.Consoles.Nintendo.SNES.LibsnesDll.snes_run();
//}
2011-06-19 23:39:25 +00:00
Application . EnableVisualStyles ( ) ;
Application . SetCompatibleTextRenderingDefault ( false ) ;
2011-01-11 02:55:51 +00:00
2012-03-24 17:47:52 +00:00
Global . Config = ConfigService . Load < Config > ( PathManager . DefaultIniPath , new Config ( ) ) ;
2011-03-21 00:54:30 +00:00
2012-10-09 20:57:55 +00:00
// this will look in subdirectory "dll" to load pinvoked stuff
Win32 . SetDllDirectory ( "dll" ) ;
2012-03-12 04:44:34 +00:00
#if WINDOWS
2011-06-19 23:39:25 +00:00
try { Global . DSound = new DirectSound ( ) ; }
catch
{
2012-03-02 03:39:09 +00:00
MessageBox . Show ( "Couldn't initialize DirectSound! Things may go poorly for you. Try changing your sound driver to 41khz instead of 48khz in mmsys.cpl." , "Initialization Error" , MessageBoxButtons . OK , MessageBoxIcon . Error ) ;
2011-06-19 23:39:25 +00:00
}
2011-01-11 02:55:51 +00:00
2011-03-21 00:54:30 +00:00
try { Global . Direct3D = new Direct3D ( ) ; }
catch
{
2011-08-21 01:07:58 +00:00
//fallback to GDI rendering
if ( ! Global . Config . DisplayGDI )
DisplayDirect3DError ( ) ;
2011-03-21 00:54:30 +00:00
}
2012-03-12 04:44:34 +00:00
#endif
2011-01-11 02:55:51 +00:00
2011-06-19 23:39:25 +00:00
try
{
2012-03-12 04:44:34 +00:00
#if WINDOWS
2011-06-19 23:39:25 +00:00
if ( Global . Config . SingleInstanceMode )
{
SingleInstanceController controller = new SingleInstanceController ( args ) ;
controller . Run ( args ) ;
}
else
{
2012-03-12 04:44:34 +00:00
#endif
2012-04-16 08:18:41 +00:00
using ( var mf = new MainForm ( args ) )
{
var title = mf . Text ;
mf . Show ( ) ;
mf . Text = title ;
mf . ProgramRunLoop ( ) ;
}
2012-03-12 04:44:34 +00:00
#if WINDOWS
2011-06-19 23:39:25 +00:00
}
2012-03-12 04:44:34 +00:00
#endif
2011-06-19 23:39:25 +00:00
}
catch ( Exception e )
{
2012-04-16 08:18:41 +00:00
MessageBox . Show ( e . ToString ( ) ) ;
2011-06-19 23:39:25 +00:00
}
2012-03-12 04:44:34 +00:00
#if WINDOWS
2011-06-19 23:39:25 +00:00
finally
{
if ( Global . DSound ! = null & & Global . DSound . Disposed = = false )
Global . DSound . Dispose ( ) ;
if ( Global . Direct3D ! = null & & Global . Direct3D . Disposed = = false )
Global . Direct3D . Dispose ( ) ;
}
2012-03-12 04:44:34 +00:00
#endif
2011-06-19 23:39:25 +00:00
}
2011-05-23 00:33:05 +00:00
2012-03-12 04:44:34 +00:00
#if WINDOWS
2011-06-19 23:39:25 +00:00
public class SingleInstanceController : WindowsFormsApplicationBase
{
MainForm mf ;
string [ ] cmdArgs ;
public SingleInstanceController ( string [ ] args )
{
cmdArgs = args ;
IsSingleInstance = true ;
StartupNextInstance + = this_StartupNextInstance ;
}
void this_StartupNextInstance ( object sender , StartupNextInstanceEventArgs e )
{
mf . LoadRom ( e . CommandLine [ 0 ] ) ;
}
2011-05-23 00:33:05 +00:00
2011-06-19 23:39:25 +00:00
protected override void OnCreateMainForm ( )
{
MainForm = new RamWatch ( ) ;
2011-05-23 00:33:05 +00:00
2011-06-19 23:39:25 +00:00
mf = new MainForm ( cmdArgs ) ;
MainForm = mf ;
mf . Show ( ) ;
mf . ProgramRunLoop ( ) ;
}
}
2011-08-21 01:07:58 +00:00
public static void DisplayDirect3DError ( )
{
MessageBox . Show ( "Failure to initialize Direct3D, reverting to GDI+ display method. Change the option in Config > GUI or install DirectX web update." , "Initialization Error" , MessageBoxButtons . OK , MessageBoxIcon . Error ) ;
}
2012-03-12 04:44:34 +00:00
#endif
2011-06-19 23:39:25 +00:00
}
2011-01-11 02:55:51 +00:00
}