summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ntcon.c146
-rw-r--r--src/ntcon_entry_point.c13
2 files changed, 159 insertions, 0 deletions
diff --git a/src/ntcon.c b/src/ntcon.c
new file mode 100644
index 0000000..5ad9223
--- /dev/null
+++ b/src/ntcon.c
@@ -0,0 +1,146 @@
+/********************************************************/
+/* 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;
+}
diff --git a/src/ntcon_entry_point.c b/src/ntcon_entry_point.c
new file mode 100644
index 0000000..cad654b
--- /dev/null
+++ b/src/ntcon_entry_point.c
@@ -0,0 +1,13 @@
+#ifdef MIDIPIX_FREESTANDING
+
+#include <ntcon/ntcon.h>
+
+int __stdcall ntcon_entry_point(
+ void * hinstance,
+ uint32_t reason,
+ void * reserved)
+{
+ return 1;
+}
+
+#endif