bool ValidateAndAddWatch(HWND hDlg, unsigned int watchAddress, AddressWatcher &Temp, char *StrTmp, int index) { Temp.Address = watchAddress; if((Temp.Address & ~0xFFFFFF) == ~0xFFFFFF) // ? Temp.Address &= 0xFFFFFF; if(IsHardwareRAMAddressValid(Temp.Address)) { InsertWatch(Temp,Str_Tmp, index); if(RamWatchHWnd) { ListView_SetItemCount(GetDlgItem(RamWatchHWnd,IDC_WATCHLIST),WatchCount); } return true; } else { return false; } }
LRESULT CALLBACK EditWatchProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) //Gets info for a RAM Watch, and then inserts it into the Watch List { RECT r; RECT r2; int dx1, dy1, dx2, dy2; static int index; static char s,t = s = 0; switch(uMsg) { case WM_INITDIALOG: GetWindowRect(MainWindow->getHWnd(), &r); dx1 = (r.right - r.left) / 2; dy1 = (r.bottom - r.top) / 2; GetWindowRect(hDlg, &r2); dx2 = (r2.right - r2.left) / 2; dy2 = (r2.bottom - r2.top) / 2; SetWindowPos(hDlg, NULL, r.left, r.top, NULL, NULL, SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW); index = (int)lParam; sprintf(Str_Tmp,"%08X",rswatches[index].Address); SetDlgItemText(hDlg,IDC_EDIT_COMPAREADDRESS,Str_Tmp); if (rswatches[index].comment != NULL) SetDlgItemText(hDlg,IDC_PROMPT_EDIT,rswatches[index].comment); s = rswatches[index].Size; t = rswatches[index].Type; switch (s) { case 'b': SendDlgItemMessage(hDlg, IDC_1_BYTE, BM_SETCHECK, BST_CHECKED, 0); break; case 'w': SendDlgItemMessage(hDlg, IDC_2_BYTES, BM_SETCHECK, BST_CHECKED, 0); break; case 'd': SendDlgItemMessage(hDlg, IDC_4_BYTES, BM_SETCHECK, BST_CHECKED, 0); break; default: s = 0; break; } switch (t) { case 's': SendDlgItemMessage(hDlg, IDC_SIGNED, BM_SETCHECK, BST_CHECKED, 0); break; case 'u': SendDlgItemMessage(hDlg, IDC_UNSIGNED, BM_SETCHECK, BST_CHECKED, 0); break; case 'h': SendDlgItemMessage(hDlg, IDC_HEX, BM_SETCHECK, BST_CHECKED, 0); break; default: t = 0; break; } return true; break; case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_SIGNED: t='s'; return true; case IDC_UNSIGNED: t='u'; return true; case IDC_HEX: t='h'; return true; case IDC_1_BYTE: s = 'b'; return true; case IDC_2_BYTES: s = 'w'; return true; case IDC_4_BYTES: s = 'd'; return true; case IDOK: { if (s && t) { AddressWatcher Temp; Temp.Size = s; Temp.Type = t; Temp.WrongEndian = false; //replace this when I get little endian working properly GetDlgItemText(hDlg,IDC_EDIT_COMPAREADDRESS,Str_Tmp,1024); char *addrstr = Str_Tmp; if (strlen(Str_Tmp) > 8) addrstr = &(Str_Tmp[strlen(Str_Tmp) - 9]); for(int i = 0; addrstr[i]; i++) {if(toupper(addrstr[i]) == 'O') addrstr[i] = '0';} sscanf(addrstr,"%08X",&(Temp.Address)); if((Temp.Address & ~0xFFFFFF) == ~0xFFFFFF) Temp.Address &= 0xFFFFFF; if(IsHardwareRAMAddressValid(Temp.Address)) { GetDlgItemText(hDlg,IDC_PROMPT_EDIT,Str_Tmp,80); if (index < WatchCount) RemoveWatch(index); InsertWatch(Temp,Str_Tmp); if(RamWatchHWnd) { ListView_SetItemCount(GetDlgItem(RamWatchHWnd,IDC_WATCHLIST),WatchCount); } EndDialog(hDlg, true); } else { MessageBox(hDlg,"Invalid Address","ERROR",MB_OK); } } else { strcpy(Str_Tmp,"Error:"); if (!s) strcat(Str_Tmp," Size must be specified."); if (!t) strcat(Str_Tmp," Type must be specified."); MessageBox(hDlg,Str_Tmp,"ERROR",MB_OK); } RWfileChanged=true; return true; break; } case IDCANCEL: EndDialog(hDlg, false); return false; break; } break; case WM_CLOSE: EndDialog(hDlg, false); return false; break; } return false; }