/*********************************************************/ /* ptycon: a pty-console bridge */ /* Copyright (C) 2016--2017 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PTYCON. */ /*********************************************************/ #include #include #include #include #include #include "ptycon_driver_impl.h" static int ptyc_dbg_input_record(void * hout, nt_input_record * rec) { char * ch; uintptr_t buffer[512/sizeof(uintptr_t)]; uint32_t nwritten; ntapi->tt_aligned_block_memset( buffer,0,sizeof(buffer)); ch = (char *)buffer; switch (rec->event_type) { case NT_KEY_EVENT: ntapi->snprintf(ch,sizeof(buffer), "key event. " "key down: %d; " "repeat count: %d; " "virtual key code: 0x%04x; " "virtual scan code: 0x%04x; " "unicode char: 0x%04x; " "control key: 0x%04x.\n", rec->key_event.key_down, rec->key_event.repeat_count, rec->key_event.virtual_key_code, rec->key_event.virtual_scan_code, rec->key_event.unicode_char, rec->key_event.control_key_state); break; case NT_MOUSE_EVENT: ntapi->snprintf(ch,sizeof(buffer), "mouse event. " "pos.x: %d; " "pos.y: %d; " "button state: 0x%04x; " "ctrl key state: 0x%04x; " "event flags: 0x%04x.\n", rec->mouse_event.mouse_position.x, rec->mouse_event.mouse_position.y, rec->mouse_event.button_state, rec->mouse_event.control_key_state, rec->mouse_event.event_flags); break; case NT_WINDOW_BUFFER_SIZE_EVENT: ntapi->snprintf(ch,sizeof(buffer), "window event. " "size.x: %d; " "size.y: %d.\n", rec->window_event.size.x, rec->window_event.size.y); break; case NT_MENU_EVENT: ntapi->snprintf(ch,sizeof(buffer), "menu event. " "command id: %d.\n", rec->menu_event.command_id); break; case NT_FOCUS_EVENT: ntapi->snprintf(ch,sizeof(buffer), "focus event. " "set focus: %d.\n", rec->focus_event.set_focus); break; default: return NT_STATUS_INTERNAL_ERROR; } return ntcon->write_console_ansi( hout,ch, (uint32_t)ntapi->tt_string_null_offset_multibyte(ch), &nwritten,0); } int __stdcall ptyc_dbg_event(struct ptyc_driver_ctx_impl * ictx) { nt_input_record conevt[64]; uint32_t nread; unsigned i; do { if (!(ntcon->read_console_input_utf16( ictx->tctx.hin, conevt,64, &nread))) return -1; for (i=0; itctx.hout, &conevt[i]))) return -2; } while (1); return -3; }