// Call this from the game thread int LogDebugger_Event(const SDL_Event *event) { switch(event->type) { case SDL_KEYDOWN: switch(event->key.keysym.sym) { default: break; case SDLK_MINUS: Debugger_GT_ModOpacity(-8); break; case SDLK_EQUALS: Debugger_GT_ModOpacity(8); break; case SDLK_HOME: WhichLog->LogScroll = 0; break; case SDLK_END: ChangePos(1 << 30); break; case SDLK_LEFT: case SDLK_COMMA: LogGroupSelect(-1); break; case SDLK_RIGHT: case SDLK_PERIOD: LogGroupSelect(1); break; case SDLK_UP: ChangePos(-1); break; case SDLK_DOWN: ChangePos(1); break; case SDLK_PAGEUP: ChangePos(-32); break; case SDLK_PAGEDOWN: ChangePos(32); break; case SDLK_t:LoggingActive = !LoggingActive; if(CurGame->Debugger->SetLogFunc) CurGame->Debugger->SetLogFunc(LoggingActive ? TheLogger : NULL); break; } break; } return(1); }
Draw2::Draw2(const float x, const float y, const int pos) { p = pos; ChangePos(x, y); }
// Call this from the main thread int MemDebugger_Event(const SDL_Event *event) { if(!InPrompt && myprompt) { delete myprompt; myprompt = NULL; } unsigned int keysym = event->key.keysym.sym; switch(event->type) { case SDL_KEYDOWN: if(event->key.keysym.mod & KMOD_ALT) break; if(InPrompt) { myprompt->Event(event); } else if(InEditMode && InTextArea && keysym != SDLK_TAB && keysym != SDLK_INSERT && keysym != SDLK_UP && keysym != SDLK_DOWN && keysym != SDLK_LEFT && keysym != SDLK_RIGHT && (event->key.keysym.unicode >= 0x20)) { uint8 to_write[16]; int to_write_len; size_t ibl, obl, obl_start; char *inbuf, *outbuf; ibl = 2; obl_start = obl = 16; inbuf = (char *)&event->key.keysym.unicode; outbuf = (char*)to_write; size_t result = iconv(ict_utf16_to_game, (ICONV_CONST char **)&inbuf, &ibl, &outbuf, &obl); if(result != (size_t)-1) { to_write_len = 16 - obl; LockGameMutex(1); ASpace->PutAddressSpaceBytes(ASpace->name, ASpacePos[CurASpace], to_write_len, 1, TRUE, to_write); LockGameMutex(0); LowNib = 0; ChangePos(to_write_len); } } else if(InEditMode && ((event->key.keysym.sym >= SDLK_0 && event->key.keysym.sym <= SDLK_9) || (event->key.keysym.sym >= SDLK_a && event->key.keysym.sym <= SDLK_f))) { uint8 tc = 0; uint8 meowbyte = 0; if(event->key.keysym.sym >= SDLK_0 && event->key.keysym.sym <= SDLK_9) tc = 0x0 + event->key.keysym.sym - SDLK_0; else if(event->key.keysym.sym >= SDLK_a && event->key.keysym.sym <= SDLK_f) tc = 0xA + event->key.keysym.sym - SDLK_a; LockGameMutex(1); ASpace->GetAddressSpaceBytes(ASpace->name, ASpacePos[CurASpace], 1, &meowbyte); meowbyte &= 0xF << ((LowNib) * 4); meowbyte |= tc << ((!LowNib) * 4); ASpace->PutAddressSpaceBytes(ASpace->name, ASpacePos[CurASpace], 1, 1, TRUE, &meowbyte); LockGameMutex(0); LowNib = !LowNib; if(!LowNib) ChangePos(1); } else switch(event->key.keysym.sym) { default: break; case SDLK_MINUS: Debugger_ModOpacity(-8); break; case SDLK_EQUALS: Debugger_ModOpacity(8); break; case SDLK_TAB: InTextArea = !InTextArea; LowNib = FALSE; break; case SDLK_d: InPrompt = DumpMem; myprompt = new MemDebuggerPrompt("Dump Memory(start end filename)", ""); break; case SDLK_l: InPrompt = LoadMem; myprompt = new MemDebuggerPrompt("Load Memory(start end filename)", ""); break; case SDLK_s: if(SizeCache[CurASpace] > (1 << 24)) { error_string = trio_aprintf("Address space is too large to search!"); error_time = SDL_GetTicks(); } else { InPrompt = ByteStringSearch; myprompt = new MemDebuggerPrompt("Byte String Search", BSS_String); } break; case SDLK_r: if(SizeCache[CurASpace] > (1 << 24)) { error_string = trio_aprintf("Address space is too large to search!"); error_time = SDL_GetTicks(); } else { InPrompt = RelSearch; myprompt = new MemDebuggerPrompt("Byte String Relative/Delta Search", RS_String); } break; case SDLK_c: InPrompt = SetCharset; myprompt = new MemDebuggerPrompt("Charset", GameCode); break; case SDLK_t: if(ASpace->TotalBits > 24) { error_string = trio_aprintf("Address space is too large to search!"); error_time = SDL_GetTicks(); } else { InPrompt = TextSearch; myprompt = new MemDebuggerPrompt("Text Search", TS_String); } break; case SDLK_g: if(event->key.keysym.mod & KMOD_SHIFT) { InPrompt = GotoDD; myprompt = new MemDebuggerPrompt("Goto Address(DD)", ""); } else { InPrompt = Goto; myprompt = new MemDebuggerPrompt("Goto Address", ""); } break; case SDLK_INSERT: InEditMode = !InEditMode; LowNib = FALSE; break; case SDLK_END: ASpacePos[CurASpace] = (SizeCache[CurASpace] - 128) % SizeCache[CurASpace]; LowNib = FALSE; break; case SDLK_HOME: ASpacePos[CurASpace] = 0; LowNib = FALSE; break; case SDLK_PAGEUP: ChangePos(-16 * 16); break; case SDLK_PAGEDOWN: ChangePos(16 * 16); break; case SDLK_UP: ChangePos(-16); break; case SDLK_DOWN: ChangePos(16); break; case SDLK_LEFT: ChangePos(-1); break; case SDLK_RIGHT: ChangePos(1); break; case SDLK_COMMA: if(CurASpace) CurASpace--; else CurASpace = AddressSpaces->size() - 1; ASpace = &(*AddressSpaces)[CurASpace]; LowNib = FALSE; break; case SDLK_PERIOD: CurASpace = (CurASpace + 1) % AddressSpaces->size(); ASpace = &(*AddressSpaces)[CurASpace]; LowNib = FALSE; break; case SDLK_b: //InMarkMode = !InMarkMode; //if(InMarkMode) // MarkModeBegin = ASpacePos[CurASpace]; DoCrazy(); break; case SDLK_e: if(InMarkMode) { FILE *fp = fopen("markers.txt", "ab"); fprintf(fp, "%08x %08x\n", MarkModeBegin, ASpacePos[CurASpace]); fclose(fp); InMarkMode = FALSE; } break; } break; } return(1); }