/* ====== * con_update - Check for new console input. If it's there, use it. * ====== */ void con_update(void) { #if 0 char buffer[CMD_MAX_LENGTH], *t; /* Check for new input */ t = fgets(buffer, sizeof(buffer), stdin); if (t == NULL) return; cmd_parse(buffer); #endif con_draw(); }
static window_event_result con_handler(window *wind,const d_event &event, const unused_window_userdata_t *) { int key; static fix64 last_scroll_time = 0; switch (event.type) { case EVENT_WINDOW_ACTIVATED: key_toggle_repeat(1); break; case EVENT_WINDOW_DEACTIVATED: key_toggle_repeat(0); con_size = 0; con_state = CON_STATE_CLOSED; break; case EVENT_KEY_COMMAND: key = event_key_get(event); switch (key) { case KEY_SHIFTED + KEY_ESC: switch (con_state) { case CON_STATE_OPEN: case CON_STATE_OPENING: con_state = CON_STATE_CLOSING; break; case CON_STATE_CLOSED: case CON_STATE_CLOSING: con_state = CON_STATE_OPENING; default: break; } break; case KEY_PAGEUP: con_scroll_offset+=CON_SCROLL_OFFSET; if (con_scroll_offset >= CON_LINES_MAX-1) con_scroll_offset = CON_LINES_MAX-1; while (con_buffer[CON_LINES_MAX-1-con_scroll_offset].line[0]=='\0') con_scroll_offset--; break; case KEY_PAGEDOWN: con_scroll_offset-=CON_SCROLL_OFFSET; if (con_scroll_offset<0) con_scroll_offset=0; break; case KEY_CTRLED + KEY_A: case KEY_HOME: cli_cursor_home(); break; case KEY_END: case KEY_CTRLED + KEY_E: cli_cursor_end(); break; case KEY_CTRLED + KEY_C: cli_clear(); break; case KEY_LEFT: cli_cursor_left(); break; case KEY_RIGHT: cli_cursor_right(); break; case KEY_BACKSP: cli_cursor_backspace(); break; case KEY_CTRLED + KEY_D: case KEY_DELETE: cli_cursor_del(); break; case KEY_UP: cli_history_prev(); break; case KEY_DOWN: cli_history_next(); break; case KEY_TAB: cli_autocomplete(); break; case KEY_ENTER: cli_execute(); break; case KEY_INSERT: cli_toggle_overwrite_mode(); break; default: int character = key_ascii(); if (character == 255) break; cli_add_character(character); break; } return window_event_result::handled; case EVENT_WINDOW_DRAW: timer_delay2(50); if (con_state == CON_STATE_OPENING) { if (con_size < CON_LINES_ONSCREEN && timer_query() >= last_scroll_time+(F1_0/30)) { last_scroll_time = timer_query(); if (++ con_size >= CON_LINES_ONSCREEN) con_state = CON_STATE_OPEN; } } else if (con_state == CON_STATE_CLOSING) { if (con_size > 0 && timer_query() >= last_scroll_time+(F1_0/30)) { last_scroll_time = timer_query(); if (! -- con_size) con_state = CON_STATE_CLOSED; } } con_draw(); if (con_state == CON_STATE_CLOSED && wind) { return window_event_result::close; } break; case EVENT_WINDOW_CLOSE: break; default: break; } return window_event_result::ignored; }
static int con_handler(window *wind, d_event *event) { int key; static fix64 last_scroll_time = 0; switch (event->type) { case EVENT_WINDOW_ACTIVATED: break; case EVENT_WINDOW_DEACTIVATED: con_size = 0; con_state = CON_STATE_CLOSED; break; case EVENT_KEY_COMMAND: key = event_key_get(event); switch (key) { case KEY_SHIFTED + KEY_ESC: switch (con_state) { case CON_STATE_OPEN: case CON_STATE_OPENING: con_state = CON_STATE_CLOSING; break; case CON_STATE_CLOSED: case CON_STATE_CLOSING: con_state = CON_STATE_OPENING; default: break; } break; case KEY_PAGEUP: con_scroll_offset+=CON_SCROLL_OFFSET; if (con_scroll_offset >= CON_LINES_MAX-1) con_scroll_offset = CON_LINES_MAX-1; while (con_buffer[CON_LINES_MAX-1-con_scroll_offset].line[0]=='\0') con_scroll_offset--; break; case KEY_PAGEDOWN: con_scroll_offset-=CON_SCROLL_OFFSET; if (con_scroll_offset<0) con_scroll_offset=0; break; default: cxx_handle_misc_con_key(key); break; } return 1; case EVENT_WINDOW_DRAW: timer_delay2(50); if (con_state == CON_STATE_OPENING) { if (con_size < CON_LINES_ONSCREEN && timer_query() >= last_scroll_time+(F1_0/30)) { last_scroll_time = timer_query(); con_size = CON_LINES_ONSCREEN; } } else if (con_state == CON_STATE_CLOSING) { if (con_size > 0 && timer_query() >= last_scroll_time+(F1_0/30)) { last_scroll_time = timer_query(); con_size = 0; } } if (con_size >= CON_LINES_ONSCREEN) con_state = CON_STATE_OPEN; else if (con_size <= 0) con_state = CON_STATE_CLOSED; if (con_state == CON_STATE_CLOSED && wind) window_close(wind); con_draw(); break; case EVENT_WINDOW_CLOSE: break; default: break; } return 0; }