+++ /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
-\r
-#include "cheat.h"\r
-\r
-static int selcheat;\r
-static int scheatmethod=0;\r
-static uint8 cheatval1=0;\r
-static uint8 cheatval2=0;\r
-\r
-static void ConfigAddCheat(HWND wnd);\r
-\r
-\r
-static uint16 StrToU16(char *s)\r
-{\r
- unsigned int ret=0;\r
- sscanf(s,"%4x",&ret);\r
- return ret;\r
-}\r
-\r
-static uint8 StrToU8(char *s)\r
-{\r
- unsigned int ret=0;\r
- sscanf(s,"%d",&ret);\r
- return ret;\r
-}\r
-\r
-\r
-/* Need to be careful where these functions are used. */\r
-static char *U16ToStr(uint16 a)\r
-{\r
- static char TempArray[16];\r
- sprintf(TempArray,"%04X",a);\r
- return TempArray;\r
-}\r
-\r
-static char *U8ToStr(uint8 a)\r
-{\r
- static char TempArray[16];\r
- sprintf(TempArray,"%03d",a);\r
- return TempArray;\r
-}\r
-\r
-\r
-static HWND RedoCheatsWND;\r
-static int RedoCheatsCallB(char *name, uint32 a, uint8 v, int s)\r
-{\r
- SendDlgItemMessage(RedoCheatsWND,101,LB_ADDSTRING,0,(LPARAM)(LPSTR)name);\r
- return(1);\r
-}\r
-\r
-static void RedoCheatsLB(HWND hwndDlg)\r
-{\r
- SendDlgItemMessage(hwndDlg,101,LB_RESETCONTENT,0,0);\r
- RedoCheatsWND=hwndDlg;\r
- FCEUI_ListCheats(RedoCheatsCallB);\r
-}\r
-\r
-\r
-BOOL CALLBACK CheatsConCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)\r
-{\r
- switch(uMsg)\r
- {\r
- case WM_INITDIALOG: \r
- RedoCheatsLB(hwndDlg);\r
- break;\r
- case WM_CLOSE:\r
- case WM_QUIT: goto gornk;\r
- case WM_COMMAND:\r
- switch(HIWORD(wParam))\r
- {\r
- case BN_CLICKED:\r
- if(selcheat>=0)\r
- {\r
- if(LOWORD(wParam)==107)\r
- FCEUI_SetCheat(selcheat,0,-1,-1,1);\r
- else if(LOWORD(wParam)==108)\r
- FCEUI_SetCheat(selcheat,0,-1,-1,0);\r
- }\r
- break;\r
- case EN_KILLFOCUS:\r
- if(selcheat>=0)\r
- {\r
- char TempArray[256];\r
- int32 t;\r
-\r
- GetDlgItemText(hwndDlg,LOWORD(wParam),TempArray,256);\r
- switch(LOWORD(wParam))\r
- {\r
- case 102:FCEUI_SetCheat(selcheat,TempArray,-1,-1,-1);\r
- SendDlgItemMessage(hwndDlg,101,LB_INSERTSTRING,selcheat,(LPARAM)(LPCTSTR)TempArray);\r
- SendDlgItemMessage(hwndDlg,101,LB_DELETESTRING,selcheat+1,0);\r
- SendDlgItemMessage(hwndDlg,101,LB_SETCURSEL,selcheat,0);\r
- break;\r
- case 103:t=StrToU16(TempArray);\r
- FCEUI_SetCheat(selcheat,0,t,-1,-1);\r
- break;\r
- case 104:t=StrToU8(TempArray);\r
- FCEUI_SetCheat(selcheat,0,-1,t,-1);\r
- break;\r
- }\r
- }\r
- break;\r
- }\r
-\r
- switch(LOWORD(wParam))\r
- {\r
- case 101:\r
- if(HIWORD(wParam)==LBN_SELCHANGE)\r
- {\r
- char *s;\r
- uint32 a;\r
- uint8 b;\r
- int status;\r
-\r
- selcheat=SendDlgItemMessage(hwndDlg,101,LB_GETCURSEL,0,(LPARAM)(LPSTR)0);\r
- if(selcheat<0) break;\r
-\r
- FCEUI_GetCheat(selcheat,&s,&a,&b,&status);\r
- SetDlgItemText(hwndDlg,102,(LPTSTR)s);\r
- SetDlgItemText(hwndDlg,103,(LPTSTR)U16ToStr(a));\r
- SetDlgItemText(hwndDlg,104,(LPTSTR)U8ToStr(b));\r
-\r
- CheckRadioButton(hwndDlg,107,108,status?107:108);\r
- }\r
- break;\r
- }\r
-\r
- if(!(wParam>>16))\r
- switch(wParam&0xFFFF)\r
- {\r
- case 106:\r
- if(selcheat>=0)\r
- {\r
- FCEUI_DelCheat(selcheat);\r
- SendDlgItemMessage(hwndDlg,101,LB_DELETESTRING,selcheat,0);\r
- selcheat=-1;\r
- SetDlgItemText(hwndDlg,102,(LPTSTR)"");\r
- SetDlgItemText(hwndDlg,103,(LPTSTR)"");\r
- SetDlgItemText(hwndDlg,104,(LPTSTR)"");\r
- CheckRadioButton(hwndDlg,107,108,0); // Is this correct?\r
- }\r
- break;\r
- case 105:\r
- ConfigAddCheat(hwndDlg);\r
- RedoCheatsLB(hwndDlg);\r
- break;\r
- case 1:\r
- gornk:\r
- EndDialog(hwndDlg,0);\r
- break;\r
- }\r
- }\r
- return 0;\r
-}\r
-\r
-\r
-void ConfigCheats(HWND hParent)\r
-{\r
- if(!GI)\r
- {\r
- FCEUD_PrintError("You must have a game loaded before you can manipulate cheats.");\r
- return;\r
- }\r
-\r
- if(GI->type==GIT_NSF)\r
- {\r
- FCEUD_PrintError("Sorry, you can't cheat with NSFs.");\r
- return;\r
- }\r
-\r
- selcheat=-1;\r
- DialogBox(fceu_hInstance,"CHEATS",hParent,CheatsConCallB);\r
-}\r
-\r
-\r
-\r
-\r
-\r
-\r
-HWND cfcallbw;\r
-\r
-int cfcallb(uint32 a, uint8 last, uint8 current)\r
-{\r
- char temp[16];\r
-\r
- sprintf(temp,"%04X:%03d:%03d",(unsigned int)a,last,current);\r
- SendDlgItemMessage(cfcallbw,108,LB_ADDSTRING,0,(LPARAM)(LPSTR)temp);\r
- return(1);\r
-}\r
-\r
-static int scrollindex;\r
-static int scrollnum;\r
-static int scrollmax;\r
-\r
-int cfcallbinsert(uint32 a, uint8 last, uint8 current)\r
-{\r
- char temp[16];\r
-\r
- sprintf(temp,"%04X:%03d:%03d",(unsigned int)a,last,current);\r
- SendDlgItemMessage(cfcallbw,108,LB_INSERTSTRING,13,(LPARAM)(LPSTR)temp);\r
- return(1);\r
-}\r
-\r
-int cfcallbinsertt(uint32 a, uint8 last, uint8 current)\r
-{\r
- char temp[16];\r
-\r
- sprintf(temp,"%04X:%03d:%03d",(unsigned int)a,last,current);\r
- SendDlgItemMessage(cfcallbw,108,LB_INSERTSTRING,0,(LPARAM)(LPSTR)temp);\r
- return(1);\r
-}\r
-\r
-\r
-void AddTheThing(HWND hwndDlg, char *s, int a, int v)\r
-{\r
- if(FCEUI_AddCheat(s,a,v))\r
- MessageBox(hwndDlg,"Cheat Added","Cheat Added",MB_OK);\r
-}\r
-\r
-\r
-static void DoGet(void)\r
-{\r
- int n=FCEUI_CheatSearchGetCount();\r
- int t;\r
- scrollnum=n;\r
- scrollindex=-32768;\r
-\r
- SendDlgItemMessage(cfcallbw,108,LB_RESETCONTENT,0,0);\r
- FCEUI_CheatSearchGetRange(0,13,cfcallb);\r
-\r
- t=-32768+n-1-13;\r
- if(t<-32768)\r
- t=-32768;\r
- scrollmax=t;\r
- SendDlgItemMessage(cfcallbw,120,SBM_SETRANGE,-32768,t);\r
- SendDlgItemMessage(cfcallbw,120,SBM_SETPOS,-32768,1);\r
-}\r
-\r
-\r
-BOOL CALLBACK AddCheatCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)\r
-{\r
- static int lbfocus;\r
- static HWND hwndLB;\r
- cfcallbw=hwndDlg;\r
-\r
-\r
- switch(uMsg)\r
- { \r
- case WM_VSCROLL:\r
- if(scrollnum>13)\r
- {\r
- switch((int)LOWORD(wParam))\r
- {\r
- case SB_TOP:\r
- scrollindex=-32768;\r
- SendDlgItemMessage(hwndDlg,120,SBM_SETPOS,scrollindex,1);\r
- SendDlgItemMessage(hwndDlg,108,LB_RESETCONTENT,13,0);\r
- FCEUI_CheatSearchGetRange(scrollindex+32768,scrollindex+32768+13,cfcallb);\r
- break;\r
- case SB_BOTTOM:\r
- scrollindex=scrollmax;\r
- SendDlgItemMessage(hwndDlg,120,SBM_SETPOS,scrollindex,1);\r
- SendDlgItemMessage(hwndDlg,108,LB_RESETCONTENT,13,0);\r
- FCEUI_CheatSearchGetRange(scrollindex+32768,scrollindex+32768+13,cfcallb);\r
- break;\r
- case SB_LINEUP:\r
- if(scrollindex>-32768)\r
- {\r
- scrollindex--;\r
- SendDlgItemMessage(hwndDlg,120,SBM_SETPOS,scrollindex,1);\r
- SendDlgItemMessage(hwndDlg,108,LB_DELETESTRING,13,0);\r
- FCEUI_CheatSearchGetRange(scrollindex+32768,scrollindex+32768,cfcallbinsertt);\r
- }\r
- break;\r
-\r
- case SB_PAGEUP:\r
- scrollindex-=14;\r
- if(scrollindex<-32768) scrollindex=-32768;\r
- SendDlgItemMessage(hwndDlg,120,SBM_SETPOS,scrollindex,1);\r
- SendDlgItemMessage(hwndDlg,108,LB_RESETCONTENT,13,0);\r
- FCEUI_CheatSearchGetRange(scrollindex+32768,scrollindex+32768+13,cfcallb);\r
- break;\r
-\r
- case SB_LINEDOWN:\r
- if(scrollindex<scrollmax)\r
- {\r
- scrollindex++;\r
- SendDlgItemMessage(hwndDlg,120,SBM_SETPOS,scrollindex,1);\r
- SendDlgItemMessage(hwndDlg,108,LB_DELETESTRING,0,0);\r
- FCEUI_CheatSearchGetRange(scrollindex+32768+13,scrollindex+32768+13,cfcallbinsert);\r
- }\r
- break;\r
-\r
- case SB_PAGEDOWN:\r
- scrollindex+=14;\r
- if(scrollindex>scrollmax)\r
- scrollindex=scrollmax;\r
- SendDlgItemMessage(hwndDlg,120,SBM_SETPOS,scrollindex,1);\r
- SendDlgItemMessage(hwndDlg,108,LB_RESETCONTENT,0,0);\r
- FCEUI_CheatSearchGetRange(scrollindex+32768,scrollindex+32768+13,cfcallb);\r
- break;\r
-\r
- case SB_THUMBPOSITION:\r
- case SB_THUMBTRACK:\r
- scrollindex=(short int)HIWORD(wParam);\r
- SendDlgItemMessage(hwndDlg,120,SBM_SETPOS,scrollindex,1);\r
- SendDlgItemMessage(hwndDlg,108,LB_RESETCONTENT,0,0);\r
- FCEUI_CheatSearchGetRange(32768+scrollindex,32768+scrollindex+13,cfcallb);\r
- break;\r
- }\r
-\r
- } \r
- break;\r
-\r
- case WM_INITDIALOG:\r
- SetDlgItemText(hwndDlg,110,(LPTSTR)U8ToStr(cheatval1));\r
- SetDlgItemText(hwndDlg,111,(LPTSTR)U8ToStr(cheatval2));\r
- DoGet();\r
- CheckRadioButton(hwndDlg,115,118,scheatmethod+115);\r
- lbfocus=0;\r
- hwndLB=0;\r
- break;\r
-\r
- case WM_VKEYTOITEM:\r
- if(lbfocus)\r
- {\r
- int real;\r
-\r
- real=SendDlgItemMessage(hwndDlg,108,LB_GETCURSEL,0,(LPARAM)(LPSTR)0);\r
- switch((int)LOWORD(wParam))\r
- {\r
- case VK_UP: \r
- /* mmmm....recursive goodness */\r
- if(!real)\r
- SendMessage(hwndDlg,WM_VSCROLL,SB_LINEUP,0);\r
- return(-1);\r
- break;\r
- case VK_DOWN:\r
- if(real==13)\r
- SendMessage(hwndDlg,WM_VSCROLL,SB_LINEDOWN,0);\r
- return(-1);\r
- break;\r
- case VK_PRIOR:\r
- SendMessage(hwndDlg,WM_VSCROLL,SB_PAGEUP,0);\r
- break;\r
- case VK_NEXT:\r
- SendMessage(hwndDlg,WM_VSCROLL,SB_PAGEDOWN,0);\r
- break;\r
- case VK_HOME:\r
- SendMessage(hwndDlg,WM_VSCROLL,SB_TOP,0);\r
- break;\r
- case VK_END:\r
- SendMessage(hwndDlg,WM_VSCROLL,SB_BOTTOM,0);\r
- break;\r
- }\r
- return(-2);\r
- }\r
- break;\r
-\r
- case WM_CLOSE:\r
- case WM_QUIT: goto gornk;\r
- case WM_COMMAND:\r
- switch(LOWORD(wParam))\r
- {\r
- case 108:\r
- switch(HIWORD(wParam))\r
- {\r
- case LBN_SELCHANGE:\r
- {\r
- char TempArray[32];\r
- SendDlgItemMessage(hwndDlg,108,LB_GETTEXT,SendDlgItemMessage(hwndDlg,108,LB_GETCURSEL,0,(LPARAM)(LPSTR)0),(LPARAM)(LPCTSTR)TempArray);\r
- TempArray[4]=0;\r
- SetDlgItemText(hwndDlg,201,(LPTSTR)TempArray); \r
- }\r
- break;\r
- case LBN_SETFOCUS:\r
- lbfocus=1;\r
- break;\r
- case LBN_KILLFOCUS:\r
- lbfocus=0;\r
- break;\r
- }\r
- break;\r
- }\r
-\r
- switch(HIWORD(wParam))\r
- {\r
- case BN_CLICKED:\r
- if(LOWORD(wParam)>=115 && LOWORD(wParam)<=118)\r
- scheatmethod=LOWORD(wParam)-115;\r
- break;\r
- case EN_CHANGE:\r
- {\r
- char TempArray[256];\r
- GetDlgItemText(hwndDlg,LOWORD(wParam),TempArray,256);\r
- switch(LOWORD(wParam))\r
- {\r
- case 110:cheatval1=StrToU8(TempArray);break;\r
- case 111:cheatval2=StrToU8(TempArray);break;\r
- }\r
- }\r
- break;\r
- }\r
-\r
-\r
- if(!(wParam>>16))\r
- switch(wParam&0xFFFF)\r
- {\r
- case 112:\r
- FCEUI_CheatSearchBegin();\r
- DoGet();\r
- break;\r
- case 113:\r
- FCEUI_CheatSearchEnd(scheatmethod,cheatval1,cheatval2);\r
- DoGet();\r
- break;\r
- case 114:\r
- FCEUI_CheatSearchSetCurrentAsOriginal();\r
- DoGet();\r
- break;\r
- case 107:\r
- FCEUI_CheatSearchShowExcluded();\r
- DoGet();\r
- break;\r
- case 105:\r
- {\r
- int a,v;\r
- char temp[256];\r
-\r
- GetDlgItemText(hwndDlg,201,temp,4+1);\r
- a=StrToU16(temp);\r
- GetDlgItemText(hwndDlg,202,temp,3+1);\r
- v=StrToU8(temp);\r
-\r
- GetDlgItemText(hwndDlg,200,temp,256);\r
- AddTheThing(hwndDlg,temp,a,v);\r
- }\r
- break;\r
- case 106:\r
- gornk:\r
- EndDialog(hwndDlg,0);\r
- break;\r
- }\r
- }\r
- return 0;\r
-}\r
-\r
-static void ConfigAddCheat(HWND wnd)\r
-{\r
- DialogBox(fceu_hInstance,"ADDCHEAT",wnd,AddCheatCallB);\r
-}\r