+++ /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
-#include "common.h"\r
-#include <dinput.h>\r
-\r
-#include "input.h"\r
-#include "keyboard.h"\r
-#include "joystick.h"\r
-\r
-\r
-int UsrInputType[2]={SI_GAMEPAD,SI_GAMEPAD};\r
-int UsrInputTypeFC=SIFC_NONE;\r
-int InputType[2];\r
-int InputTypeFC;\r
-\r
-int NoFourScore=0;\r
-\r
-static uint32 powerpadbuf[2];\r
-\r
-LPDIRECTINPUT7 lpDI;\r
-\r
-void FixGIGO(void)\r
-{\r
- InputType[0]=UsrInputType[0];\r
- InputType[1]=UsrInputType[1];\r
- InputTypeFC=UsrInputTypeFC;\r
-\r
- if(GI)\r
- {\r
- if(GI->input[0]>=0)\r
- InputType[0]=GI->input[0];\r
- if(GI->input[1]>=0)\r
- InputType[1]=GI->input[1];\r
- if(GI->inputfc>=0)\r
- InputTypeFC=GI->inputfc;\r
- CreateInputStuff();\r
- }\r
-}\r
-\r
-static uint32 JSreturn;\r
-static uint32 mousedata[3];\r
-\r
-\r
-static void ConfigGamePad(HWND hParent, int port);\r
-\r
-int InitDInput(void)\r
-{\r
- HRESULT ddrval;\r
-\r
- ddrval=DirectInputCreateEx(fceu_hInstance,DIRECTINPUT_VERSION,&IID_IDirectInput7,(LPVOID *)&lpDI,0);\r
- if(ddrval!=DI_OK)\r
- {\r
- FCEUD_PrintError("DirectInput: Error creating DirectInput object.");\r
- return 0;\r
- }\r
- return 1;\r
-}\r
-\r
-static int screenmode=0;\r
-void InputScreenChanged(int fs)\r
-{\r
- int x;\r
- for(x=0;x<2;x++)\r
- if(InputType[x]==SI_ZAPPER)\r
- FCEUI_SetInput(x,SI_ZAPPER,mousedata,fs);\r
- if(InputTypeFC==SIFC_SHADOW)\r
- FCEUI_SetInputFC(SIFC_SHADOW,mousedata,fs);\r
- screenmode=fs;\r
-}\r
-\r
-void InitInputStuff(void)\r
-{\r
- KeyboardInitialize();\r
- InitJoysticks(hAppWnd);\r
-}\r
-\r
-void CreateInputStuff(void)\r
-{ \r
- void *InputDPtr=0;\r
- int x;\r
- int TAttrib;\r
-\r
- for(x=0;x<2;x++)\r
- {\r
- TAttrib=0;\r
- switch(InputType[x])\r
- {\r
- case SI_GAMEPAD:InputDPtr=((uint8 *)&JSreturn)+(x<<1);\r
- break;\r
- case SI_POWERPAD:InputDPtr=&powerpadbuf[x];break;\r
- case SI_ARKANOID:InputDPtr=mousedata;break;\r
- case SI_ZAPPER:InputDPtr=mousedata;\r
- TAttrib=screenmode;\r
- break;\r
- } \r
- FCEUI_SetInput(x,InputType[x],InputDPtr,TAttrib);\r
- }\r
-\r
- TAttrib=0;\r
- switch(InputTypeFC)\r
- {\r
- case SIFC_SHADOW:InputDPtr=mousedata;TAttrib=screenmode;break;\r
- case SIFC_ARKANOID:InputDPtr=mousedata;break; \r
- case SIFC_FKB:InputDPtr=fkbkeys;memset(fkbkeys,0,sizeof(fkbkeys));break;\r
- }\r
- FCEUI_SetInputFC(InputTypeFC,InputDPtr,TAttrib);\r
- FCEUI_DisableFourScore(NoFourScore);\r
-}\r
-\r
-void DestroyInput(void)\r
-{\r
- KillJoysticks();\r
- KeyboardClose();\r
-}\r
-\r
-void FCEUD_UpdateInput(void)\r
-{\r
- int x;\r
- uint32 JS;\r
- int t=0;\r
-\r
- KeyboardUpdate();\r
-\r
- for(x=0;x<2;x++)\r
- switch(InputType[x])\r
- {\r
- case SI_GAMEPAD:t|=1;break;\r
- case SI_ARKANOID:t|=2;break;\r
- case SI_ZAPPER:t|=2;break;\r
- case SI_POWERPAD:powerpadbuf[x]=UpdatePPadData(x);break;\r
- }\r
- switch(InputTypeFC)\r
- {\r
- case SIFC_ARKANOID:t|=2;break;\r
- case SIFC_SHADOW:t|=2;break;\r
- case SIFC_FKB: if(cidisabled) UpdateFKB();break;\r
- }\r
- if(t&1)\r
- {\r
- JS=KeyboardDodo();\r
- if(joy[0]|joy[1]|joy[2]|joy[3])\r
- JS|=(uint32)GetJSOr();\r
- JSreturn=(JS&0xFF000000)|(JS&0xFF)|((JS&0xFF0000)>>8)|((JS&0xFF00)<<8); \r
- }\r
- if(t&2) \r
- GetMouseData(&mousedata[0], &mousedata[1], &mousedata[2]);\r
-}\r
-\r
-\r
-BOOL CALLBACK InputConCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)\r
-{\r
- static void (*boopar[5])(HWND hParent, int port)={0,ConfigGamePad,0,ConfigKeyboardiePowerpad,0};\r
- static void (*boopar2[5])(HWND hParent)={0,0,0,0,ConfigFKB};\r
- static char *strn[5]={"<none>","Gamepad","Zapper","Power Pad","Arkanoid Paddle"};\r
- static char *strf[5]={"<none>","Arkanoid Paddle","Hyper Shot gun","4-Player Adapter","Family Keyboard"};\r
- int x;\r
- \r
- switch(uMsg) {\r
- case WM_INITDIALOG: \r
- for(x=0;x<2;x++) \r
- {\r
- int y;\r
-\r
- for(y=0;y<5;y++)\r
- SendDlgItemMessage(hwndDlg,104+x,CB_ADDSTRING,0,(LPARAM)(LPSTR)strn[y]);\r
-\r
- SendDlgItemMessage(hwndDlg,104+x,CB_SETCURSEL,UsrInputType[x],(LPARAM)(LPSTR)0);\r
- EnableWindow(GetDlgItem(hwndDlg,106+x),boopar[InputType[x]]?1:0);\r
- SetDlgItemText(hwndDlg,200+x,(LPTSTR)strn[InputType[x]]);\r
- }\r
-\r
-\r
- {\r
- int y;\r
- for(y=0;y<5;y++)\r
- SendDlgItemMessage(hwndDlg,110,CB_ADDSTRING,0,(LPARAM)(LPSTR)strf[y]);\r
- SendDlgItemMessage(hwndDlg,110,CB_SETCURSEL,UsrInputTypeFC,(LPARAM)(LPSTR)0); \r
- EnableWindow(GetDlgItem(hwndDlg,111),boopar2[InputTypeFC]?1:0);\r
- SetDlgItemText(hwndDlg,202,(LPTSTR)strf[InputTypeFC]);\r
- }\r
- \r
- break;\r
- case WM_CLOSE:\r
- case WM_QUIT: goto gornk;\r
- case WM_COMMAND:\r
- if(HIWORD(wParam)==CBN_SELENDOK)\r
- {\r
- switch(LOWORD(wParam))\r
- {\r
- case 104:\r
- case 105:UsrInputType[LOWORD(wParam)-104]=InputType[LOWORD(wParam)-104]=SendDlgItemMessage(hwndDlg,LOWORD(wParam),CB_GETCURSEL,0,(LPARAM)(LPSTR)0);\r
- EnableWindow( GetDlgItem(hwndDlg,LOWORD(wParam)+2),boopar[InputType[LOWORD(wParam)-104]]?1:0);\r
- SetDlgItemText(hwndDlg,200+LOWORD(wParam)-104,(LPTSTR)strn[InputType[LOWORD(wParam)-104]]);\r
- break;\r
- case 110:UsrInputTypeFC=InputTypeFC=SendDlgItemMessage(hwndDlg,110,CB_GETCURSEL,0,(LPARAM)(LPSTR)0);\r
- EnableWindow(GetDlgItem(hwndDlg,111),boopar2[InputTypeFC]?1:0);\r
- SetDlgItemText(hwndDlg,202,(LPTSTR)strf[InputTypeFC]);\r
- break;\r
- \r
- }\r
-\r
- }\r
- if(!(wParam>>16))\r
- switch(wParam&0xFFFF)\r
- {\r
- case 111:\r
- if(boopar2[InputTypeFC])\r
- boopar2[InputTypeFC](hwndDlg);\r
- break;\r
-\r
- case 107:\r
- case 106:\r
- {\r
- int t=(wParam&0xFFFF)-106;\r
- if(boopar[InputType[t]])\r
- boopar[InputType[t]](hwndDlg,t);\r
- }\r
- break;\r
- case 1:\r
- gornk:\r
- EndDialog(hwndDlg,0);\r
- break;\r
- }\r
- }\r
- return 0;\r
-}\r
-\r
-void ConfigInput(HWND hParent)\r
-{\r
- DialogBox(fceu_hInstance,"INPUTCONFIG",hParent,InputConCallB);\r
- CreateInputStuff();\r
-}\r
-\r
-\r
-static int porttemp;\r
-\r
-BOOL CALLBACK GPConCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)\r
-{\r
- switch(uMsg) {\r
- case WM_INITDIALOG: \r
- if(NoFourScore)\r
- CheckDlgButton(hwndDlg,200,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 107:ConfigJoystickies(hwndDlg, porttemp);break;\r
- case 106:ConfigKeyboardie(hwndDlg, porttemp);break;\r
- case 1:\r
- gornk:\r
- NoFourScore=0;\r
- if(IsDlgButtonChecked(hwndDlg,200)==BST_CHECKED)\r
- NoFourScore=1;\r
- EndDialog(hwndDlg,0);\r
- break;\r
- }\r
- }\r
- return 0;\r
-}\r
-\r
-static void ConfigGamePad(HWND hParent, int port)\r
-{\r
- porttemp=port;\r
- DialogBox(fceu_hInstance,"GAMEPADCONFIG",hParent,GPConCallB);\r
-}\r
-\r
-\r