10 int MainWidth=720,MainHeight=480;
\r
12 // Window proc for the frame window:
\r
13 static LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
\r
17 case WM_CLOSE: PostQuitMessage(0); return 0;
\r
18 case WM_DESTROY: FrameWnd=NULL; break; // Blank handle
\r
21 case WM_SIZING: GetWindowRect(hwnd, &FrameRectMy); break;
\r
24 return DefWindowProc(hwnd,msg,wparam,lparam);
\r
27 static int FrameInit()
\r
30 RECT rect={0,0,0,0};
\r
32 int left=0,top=0,width=0,height=0;
\r
34 memset(&wc,0,sizeof(wc));
\r
36 // Register the window class:
\r
37 wc.lpfnWndProc=WndProc;
\r
38 wc.hInstance=GetModuleHandle(NULL);
\r
39 wc.hCursor=LoadCursor(NULL,IDC_ARROW);
\r
40 wc.hbrBackground=CreateSolidBrush(0);
\r
41 wc.lpszClassName="MainFrame";
\r
44 rect.right =320;//MainWidth;
\r
45 rect.bottom=224;//MainHeight;
\r
47 // Adjust size of windows based on borders:
\r
48 style=WS_OVERLAPPEDWINDOW;
\r
49 AdjustWindowRect(&rect,style,0);
\r
50 width =rect.right-rect.left;
\r
51 height=rect.bottom-rect.top;
\r
53 // Place window in the centre of the screen:
\r
54 SystemParametersInfo(SPI_GETWORKAREA,0,&rect,0);
\r
55 left=rect.left+rect.right;
\r
56 top=rect.top+rect.bottom;
\r
58 left-=width; left>>=1;
\r
59 top-=height; top>>=1;
\r
61 // Create the window:
\r
62 FrameWnd=CreateWindow(wc.lpszClassName,"PicoDrive " VERSION,style|WS_VISIBLE,
\r
63 left,top,width,height,NULL,NULL,NULL,NULL);
\r
65 ShowWindow(FrameWnd, SW_NORMAL);
\r
66 UpdateWindow(FrameWnd);
\r
67 GetWindowRect(FrameWnd, &FrameRectMy);
\r
72 // --------------------
\r
74 static DWORD WINAPI ThreadCode(void *)
\r
80 int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR cmdline,int)
\r
86 unsigned char *rom_data = 0;
\r
87 unsigned int rom_size = 0;
\r
89 static char rompath[MAX_PATH] = { 0, };
\r
90 pm_file *rom = NULL;
\r
93 ret=LoopInit(); if (ret) goto end0;
\r
96 strcpy(rompath, cmdline + (cmdline[0] == '\"' ? 1 : 0));
\r
97 if(rompath[strlen(rompath)-1] == '\"') rompath[strlen(rompath)-1] = 0;
\r
99 if(strlen(rompath) > 4) rom = pm_open(rompath);
\r
101 OPENFILENAME of; ZeroMemory(&of, sizeof(OPENFILENAME));
\r
102 of.lStructSize = sizeof(OPENFILENAME);
\r
103 of.lpstrFilter = "ROMs\0*.smd;*.bin;*.gen;*.zip\0";
\r
104 of.lpstrFile = rompath; rompath[0] = 0;
\r
105 of.nMaxFile = MAX_PATH;
\r
106 of.Flags = OFN_FILEMUSTEXIST|OFN_HIDEREADONLY;
\r
107 if(!GetOpenFileName(&of)) goto end0;
\r
108 rom = pm_open(rompath);
\r
109 if(!rom) goto end0;
\r
113 ret=PicoCartLoad(rom, &rom_data, &rom_size);
\r
116 error("failed to load ROM");
\r
120 PicoCartInsert(rom_data, rom_size);
\r
122 // only now we got the mode (pal/ntsc), so init sound now
\r
124 if (ret) error("Failed to init DirectSound"); // warning
\r
126 // Make another thread to run LoopCode():
\r
128 thread=CreateThread(NULL,0,ThreadCode,NULL,0,&tid);
\r
130 // Main window loop:
\r
133 GetMessage(&msg,NULL,0,0);
\r
134 if (msg.message==WM_QUIT) break;
\r
136 TranslateMessage(&msg);
\r
137 DispatchMessage(&msg);
\r
140 // Signal thread to quit and wait for it to exit:
\r
141 LoopQuit=1; WaitForSingleObject(thread,5000);
\r
142 CloseHandle(thread); thread=NULL;
\r
146 DestroyWindow(FrameWnd);
\r
150 _CrtDumpMemoryLeaks();
\r
154 extern void error(char *text)
\r
156 MessageBox(FrameWnd, text, "Error", 0);
\r