gpfce patch part2
[fceu.git] / drivers / win / window.c
diff --git a/drivers/win/window.c b/drivers/win/window.c
deleted file mode 100644 (file)
index 6ccd4e0..0000000
+++ /dev/null
@@ -1,855 +0,0 @@
-/* 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