/********************************************************/
/* ntcon: free-standing console interface definitions */
/* Copyright (C) 2013,2014,2015 Z. Gilboa */
/* Released under GPLv2 and GPLv3; see COPYING.NTCON. */
/********************************************************/
#include <pemagine/pemagine.h>
#include <ntcon/ntcon.h>
#define NT_STATUS_SUCCESS 0x00000000
#define NT_STATUS_INTERNAL_ERROR 0xC00000E5
#define NTCON_PTR_INIT(x,y) pvtbl->x = \
(ntcon_##x *)pe_get_procedure_address(hkernel, #y)
ntcon_api
int32_t __fastcall ntcon_vtbl_init(ntcon_vtbl * pvtbl)
{
void * hkernel;
if (!(hkernel = pe_get_kernel32_module_handle()))
return NT_STATUS_INTERNAL_ERROR;
/* console handles */
NTCON_PTR_INIT(alloc_console, AllocConsole);
NTCON_PTR_INIT(attach_console, AttachConsole);
NTCON_PTR_INIT(free_console, FreeConsole);
NTCON_PTR_INIT(get_std_handle, GetStdHandle);
/* read/write using std handles */
NTCON_PTR_INIT(get_number_of_console_input_events, GetNumberOfConsoleInputEvents);
NTCON_PTR_INIT(flush_console_input_buffer, FlushConsoleInputBuffer);
NTCON_PTR_INIT(peek_console_input_ansi, PeekConsoleInputA);
NTCON_PTR_INIT(peek_console_input_utf16, PeekConsoleInputW);
NTCON_PTR_INIT(read_console_ansi, ReadConsoleA);
NTCON_PTR_INIT(read_console_utf16, ReadConsoleW);
NTCON_PTR_INIT(read_console_input_ansi, ReadConsoleInputA);
NTCON_PTR_INIT(read_console_input_utf16, ReadConsoleInputW);
NTCON_PTR_INIT(read_console_output_ansi, ReadConsoleOutputA);
NTCON_PTR_INIT(read_console_output_utf16, ReadConsoleOutputW);
NTCON_PTR_INIT(write_console_ansi, WriteConsoleA);
NTCON_PTR_INIT(write_console_utf16, WriteConsoleW);
NTCON_PTR_INIT(write_console_input_ansi, WriteConsoleInputA);
NTCON_PTR_INIT(write_console_input_utf16, WriteConsoleInputW);
NTCON_PTR_INIT(write_console_output_ansi, WriteConsoleOutputA);
NTCON_PTR_INIT(write_console_output_utf16, WriteConsoleOutputW);
/* screen buffers */
NTCON_PTR_INIT(create_console_screen_buffer, CreateConsoleScreenBuffer);
NTCON_PTR_INIT(get_console_screen_buffer_info, GetConsoleScreenBufferInfo);
NTCON_PTR_INIT(get_console_screen_buffer_info_ex, GetConsoleScreenBufferInfoEx);
NTCON_PTR_INIT(set_console_screen_buffer_info_ex, SetConsoleScreenBufferInfoEx);
NTCON_PTR_INIT(set_console_screen_buffer_size, SetConsoleScreenBufferSize);
NTCON_PTR_INIT(set_console_active_screen_buffer, SetConsoleActiveScreenBuffer);
NTCON_PTR_INIT(set_console_window_info, SetConsoleWindowInfo);
NTCON_PTR_INIT(scroll_console_screen_buffer_ansi, ScrollConsoleScreenBufferA);
NTCON_PTR_INIT(scroll_console_screen_buffer_utf16, ScrollConsoleScreenBufferW);
/* code page */
NTCON_PTR_INIT(get_console_code_page, GetConsoleCP);
NTCON_PTR_INIT(set_console_code_page, SetConsoleCP);
/* console control */
NTCON_PTR_INIT(generate_console_ctrl_event, GenerateConsoleCtrlEvent);
NTCON_PTR_INIT(set_console_ctrl_handler, SetConsoleCtrlHandler);
/* interface mode */
NTCON_PTR_INIT(get_console_mode, GetConsoleMode);
NTCON_PTR_INIT(set_console_mode, SetConsoleMode);
/* console process list */
NTCON_PTR_INIT(get_console_process_list, GetConsoleProcessList);
/* aliases */
NTCON_PTR_INIT(add_console_alias_ansi, AddConsoleAliasA);
NTCON_PTR_INIT(add_console_alias_utf16, AddConsoleAliasW);
NTCON_PTR_INIT(get_console_alias_ansi, GetConsoleAliasA);
NTCON_PTR_INIT(get_console_alias_utf16, GetConsoleAliasW);
NTCON_PTR_INIT(get_console_aliases_ansi, GetConsoleAliasesA);
NTCON_PTR_INIT(get_console_aliases_utf16, GetConsoleAliasesW);
NTCON_PTR_INIT(get_console_aliases_length_ansi, GetConsoleAliasesLengthA);
NTCON_PTR_INIT(get_console_aliases_length_utf16, GetConsoleAliasesLengthW);
NTCON_PTR_INIT(get_console_alias_exes_ansi, GetConsoleAliasExesA);
NTCON_PTR_INIT(get_console_alias_exes_utf16, GetConsoleAliasExesW);
NTCON_PTR_INIT(get_console_alias_exes_length_ansi, GetConsoleAliasExesLengthA);
NTCON_PTR_INIT(get_console_alias_exes_length_utf16, GetConsoleAliasExesLengthW);
/* output attributes */
NTCON_PTR_INIT(fill_console_output_attribute, FillConsoleOutputAttribute);
NTCON_PTR_INIT(read_console_output_attribute, ReadConsoleOutputAttribute);
NTCON_PTR_INIT(write_console_output_attribute, WriteConsoleOutputAttribute);
/* output characters */
NTCON_PTR_INIT(fill_console_output_character_ansi, FillConsoleOutputCharacterA);
NTCON_PTR_INIT(fill_console_output_character_utf16, FillConsoleOutputCharacterW);
NTCON_PTR_INIT(read_console_output_character_ansi, ReadConsoleOutputCharacterA);
NTCON_PTR_INIT(read_console_output_character_utf16, ReadConsoleOutputCharacterW);
NTCON_PTR_INIT(write_console_output_character_ansi, WriteConsoleOutputCharacterA);
NTCON_PTR_INIT(write_console_output_character_utf16, WriteConsoleOutputCharacterW);
/* output code page */
NTCON_PTR_INIT(get_console_output_code_page, GetConsoleOutputCP);
NTCON_PTR_INIT(set_console_output_code_page, SetConsoleOutputCP);
/* text attributes */
NTCON_PTR_INIT(set_console_text_attribute, SetConsoleTextAttribute);
/* cursor info */
NTCON_PTR_INIT(get_console_cursor_info, GetConsoleCursorInfo);
NTCON_PTR_INIT(set_console_cursor_info, SetConsoleCursorInfo);
NTCON_PTR_INIT(set_console_cursor_position, SetConsoleCursorPosition);
/* selection info */
NTCON_PTR_INIT(get_console_selection_info, GetConsoleSelectionInfo);
/* history info */
NTCON_PTR_INIT(get_console_history_info, GetConsoleHistoryInfo);
NTCON_PTR_INIT(set_console_history_info, SetConsoleHistoryInfo);
/* font info */
NTCON_PTR_INIT(get_console_font_size, GetConsoleFontSize);
NTCON_PTR_INIT(get_current_console_font, GetCurrentConsoleFont);
NTCON_PTR_INIT(get_current_console_font_ex, GetCurrentConsoleFontEx);
NTCON_PTR_INIT(set_current_console_font_ex, SetCurrentConsoleFontEx);
/* mouse capabilities */
NTCON_PTR_INIT(get_number_of_console_mouse_buttons, GetNumberOfConsoleMouseButtons);
/* window information */
NTCON_PTR_INIT(get_console_window, GetConsoleWindow);
NTCON_PTR_INIT(get_largest_console_window_size, GetLargestConsoleWindowSize);
/* console api: display mode */
NTCON_PTR_INIT(get_console_display_mode, GetConsoleDisplayMode);
NTCON_PTR_INIT(set_console_display_mode, SetConsoleDisplayMode);
/* console title */
NTCON_PTR_INIT(get_console_title_ansi, GetConsoleTitleA);
NTCON_PTR_INIT(get_console_title_utf16, GetConsoleTitleW);
NTCON_PTR_INIT(set_console_title_ansi, SetConsoleTitleA);
NTCON_PTR_INIT(set_console_title_utf16, SetConsoleTitleW);
NTCON_PTR_INIT(get_console_original_title_ansi, GetConsoleOriginalTitleA);
NTCON_PTR_INIT(get_console_original_title_utf16, GetConsoleOriginalTitleW);
return NT_STATUS_SUCCESS;
}