void consoleStartLine(console_state_t *console, const char *prompt = NULL) { if (console->empty) { console->empty = false; } else { console->endLine = (console->endLine + 1) % console->maxLines; if (console->endLine == console->startLine) { free(console->lines[console->endLine].buffer); console->startLine = (console->startLine + 1) % console->maxLines; } } int line = console->endLine; console->lines[line].length = 0; console->lines[line].buffer = (char*)malloc(128); // TODO: check for failure console->lines[line].buffer[0] = 0; console->lines[line].bufferSize = 128; if (prompt != NULL) { consoleAppend(console, prompt); console->lines[line].promptLength = strlen(prompt); } else { console->lines[line].promptLength = 0; } }
void consolePanelHandler(SDL_Event *evt, panel_t *panel) { console_state_t *console = (console_state_t*)panel->userdata; if (evt->type == SDL_MOUSEBUTTONDOWN) { makeKeyPanel(panel); } if (evt->type == SDL_KEYDOWN) { SDL_Scancode sc = evt->key.keysym.scancode; Uint16 mod = evt->key.keysym.mod; char ch = 0; if (sc < 256) { if (mod & KMOD_SHIFT) { ch = keyCharShiftMap[sc]; } else { ch = keyCharMap[sc]; } if (mod & KMOD_CAPS) { if (ch >= 65 && ch <= 90) { ch += 32; } else if (ch >= 97 && ch <= 122) { ch -= 32; } } } else { printf("weird scan code: %d\n", sc); } if (ch > 0) { consoleAppend(console, ch); } else { SDL_Keycode sym = evt->key.keysym.sym; if (sym == SDLK_BACKSPACE) { consoleBackwardsDeleteChar(console); } else if (sym == SDLK_RETURN) { consoleStartLine(console, "> "); } } } }
void _stdcall outputHandler(J jt,int type, const char* s) { consoleAppend(local_jnienv,local_baseobj,type,s); }