1. Experimental limit the input characters for some edit control.
2. Separated cheat code and game genie in Cheat window. 3. Don't show a game genie code when affected address is under 0x8000. 4. Detail: set font for some edit control, replaced some static global variable. 5. Other details. By the way, why there're so many useless brackets in some functions?
This commit is contained in:
parent
cc31ee1a37
commit
56f0db87fa
|
@ -64,19 +64,18 @@ int lbfocus = 0;
|
|||
int searchdone;
|
||||
static int knownvalue = 0;
|
||||
|
||||
int GGaddr, GGcomp, GGval;
|
||||
char GGcode[10];
|
||||
// int GGaddr, GGcomp, GGval;
|
||||
// char GGcode[10];
|
||||
int GGlist[GGLISTSIZE];
|
||||
static int dontupdateGG; //this eliminates recursive crashing
|
||||
static char* ggLets = "APZLGITYEOXUKSVN";
|
||||
char* GameGenieLetters = "APZLGITYEOXUKSVN";
|
||||
|
||||
// bool dodecode;
|
||||
|
||||
HWND hGGConv;
|
||||
WNDPROC DefaultGGConvWndProc;
|
||||
|
||||
void EncodeGG(char *str, int a, int v, int c);
|
||||
void ListGGAddresses();
|
||||
void ListGGAddresses(HWND hwndDlg);
|
||||
|
||||
uint16 StrToU16(char *s)
|
||||
{
|
||||
|
@ -317,11 +316,7 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
|
|||
CheckDlgButton(hwndDlg, IDC_CHEAT_AUTOLOADSAVE, disableAutoLSCheats == 2 ? BST_UNCHECKED : disableAutoLSCheats == 1 ? BST_INDETERMINATE : BST_CHECKED);
|
||||
|
||||
//setup font
|
||||
hFont = (HFONT)SendMessage(hwndDlg, WM_GETFONT, 0, 0);
|
||||
LOGFONT lf;
|
||||
GetObject(hFont, sizeof(LOGFONT), &lf);
|
||||
strcpy(lf.lfFaceName, "Courier New");
|
||||
hNewFont = CreateFontIndirect(&lf);
|
||||
SetupCheatFont(hwndDlg);
|
||||
|
||||
SendDlgItemMessage(hwndDlg, IDC_CHEAT_ADDR, WM_SETFONT, (WPARAM)hNewFont, FALSE);
|
||||
SendDlgItemMessage(hwndDlg, IDC_CHEAT_VAL, WM_SETFONT, (WPARAM)hNewFont, FALSE);
|
||||
|
@ -343,6 +338,22 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
|
|||
SendDlgItemMessage(hwndDlg, IDC_CHEAT_VAL_GT_BY, EM_SETLIMITTEXT, 2, 0);
|
||||
SendDlgItemMessage(hwndDlg, IDC_CHEAT_VAL_LT_BY, EM_SETLIMITTEXT, 2, 0);
|
||||
SendDlgItemMessage(hwndDlg, IDC_CHEAT_TEXT, EM_SETLIMITTEXT, 10, 0);
|
||||
SendDlgItemMessage(hwndDlg, IDC_CHEAT_GAME_GENIE_TEXT, EM_SETLIMITTEXT, 8, 0);
|
||||
|
||||
// limit their characters
|
||||
DefaultEditCtrlProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndDlg, IDC_CHEAT_ADDR), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
SetWindowLong(GetDlgItem(hwndDlg, IDC_CHEAT_ADDR), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
SetWindowLong(GetDlgItem(hwndDlg, IDC_CHEAT_VAL), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
SetWindowLong(GetDlgItem(hwndDlg, IDC_CHEAT_COM), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
SetWindowLong(GetDlgItem(hwndDlg, IDC_CHEAT_NAME), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
SetWindowLong(GetDlgItem(hwndDlg, IDC_CHEAT_VAL_KNOWN), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
SetWindowLong(GetDlgItem(hwndDlg, IDC_CHEAT_VAL_NE_BY), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
SetWindowLong(GetDlgItem(hwndDlg, IDC_CHEAT_VAL_GT_BY), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
SetWindowLong(GetDlgItem(hwndDlg, IDC_CHEAT_VAL_LT_BY), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
SetWindowLong(GetDlgItem(hwndDlg, IDC_CHEAT_TEXT), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
SetWindowLong(GetDlgItem(hwndDlg, IDC_CHEAT_GAME_GENIE_TEXT), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
|
||||
|
||||
|
||||
possiTotalCount = 0;
|
||||
possiItemCount = SendDlgItemMessage(hwndDlg, IDC_CHEAT_LIST_POSSIBILITIES, LVM_GETCOUNTPERPAGE, 0, 0);
|
||||
|
@ -356,7 +367,7 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
|
|||
|
||||
//misc setup
|
||||
searchdone = 0;
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_VAL_KNOWN, (LPTSTR)U8ToStr(knownvalue));
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_VAL_KNOWN, (LPCSTR)U8ToStr(knownvalue));
|
||||
|
||||
// Enable Context Sub-Menus
|
||||
hCheatcontext = LoadMenu(fceu_hInstance, "CHEATCONTEXTMENUS");
|
||||
|
@ -374,7 +385,6 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
|
|||
wasPausedByCheats = true;
|
||||
FCEU_printf("Emulation paused: %d\n", EmulationPaused);
|
||||
}
|
||||
|
||||
}
|
||||
if (CheatStyle && possiTotalCount) {
|
||||
if ((!wParam) && searchdone) {
|
||||
|
@ -384,6 +394,7 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
|
|||
ShowResults(hwndDlg);
|
||||
}
|
||||
break;
|
||||
case WM_QUIT:
|
||||
case WM_CLOSE:
|
||||
if (CheatStyle)
|
||||
DestroyWindow(hwndDlg);
|
||||
|
@ -393,8 +404,7 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
|
|||
case WM_DESTROY:
|
||||
CheatWindow = 0;
|
||||
hCheat = NULL;
|
||||
DeleteObject(hFont);
|
||||
DeleteObject(hNewFont);
|
||||
DeleteCheatFont();
|
||||
if (searchdone)
|
||||
FCEUI_CheatSearchSetCurrentAsOriginal();
|
||||
possiList.clear();
|
||||
|
@ -638,12 +648,12 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
|
|||
RedoCheatsCallB(name, a, v, c, s, 1, &selcheat);
|
||||
SendDlgItemMessage(hwndDlg, IDC_LIST_CHEATS, LVM_SETSELECTIONMARK, 0, selcheat);
|
||||
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_ADDR, (LPTSTR)U16ToStr(a));
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_VAL, (LPTSTR)U8ToStr(v));
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_ADDR, (LPCSTR)U16ToStr(a));
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_VAL, (LPCSTR)U8ToStr(v));
|
||||
if (c == -1)
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_COM, (LPTSTR)"");
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_COM, (LPCSTR)"");
|
||||
else
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_COM, (LPTSTR)U8ToStr(c));
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_COM, (LPCSTR)U8ToStr(c));
|
||||
UpdateCheatRelatedWindow();
|
||||
UpdateCheatListGroupBoxUI();
|
||||
// UpdateCheatAdded();
|
||||
|
@ -742,7 +752,7 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
|
|||
else
|
||||
{
|
||||
disableAutoLSCheats = 0;
|
||||
CheckDlgButton(hwndDlg, IDC_CHEAT_AUTOLOADSAVE, BST_INDETERMINATE);
|
||||
CheckDlgButton(hwndDlg, IDC_CHEAT_AUTOLOADSAVE, BST_CHECKED);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -754,6 +764,7 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
|
|||
case IDC_CHEAT_VAL:
|
||||
case IDC_CHEAT_COM: editMode = 0; break;
|
||||
case IDC_CHEAT_TEXT: editMode = 1; break;
|
||||
case IDC_CHEAT_GAME_GENIE_TEXT: editMode = 2; break;
|
||||
}
|
||||
break;
|
||||
case EN_UPDATE:
|
||||
|
@ -767,8 +778,13 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
|
|||
{
|
||||
char buf[16]; uint32 a; uint8 v; int c;
|
||||
GetUICheatInfo(hwndDlg, NULL, &a, &v, &c);
|
||||
GetCheatStr(buf, a, v, c);
|
||||
buf[0] = 0;
|
||||
GetCheatCodeStr(buf, a, v, c);
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_TEXT, buf);
|
||||
buf[0] = 0;
|
||||
if (a > 0x7FFF && v != -1)
|
||||
EncodeGG(buf, a, v, c);
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_GAME_GENIE_TEXT, buf);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -778,7 +794,7 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
|
|||
{
|
||||
char buf[16];
|
||||
GetDlgItemText(hwndDlg, IDC_CHEAT_TEXT, buf, 16);
|
||||
int a = -1, v = -1; int c = -1;
|
||||
int a = -1, v = -1, c = -1;
|
||||
if (strchr(buf, ':'))
|
||||
{
|
||||
if (strchr(buf, '?'))
|
||||
|
@ -786,12 +802,35 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
|
|||
else
|
||||
sscanf(buf, "%X:%X", &a, &v);
|
||||
}
|
||||
else if (strlen(buf) == 6 || strlen(buf) == 8)
|
||||
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_ADDR, (LPCSTR)(a == -1 ? "" : U16ToStr(a)));
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_VAL, (LPCSTR)(v == -1 ? "" : U8ToStr(v)));
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_COM, (LPCSTR)(c == -1 ? "" : U8ToStr(c)));
|
||||
buf[0] = 0;
|
||||
if (a > 0x7FFF && v != -1)
|
||||
EncodeGG(buf, a, v, c);
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_GAME_GENIE_TEXT, buf);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case IDC_CHEAT_GAME_GENIE_TEXT:
|
||||
{
|
||||
if (editMode == 2)
|
||||
{
|
||||
char buf[16];
|
||||
GetDlgItemText(hwndDlg, IDC_CHEAT_GAME_GENIE_TEXT, buf, 16);
|
||||
int a = -1, v = -1, c = -1;
|
||||
if (strlen(buf) == 6 || strlen(buf) == 8)
|
||||
FCEUI_DecodeGG(buf, &a, &v, &c);
|
||||
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_ADDR, (LPTSTR)(a == -1 ? "" : U16ToStr(a)));
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_VAL, (LPTSTR)(v == -1 ? "" : U8ToStr(v)));
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_COM, (LPTSTR)(c == -1 ? "" : U8ToStr(c)));
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_ADDR, (LPCSTR)(a == -1 ? "" : U16ToStr(a)));
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_VAL, (LPCSTR)(v == -1 ? "" : U8ToStr(v)));
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_COM, (LPCSTR)(c == -1 ? "" : U8ToStr(c)));
|
||||
|
||||
buf[0] = 0;
|
||||
if (a != -1 && v != -1)
|
||||
GetCheatCodeStr(buf, a, v, c);
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_TEXT, buf);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -820,15 +859,20 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
|
|||
{
|
||||
char* name = ""; uint32 a; uint8 v; int s; int c;
|
||||
FCEUI_GetCheat(selcheat, &name, &a, &v, &c, &s, NULL);
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_NAME, (LPTSTR)name);
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_ADDR, (LPTSTR)U16ToStr(a));
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_VAL, (LPTSTR)U8ToStr(v));
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_COM, (LPTSTR)(c == -1 ? "" : U8ToStr(c)));
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_NAME, (LPCSTR)name);
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_ADDR, (LPCSTR)U16ToStr(a));
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_VAL, (LPCSTR)U8ToStr(v));
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_COM, (LPCSTR)(c == -1 ? "" : U8ToStr(c)));
|
||||
|
||||
char code[32];
|
||||
GetCheatStr(code, a, v, c);
|
||||
|
||||
code[0] = 0;
|
||||
GetCheatCodeStr(code, a, v, c);
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_TEXT, code);
|
||||
code[0] = 0;
|
||||
if (a > 0x7FFF && v != -1)
|
||||
EncodeGG(code, a, v, c);
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_GAME_GENIE_TEXT, code);
|
||||
|
||||
}
|
||||
|
||||
EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_CHEAT_DEL), selcheatcount > 0);
|
||||
|
@ -884,10 +928,10 @@ BOOL CALLBACK CheatConsoleCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l
|
|||
SEARCHPOSSIBLE& possible = possiList[pNMListView->iItem];
|
||||
char str[16];
|
||||
sprintf(str, "%04X", possible.addr);
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_ADDR, (LPCTSTR)str);
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_ADDR, (LPCSTR)str);
|
||||
sprintf(str, "%02X", possible.current);
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_VAL, (LPCTSTR)str);
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_COM, (LPTSTR)"");
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_VAL, (LPCSTR)str);
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_COM, (LPCSTR)"");
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -1003,8 +1047,8 @@ void UpdateCheatsAdded()
|
|||
|
||||
BOOL CALLBACK GGConvCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
char str[100];
|
||||
int i;
|
||||
// int i;
|
||||
extern void GetUIGGInfo(HWND hwndDlg, uint32* a, uint8* v, int* c);
|
||||
|
||||
switch(uMsg) {
|
||||
case WM_MOVE: {
|
||||
|
@ -1021,73 +1065,85 @@ BOOL CALLBACK GGConvCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
break;
|
||||
};
|
||||
case WM_INITDIALOG:
|
||||
//todo: set text limits
|
||||
if (GGConv_wndx == -32000)
|
||||
GGConv_wndx = 0; //Just in case
|
||||
if (GGConv_wndy == -32000)
|
||||
GGConv_wndy = 0;
|
||||
SetWindowPos(hwndDlg, 0, GGConv_wndx, GGConv_wndy, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER);
|
||||
{
|
||||
POINT pt;
|
||||
if (GGConv_wndx != 0 && GGConv_wndy != 0)
|
||||
{
|
||||
pt.x = GGConv_wndx;
|
||||
pt.y = GGConv_wndy;
|
||||
pt = CalcSubWindowPos(hwndDlg, &pt);
|
||||
}
|
||||
else
|
||||
pt = CalcSubWindowPos(hwndDlg, NULL);
|
||||
|
||||
GGConv_wndx = pt.x;
|
||||
GGConv_wndy = pt.y;
|
||||
|
||||
// text limits;
|
||||
SendDlgItemMessage(hwndDlg, IDC_GAME_GENIE_CODE, EM_SETLIMITTEXT, 8, 0);
|
||||
SendDlgItemMessage(hwndDlg, IDC_GAME_GENIE_ADDR, EM_SETLIMITTEXT, 4, 0);
|
||||
SendDlgItemMessage(hwndDlg, IDC_GAME_GENIE_COMP, EM_SETLIMITTEXT, 2, 0);
|
||||
SendDlgItemMessage(hwndDlg, IDC_GAME_GENIE_VAL, EM_SETLIMITTEXT, 2, 0);
|
||||
|
||||
DefaultGGConvWndProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndDlg, IDC_GAME_GENIE_CODE), GWL_WNDPROC, (LONG)GGConvCustomWndProc);
|
||||
// setup font
|
||||
SetupCheatFont(hwndDlg);
|
||||
|
||||
break;
|
||||
SendDlgItemMessage(hwndDlg, IDC_GAME_GENIE_ADDR, WM_SETFONT, (WPARAM)hNewFont, FALSE);
|
||||
SendDlgItemMessage(hwndDlg, IDC_GAME_GENIE_COMP, WM_SETFONT, (WPARAM)hNewFont, FALSE);
|
||||
SendDlgItemMessage(hwndDlg, IDC_GAME_GENIE_VAL, WM_SETFONT, (WPARAM)hNewFont, FALSE);
|
||||
|
||||
// limit their characters
|
||||
DefaultEditCtrlProc = (WNDPROC)SetWindowLong(GetDlgItem(hwndDlg, IDC_GAME_GENIE_CODE), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
SetWindowLong(GetDlgItem(hwndDlg, IDC_GAME_GENIE_ADDR), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
SetWindowLong(GetDlgItem(hwndDlg, IDC_GAME_GENIE_COMP), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
SetWindowLong(GetDlgItem(hwndDlg, IDC_GAME_GENIE_VAL), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
}
|
||||
break;
|
||||
case WM_CLOSE:
|
||||
case WM_QUIT:
|
||||
DestroyWindow(hGGConv);
|
||||
hGGConv = 0;
|
||||
break;
|
||||
case WM_DESTROY:
|
||||
hGGConv = NULL;
|
||||
DeleteCheatFont();
|
||||
case WM_COMMAND:
|
||||
switch(HIWORD(wParam)) {
|
||||
case EN_UPDATE:
|
||||
if(dontupdateGG)break;
|
||||
dontupdateGG = 1;
|
||||
switch(LOWORD(wParam)){ //lets find out what edit control got changed
|
||||
switch(LOWORD(wParam))
|
||||
{
|
||||
//lets find out what edit control got changed
|
||||
case IDC_GAME_GENIE_CODE: //The Game Genie Code - in this case decode it.
|
||||
GetDlgItemText(hGGConv,IDC_GAME_GENIE_CODE,GGcode,9);
|
||||
if((strlen(GGcode) != 8) && (strlen(GGcode) != 6))break;
|
||||
{
|
||||
char buf[9];
|
||||
GetDlgItemText(hGGConv, IDC_GAME_GENIE_CODE, buf, 9);
|
||||
|
||||
FCEUI_DecodeGG(GGcode, &GGaddr, &GGval, &GGcomp);
|
||||
int a = -1, v = -1, c = -1;
|
||||
if (strlen(buf) == 6 || strlen(buf) == 8)
|
||||
FCEUI_DecodeGG(buf, &a, &v, &c);
|
||||
|
||||
sprintf(str,"%04X",GGaddr);
|
||||
SetDlgItemText(hGGConv,IDC_GAME_GENIE_ADDR,str);
|
||||
|
||||
if(GGcomp != -1)
|
||||
sprintf(str,"%02X",GGcomp);
|
||||
else str[0] = 0;
|
||||
SetDlgItemText(hGGConv,IDC_GAME_GENIE_COMP,str);
|
||||
|
||||
sprintf(str,"%02X",GGval);
|
||||
SetDlgItemText(hGGConv,IDC_GAME_GENIE_VAL,str);
|
||||
//ListGGAddresses();
|
||||
SetDlgItemText(hwndDlg, IDC_GAME_GENIE_ADDR, a == -1 ? "" : U16ToStr(a));
|
||||
SetDlgItemText(hwndDlg, IDC_GAME_GENIE_COMP, c == -1 ? "" : U8ToStr(c));
|
||||
SetDlgItemText(hwndDlg, IDC_GAME_GENIE_VAL, v == -1 ? "" : U8ToStr(v));
|
||||
}
|
||||
break;
|
||||
|
||||
case IDC_GAME_GENIE_ADDR:
|
||||
case IDC_GAME_GENIE_COMP:
|
||||
case IDC_GAME_GENIE_VAL:
|
||||
|
||||
GetDlgItemText(hGGConv,IDC_GAME_GENIE_ADDR,str,5);
|
||||
if(strlen(str) != 4) break;
|
||||
|
||||
GetDlgItemText(hGGConv,IDC_GAME_GENIE_VAL,str,5);
|
||||
if(strlen(str) != 2) {GGval = -1; break;}
|
||||
|
||||
GGaddr = GetEditHex(hGGConv,IDC_GAME_GENIE_ADDR);
|
||||
GGval = GetEditHex(hGGConv,IDC_GAME_GENIE_VAL);
|
||||
|
||||
GetDlgItemText(hGGConv,IDC_GAME_GENIE_COMP,str,5);
|
||||
if(strlen(str) != 2) GGcomp = -1;
|
||||
else GGcomp = GetEditHex(hGGConv,IDC_GAME_GENIE_COMP);
|
||||
|
||||
EncodeGG(GGcode, GGaddr, GGval, GGcomp);
|
||||
SetDlgItemText(hGGConv,IDC_GAME_GENIE_CODE,GGcode);
|
||||
uint32 a = -1; uint8 v = -1; int c = -1;
|
||||
GetUIGGInfo(hwndDlg, &a, &v, &c);
|
||||
|
||||
char buf[9] = { 0 };
|
||||
if (a > 0x7FFF && v != -1)
|
||||
EncodeGG(buf, a, v, c);
|
||||
SetDlgItemText(hwndDlg, IDC_GAME_GENIE_CODE, buf);
|
||||
//ListGGAddresses();
|
||||
break;
|
||||
}
|
||||
ListGGAddresses();
|
||||
ListGGAddresses(hwndDlg);
|
||||
dontupdateGG = 0;
|
||||
break;
|
||||
case BN_CLICKED:
|
||||
|
@ -1095,20 +1151,22 @@ BOOL CALLBACK GGConvCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
case IDC_BTN_ADD_TO_CHEATS:
|
||||
//ConfigCheats(fceu_hInstance);
|
||||
|
||||
if(GGaddr < 0x8000)GGaddr += 0x8000;
|
||||
char buf[9];
|
||||
uint32 a = -1; uint8 v = -1; int c = -1;
|
||||
GetUIGGInfo(hwndDlg, &a, &v, &c);
|
||||
GetDlgItemText(hwndDlg, IDC_GAME_GENIE_CODE, buf, 9);
|
||||
|
||||
if (FCEUI_AddCheat(GGcode, GGaddr, GGval, GGcomp, 1) && hCheat) {
|
||||
RedoCheatsCallB(GGcode, GGaddr, GGval, GGcomp, 1, 1, NULL);
|
||||
if(a < 0x8000) a += 0x8000;
|
||||
|
||||
if (FCEUI_AddCheat(buf, a, v, c, 1) && hCheat) {
|
||||
RedoCheatsCallB(buf, a, v, c, 1, 1, NULL);
|
||||
int newselcheat = SendDlgItemMessage(hCheat, IDC_LIST_CHEATS, LVM_GETITEMCOUNT, 0, 0) - 1;
|
||||
ListView_MoveSelectionMark(GetDlgItem(hCheat, IDC_LIST_CHEATS), selcheat, newselcheat);
|
||||
selcheat = newselcheat;
|
||||
|
||||
SetDlgItemText(hCheat, IDC_CHEAT_ADDR, (LPTSTR)U16ToStr(GGaddr));
|
||||
SetDlgItemText(hCheat, IDC_CHEAT_VAL, (LPTSTR)U8ToStr(GGval));
|
||||
if(GGcomp == -1)
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_COM, (LPTSTR)"");
|
||||
else
|
||||
SetDlgItemText(hwndDlg, IDC_CHEAT_COM, (LPTSTR)U8ToStr(GGcomp));
|
||||
SetDlgItemText(hCheat, IDC_CHEAT_ADDR, (LPCSTR)U16ToStr(a));
|
||||
SetDlgItemText(hCheat, IDC_CHEAT_VAL, (LPCSTR)U8ToStr(v));
|
||||
SetDlgItemText(hCheat, IDC_CHEAT_COM, (LPCSTR)(c == -1 ? "" : U8ToStr(c)));
|
||||
|
||||
EnableWindow(GetDlgItem(hCheat, IDC_BTN_CHEAT_DEL), TRUE);
|
||||
EnableWindow(GetDlgItem(hCheat, IDC_BTN_CHEAT_UPD), TRUE);
|
||||
|
@ -1121,8 +1179,7 @@ BOOL CALLBACK GGConvCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
case LBN_DBLCLK:
|
||||
switch (LOWORD(wParam)) {
|
||||
case IDC_LIST_GGADDRESSES:
|
||||
i = SendDlgItemMessage(hwndDlg,IDC_LIST_GGADDRESSES,LB_GETCURSEL,0,0);
|
||||
ChangeMemViewFocus(3,GGlist[i],-1);
|
||||
ChangeMemViewFocus(3,GGlist[SendDlgItemMessage(hwndDlg, IDC_LIST_GGADDRESSES, LB_GETCURSEL, 0, 0)],-1);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
@ -1132,105 +1189,6 @@ BOOL CALLBACK GGConvCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
LRESULT APIENTRY GGConvCustomWndProc(HWND hDlg, UINT msg, WPARAM wP, LPARAM lP)
|
||||
{
|
||||
bool through = true;
|
||||
LRESULT result = 0;
|
||||
|
||||
switch (msg)
|
||||
{
|
||||
case WM_PASTE:
|
||||
{
|
||||
switch (GetDlgCtrlID(GetFocus()))
|
||||
{
|
||||
case IDC_GAME_GENIE_CODE:
|
||||
printf("PASTE\n");
|
||||
if (OpenClipboard(hDlg))
|
||||
{
|
||||
HANDLE handle = GetClipboardData(CF_TEXT);
|
||||
if (handle)
|
||||
{
|
||||
|
||||
// copy the original clipboard string
|
||||
char* clipStr = (char*)GlobalLock(handle);
|
||||
char* original = (char*)calloc(1, strlen(clipStr) + 1);
|
||||
strcpy(original, clipStr);
|
||||
GlobalUnlock(handle);
|
||||
|
||||
// filter it out
|
||||
char filtered[9] = { 0 };
|
||||
int filteredIndex = 0, origIndex = 0;
|
||||
while (clipStr[origIndex] && filteredIndex < 9)
|
||||
{
|
||||
for (int i = 0; ggLets[i]; ++i)
|
||||
{
|
||||
if (toupper(clipStr[origIndex]) == ggLets[i])
|
||||
{
|
||||
filtered[filteredIndex] = clipStr[origIndex];
|
||||
++filteredIndex;
|
||||
}
|
||||
}
|
||||
++origIndex;
|
||||
}
|
||||
|
||||
// copy filtered str to clipboard
|
||||
EmptyClipboard();
|
||||
HANDLE hNewStr = GlobalAlloc(GMEM_MOVEABLE, 9);
|
||||
char* newStr = (char*)GlobalLock(hNewStr);
|
||||
strcpy(newStr, filtered);
|
||||
GlobalUnlock(hNewStr);
|
||||
SetClipboardData(CF_TEXT, hNewStr);
|
||||
|
||||
// end
|
||||
CloseClipboard();
|
||||
result = CallWindowProc(DefaultGGConvWndProc, hDlg, msg, wP, lP);
|
||||
through = false;
|
||||
|
||||
// set it back to normal
|
||||
if (OpenClipboard(hDlg))
|
||||
{
|
||||
handle = GetClipboardData(CF_TEXT);
|
||||
if (handle)
|
||||
{
|
||||
EmptyClipboard();
|
||||
HANDLE hOldStr = GlobalAlloc(GMEM_MOVEABLE, strlen(original) + 1);
|
||||
char* oldStr = (char*)GlobalLock(hOldStr);
|
||||
strcpy(oldStr, original);
|
||||
GlobalUnlock(hOldStr);
|
||||
SetClipboardData(CF_TEXT, hOldStr);
|
||||
}
|
||||
CloseClipboard();
|
||||
}
|
||||
|
||||
// end
|
||||
free(original);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WM_CHAR:
|
||||
{
|
||||
switch (GetDlgCtrlID(GetFocus()))
|
||||
{
|
||||
case IDC_GAME_GENIE_CODE:
|
||||
{
|
||||
through = wP == VK_BACK || GetKeyState(VK_CONTROL) & 0x8000;
|
||||
if (!through)
|
||||
for (int i = 0; ggLets[i]; ++i)
|
||||
if (toupper(wP) == ggLets[i])
|
||||
{
|
||||
through = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return through ? CallWindowProc(DefaultGGConvWndProc, hDlg, msg, wP, lP) : result;
|
||||
}
|
||||
|
||||
//The code in this function is a modified version
|
||||
//of Chris Covell's work - I'd just like to point that out
|
||||
|
@ -1250,69 +1208,78 @@ void EncodeGG(char *str, int a, int v, int c)
|
|||
|
||||
if (c == -1){
|
||||
num[5]+=v&8;
|
||||
for(i = 0;i < 6;i++)str[i] = ggLets[num[i]];
|
||||
for(i = 0;i < 6;i++)str[i] = GameGenieLetters[num[i]];
|
||||
str[6] = 0;
|
||||
} else {
|
||||
num[2]+=8;
|
||||
num[5]+=c&8;
|
||||
num[6]=(c&7)+((c>>4)&8);
|
||||
num[7]=((c>>4)&7)+(v&8);
|
||||
for(i = 0;i < 8;i++)str[i] = ggLets[num[i]];
|
||||
for(i = 0;i < 8;i++)str[i] = GameGenieLetters[num[i]];
|
||||
str[8] = 0;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void ListGGAddresses()
|
||||
void ListGGAddresses(HWND hwndDlg)
|
||||
{
|
||||
uint32 i, j = 0; //mbg merge 7/18/06 changed from int
|
||||
char str[20];
|
||||
SendDlgItemMessage(hGGConv,IDC_LIST_GGADDRESSES,LB_RESETCONTENT,0,0);
|
||||
char str[20], code[9];
|
||||
SendDlgItemMessage(hwndDlg, IDC_LIST_GGADDRESSES, LB_RESETCONTENT,0,0);
|
||||
|
||||
//also enable/disable the add GG button here
|
||||
GetDlgItemText(hGGConv,IDC_GAME_GENIE_CODE,GGcode,9);
|
||||
uint32 a = -1; uint8 v = -1; int c = -1;
|
||||
extern void GetUIGGInfo(HWND hwnd, uint32* a, uint8* v, int* c);
|
||||
GetUIGGInfo(hwndDlg, &a, &v, &c);
|
||||
|
||||
if((GGaddr < 0) || ((strlen(GGcode) != 8) && (strlen(GGcode) != 6)))EnableWindow(GetDlgItem(hGGConv,IDC_BTN_ADD_TO_CHEATS),FALSE);
|
||||
else EnableWindow(GetDlgItem(hGGConv,IDC_BTN_ADD_TO_CHEATS),TRUE);
|
||||
// also enable/disable the add GG button here
|
||||
GetDlgItemText(hwndDlg, IDC_GAME_GENIE_CODE, code, 9);
|
||||
EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_ADD_TO_CHEATS), a >= 0 && (strlen(code) == 6 || strlen(code) == 8));
|
||||
|
||||
for(i = 0;i < PRGsize[0];i+=0x2000){
|
||||
if((PRGptr[0][i+(GGaddr&0x1FFF)] == GGcomp) || (GGcomp == -1)){
|
||||
GGlist[j] = i+(GGaddr&0x1FFF)+0x10;
|
||||
if(++j > GGLISTSIZE)return;
|
||||
sprintf(str,"%06X",i+(GGaddr&0x1FFF)+0x10);
|
||||
SendDlgItemMessage(hGGConv,IDC_LIST_GGADDRESSES,LB_ADDSTRING,0,(LPARAM)(LPSTR)str);
|
||||
}
|
||||
}
|
||||
if (a != -1 && v != -1)
|
||||
for(i = 0; i < PRGsize[0]; i += 0x2000)
|
||||
if(c == -1 || PRGptr[0][i + (a & 0x1FFF)] == c){
|
||||
GGlist[j] = i + (a & 0x1FFF) + 0x10;
|
||||
if(++j > GGLISTSIZE)
|
||||
return;
|
||||
sprintf(str, "%06X", i + (a & 0x1FFF) + 0x10);
|
||||
SendDlgItemMessage(hwndDlg, IDC_LIST_GGADDRESSES, LB_ADDSTRING, 0, (LPARAM)str);
|
||||
}
|
||||
}
|
||||
|
||||
//A different model for this could be to have everything
|
||||
//set in the INITDIALOG message based on the internal
|
||||
//variables, and have this simply call that.
|
||||
void SetGGConvFocus(int address,int compare)
|
||||
void SetGGConvFocus(int address, int compare)
|
||||
{
|
||||
char str[10];
|
||||
if(!hGGConv)DoGGConv();
|
||||
GGaddr = address;
|
||||
GGcomp = compare;
|
||||
if(!hGGConv)
|
||||
DoGGConv();
|
||||
// GGaddr = address;
|
||||
// GGcomp = compare;
|
||||
|
||||
dontupdateGG = 1; //little hack to fix a nasty bug
|
||||
|
||||
sprintf(str,"%04X",address);
|
||||
SetDlgItemText(hGGConv,IDC_GAME_GENIE_ADDR,str);
|
||||
sprintf(str, "%04X", address);
|
||||
SetDlgItemText(hGGConv, IDC_GAME_GENIE_ADDR, str);
|
||||
|
||||
dontupdateGG = 0;
|
||||
|
||||
sprintf(str,"%02X",GGcomp);
|
||||
SetDlgItemText(hGGConv,IDC_GAME_GENIE_COMP,str);
|
||||
sprintf(str, "%02X", compare);
|
||||
SetDlgItemText(hGGConv, IDC_GAME_GENIE_COMP, str);
|
||||
|
||||
GetDlgItemText(hGGConv, IDC_GAME_GENIE_VAL, str, 3);
|
||||
uint8 val = StrToU8(str);
|
||||
|
||||
if(GGval < 0)SetDlgItemText(hGGConv,IDC_GAME_GENIE_CODE,"");
|
||||
if(val < 0)
|
||||
SetDlgItemText(hGGConv, IDC_GAME_GENIE_CODE, "");
|
||||
else {
|
||||
EncodeGG(GGcode, GGaddr, GGval, GGcomp);
|
||||
SetDlgItemText(hGGConv,IDC_GAME_GENIE_CODE,GGcode);
|
||||
str[0] = 0;
|
||||
if (val > 0x7FFF)
|
||||
EncodeGG(str, address, val, compare);
|
||||
SetDlgItemText(hGGConv, IDC_GAME_GENIE_CODE, str);
|
||||
}
|
||||
|
||||
SetFocus(GetDlgItem(hGGConv,IDC_GAME_GENIE_VAL));
|
||||
SetFocus(GetDlgItem(hGGConv, IDC_GAME_GENIE_VAL));
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -1329,15 +1296,19 @@ void DoGGConv()
|
|||
|
||||
inline void GetCheatStr(char* buf, int a, int v, int c)
|
||||
{
|
||||
if (a >= 0x8000)
|
||||
if (a > 0x7FFF)
|
||||
EncodeGG(buf, a, v, c);
|
||||
else {
|
||||
if (c == -1)
|
||||
sprintf(buf, "%04X:%02X", (int)a, (int)v);
|
||||
else
|
||||
sprintf(buf, "%04X?%02X:%02X", (int)a, (int)c, (int)v);
|
||||
GetCheatCodeStr(buf, a, v, c);
|
||||
}
|
||||
}
|
||||
|
||||
inline void GetCheatCodeStr(char* buf, int a, int v, int c)
|
||||
{
|
||||
if (c == -1)
|
||||
sprintf(buf, "%04X:%02X", a, v);
|
||||
else
|
||||
sprintf(buf, "%04X?%02X:%02X", a, c, v);
|
||||
}
|
||||
|
||||
void GetUICheatInfo(HWND hwndDlg, char* name, uint32* a, uint8* v, int* c)
|
||||
|
@ -1353,6 +1324,17 @@ void GetUICheatInfo(HWND hwndDlg, char* name, uint32* a, uint8* v, int* c)
|
|||
GetDlgItemText(hwndDlg, IDC_CHEAT_NAME, name, 256);
|
||||
}
|
||||
|
||||
void GetUIGGInfo(HWND hwndDlg, uint32* a, uint8* v, int* c)
|
||||
{
|
||||
char buf[16];
|
||||
GetDlgItemText(hwndDlg, IDC_GAME_GENIE_ADDR, buf, 5);
|
||||
*a = StrToU16(buf);
|
||||
GetDlgItemText(hwndDlg, IDC_GAME_GENIE_VAL, buf, 3);
|
||||
*v = StrToU8(buf);
|
||||
GetDlgItemText(hwndDlg, IDC_GAME_GENIE_COMP, buf, 3);
|
||||
*c = (buf[0] == 0 ? -1 : StrToU8(buf));
|
||||
}
|
||||
|
||||
void DisableAllCheats()
|
||||
{
|
||||
if(FCEU_DisableAllCheats() && hCheat){
|
||||
|
@ -1479,4 +1461,27 @@ void SaveCheatAs(HWND hwnd, bool flush)
|
|||
MessageBox(hwnd, "Error saving cheats!", "Cheat Console", MB_OK | MB_ICONERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SetupCheatFont(HWND hwnd)
|
||||
{
|
||||
if (!hCheat && !hGGConv)
|
||||
{
|
||||
hFont = (HFONT)SendMessage(hwnd, WM_GETFONT, 0, 0);
|
||||
LOGFONT lf;
|
||||
GetObject(hFont, sizeof(LOGFONT), &lf);
|
||||
strcpy(lf.lfFaceName, "Courier New");
|
||||
hNewFont = CreateFontIndirect(&lf);
|
||||
}
|
||||
}
|
||||
|
||||
void DeleteCheatFont()
|
||||
{
|
||||
if (!hCheat && !hGGConv)
|
||||
{
|
||||
DeleteObject(hFont);
|
||||
DeleteObject(hNewFont);
|
||||
hFont = NULL;
|
||||
hNewFont = NULL;
|
||||
}
|
||||
}
|
|
@ -13,18 +13,20 @@ typedef unsigned int HWAddressType;
|
|||
|
||||
void ConfigCheats(HWND hParent);
|
||||
void DoGGConv();
|
||||
void SetGGConvFocus(int address,int compare);
|
||||
void SetGGConvFocus(int address, int compare);
|
||||
void UpdateCheatList();
|
||||
void UpdateCheatListGroupBoxUI();
|
||||
void UpdateCheatsAdded();
|
||||
void ToggleCheatInputMode(HWND hwndDlg, int modeId);
|
||||
void GetUICheatInfo(HWND hwndDlg, char* name, uint32* a, uint8* v, int* c);
|
||||
inline void GetCheatStr(char* buf, int a, int v, int c);
|
||||
inline void GetCheatCodeStr(char* buf, int a, int v, int c);
|
||||
|
||||
extern unsigned int FrozenAddressCount;
|
||||
extern std::vector<uint16> FrozenAddresses;
|
||||
//void ConfigAddCheat(HWND wnd); //bbit edited:commented out this line
|
||||
extern struct CHEATF* cheats;
|
||||
extern char* GameGenieLetters;
|
||||
|
||||
void DisableAllCheats();
|
||||
bool ShowCheatFileBox(HWND hwnd, char* buf, bool save = false);
|
||||
|
@ -32,11 +34,13 @@ void AskSaveCheat();
|
|||
void SaveCheatAs(HWND hwnd, bool flush = false);
|
||||
|
||||
void UpdateCheatRelatedWindow();
|
||||
void SetupCheatFont(HWND hDlg);
|
||||
void DeleteCheatFont();
|
||||
extern POINT CalcSubWindowPos(HWND hDlg, POINT* conf);
|
||||
|
||||
extern BOOL CALLBACK GGConvCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
extern WNDPROC DefaultGGConvWndProc;
|
||||
extern LRESULT APIENTRY GGConvCustomWndProc(HWND hDlg, UINT msg, WPARAM wP, LPARAM lP);
|
||||
extern LRESULT APIENTRY FilterEditCtrlProc(HWND hDlg, UINT msg, WPARAM wP, LPARAM lP);
|
||||
extern WNDPROC DefaultEditCtrlProc;
|
||||
|
||||
|
||||
// deselect the old one and select the new one
|
||||
|
@ -47,10 +51,11 @@ SendMessage(hwnd, LVM_SETITEMSTATE, newIndex, (LPARAM)&(lvi.state = LVIS_SELECTE
|
|||
SendMessage(hwnd, LVM_SETSELECTIONMARK, 0, newIndex)
|
||||
|
||||
#define ClearCheatListText(hwnd) \
|
||||
(SetDlgItemText(hwnd, IDC_CHEAT_ADDR, (LPTSTR)"") & \
|
||||
SetDlgItemText(hwnd, IDC_CHEAT_VAL, (LPTSTR)"") & \
|
||||
SetDlgItemText(hwnd, IDC_CHEAT_COM, (LPTSTR)"") & \
|
||||
SetDlgItemText(hwnd, IDC_CHEAT_NAME, (LPTSTR)"") & \
|
||||
SetDlgItemText(hwnd, IDC_CHEAT_TEXT, (LPTSTR)""))
|
||||
(SetDlgItemText(hwnd, IDC_CHEAT_ADDR, (LPCSTR)"") & \
|
||||
SetDlgItemText(hwnd, IDC_CHEAT_VAL, (LPCSTR)"") & \
|
||||
SetDlgItemText(hwnd, IDC_CHEAT_COM, (LPCSTR)"") & \
|
||||
SetDlgItemText(hwnd, IDC_CHEAT_NAME, (LPCSTR)"") & \
|
||||
SetDlgItemText(hwnd, IDC_CHEAT_TEXT, (LPCSTR)"") & \
|
||||
SetDlgItemText(hwnd, IDC_CHEAT_GAME_GENIE_TEXT, (LPCSTR)""))
|
||||
|
||||
#endif
|
|
@ -271,11 +271,50 @@ HWND InitHeaderEditDialog(HWND hwnd, iNES_HEADER* header)
|
|||
// Playchoice-10 will be finally determined in ToggleUnofficialPropertiesEnabled()
|
||||
// EnableWindow(GetDlgItem(hwnd, IDC_RADIO_SYSTEM_PLAYCHOICE10), TRUE);
|
||||
|
||||
ToggleINES20(hwnd, IsDlgButtonChecked(hwnd, IDC_RADIO_VERSION_INES20) == BST_CHECKED);
|
||||
|
||||
|
||||
// Limit text
|
||||
// Sub Mapper#
|
||||
SendDlgItemMessage(hwnd, IDC_SUBMAPPER_EDIT, EM_SETLIMITTEXT, 2, 0);
|
||||
// Misc. ROM(s)
|
||||
SendDlgItemMessage(hwnd, IDC_MISCELLANEOUS_ROMS_EDIT, EM_SETLIMITTEXT, 1, 0);
|
||||
|
||||
// Assign ID to the sub edit control in these comboboxes
|
||||
// PRG ROM
|
||||
SetWindowLong(GetWindow(GetDlgItem(hwnd, IDC_PRGROM_COMBO), GW_CHILD), GWL_ID, IDC_PRGROM_EDIT);
|
||||
// PRG RAM
|
||||
SetWindowLong(GetWindow(GetDlgItem(hwnd, IDC_PRGRAM_COMBO), GW_CHILD), GWL_ID, IDC_PRGRAM_EDIT);
|
||||
// PRG NVRAM
|
||||
SetWindowLong(GetWindow(GetDlgItem(hwnd, IDC_PRGNVRAM_COMBO), GW_CHILD), GWL_ID, IDC_PRGNVRAM_EDIT);
|
||||
// CHR ROM
|
||||
SetWindowLong(GetWindow(GetDlgItem(hwnd, IDC_CHRROM_COMBO), GW_CHILD), GWL_ID, IDC_CHRROM_EDIT);
|
||||
// CHR RAM
|
||||
SetWindowLong(GetWindow(GetDlgItem(hwnd, IDC_CHRRAM_COMBO), GW_CHILD), GWL_ID, IDC_CHRRAM_EDIT);
|
||||
// CHR NVRAM
|
||||
SetWindowLong(GetWindow(GetDlgItem(hwnd, IDC_CHRNVRAM_COMBO), GW_CHILD), GWL_ID, IDC_CHRNVRAM_EDIT);
|
||||
|
||||
|
||||
// Change the default wndproc of these control to limit their text
|
||||
// PRG ROM
|
||||
DefaultEditCtrlProc = (WNDPROC)SetWindowLong(GetDlgItem(GetDlgItem(hwnd, IDC_PRGROM_COMBO), IDC_PRGROM_EDIT), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
// PRG RAM
|
||||
SetWindowLong(GetDlgItem(GetDlgItem(hwnd, IDC_PRGRAM_COMBO), IDC_PRGRAM_EDIT), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
// PRG NVRAM
|
||||
SetWindowLong(GetDlgItem(GetDlgItem(hwnd, IDC_PRGNVRAM_COMBO), IDC_PRGNVRAM_EDIT), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
// CHR ROM
|
||||
SetWindowLong(GetDlgItem(GetDlgItem(hwnd, IDC_CHRROM_COMBO), IDC_CHRROM_EDIT), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
// CHR RAM
|
||||
SetWindowLong(GetDlgItem(GetDlgItem(hwnd, IDC_CHRRAM_COMBO), IDC_CHRRAM_EDIT), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
// CHR NVRAM
|
||||
SetWindowLong(GetDlgItem(GetDlgItem(hwnd, IDC_CHRNVRAM_COMBO), IDC_CHRNVRAM_EDIT), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
// Sub Mapper#
|
||||
SetWindowLong(GetDlgItem(hwnd, IDC_SUBMAPPER_EDIT), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
// Misc. ROM(s)
|
||||
SetWindowLong(GetDlgItem(hwnd, IDC_MISCELLANEOUS_ROMS_EDIT), GWL_WNDPROC, (LONG)FilterEditCtrlProc);
|
||||
|
||||
|
||||
ToggleINES20(hwnd, IsDlgButtonChecked(hwnd, IDC_RADIO_VERSION_INES20) == BST_CHECKED);
|
||||
|
||||
char buf[256];
|
||||
for (int i = 0; dropDownIdList[i]; ++i)
|
||||
for (int j = 0; dropDownList[i][j]; ++j)
|
||||
|
@ -293,7 +332,7 @@ HWND InitHeaderEditDialog(HWND hwnd, iNES_HEADER* header)
|
|||
}
|
||||
|
||||
// add usually used size strings
|
||||
strcpy(buf, "N/A");
|
||||
strcpy(buf, "0B");
|
||||
SendDlgItemMessage(hwnd, IDC_PRGROM_COMBO, CB_SETITEMDATA, SendDlgItemMessage(hwnd, IDC_PRGROM_COMBO, CB_ADDSTRING, 0, (LPARAM)buf), 0);
|
||||
SendDlgItemMessage(hwnd, IDC_CHRROM_COMBO, CB_SETITEMDATA, SendDlgItemMessage(hwnd, IDC_CHRROM_COMBO, CB_ADDSTRING, 0, (LPARAM)buf), 0);
|
||||
SendDlgItemMessage(hwnd, IDC_PRGRAM_COMBO, CB_SETITEMDATA, SendDlgItemMessage(hwnd, IDC_PRGRAM_COMBO, CB_ADDSTRING, 0, (LPARAM)buf), 0);
|
||||
|
@ -603,7 +642,7 @@ void SetHeaderData(HWND hwnd, iNES_HEADER* header) {
|
|||
SetDlgItemText(hwnd, IDC_SUBMAPPER_EDIT, buf);
|
||||
|
||||
// PRG ROM
|
||||
strcpy(buf, "N/A");
|
||||
strcpy(buf, "0B");
|
||||
int prg_rom = header->ROM_size;
|
||||
if (ines20) {
|
||||
if ((header->Upper_ROM_VROM_size & 0xF) == 0xF)
|
||||
|
@ -625,7 +664,7 @@ void SetHeaderData(HWND hwnd, iNES_HEADER* header) {
|
|||
SetDlgItemText(hwnd, IDC_PRGROM_COMBO, buf);
|
||||
|
||||
// PRG RAM
|
||||
strcpy(buf, "N/A");
|
||||
strcpy(buf, "0B");
|
||||
if (ines20)
|
||||
{
|
||||
int shift = header->RAM_size & 0xF;
|
||||
|
@ -646,7 +685,7 @@ void SetHeaderData(HWND hwnd, iNES_HEADER* header) {
|
|||
SetDlgItemText(hwnd, IDC_PRGRAM_COMBO, buf);
|
||||
|
||||
// PRG NVRAM
|
||||
strcpy(buf, "N/A");
|
||||
strcpy(buf, "0B");
|
||||
if (ines20)
|
||||
{
|
||||
int shift = header->RAM_size >> 4;
|
||||
|
@ -666,7 +705,7 @@ void SetHeaderData(HWND hwnd, iNES_HEADER* header) {
|
|||
|
||||
|
||||
// CHR ROM
|
||||
strcpy(buf, "N/A");
|
||||
strcpy(buf, "0B");
|
||||
int chr_rom = header->VROM_size;
|
||||
if (ines20)
|
||||
{
|
||||
|
@ -689,7 +728,7 @@ void SetHeaderData(HWND hwnd, iNES_HEADER* header) {
|
|||
SetDlgItemText(hwnd, IDC_CHRROM_COMBO, buf);
|
||||
|
||||
// CHR RAM
|
||||
sprintf(buf, "N/A");
|
||||
sprintf(buf, "0B");
|
||||
if (ines20)
|
||||
{
|
||||
int shift = header->VRAM_size & 0xF;
|
||||
|
@ -705,7 +744,7 @@ void SetHeaderData(HWND hwnd, iNES_HEADER* header) {
|
|||
SetDlgItemText(hwnd, IDC_CHRRAM_COMBO, buf);
|
||||
|
||||
// CHR NVRAM
|
||||
sprintf(buf, "N/A");
|
||||
sprintf(buf, "0B");
|
||||
if (ines20)
|
||||
{
|
||||
int shift = header->VRAM_size >> 4;
|
||||
|
@ -1374,13 +1413,13 @@ bool WriteHeaderData(HWND hwnd, iNES_HEADER* header)
|
|||
printf("%02X ", _header.ROM_type);
|
||||
printf("%02X ", _header.ROM_type2);
|
||||
printf("%02X ", _header.ROM_type3);
|
||||
printf("%02X ", _header.Upper_ROM_VROM_size);
|
||||
printf("%02X ", _header.RAM_size);
|
||||
printf("%02X ", _header.VRAM_size);
|
||||
printf("%02X ", _header.TV_system);
|
||||
printf("%02X ", _header.VS_hardware);
|
||||
printf("%02X ", _header.reserved[0]);
|
||||
printf("%02X\n", _header.reserved[1]);
|
||||
printf("%02X ", _header.Upper_ROM_VROM_size);
|
||||
printf("%02X ", _header.RAM_size);
|
||||
printf("%02X ", _header.VRAM_size);
|
||||
printf("%02X ", _header.TV_system);
|
||||
printf("%02X ", _header.VS_hardware);
|
||||
printf("%02X ", _header.reserved[0]);
|
||||
printf("%02X\n", _header.reserved[1]);
|
||||
#endif
|
||||
|
||||
return true;
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
#ifndef HEADEREDITOR_H
|
||||
#define HEADEREDITOR_H
|
||||
|
||||
extern HWND hHeadEditor;
|
||||
|
||||
struct iNES_HEADER;
|
||||
|
||||
extern HWND hHeadEditor;
|
||||
void DoHeadEdit();
|
||||
|
||||
HWND InitHeaderEditDialog(HWND hwnd, iNES_HEADER* header);
|
||||
bool ShowINESFileBox(HWND parent, char* buf = NULL, bool save = false);
|
||||
void ToggleINES20(HWND hwnd, bool ines20);
|
||||
|
@ -19,7 +21,11 @@ int GetComboBoxByteSize(HWND hwnd, UINT id, int* value);
|
|||
bool SearchByString(HWND hwnd, UINT id, int* value, char* buf);
|
||||
bool GetComboBoxListItemData(HWND hwnd, UINT id, int* value, char* buf, bool exact = false);
|
||||
bool SaveINESFile(HWND hwnd, char* path, iNES_HEADER* header);
|
||||
|
||||
|
||||
LRESULT CALLBACK HeaderEditorProc(HWND hDlg, UINT uMsg, WPARAM wP, LPARAM lP);
|
||||
void DoHeadEdit();
|
||||
extern WNDPROC DefaultEditCtrlProc;
|
||||
extern LRESULT APIENTRY FilterEditCtrlProc(HWND hwnd, UINT msg, WPARAM wP, LPARAM lP);
|
||||
|
||||
extern POINT CalcSubWindowPos(HWND hDlg, POINT* conf);
|
||||
#endif
|
||||
|
|
|
@ -1245,7 +1245,6 @@ LRESULT CustomDraw (LPARAM lParam)
|
|||
{
|
||||
case CDDS_PREPAINT :
|
||||
return CDRF_NOTIFYITEMDRAW;
|
||||
|
||||
case CDDS_ITEMPREPAINT:
|
||||
{
|
||||
int rv = CDRF_DODEFAULT;
|
||||
|
|
|
@ -12,11 +12,35 @@
|
|||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// ·ÇÌØ¶¨ÓïÑÔ resources
|
||||
// English(U.S) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"\r\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
|
||||
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||
#pragma code_page(936)
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
@ -1489,30 +1513,30 @@ BEGIN
|
|||
CONTROL "Log Bank number",IDC_CHECK_LOG_BANK_NUMBER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,211,121,100,10
|
||||
END
|
||||
|
||||
ADDBP DIALOGEX 66, 83, 196, 130
|
||||
ADDBP DIALOGEX 66, 83, 197, 125
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Add Breakpoint..."
|
||||
FONT 8, "Tahoma", 0, 0, 0x0
|
||||
BEGIN
|
||||
LTEXT "Address:",-1,14,5,30,10
|
||||
CTEXT "-",65534,78,5,8,8
|
||||
LTEXT "&Address:",-1,14,6,30,10
|
||||
EDITTEXT IDC_ADDBP_ADDR_START,48,4,30,12,ES_UPPERCASE | ES_WANTRETURN
|
||||
EDITTEXT IDC_ADDBP_ADDR_END,83,4,30,12,ES_UPPERCASE | ES_WANTRETURN
|
||||
CONTROL "Read",IDC_ADDBP_MODE_R,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,25,35,12
|
||||
CONTROL "Write",IDC_ADDBP_MODE_W,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,49,25,35,12
|
||||
CONTROL "Execute",IDC_ADDBP_MODE_X,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,86,25,40,12
|
||||
DEFPUSHBUTTON "&OK",IDOK,99,113,42,13
|
||||
PUSHBUTTON "&Cancel",IDCANCEL,147,114,42,13
|
||||
GROUPBOX "Memory",108,9,39,174,24,WS_TABSTOP
|
||||
CONTROL "CPU Mem",IDC_ADDBP_MEM_CPU,"Button",BS_AUTORADIOBUTTON | WS_GROUP,13,49,50,10
|
||||
CONTROL "PPU Mem",IDC_ADDBP_MEM_PPU,"Button",BS_AUTORADIOBUTTON,68,49,50,10
|
||||
CONTROL "Sprite Mem",IDC_ADDBP_MEM_SPR,"Button",BS_AUTORADIOBUTTON,124,49,50,10
|
||||
EDITTEXT IDC_ADDBP_CONDITION,43,72,136,14,ES_AUTOHSCROLL
|
||||
LTEXT "Condition",65533,7,74,30,8
|
||||
LTEXT "Name",65532,8,92,20,8
|
||||
EDITTEXT IDC_ADDBP_NAME,43,89,136,14,ES_AUTOHSCROLL
|
||||
CONTROL "Forbid",IDC_ADDBP_MODE_F,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,145,6,40,12
|
||||
CTEXT "-",65534,78,6,8,8
|
||||
EDITTEXT IDC_ADDBP_ADDR_END,87,4,30,12,ES_UPPERCASE | ES_WANTRETURN
|
||||
CONTROL "&Forbid",IDC_ADDBP_MODE_F,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,154,6,33,12
|
||||
GROUPBOX "",112,3,18,185,50,WS_TABSTOP
|
||||
CONTROL "&Read",IDC_ADDBP_MODE_R,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,25,35,12
|
||||
CONTROL "&Write",IDC_ADDBP_MODE_W,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,49,25,35,12
|
||||
CONTROL "&Execute",IDC_ADDBP_MODE_X,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,86,25,40,12
|
||||
GROUPBOX "Memory",108,9,39,174,24,WS_TABSTOP
|
||||
CONTROL "&CPU Mem",IDC_ADDBP_MEM_CPU,"Button",BS_AUTORADIOBUTTON | WS_GROUP,13,49,50,10
|
||||
CONTROL "&PPU Mem",IDC_ADDBP_MEM_PPU,"Button",BS_AUTORADIOBUTTON,68,49,50,10
|
||||
CONTROL "&Sprite Mem",IDC_ADDBP_MEM_SPR,"Button",BS_AUTORADIOBUTTON,124,49,50,10
|
||||
LTEXT "C&ondition:",65533,7,74,34,8
|
||||
EDITTEXT IDC_ADDBP_CONDITION,43,72,136,14,ES_AUTOHSCROLL
|
||||
LTEXT "&Name:",65532,8,92,20,8
|
||||
EDITTEXT IDC_ADDBP_NAME,43,89,136,14,ES_AUTOHSCROLL
|
||||
DEFPUSHBUTTON "OK",IDOK,99,110,42,13
|
||||
PUSHBUTTON "Cancel",IDCANCEL,147,110,42,13
|
||||
END
|
||||
|
||||
NTVIEW DIALOGEX 44, 38, 352, 350
|
||||
|
@ -1568,18 +1592,18 @@ STYLE DS_SYSMODAL | DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_MINIMIZEBOX | WS
|
|||
CAPTION "Game Genie Encoder/Decoder Tool"
|
||||
FONT 8, "Tahoma", 0, 0, 0x0
|
||||
BEGIN
|
||||
EDITTEXT IDC_GAME_GENIE_CODE,115,22,53,14,ES_UPPERCASE | ES_AUTOHSCROLL
|
||||
GROUPBOX "Game Genie Code",-1,107,5,69,42
|
||||
EDITTEXT IDC_GAME_GENIE_CODE,115,22,53,14,ES_UPPERCASE | ES_AUTOHSCROLL
|
||||
PUSHBUTTON "Add To Cheat List",IDC_BTN_ADD_TO_CHEATS,108,58,68,14,WS_DISABLED
|
||||
GROUPBOX "Address/Compare/Value",65534,9,5,91,75
|
||||
LTEXT "Address:",65533,18,24,35,8
|
||||
EDITTEXT IDC_GAME_GENIE_ADDR,50,21,36,14,ES_AUTOHSCROLL
|
||||
EDITTEXT IDC_GAME_GENIE_COMP,64,38,22,14,ES_AUTOHSCROLL
|
||||
EDITTEXT IDC_GAME_GENIE_VAL,64,56,22,14,ES_AUTOHSCROLL
|
||||
EDITTEXT IDC_GAME_GENIE_ADDR,50,21,36,14,ES_UPPERCASE | ES_AUTOHSCROLL
|
||||
LTEXT "Compare:",65532,17,41,37,8
|
||||
EDITTEXT IDC_GAME_GENIE_COMP,64,38,22,14,ES_UPPERCASE | ES_AUTOHSCROLL
|
||||
LTEXT "Value:",65531,18,58,32,8
|
||||
EDITTEXT IDC_GAME_GENIE_VAL,64,56,22,14,ES_UPPERCASE | ES_AUTOHSCROLL
|
||||
GROUPBOX "Possible Affected Rom File Addresses",65530,8,83,169,58
|
||||
LISTBOX IDC_LIST_GGADDRESSES,67,95,54,40,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
|
||||
PUSHBUTTON "Add To Cheat List",IDC_BTN_ADD_TO_CHEATS,108,58,68,14,WS_DISABLED
|
||||
END
|
||||
|
||||
MONITOR DIALOGEX 0, 0, 316, 343
|
||||
|
@ -1996,8 +2020,10 @@ BEGIN
|
|||
EDITTEXT IDC_CHEAT_VAL,97,174,16,12,ES_UPPERCASE | ES_WANTRETURN
|
||||
LTEXT "Compare:",IDC_CHEAT_COM_LABEL,117,176,34,8
|
||||
EDITTEXT IDC_CHEAT_COM,152,174,16,12,ES_UPPERCASE | ES_WANTRETURN
|
||||
LTEXT "Cheat code / Game Genie:",IDC_CHEAT_CODE_GG_LABEL,11,190,87,8
|
||||
EDITTEXT IDC_CHEAT_TEXT,105,188,63,12,ES_UPPERCASE | ES_AUTOHSCROLL
|
||||
LTEXT "Cheat Code:",IDC_CHEAT_CODE_LABEL,12,190,42,8
|
||||
EDITTEXT IDC_CHEAT_TEXT,55,188,47,12,ES_UPPERCASE | ES_AUTOHSCROLL
|
||||
LTEXT "GG:",IDC_GAME_GENIE_LABEL,106,191,13,8
|
||||
EDITTEXT IDC_CHEAT_GAME_GENIE_TEXT,120,188,47,12,ES_UPPERCASE | ES_AUTOHSCROLL
|
||||
DEFPUSHBUTTON "Add",IDC_BTN_CHEAT_ADD,7,202,30,16
|
||||
PUSHBUTTON "Delete",IDC_BTN_CHEAT_DEL,37,202,30,16
|
||||
PUSHBUTTON "Update",IDC_BTN_CHEAT_UPD,67,202,30,16
|
||||
|
@ -2429,8 +2455,8 @@ BEGIN
|
|||
|
||||
"ADDBP", DIALOG
|
||||
BEGIN
|
||||
RIGHTMARGIN, 185
|
||||
BOTTOMMARGIN, 121
|
||||
RIGHTMARGIN, 195
|
||||
BOTTOMMARGIN, 123
|
||||
END
|
||||
|
||||
"NTVIEW", DIALOG
|
||||
|
@ -2606,6 +2632,11 @@ BEGIN
|
|||
0
|
||||
END
|
||||
|
||||
ADDBP AFX_DIALOG_LAYOUT
|
||||
BEGIN
|
||||
0
|
||||
END
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
@ -2777,31 +2808,7 @@ IDB_BITMAP_SELECTED17 BITMAP "res\\te_17_selected.bmp"
|
|||
IDB_BITMAP_SELECTED18 BITMAP "res\\te_18_selected.bmp"
|
||||
IDB_BITMAP_SELECTED19 BITMAP "res\\te_19_selected.bmp"
|
||||
IDB_BRANCH_SPRITESHEET BITMAP "res\\branch_spritesheet.bmp"
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"\r\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
#endif // ·ÇÌØ¶¨ÓïÑÔ resources
|
||||
#endif // English(U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by res.rc
|
||||
// Microsoft Visual C++ generated include file
|
||||
// for res.rc
|
||||
//
|
||||
#define CLOSE_BUTTON 1
|
||||
#define BUTTON_CLOSE 1
|
||||
|
@ -553,16 +553,26 @@
|
|||
#define IDC_BUTTON1 1094
|
||||
#define IDC_CHEAT_SWITCH 1096
|
||||
#define IDC_CHEAT_GLOBAL_SWITCH 1096
|
||||
#define IDC_GAME_GENIE_LABEL 1097
|
||||
#define IDC_CHEAT_GAME_GENIE_TEXT 1098
|
||||
#define IDC_CHECK2 1099
|
||||
#define IDC_SHOW_GG 1099
|
||||
#define BTN_ALLOW_LRUD 1117
|
||||
#define IDC_PRGROM_EDIT 1118
|
||||
#define IDC_CHRROM_EDIT 1119
|
||||
#define BTN_PRESET_SET1 1119
|
||||
#define BTN_PRESET_SET2 1120
|
||||
#define BTN_PRESET_SET3 1121
|
||||
#define BTN_PRESET_IMPORT1 1122
|
||||
#define BTN_PRESET_IMPORT2 1123
|
||||
#define BTN_PRESET_IMPORT3 1124
|
||||
#define IDC_PRGRAM_EDIT 1125
|
||||
#define BTN_PRESET_EXPORT1 1125
|
||||
#define BTN_PRESET_EXPORT2 1126
|
||||
#define BTN_PRESET_EXPORT3 1127
|
||||
#define IDC_CHRRAM_EDIT 1128
|
||||
#define IDC_PRGNVRAM_EDIT 1129
|
||||
#define IDC_CHRNVRAM_EDIT 1130
|
||||
#define IDC_LIST1 1130
|
||||
#define IDC_BUTTON_METADATA 1132
|
||||
#define MEMW_EXPANDCOLLAPSE 1133
|
||||
|
@ -764,7 +774,7 @@
|
|||
#define IDC_EXTRA_SCANLINES_TEXT 1309
|
||||
#define IDC_DATASIZE_GROUPBOX 1310
|
||||
#define IDC_DATATYPE_GROUPBOX 1311
|
||||
#define IDC_CHEAT_CODE_GG_LABEL 1312
|
||||
#define IDC_CHEAT_CODE_LABEL 1312
|
||||
#define IDC_CHEAT_ADDRESS_LABEL 1313
|
||||
#define IDC_CHEAT_VAL_LABEL 1314
|
||||
#define IDC_CHEAT_COM_LABEL 1315
|
||||
|
@ -1065,7 +1075,7 @@
|
|||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 305
|
||||
#define _APS_NEXT_COMMAND_VALUE 40002
|
||||
#define _APS_NEXT_CONTROL_VALUE 1097
|
||||
#define _APS_NEXT_CONTROL_VALUE 1100
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -182,6 +182,7 @@ const unsigned int MAX_NUMBER_OF_MOVIE_RECENT_FILES = sizeof(recent_movie)/sizeo
|
|||
|
||||
int EnableBackgroundInput = 0;
|
||||
int ismaximized = 0;
|
||||
WNDPROC DefaultEditCtrlProc;
|
||||
|
||||
//Help Menu subtopics
|
||||
string moviehelp = "MovieRecording"; //Movie Recording
|
||||
|
@ -3259,4 +3260,162 @@ POINT CalcSubWindowPos(HWND hDlg, POINT* conf)
|
|||
|
||||
// return the calculated point, maybe the caller can use it for further.
|
||||
return pt;
|
||||
}
|
||||
|
||||
LRESULT APIENTRY FilterEditCtrlProc(HWND hwnd, UINT msg, WPARAM wP, LPARAM lP)
|
||||
{
|
||||
bool through = true;
|
||||
LRESULT result = 0;
|
||||
|
||||
switch (msg)
|
||||
{
|
||||
case WM_PASTE:
|
||||
{
|
||||
bool(*IsLetterLegal)(char) = GetIsLetterLegal(GetDlgCtrlID(hwnd));
|
||||
|
||||
if (IsLetterLegal)
|
||||
{
|
||||
if (OpenClipboard(hwnd))
|
||||
{
|
||||
HANDLE handle = GetClipboardData(CF_TEXT);
|
||||
if (handle)
|
||||
{
|
||||
|
||||
// copy the original clipboard string
|
||||
char* clipStr = (char*)GlobalLock(handle);
|
||||
char* original = (char*)calloc(1, strlen(clipStr) + 1);
|
||||
strcpy(original, clipStr);
|
||||
GlobalUnlock(handle);
|
||||
|
||||
// filter it out
|
||||
int lmt = SendMessage(hwnd, EM_GETLIMITTEXT, 0, 0);
|
||||
char* filtered = (char*)calloc(1, lmt + 1);
|
||||
int filteredIndex = 0, origIndex = 0;
|
||||
while (clipStr[origIndex] && filteredIndex < lmt + 1)
|
||||
{
|
||||
if (IsLetterLegal(clipStr[origIndex]))
|
||||
{
|
||||
filtered[filteredIndex] = clipStr[origIndex];
|
||||
++filteredIndex;
|
||||
}
|
||||
++origIndex;
|
||||
}
|
||||
|
||||
// copy filtered str to clipboard
|
||||
EmptyClipboard();
|
||||
HANDLE hNewStr = GlobalAlloc(GMEM_MOVEABLE, lmt);
|
||||
char* newStr = (char*)GlobalLock(hNewStr);
|
||||
strcpy(newStr, filtered);
|
||||
GlobalUnlock(hNewStr);
|
||||
SetClipboardData(CF_TEXT, hNewStr);
|
||||
|
||||
// end
|
||||
CloseClipboard();
|
||||
result = CallWindowProc(DefaultEditCtrlProc, hwnd, msg, wP, lP);
|
||||
through = false;
|
||||
free(filtered);
|
||||
|
||||
// set it back to normal
|
||||
if (OpenClipboard(hwnd))
|
||||
{
|
||||
handle = GetClipboardData(CF_TEXT);
|
||||
if (handle)
|
||||
{
|
||||
EmptyClipboard();
|
||||
HANDLE hOldStr = GlobalAlloc(GMEM_MOVEABLE, strlen(original) + 1);
|
||||
char* oldStr = (char*)GlobalLock(hOldStr);
|
||||
strcpy(oldStr, original);
|
||||
GlobalUnlock(hOldStr);
|
||||
SetClipboardData(CF_TEXT, hOldStr);
|
||||
}
|
||||
CloseClipboard();
|
||||
}
|
||||
|
||||
// end
|
||||
free(original);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WM_CHAR:
|
||||
through = IsInputLegal(GetDlgCtrlID(GetFocus()), wP);
|
||||
}
|
||||
|
||||
return through ? CallWindowProc(DefaultEditCtrlProc, hwnd, msg, wP, lP) : result;
|
||||
}
|
||||
|
||||
bool inline (*GetIsLetterLegal(UINT id))(char letter)
|
||||
{
|
||||
switch (id)
|
||||
{
|
||||
case IDC_CHEAT_GAME_GENIE_TEXT:
|
||||
case IDC_GAME_GENIE_CODE:
|
||||
return IsLetterLegalGG;
|
||||
case IDC_CHEAT_ADDR:
|
||||
case IDC_CHEAT_VAL:
|
||||
case IDC_CHEAT_COM:
|
||||
case IDC_CHEAT_NAME:
|
||||
case IDC_CHEAT_VAL_KNOWN:
|
||||
case IDC_CHEAT_VAL_NE_BY:
|
||||
case IDC_CHEAT_VAL_GT_BY:
|
||||
case IDC_CHEAT_VAL_LT_BY:
|
||||
case IDC_GAME_GENIE_ADDR:
|
||||
case IDC_GAME_GENIE_COMP:
|
||||
case IDC_GAME_GENIE_VAL:
|
||||
return IsLetterLegalHex;
|
||||
case IDC_CHEAT_TEXT:
|
||||
return IsLetterLegalCheat;
|
||||
case IDC_PRGROM_EDIT:
|
||||
case IDC_PRGRAM_EDIT:
|
||||
case IDC_PRGNVRAM_EDIT:
|
||||
case IDC_CHRROM_EDIT:
|
||||
case IDC_CHRRAM_EDIT:
|
||||
case IDC_CHRNVRAM_EDIT:
|
||||
return IsLetterLegalSize;
|
||||
case IDC_SUBMAPPER_EDIT:
|
||||
case IDC_MISCELLANEOUS_ROMS_EDIT:
|
||||
return IsLetterLegalPosDec;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool inline IsInputLegal(UINT id, char letter)
|
||||
{
|
||||
bool(*IsLetterLegal)(char) = GetIsLetterLegal(id);
|
||||
return !IsLetterLegal || letter == VK_BACK || GetKeyState(VK_CONTROL) & 0x8000 || IsLetterLegal(letter);
|
||||
}
|
||||
|
||||
bool inline IsLetterLegalGG(char letter)
|
||||
{
|
||||
char ch = toupper(letter);
|
||||
for (int i = 0; GameGenieLetters[i]; ++i)
|
||||
if (GameGenieLetters[i] == ch)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool inline IsLetterLegalHex(char letter)
|
||||
{
|
||||
return letter >= '0' && letter <= '9' || letter >= 'A' && letter <= 'F' || letter >= 'a' && letter <= 'f';
|
||||
}
|
||||
|
||||
bool inline IsLetterLegalCheat(char letter)
|
||||
{
|
||||
return letter >= '0' && letter <= ':' || letter >= 'A' && letter <= 'F' || letter >= 'a' && letter <= 'f' || letter == '?';
|
||||
}
|
||||
|
||||
bool inline IsLetterLegalSize(char letter)
|
||||
{
|
||||
return letter >= '0' && letter <= '9' || letter == 'm' || letter == 'M' || letter == 'k' || letter == 'K' || letter == 'b' || letter == 'B';
|
||||
}
|
||||
|
||||
bool inline IsLetterLegalPosDec(char letter)
|
||||
{
|
||||
return letter >= '0' && letter <= '9';
|
||||
}
|
||||
|
||||
bool inline IsLetterLegalDec(char letter)
|
||||
{
|
||||
return letter >= '0' && letter <= '9' || letter == '-';
|
||||
}
|
|
@ -127,4 +127,17 @@ struct HOTKEYMENUINDEX {
|
|||
|
||||
void UpdateMenuHotkeys(FCEUMENU_INDEX index);
|
||||
int GetCurrentContextIndex();
|
||||
|
||||
bool inline (*GetIsLetterLegal(UINT id))(char letter);
|
||||
bool inline IsInputLegal(UINT id, char letter);
|
||||
bool inline IsLetterLegalGG(char letter);
|
||||
bool inline IsLetterLegalHex(char letter);
|
||||
bool inline IsLetterLegalCheat(char letter);
|
||||
bool inline IsLetterLegalDec(char letter);
|
||||
bool inline IsLetterLegalPosDec(char letter);
|
||||
bool inline IsLetterLegalSize(char letter);
|
||||
|
||||
extern WNDPROC DefaultEditCtrlProc;
|
||||
extern LRESULT APIENTRY FilterEditCtrlProc(HWND hDlg, UINT msg, WPARAM wP, LPARAM lP);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue