Blob Blame History Raw
/********************************************************/
/*  ntcon: free-standing console interface definitions  */
/*  Copyright (C) 2013--2016  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;
}