updating win32 port
[picodrive.git] / platform / win32 / GenaDrive / Main.cpp
CommitLineData
cc68a136 1\r
2#include "app.h"\r
3#include <crtdbg.h>\r
4#include <commdlg.h>\r
5\r
6char *romname;\r
7HWND FrameWnd=NULL;\r
8\r
9int MainWidth=720,MainHeight=480;\r
10\r
11char AppName[]="GenaDrive";\r
12\r
13#ifdef STARSCREAM\r
14 extern "C" int SekReset();\r
15#endif\r
16\r
17// ------------------------------------ XBox Main ------------------------------------------\r
18#ifdef _XBOX\r
19\r
20static int MainCode()\r
21{\r
22 int ret=0;\r
23\r
24 ret=LoopInit(); if (ret) { LoopExit(); return 1; }\r
25\r
26 LoopQuit=0; LoopCode();\r
27 LoopExit();\r
28\r
29 return 0;\r
30}\r
31\r
32int __cdecl main()\r
33{\r
34 LD_LAUNCH_DASHBOARD launch;\r
35\r
36 MainCode();\r
37\r
38 // Go back to dashboard:\r
39 memset(&launch,0,sizeof(launch));\r
40 launch.dwReason=XLD_LAUNCH_DASHBOARD_MAIN_MENU;\r
41 XLaunchNewImage(NULL,(LAUNCH_DATA *)&launch);\r
42}\r
43#endif\r
44\r
45// ----------------------------------- Windows Main ----------------------------------------\r
46#ifndef _XBOX\r
47// Window proc for the frame window:\r
48static LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)\r
49{\r
50 if (msg==WM_CLOSE) { PostQuitMessage(0); return 0; }\r
51 if (msg==WM_DESTROY) FrameWnd=NULL; // Blank handle\r
52\r
53 return DefWindowProc(hwnd,msg,wparam,lparam);\r
54}\r
55\r
56static int FrameInit()\r
57{\r
58 WNDCLASS wc;\r
59 RECT rect={0,0,0,0};\r
60 int style=0;\r
61 int left=0,top=0,width=0,height=0;\r
62\r
63 memset(&wc,0,sizeof(wc));\r
64\r
65 // Register the window class:\r
66 wc.lpfnWndProc=WndProc;\r
67 wc.hInstance=GetModuleHandle(NULL);\r
68 wc.hCursor=LoadCursor(NULL,IDC_ARROW);\r
69 wc.hbrBackground=CreateSolidBrush(0);\r
70 wc.lpszClassName="MainFrame";\r
71 RegisterClass(&wc);\r
72\r
73 rect.right =320;//MainWidth;\r
74 rect.bottom=224;//MainHeight;\r
75\r
76 // Adjust size of windows based on borders:\r
77 style=WS_OVERLAPPEDWINDOW;\r
78 AdjustWindowRect(&rect,style,0);\r
79 width =rect.right-rect.left;\r
80 height=rect.bottom-rect.top;\r
81\r
82 // Place window in the centre of the screen:\r
83 SystemParametersInfo(SPI_GETWORKAREA,0,&rect,0);\r
84 left=rect.left+rect.right;\r
85 top=rect.top+rect.bottom;\r
86\r
87 left-=width; left>>=1;\r
88 top-=height; top>>=1;\r
89\r
90 // Create the window:\r
91 FrameWnd=CreateWindow(wc.lpszClassName,AppName,style|WS_VISIBLE,\r
92 left,top,width,height,NULL,NULL,NULL,NULL);\r
93\r
94 return 0;\r
95}\r
96\r
97// --------------------\r
98\r
99static DWORD WINAPI ThreadCode(void *)\r
100{\r
101 LoopCode();\r
102 return 0;\r
103}\r
104\r
105// starscream needs this\r
106unsigned char *rom_data = 0;\r
107unsigned int rom_size = 0;\r
108\r
109int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR cmdline,int)\r
110{\r
111 MSG msg;\r
112 int ret=0;\r
113 DWORD tid=0;\r
114 HANDLE thread=NULL;\r
115\r
4b2b67eb 116 FrameInit();\r
117 ret=LoopInit(); if (ret) { LoopExit(); return 1; }\r
118\r
cc68a136 119 // notaz: load rom\r
120 static char rompath[MAX_PATH]; rompath[0] = 0;\r
121 strcpy(rompath, cmdline + (cmdline[0] == '\"' ? 1 : 0));\r
122 if(rompath[strlen(rompath)-1] == '\"') rompath[strlen(rompath)-1] = 0;\r
123\r
4b2b67eb 124 pm_file *rom = 0;\r
125 if(strlen(rompath) > 4) rom = pm_open(rompath);\r
cc68a136 126 if(!rom) {\r
127 OPENFILENAME of; ZeroMemory(&of, sizeof(OPENFILENAME));\r
128 of.lStructSize = sizeof(OPENFILENAME);\r
129 of.lpstrFilter = "ROMs\0*.smd;*.bin;*.gen\0";\r
130 of.lpstrFile = rompath; rompath[0] = 0;\r
131 of.nMaxFile = MAX_PATH;\r
132 of.Flags = OFN_FILEMUSTEXIST|OFN_HIDEREADONLY;\r
133 if(!GetOpenFileName(&of)) return 1;\r
4b2b67eb 134 rom = pm_open(rompath);\r
cc68a136 135 if(!rom) return 1;\r
136 }\r
137 romname = rompath;\r
138\r
139 if(PicoCartLoad(rom, &rom_data, &rom_size)) {\r
140 //RDebug::Print(_L("PicoCartLoad() failed."));\r
141 //goto cleanup;\r
142 }\r
4b2b67eb 143 pm_close(rom);\r
cc68a136 144\r
145 PicoCartInsert(rom_data, rom_size);\r
146\r
147 // only now we got the mode (pal/ntsc), so init sound now\r
148 DSoundInit();\r
149\r
cc68a136 150 // Make another thread to run LoopCode():\r
151 LoopQuit=0;\r
152 thread=CreateThread(NULL,0,ThreadCode,NULL,0,&tid);\r
153\r
154 // Main window loop:\r
155 for (;;)\r
156 {\r
157 GetMessage(&msg,NULL,0,0);\r
158 if (msg.message==WM_QUIT) break;\r
159\r
160 TranslateMessage(&msg);\r
161 DispatchMessage(&msg);\r
162 }\r
163\r
164 // Signal thread to quit and wait for it to exit:\r
165 LoopQuit=1; WaitForSingleObject(thread,5000);\r
166 CloseHandle(thread); thread=NULL;\r
167\r
168 LoopExit();\r
169 DestroyWindow(FrameWnd);\r
170\r
171 free(rom_data);\r
172\r
173 _CrtDumpMemoryLeaks();\r
174 return 0;\r
175}\r
4b2b67eb 176\r
177extern void error(char *text)\r
178{\r
179 MessageBox(FrameWnd, text, "Error", 0);\r
180}\r
cc68a136 181#endif\r
182\r