?? dlg_cheat.c
字號:
#include "raine.h"#include "rgui.h"#include "rguiproc.h"#include "gui.h"#include "dlg_cheat.h"#include "arpro.h"typedef char editf[256];static editf cheateditname,cheateditaddress,cheateditdata,cheateditinfo, cheateditmask;static char *cheat_size_getter(int index, int *list_size){ static char *list_data[] = { "1 byte", "2 bytes", "3 bytes", "4 bytes", }; if(index == -1){ if(list_size) *list_size = sizeof(list_data) / sizeof(char *); return NULL; } if(index >= 0) return raine_translate_text(list_data[index]); else return NULL;}#define CHEAT_SIZE 15#define CHEAT_TYPE 17DIALOG cheatdata_edit_dialog[] ={ /* (dialog proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) */ { d_raine_window_proc,40, 10, 320, 112, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Edit Cheat Data"}, { x_raine_button_proc,48, 98, 48, 16, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 'D', D_EXIT, 0, 0, "&Done"}, { x_raine_button_proc,104, 98, 48, 16, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 'C', D_EXIT, 0, 0, "&Cancel"}, { x_text_proc, 48, 26, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Edit Cheat Data:"}, { x_text_proc, 48, 38, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Name:"}, { x_edit_proc, 80, 38, 6*12, 8, GUI_COL_TEXT_1, 253, 0, 0, 255, 0, cheateditname}, { x_text_proc, 48, 48, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Addr:"}, { x_edit_proc, 80, 48, 6*9, 8, GUI_COL_TEXT_1, 253, 0, 0, 8, 0, cheateditaddress}, { x_text_proc, 48, 58, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Data:"}, { x_edit_proc, 80, 58, 6*9, 8, GUI_COL_TEXT_1, 253, 0, 0, 8, 0, cheateditdata}, { x_text_proc, 48, 68, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Info:"}, { x_edit_proc, 80, 68, 6*12, 8, GUI_COL_TEXT_1, 253, 0, 0, 255, 0, cheateditinfo}, { x_text_proc, 48, 78, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Mask:"}, { x_edit_proc, 80, 78, 6*12, 8, GUI_COL_TEXT_1, 253, 0, 0, 255, 0, cheateditmask}, { x_text_proc, 170, 26, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Size:"}, { d_raine_list_proc, 170, 36, 64, 30, 255, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, cheat_size_getter, NULL, NULL}, { x_text_proc, 240, 26, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Type:"}, { x_raine_radio_proc, 240, 46,64, 9, 255, GUI_BOX_COL_MIDDLE, 0, 0, 5, 1, "Permanent", NULL, NULL}, { x_raine_radio_proc, 240, 36,64, 9, 255, GUI_BOX_COL_MIDDLE, 0, 0, 5, 1, "Temporary", NULL, NULL}, { x_raine_radio_proc, 240, 56,64, 9, 255, GUI_BOX_COL_MIDDLE, 0, 0, 5, 1, "Watchpoint", NULL, NULL}, { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL}};DIALOG actionreplay_dialog[] ={ /* (dialog proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) */ { d_raine_window_proc,40, 10, 240, 178+12,GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Cheat Control"}, { d_raine_list_proc, 48, 26+12,224, 112, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 0, D_EXIT, 0, 0, cheatlist_getter}, { x_raine_button_proc,48, 164+12,48, 16, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 'D', D_EXIT, 0, 0, "&Done"}, { cheat_edit_proc, 48, 144+12,56, 16, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 'T', D_EXIT, 0, 0, "&Toggle"}, { cheatdata_edit_proc,112, 144+12,48, 16, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 'E', D_EXIT, 0, 0, "&Edit"}, { x_text_proc, 48, 26, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Action Replay cheats:"}, { x_raine_button_proc,216, 164+12,56, 16, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 'S', D_EXIT, 0, 0, "&Search>>"}, { cheat_new_proc, 168, 144+12,32, 16, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 'N', D_EXIT, 0, 0, "&New"}, { cheat_del_proc, 208, 144+12,56, 16, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 0, D_EXIT, 0, 0, "Delete"}, { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL}};int cheat_search_new_proc(int msg, DIALOG *d, int c);int cheat_search_cont_proc(int msg, DIALOG *d, int c);DIALOG search_main_dialog[] ={ /* (dialog proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) */ { d_raine_window_proc,40, 10, 240, 178+12,GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Cheat Search"}, { x_raine_button_proc,48, 164+12,48, 16, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 'D', D_EXIT, 0, 0, "&Done"}, { cheat_search_new_proc,48, 144+12,64, 16, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 'S', D_EXIT, 0, 0, "New &Search"}, { cheat_search_cont_proc,120,144+12,64, 16, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 'C', D_EXIT, 0, 0, "&Continue"}, { d_raine_list_proc, 48, 26+12,224, 112, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 0, D_EXIT, 0, 0, search_list_getter}, { x_text_proc, 48, 26, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Action Replay results:"}, { x_raine_button_proc,216, 164+12,56, 16, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 'E', D_EXIT, 0, 0, "&Edit>>"}, { cheat_add_proc, 192, 144+12,64, 16, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 'A', D_EXIT, 0, 0, "&Add Result"}, { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL}};char *search_mode_getter(int index, int *list_size);DIALOG search_mode_dialog[] ={ /* (dialog proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) */ { d_raine_window_proc,40, 10, 180, 80+12,GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "New Search"}, { x_text_proc, 48, 26, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Choose Search Mode:"}, { d_raine_list_proc, 48, 26+12,164, 32+4, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 0, D_EXIT, 0, 0, search_mode_getter}, { x_raine_button_proc,48, 68+12, 48, 16, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 'D', D_EXIT, 0, 0, "&Done"}, { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL}};char byte_hex_data[8];char byte_dec_data[8];char byte_sgn_data[8];char byte_asc_data[8];DIALOG *byte_hex_dialog;DIALOG *byte_dec_dialog;DIALOG *byte_sgn_dialog;DIALOG *byte_asc_dialog;int byte_hex_edit_proc(int msg, DIALOG *d, int c);int byte_dec_edit_proc(int msg, DIALOG *d, int c);int byte_sgn_edit_proc(int msg, DIALOG *d, int c);int byte_asc_edit_proc(int msg, DIALOG *d, int c);DIALOG search_type_0a_dialog[] ={ /* (dialog proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) */ { d_raine_window_proc,40, 10, 180, 80+12,GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "New Search"}, { x_text_proc, 48, 26, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Enter Search Byte:"}, { x_text_proc, 48, 26+12, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Hex:"}, { byte_hex_edit_proc, 48+(6*8),26+12,6*6,8, GUI_COL_TEXT_1, 253, 0, D_EXIT, 2, 0, byte_hex_data}, { x_text_proc, 48, 36+12, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Dec:"}, { byte_dec_edit_proc, 48+(6*8),36+12,6*6,8, GUI_COL_TEXT_1, 253, 0, D_EXIT, 3, 0, byte_dec_data}, { x_text_proc, 48, 46+12, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Signed:"}, { byte_sgn_edit_proc, 48+(6*8),46+12,6*6,8, GUI_COL_TEXT_1, 253, 0, D_EXIT, 4, 0, byte_sgn_data}, { x_text_proc, 48, 56+12, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Ascii:"}, { byte_asc_edit_proc, 48+(6*8),56+12,6*6,8, GUI_COL_TEXT_1, 253, 0, D_EXIT, 1, 0, byte_asc_data}, { x_raine_button_proc,48, 68+12, 48, 16, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 'D', D_EXIT, 0, 0, "&Done"}, { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL}};DIALOG search_type_0b_dialog[] ={ /* (dialog proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) */ { d_raine_window_proc,40, 10, 180, 80+12,GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Continue Search"}, { x_text_proc, 48, 26, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Enter Search Byte:"}, { x_text_proc, 48, 26+12, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Hex:"}, { byte_hex_edit_proc, 48+(6*8),26+12,6*6,8, GUI_COL_TEXT_1, 253, 0, D_EXIT, 2, 0, byte_hex_data}, { x_text_proc, 48, 36+12, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Dec:"}, { byte_dec_edit_proc, 48+(6*8),36+12,6*6,8, GUI_COL_TEXT_1, 253, 0, D_EXIT, 3, 0, byte_dec_data}, { x_text_proc, 48, 46+12, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Signed:"}, { byte_sgn_edit_proc, 48+(6*8),46+12,6*6,8, GUI_COL_TEXT_1, 253, 0, D_EXIT, 4, 0, byte_sgn_data}, { x_text_proc, 48, 56+12, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Ascii:"}, { byte_asc_edit_proc, 48+(6*8),56+12,6*6,8, GUI_COL_TEXT_1, 253, 0, D_EXIT, 1, 0, byte_asc_data}, { x_raine_button_proc,48, 68+12, 48, 16, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 'D', D_EXIT, 0, 0, "&Done"}, { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL}};DIALOG search_type_1a_dialog[] ={ /* (dialog proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) */ { d_raine_window_proc,40, 10, 160, 68, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "New Search"}, { x_text_proc, 48, 26, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Search initialized, use"}, { x_text_proc, 48, 36, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "continue search when the"}, { x_text_proc, 48, 46, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "search value has changed."}, { x_raine_button_proc,48, 56, 48, 16, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 'D', D_EXIT, 0, 0, "&Done"}, { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL}};DIALOG search_type_1b_dialog[] ={ /* (dialog proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) */ { d_raine_window_proc,40, 10, 200, 80+12,GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Continue Search"}, { x_text_proc, 48, 26, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Enter difference from last byte:"}, { x_text_proc, 48, 26+12, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Hex:"}, { byte_hex_edit_proc, 48+(6*8),26+12,6*6,8, GUI_COL_TEXT_1, 253, 0, D_EXIT, 2, 0, byte_hex_data}, { x_text_proc, 48, 36+12, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Dec:"}, { byte_dec_edit_proc, 48+(6*8),36+12,6*6,8, GUI_COL_TEXT_1, 253, 0, D_EXIT, 3, 0, byte_dec_data}, { x_text_proc, 48, 46+12, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Signed:"}, { byte_sgn_edit_proc, 48+(6*8),46+12,6*6,8, GUI_COL_TEXT_1, 253, 0, D_EXIT, 4, 0, byte_sgn_data}, { x_text_proc, 48, 56+12, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Ascii:"}, { byte_asc_edit_proc, 48+(6*8),56+12,6*6,8, GUI_COL_TEXT_1, 253, 0, D_EXIT, 1, 0, byte_asc_data}, { x_raine_button_proc,48, 68+12, 48, 16, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 'D', D_EXIT, 0, 0, "&Done"}, { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL}};#define search_type_2a_dialog search_type_1a_dialogchar *search_type_2b_getter(int index, int *list_size);DIALOG search_type_2b_dialog[] ={ /* (dialog proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) */ { d_raine_window_proc,40, 10, 180, 80+12,GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Continue Search"}, { x_text_proc, 48, 26, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Bit status since last search:"}, { d_raine_list_proc, 48, 26+12,164, 32+4, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 0, D_EXIT, 0, 0, search_type_2b_getter}, { x_raine_button_proc,48, 68+12, 48, 16, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 'D', D_EXIT, 0, 0, "&Done"}, { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL}};#define search_type_3a_dialog search_type_1a_dialogchar *search_type_3b_getter(int index, int *list_size);DIALOG search_type_3b_dialog[] ={ /* (dialog proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) */ { d_raine_window_proc,0, 0, 180, 80+12,GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Continue Search"}, { x_text_proc, 8, 16, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Byte status since last search:"}, { d_raine_list_proc, 8, 28, 164, 32+4, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 0, D_EXIT, 0, 0, search_type_3b_getter}, { x_raine_button_proc,8, 70, 48, 16, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 'D', D_EXIT, 0, 0, "&Done"}, { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL}};char *hex_view_getter(int index, int *list_size);DIALOG hex_view_dialog[] ={ /* (dialog proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) */ { d_raine_window_proc,0, 10, 284, 200+12,GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "View Memory"}, { x_raine_button_proc,8, 186+12,48, 16, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 'D', D_EXIT, 0, 0, "&Done"}, { d_raine_list_proc, 8, 26+12,268, 156, GUI_COL_TEXT_1, GUI_BOX_COL_MIDDLE, 0, D_EXIT, 0, 0, hex_view_getter}, { x_text_proc, 8, 26, 0, 8, GUI_COL_TEXT_2, GUI_BOX_COL_MIDDLE, 0, 0, 0, 0, "Memory Dump:"}, { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL}};static UINT32 hex_start;static UINT32 hex_end;static UINT32 hex_lines;char *hex_view_getter(int index, int *list_size){ int ta; UINT8 data[8]; UINT8 state[8+1]; static char S[128]; switch(index){ case -1: // Return List Size *list_size = hex_lines; return NULL; break; case -2: // Act upon List Object Selection *list_size=D_REDRAW; return NULL; break; case -3: // Act Keyboard Input return NULL; break; default: if((index >= 0)&&((UINT32)index<hex_lines)){ sprintf(S,"%06X:",hex_start+(index<<3)); state[0] = 0; for(ta=0;ta<8;ta++){ data[ta] = gen_cpu_read_byte_2(hex_start+(index<<3)+ta); state[ta+1] = get_address_status(hex_start+(index<<3)+ta); } for(ta=0;ta<8;ta++){ if((state[ta])||(state[ta+1])) sprintf(S+strlen(S),"*"); else sprintf(S+strlen(S)," "); sprintf(S+strlen(S),"%02X",data[ta]); } if(state[8]) sprintf(S+strlen(S),"*"); else sprintf(S+strlen(S)," "); for(ta=0;ta<8;ta++){ if((data[ta]>=0x20)&&(data[ta]<=0x7F)) sprintf(S+strlen(S),"%c",data[ta]); else sprintf(S+strlen(S),"."); } return S; } else return NULL; break; }}void do_hex_view(UINT32 offset){ int ret; hex_start = get_search_range_start(offset); hex_end = get_search_range_end (offset); hex_lines = (hex_end + 1) - (hex_start); hex_lines = hex_lines >> 3; hex_view_dialog[2].d1 = (offset - hex_start) >> 3; if(hex_view_dialog[2].d1 >= 9) hex_view_dialog[2].d2 = hex_view_dialog[2].d1 - 9; ret = raine_do_dialog(hex_view_dialog,-1);}static UINT32 *s_list;char *search_list_getter(int index, int *list_size){ int ta; static char S[128]; if(match_all_count>0){ switch(index){ case -1: // Return List Size if(match_all_count>512){ *list_size=512; } else{ *list_size=match_all_count; } return NULL; break; case -2: // Act upon List Object Selection ta = search_main_dialog[4].d1; if(ta<match_all_count){ do_hex_view(s_list[ta]); } *list_size=D_REDRAW; return NULL; break; case -3: // Act Keyboard Input return NULL; break; default: if((index >= 0)&&(index<511)){ sprintf(S,"%06x: %02x",s_list[index],gen_cpu_read_byte_2(s_list[index])); return(S); } if(index==511){ return("...... .."); } return NULL; break; } } else{ switch(index){ case -1: // Return List Size *list_size=1; return NULL; break; case -2: // Act upon List Object Selection *list_size=D_REDRAW; return NULL; break;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -