+++ /dev/null
-/* FCE Ultra - NES/Famicom Emulator\r
- *\r
- * Copyright notice for this file:\r
- * Copyright (C) 2002 Ben Parnell\r
- *\r
- * This program is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
- */\r
-\r
-static void ConfigMisc(void);\r
-static void ConfigPalette(void);\r
-static void ConfigDirectories(void);\r
-\r
-static HMENU fceumenu=0;\r
-static HMENU recentmenu;\r
-\r
-static int tog=0;\r
-\r
-void ShowCursorAbs(int w)\r
-{\r
- static int stat=0;\r
- if(w)\r
- {\r
- if(stat==-1) {stat++; ShowCursor(1);}\r
- }\r
- else\r
- {\r
- if(stat==0) {stat--; ShowCursor(0);}\r
- }\r
-}\r
-\r
-\r
-RECT *CalcWindowSize(void)\r
-{\r
- static RECT al;\r
- al.left=0;\r
- al.right=VNSWID*winsizemul;\r
- al.top=0;\r
- al.bottom=totallines*winsizemul;\r
-\r
- AdjustWindowRectEx(&al,GetWindowLong(hAppWnd,GWL_STYLE),GetMenu(hAppWnd)!=NULL,GetWindowLong(hAppWnd,GWL_EXSTYLE));\r
-\r
- al.right-=al.left;\r
- al.left=0;\r
- al.bottom-=al.top;\r
- al.top=0;\r
-\r
- return(&al);\r
-}\r
-\r
-void UpdateMenu(void)\r
-{\r
- static int *polo[2]={&genie,&palyo};\r
- static int polo2[2]={310,311};\r
- int x;\r
-\r
- for(x=0;x<2;x++)\r
- CheckMenuItem(fceumenu,polo2[x],*polo[x]?MF_CHECKED:MF_UNCHECKED);\r
- if(eoptions&EO_BGRUN)\r
- CheckMenuItem(fceumenu,301,MF_CHECKED);\r
- else\r
- CheckMenuItem(fceumenu,301,MF_UNCHECKED);\r
-}\r
-\r
-char *rfiles[10]={0,0,0,0,0,0,0,0,0,0};\r
-\r
-void UpdateRMenu(void)\r
-{\r
- MENUITEMINFO moo;\r
- int x;\r
-\r
- moo.cbSize=sizeof(moo);\r
- moo.fMask=MIIM_SUBMENU|MIIM_STATE;\r
-\r
- GetMenuItemInfo(GetSubMenu(fceumenu,0),102,FALSE,&moo);\r
- moo.hSubMenu=recentmenu;\r
- moo.fState=rfiles[0]?MFS_ENABLED:MFS_GRAYED;\r
-\r
- SetMenuItemInfo(GetSubMenu(fceumenu,0),102,FALSE,&moo);\r
-\r
- for(x=0;x<10;x++)\r
- RemoveMenu(recentmenu,600+x,MF_BYCOMMAND);\r
- for(x=9;x>=0;x--)\r
- { \r
- char tmp[128+5];\r
- if(!rfiles[x]) continue;\r
-\r
- moo.cbSize=sizeof(moo);\r
- moo.fMask=MIIM_DATA|MIIM_ID|MIIM_TYPE;\r
-\r
- if(strlen(rfiles[x])<128)\r
- {\r
- sprintf(tmp,"&%d. %s",(x+1)%10,rfiles[x]);\r
- }\r
- else\r
- sprintf(tmp,"&%d. %s",(x+1)%10,rfiles[x]+strlen(rfiles[x])-127);\r
-\r
- moo.cch=strlen(tmp);\r
- moo.fType=0;\r
- moo.wID=600+x;\r
- moo.dwTypeData=tmp;\r
- InsertMenuItem(recentmenu,0,1,&moo);\r
- }\r
- DrawMenuBar(hAppWnd);\r
-}\r
-\r
-void AddRecent(char *fn)\r
-{\r
- int x;\r
-\r
- for(x=0;x<10;x++)\r
- if(rfiles[x])\r
- if(!strcmp(rfiles[x],fn)) // Item is already in list.\r
- {\r
- int y;\r
- char *tmp;\r
-\r
- tmp=rfiles[x]; // Save pointer.\r
- for(y=x;y;y--)\r
- rfiles[y]=rfiles[y-1]; // Move items down.\r
-\r
- rfiles[0]=tmp; // Put item on top.\r
- UpdateRMenu();\r
- return;\r
- }\r
-\r
- if(rfiles[9]) free(rfiles[9]);\r
- for(x=9;x;x--) rfiles[x]=rfiles[x-1];\r
- rfiles[0]=malloc(strlen(fn)+1);\r
- strcpy(rfiles[0],fn);\r
- UpdateRMenu();\r
-}\r
-\r
-void HideMenu(int h)\r
-{\r
- if(h)\r
- {\r
- SetMenu(hAppWnd,0); \r
- }\r
- else\r
- {\r
- SetMenu(hAppWnd,fceumenu);\r
- }\r
-}\r
-\r
-static LONG WindowXC=1<<30,WindowYC;\r
-void HideFWindow(int h)\r
-{\r
- LONG desa;\r
-\r
- if(h)\r
- {\r
- RECT bo;\r
- GetWindowRect(hAppWnd,&bo);\r
- WindowXC=bo.left;\r
- WindowYC=bo.top;\r
-\r
- SetMenu(hAppWnd,0);\r
- desa=WS_POPUP|WS_CLIPSIBLINGS;\r
- }\r
- else\r
- {\r
- desa=WS_OVERLAPPEDWINDOW|WS_CLIPSIBLINGS;\r
- HideMenu(tog);\r
- }\r
- \r
- SetWindowLong(hAppWnd,GWL_STYLE,desa|(GetWindowLong(hAppWnd,GWL_STYLE)&WS_VISIBLE));\r
- SetWindowPos(hAppWnd,0,0,0,0,0,SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOCOPYBITS|SWP_NOMOVE|SWP_NOREPOSITION|SWP_NOSIZE|SWP_NOZORDER);\r
-}\r
-\r
-void ToggleHideMenu(void)\r
-{ \r
- if(!fullscreen)\r
- {\r
- tog^=1;\r
- HideMenu(tog);\r
- SetMainWindowStuff();\r
- }\r
-}\r
-\r
-static void ALoad(char *nameo)\r
-{\r
- if((GI=FCEUI_LoadGame(nameo)))\r
- {\r
- FixFL();\r
- FixGIGO();\r
- SetMainWindowStuff();\r
- AddRecent(nameo);\r
- RefreshThrottleFPS();\r
- if(eoptions&EO_FSAFTERLOAD)\r
- SetFSVideoMode();\r
- }\r
- else\r
- StopSound();\r
-}\r
-\r
-void LoadNewGamey(HWND hParent)\r
-{\r
- const char filter[]="All usable files(*.nes,*.nsf,*.fds,*.unf,*.zip,*.gz)\0*.nes;*.nsf;*.fds;*.unf;*.zip;*.gz\0All non-compressed usable files(*.nes,*.nsf,*.fds,*.unf)\0*.nes;*.nsf;*.fds;*.unf\0All files (*.*)\0*.*\0";\r
- char nameo[2048];\r
- OPENFILENAME ofn;\r
- memset(&ofn,0,sizeof(ofn));\r
- ofn.lStructSize=sizeof(ofn);\r
- ofn.hInstance=fceu_hInstance;\r
- ofn.lpstrTitle="FCE Ultra Open File...";\r
- ofn.lpstrFilter=filter;\r
- nameo[0]=0;\r
- ofn.hwndOwner=hParent;\r
- ofn.lpstrFile=nameo;\r
- ofn.nMaxFile=256;\r
- ofn.Flags=OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY; //OFN_EXPLORER|OFN_ENABLETEMPLATE|OFN_ENABLEHOOK;\r
- ofn.lpstrInitialDir=gfsdir;\r
- if(GetOpenFileName(&ofn))\r
- {\r
- if(gfsdir) free(gfsdir);\r
- if((gfsdir=malloc(ofn.nFileOffset+1)))\r
- {\r
- strncpy(gfsdir,ofn.lpstrFile,ofn.nFileOffset);\r
- gfsdir[ofn.nFileOffset]=0;\r
- }\r
- ALoad(nameo);\r
- }\r
-}\r
-\r
-static uint32 mousex,mousey,mouseb;\r
-void GetMouseData(uint32 *x, uint32 *y, uint32 *b)\r
-{\r
- *x=mousex;\r
- *y=mousey;\r
- if(!fullscreen)\r
- {\r
- if(eoptions&EO_USERFORCE)\r
- {\r
- RECT t;\r
- GetClientRect(hAppWnd,&t);\r
-\r
- *x=*x*VNSWID/(t.right?t.right:1);\r
- *y=*y*totallines/(t.bottom?t.bottom:1);\r
- }\r
- else\r
- {\r
- *x/=winsizemul;\r
- *y/=winsizemul;\r
- }\r
- *x+=VNSCLIP;\r
- }\r
-\r
- *y+=srendline;\r
- *b=((mouseb==MK_LBUTTON)?1:0)|((mouseb==MK_RBUTTON)?2:0);\r
-}\r
-\r
-static int sizchange=0;\r
-static int vchanged=0;\r
-\r
-LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)\r
-{\r
- switch(msg) { \r
- case WM_LBUTTONDOWN:\r
- case WM_LBUTTONUP:\r
- case WM_RBUTTONDOWN:\r
- case WM_RBUTTONUP:\r
- mouseb=wParam;\r
- goto proco;\r
- case WM_MOUSEMOVE:\r
- {\r
- mousex=LOWORD(lParam);\r
- mousey=HIWORD(lParam);\r
- }\r
- goto proco;\r
- case WM_SIZING:\r
- sizchange=1;\r
- goto proco;\r
- case WM_DISPLAYCHANGE:\r
- if(!fullscreen && !changerecursive)\r
- vchanged=1;\r
- goto proco;\r
- case WM_DROPFILES:\r
- {\r
- UINT len;\r
- char *ftmp;\r
-\r
- len=DragQueryFile((HANDLE)wParam,0,0,0)+1;\r
- if((ftmp=malloc(len)))\r
- {\r
- DragQueryFile((HANDLE)wParam,0,ftmp,len);\r
- ALoad(ftmp);\r
- free(ftmp);\r
- } \r
- }\r
- break;\r
- case WM_COMMAND:\r
- if(!(wParam>>16))\r
- {\r
- wParam&=0xFFFF;\r
- if(wParam>=600 && wParam<=609)\r
- {\r
- if(rfiles[wParam-600]) ALoad(rfiles[wParam-600]);\r
- }\r
- switch(wParam)\r
- {\r
- case 300:ToggleHideMenu();break;\r
- case 301:eoptions^=EO_BGRUN;UpdateMenu();break;\r
-\r
- case 310:genie^=1;FCEUI_SetGameGenie(genie);UpdateMenu();break;\r
- case 311:palyo^=1;\r
- FCEUI_SetVidSystem(palyo);\r
- RefreshThrottleFPS();\r
- UpdateMenu();\r
- FixFL();\r
- SetMainWindowStuff();\r
- break;\r
-\r
- case 320:StopSound();ConfigDirectories();break;\r
- case 321:StopSound();ConfigInput(hWnd);break;\r
- case 322:ConfigMisc();break;\r
- case 323:StopSound();ConfigNetplay();break;\r
- case 324:StopSound();ConfigPalette();break;\r
- case 325:StopSound();ConfigSound();break;\r
- case 326:ConfigVideo();break;\r
-\r
- case 200:DriverInterface(DES_RESET,0);break;\r
- case 201:DriverInterface(DES_POWER,0);break;\r
- case 202:ConfigCheats(hWnd);break;\r
-\r
- case 100:StopSound();\r
- LoadNewGamey(hWnd);\r
- break;\r
- case 101:if(GI)\r
- {\r
- FCEUI_CloseGame(); \r
- GI=0;\r
- }\r
- break;\r
- case 110:FCEUI_SaveState();break;\r
- case 111:FCEUI_LoadState();break;\r
-\r
- case 120:\r
- {\r
- MENUITEMINFO mi;\r
- char *str;\r
- \r
- StopSound();\r
- if(CreateSoundSave())\r
- str="Stop Sound Logging";\r
- else\r
- str="Log Sound As...";\r
- memset(&mi,0,sizeof(mi));\r
- mi.fMask=MIIM_DATA|MIIM_TYPE;\r
- mi.cbSize=sizeof(mi);\r
- GetMenuItemInfo(fceumenu,120,0,&mi); \r
- mi.fMask=MIIM_DATA|MIIM_TYPE;\r
- mi.cbSize=sizeof(mi);\r
- mi.dwTypeData=str;\r
- mi.cch=strlen(str);\r
- SetMenuItemInfo(fceumenu,120,0,&mi);\r
- }\r
- break;\r
- case 130:DoFCEUExit();break;\r
-\r
- case 400:StopSound();ShowAboutBox();break;\r
- } \r
- }\r
- break;\r
-\r
-\r
- case WM_SYSCOMMAND:\r
- if(wParam==SC_KEYMENU)\r
- if(GI && InputTypeFC==SIFC_FKB && cidisabled)\r
- break;\r
- goto proco;\r
- case WM_SYSKEYDOWN:\r
- if(GI && InputTypeFC==SIFC_FKB && cidisabled)\r
- break; /* Hopefully this won't break DInput... */\r
-\r
- if(fullscreen || tog)\r
- {\r
- if(wParam==VK_MENU)\r
- break;\r
- }\r
- if(wParam==VK_F10)\r
- {\r
- if(!(lParam&0x40000000))\r
- DriverInterface(DES_RESET,0);\r
- break;\r
- }\r
- goto proco;\r
-\r
- case WM_KEYDOWN:\r
- if(GI)\r
- {\r
- /* Only disable command keys if a game is loaded(and the other\r
- conditions are right, of course). */\r
- if(InputTypeFC==SIFC_FKB)\r
- {\r
- if(wParam==VK_SCROLL)\r
- {\r
- cidisabled^=1;\r
- FCEUI_DispMessage("Family Keyboard %sabled.",cidisabled?"en":"dis");\r
- }\r
- if(cidisabled)\r
- break; /* Hopefully this won't break DInput... */\r
- }\r
- if(GI->type==GIT_NSF)\r
- switch(wParam)\r
- {\r
- case VK_UP:DriverInterface(DES_NSFINC,0);break;\r
- case VK_DOWN:DriverInterface(DES_NSFDEC,0);break;\r
- case VK_RETURN:DriverInterface(DES_NSFRES,0);break;\r
-\r
- case VK_LEFT:if(!(lParam&0x40000000))\r
- DriverInterface(DES_NSFDEC,0); break;\r
- case VK_RIGHT:if(!(lParam&0x40000000))\r
- DriverInterface(DES_NSFINC,0); break;\r
- }\r
-\r
- }\r
- if(!(lParam&0x40000000))\r
- switch( wParam )\r
- {\r
- case VK_F11:DriverInterface(DES_POWER,0);break;\r
- case VK_F12:DoFCEUExit();break;\r
- case VK_F2:userpause^=1;break;\r
- case VK_F3:ToggleHideMenu();break;\r
- case VK_F4: UpdateMenu();\r
- changerecursive=1;\r
- if(!SetVideoMode(fullscreen^1))\r
- SetVideoMode(fullscreen);\r
- changerecursive=0;\r
- break;\r
- }\r
- goto proco;\r
-\r
-\r
- case WM_NCRBUTTONDOWN:\r
- case WM_NCMBUTTONDOWN:StopSound();goto proco;\r
- case WM_NCLBUTTONDOWN:StopSound();goto proco;\r
-\r
- case WM_ENTERMENULOOP:StopSound();goto proco;\r
- case WM_CLOSE:\r
- case WM_DESTROY:\r
- case WM_QUIT:DoFCEUExit();break;\r
- case WM_ACTIVATEAPP: \r
- if((BOOL)wParam)\r
- {\r
- nofocus=0;\r
- }\r
- else\r
- {\r
- nofocus=1;\r
- }\r
- default:\r
- proco:\r
- return DefWindowProc(hWnd,msg,wParam,lParam);\r
- }\r
- return 0;\r
-}\r
-\r
-void UpdateFCEUWindow(void)\r
-{\r
- int w,h;\r
- RECT wrect;\r
-\r
- if(vchanged && !fullscreen && !changerecursive && !nofocus)\r
- {\r
- SetVideoMode(0);\r
- vchanged=0;\r
- }\r
-\r
- if(sizchange && !fullscreen && !(eoptions&EO_USERFORCE))\r
- { \r
- GetWindowRect(hAppWnd,&wrect);\r
- h=wrect.bottom-wrect.top;\r
- w=wrect.right-wrect.left;\r
- if(w!=winwidth)\r
- winsizemul=(w-(winwidth-VNSWID*winsizemul)+(VNSWID>>1))>>8;\r
- else\r
- if(h!=winheight)\r
- winsizemul=(h-(winheight-totallines*winsizemul)+(totallines>>1))>>8;\r
-\r
- if(winsizemul<1)\r
- winsizemul=1;\r
- SetMainWindowStuff();\r
- }\r
- sizchange=0;\r
-\r
- BlockingCheck();\r
-}\r
-\r
-void ByebyeWindow(void)\r
-{\r
- SetMenu(hAppWnd,0);\r
- DestroyMenu(fceumenu);\r
- DestroyWindow(hAppWnd);\r
-}\r
-\r
-int CreateMainWindow(void)\r
-{\r
- WNDCLASSEX winclass;\r
- RECT tmp;\r
-\r
- memset(&winclass,0,sizeof(winclass));\r
- winclass.cbSize=sizeof(WNDCLASSEX);\r
- winclass.style=CS_OWNDC|CS_HREDRAW|CS_VREDRAW|CS_SAVEBITS;\r
- winclass.lpfnWndProc=AppWndProc;\r
- winclass.cbClsExtra=0;\r
- winclass.cbWndExtra=0;\r
- winclass.hInstance=fceu_hInstance;\r
- winclass.hIcon=LoadIcon(fceu_hInstance, "ICON_1");\r
- winclass.hIconSm=LoadIcon(fceu_hInstance, "ICON_1");\r
- winclass.hCursor=LoadCursor(NULL, IDC_ARROW);\r
- winclass.hbrBackground=GetStockObject(BLACK_BRUSH);\r
- //winclass.lpszMenuName="FCEUMENU";\r
- winclass.lpszClassName="FCEULTRA";\r
-\r
- if(!RegisterClassEx(&winclass))\r
- return FALSE;\r
-\r
- AdjustWindowRectEx(&tmp,WS_OVERLAPPEDWINDOW,1,0);\r
-\r
- fceumenu=LoadMenu(fceu_hInstance,"FCEUMENU");\r
- recentmenu=CreateMenu();\r
- UpdateRMenu();\r
-\r
- hAppWnd = CreateWindowEx(0,"FCEULTRA","FCE Ultra",\r
- WS_OVERLAPPEDWINDOW|WS_CLIPSIBLINGS, /* Style */\r
- CW_USEDEFAULT,CW_USEDEFAULT,256,240, /* X,Y ; Width, Height */\r
- NULL,fceumenu,fceu_hInstance,NULL ); \r
- DragAcceptFiles(hAppWnd, 1);\r
- SetMainWindowStuff();\r
- return 1;\r
-}\r
-\r
-\r
-int SetMainWindowStuff(void)\r
-{\r
- RECT *srect;\r
- RECT tmp;\r
-\r
- GetWindowRect(hAppWnd,&tmp);\r
-\r
- if(WindowXC!=(1<<30))\r
- {\r
- /* Subtracting and adding for if(eoptions&EO_USERFORCE) below. */\r
- tmp.bottom-=tmp.top;\r
- tmp.bottom+=WindowYC;\r
-\r
- tmp.right-=tmp.left;\r
- tmp.right+=WindowXC;\r
- \r
-\r
- tmp.left=WindowXC;\r
- tmp.top=WindowYC;\r
- WindowXC=1<<30;\r
- }\r
-\r
- if(eoptions&EO_USERFORCE)\r
- {\r
- SetWindowPos(hAppWnd,HWND_TOP,tmp.left,tmp.top,0,0,SWP_NOSIZE|SWP_SHOWWINDOW);\r
- winwidth=tmp.right-tmp.left;\r
- winheight=tmp.bottom-tmp.top;\r
- }\r
- else\r
- {\r
- srect=CalcWindowSize();\r
- SetWindowPos(hAppWnd,HWND_TOP,tmp.left,tmp.top,srect->right,srect->bottom,SWP_SHOWWINDOW);\r
- winwidth=srect->right;\r
- winheight=srect->bottom;\r
- }\r
-\r
-\r
- ShowWindow(hAppWnd, SW_SHOWNORMAL);\r
- return 1;\r
-}\r
-\r
-int GetClientAbsRect(LPRECT lpRect)\r
-{\r
- POINT point;\r
- point.x=point.y=0;\r
- if(!ClientToScreen(hAppWnd,&point)) return 0;\r
-\r
- lpRect->top=point.y;\r
- lpRect->left=point.x;\r
-\r
- if(eoptions&EO_USERFORCE)\r
- {\r
- RECT al;\r
-\r
- GetClientRect(hAppWnd,&al);\r
-\r
- lpRect->right=point.x+al.right;\r
- lpRect->bottom=point.y+al.bottom;\r
- }\r
- else\r
- {\r
- lpRect->right=point.x+VNSWID*winsizemul;\r
- lpRect->bottom=point.y+totallines*winsizemul;\r
- }\r
- return 1;\r
-}\r
-\r
-\r
-void LoadPaletteFile(void)\r
-{\r
- FILE *fp;\r
- const char filter[]="All usable files(*.pal)\0*.pal\0All files (*.*)\0*.*\0";\r
- char nameo[2048];\r
- OPENFILENAME ofn;\r
- memset(&ofn,0,sizeof(ofn));\r
- ofn.lStructSize=sizeof(ofn);\r
- ofn.hInstance=fceu_hInstance;\r
- ofn.lpstrTitle="FCE Ultra Open Palette File...";\r
- ofn.lpstrFilter=filter;\r
- nameo[0]=0;\r
- ofn.lpstrFile=nameo;\r
- ofn.nMaxFile=256;\r
- ofn.Flags=OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY;\r
- ofn.lpstrInitialDir=0;\r
- if(GetOpenFileName(&ofn))\r
- {\r
- if((fp=fopen(nameo,"rb")))\r
- {\r
- fread(cpalette,1,192,fp);\r
- fclose(fp);\r
- FCEUI_SetPaletteArray(cpalette);\r
- eoptions|=EO_CPALETTE;\r
- }\r
- else\r
- FCEUD_PrintError("Error opening palette file!");\r
- }\r
-}\r
-\r
-BOOL CALLBACK PaletteConCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)\r
-{\r
- switch(uMsg) {\r
- case WM_INITDIALOG: \r
- if(ntsccol)\r
- CheckDlgButton(hwndDlg,100,BST_CHECKED);\r
- SendDlgItemMessage(hwndDlg,500,TBM_SETRANGE,1,MAKELONG(0,128));\r
- SendDlgItemMessage(hwndDlg,501,TBM_SETRANGE,1,MAKELONG(0,128));\r
- DriverInterface(DES_GETNTSCTINT,&ntsctint);\r
- DriverInterface(DES_GETNTSCHUE,&ntschue);\r
- SendDlgItemMessage(hwndDlg,500,TBM_SETPOS,1,ntsctint);\r
- SendDlgItemMessage(hwndDlg,501,TBM_SETPOS,1,ntschue);\r
- break;\r
- case WM_CLOSE:\r
- case WM_QUIT: goto gornk;\r
- case WM_COMMAND:\r
- if(!(wParam>>16))\r
- switch(wParam&0xFFFF)\r
- {\r
- case 100:ntsccol^=1;DriverInterface(DES_NTSCCOL,&ntsccol);break;\r
- case 200:\r
- LoadPaletteFile();\r
- break;\r
- case 201:FCEUI_SetPaletteArray(0);\r
- eoptions&=~EO_CPALETTE;\r
- break;\r
- case 1:\r
- gornk:\r
- ntsctint=SendDlgItemMessage(hwndDlg,500,TBM_GETPOS,0,(LPARAM)(LPSTR)0);\r
- ntschue=SendDlgItemMessage(hwndDlg,501,TBM_GETPOS,0,(LPARAM)(LPSTR)0);\r
- EndDialog(hwndDlg,0);\r
- break;\r
- }\r
- }\r
- return 0;\r
-}\r
-\r
-static void ConfigPalette(void)\r
-{\r
- DialogBox(fceu_hInstance,"PALCONFIG",hAppWnd,PaletteConCallB);\r
- DriverInterface(DES_SETNTSCTINT,&ntsctint);\r
- DriverInterface(DES_SETNTSCHUE,&ntschue);\r
-}\r
-\r
-\r
-static BOOL CALLBACK MiscConCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)\r
-{\r
- switch(uMsg) {\r
- case WM_INITDIALOG: \r
- if(eoptions&EO_NOSPRLIM)\r
- CheckDlgButton(hwndDlg,100,BST_CHECKED);\r
- if(eoptions&EO_FOAFTERSTART)\r
- CheckDlgButton(hwndDlg,102,BST_CHECKED);\r
- if(eoptions&EO_SNAPNAME)\r
- CheckDlgButton(hwndDlg,103,BST_CHECKED);\r
- if(eoptions&EO_NOTHROTTLE)\r
- CheckDlgButton(hwndDlg,101,BST_CHECKED);\r
- break;\r
- case WM_CLOSE:\r
- case WM_QUIT: goto gornk;\r
- case WM_COMMAND:\r
- if(!(wParam>>16))\r
- switch(wParam&0xFFFF)\r
- {\r
- case 1:\r
- gornk:\r
- if(IsDlgButtonChecked(hwndDlg,100)==BST_CHECKED)\r
- eoptions|=EO_NOSPRLIM;\r
- else\r
- eoptions&=~EO_NOSPRLIM;\r
- if(IsDlgButtonChecked(hwndDlg,102)==BST_CHECKED)\r
- eoptions|=EO_FOAFTERSTART;\r
- else\r
- eoptions&=~EO_FOAFTERSTART;\r
- if(IsDlgButtonChecked(hwndDlg,103)==BST_CHECKED)\r
- eoptions|=EO_SNAPNAME;\r
- else\r
- eoptions&=~EO_SNAPNAME;\r
- if(IsDlgButtonChecked(hwndDlg,101)==BST_CHECKED)\r
- eoptions|=EO_NOTHROTTLE;\r
- else\r
- eoptions&=~EO_NOTHROTTLE;\r
- EndDialog(hwndDlg,0);\r
- break;\r
- }\r
- }\r
- return 0;\r
-}\r
-\r
-void DoMiscConfigFix(void)\r
-{\r
- FCEUI_DisableSpriteLimitation(eoptions&EO_NOSPRLIM);\r
- FCEUI_SetSnapName(eoptions&EO_SNAPNAME);\r
-}\r
-\r
-static void ConfigMisc(void)\r
-{\r
- DialogBox(fceu_hInstance,"MISCCONFIG",hAppWnd,MiscConCallB); \r
- DoMiscConfigFix();\r
-}\r
-\r
-static int BrowseForFolder(HWND hParent, char *htext, char *buf)\r
-{\r
- BROWSEINFO bi;\r
- LPCITEMIDLIST pidl;\r
- int ret=1;\r
-\r
- buf[0]=0;\r
-\r
- memset(&bi,0,sizeof(bi));\r
- \r
- bi.hwndOwner=hParent;\r
- bi.lpszTitle=htext;\r
- bi.ulFlags=BIF_RETURNONLYFSDIRS; \r
-\r
- if(FAILED(CoInitialize(0)))\r
- return(0);\r
-\r
- if(!(pidl=SHBrowseForFolder(&bi)))\r
- {\r
- ret=0;\r
- goto end1;\r
- }\r
-\r
- if(!SHGetPathFromIDList(pidl,buf))\r
- {\r
- ret=0;\r
- goto end2;\r
- }\r
-\r
- end2:\r
- /* This probably isn't the best way to free the memory... */\r
- CoTaskMemFree((PVOID)pidl);\r
-\r
- end1:\r
- CoUninitialize();\r
- return(ret);\r
-}\r
-\r
-static BOOL CALLBACK DirConCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)\r
-{\r
- int x;\r
-\r
- switch(uMsg){\r
- case WM_INITDIALOG: \r
- for(x=0;x<6;x++)\r
- SetDlgItemText(hwndDlg,100+x,DOvers[x]);\r
-\r
- if(eoptions&EO_BSAV)\r
- CheckDlgButton(hwndDlg,300,BST_CHECKED);\r
- break;\r
- case WM_CLOSE:\r
- case WM_QUIT: goto gornk;\r
- case WM_COMMAND:\r
- if(!(wParam>>16))\r
- {\r
- if((wParam&0xFFFF)>=200 && (wParam&0xFFFF)<=205)\r
- {\r
- static char *helpert[6]={"Cheats","Miscellaneous","Nonvolatile Game Data","Save States","Screen Snapshots","Base Directory"};\r
- char name[MAX_PATH];\r
-\r
- if(BrowseForFolder(hwndDlg,helpert[((wParam&0xFFFF)-200)],name))\r
- SetDlgItemText(hwndDlg,100+((wParam&0xFFFF)-200),name);\r
- }\r
- else switch(wParam&0xFFFF)\r
- {\r
- case 1:\r
- gornk:\r
-\r
- RemoveDirs(); // Remove empty directories.\r
-\r
- for(x=0;x<6;x++)\r
- {\r
- LONG len;\r
- len=SendDlgItemMessage(hwndDlg,100+x,WM_GETTEXTLENGTH,0,0);\r
- if(len<=0)\r
- {\r
- if(DOvers[x]) free(DOvers[x]);\r
- DOvers[x]=0;\r
- continue;\r
- }\r
- len++; // Add 1 for null character.\r
- if(!(DOvers[x]=malloc(len)))\r
- continue;\r
- if(!GetDlgItemText(hwndDlg,100+x,DOvers[x],len))\r
- {\r
- free(DOvers[x]);\r
- DOvers[x]=0;\r
- continue;\r
- }\r
-\r
- }\r
- if(IsDlgButtonChecked(hwndDlg,300)==BST_CHECKED)\r
- eoptions|=EO_BSAV;\r
- else\r
- eoptions&=~EO_BSAV;\r
-\r
- CreateDirs(); // Create needed directories.\r
- SetDirs(); // Set the directories in the core.\r
- EndDialog(hwndDlg,0);\r
- break;\r
- }\r
- }\r
- }\r
- return 0;\r
-}\r
-\r
-\r
-\r
-static void ConfigDirectories(void)\r
-{\r
- DialogBox(fceu_hInstance,"DIRCONFIG",hAppWnd,DirConCallB);\r
-}\r