From 0417cab3d0a6e8dae29e116603e095fef4399def Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Sat, 28 Jan 2017 19:03:23 -0500 Subject: [PATCH] 4.0.15 various bug fixes, feature polish, added experimental scope command --- 4coder_base_commands.cpp | 10 + 4coder_build_commands.cpp | 234 +++ 4coder_clipboard.cpp | 147 ++ 4coder_default_bindings.cpp | 356 +--- 4coder_default_framework.h | 613 ++++++- 4coder_default_hooks.cpp | 255 +++ 4coder_default_include.cpp | 1579 ++--------------- ...ction_list.cpp => 4coder_function_list.cpp | 20 +- 4coder_helper/4coder_helper.h | 664 +++---- 4coder_helper/4coder_long_seek.h | 6 +- 4coder_jump_parsing.cpp | 61 +- 4coder_lib/4coder_string.h | 33 +- 4coder_project_commands.cpp | 428 +++++ 4coder_system_command.cpp | 53 + 4ed.cpp | 60 +- 4ed.h | 27 +- 4ed_api_implementation.cpp | 34 +- 4ed_file_view.cpp | 68 +- 4ed_gui.cpp | 4 +- 4ed_layout.cpp | 33 +- 4ed_math.h | 19 +- 4ed_rendering.h | 3 +- 4ed_rendering_helper.cpp | 14 - 4ed_site.ctm | Bin 916 -> 932 bytes 4ed_system_shared.cpp | 88 +- 4tech_defines.h | 40 +- custom_4coder.dll | Bin 0 -> 292864 bytes custom_4coder.pdb | Bin 0 -> 1699840 bytes file/4coder_buffer.cpp | 27 +- file/4coder_file.cpp | 4 +- meta/build.cpp | 1 + power/4coder_casey.cpp | 338 ++-- power/4coder_experiments.cpp | 380 +++- power/4coder_miblo_numbers.cpp | 62 +- project.4coder | 29 +- string/4coder_string_build_num.txt | 2 +- string/_4coder_string.ctm | Bin 2436 -> 2500 bytes string/internal_4coder_string.cpp | 26 +- win32_4ed.cpp | 622 ++++--- win32_gl.h | 83 + 40 files changed, 3601 insertions(+), 2822 deletions(-) create mode 100644 4coder_build_commands.cpp create mode 100644 4coder_clipboard.cpp create mode 100644 4coder_default_hooks.cpp rename power/4coder_function_list.cpp => 4coder_function_list.cpp (96%) create mode 100644 4coder_project_commands.cpp create mode 100644 4coder_system_command.cpp create mode 100644 custom_4coder.dll create mode 100644 custom_4coder.pdb create mode 100644 win32_gl.h diff --git a/4coder_base_commands.cpp b/4coder_base_commands.cpp index 3c81d73f..1318e4d5 100644 --- a/4coder_base_commands.cpp +++ b/4coder_base_commands.cpp @@ -306,6 +306,16 @@ CUSTOM_COMMAND_SIG(seek_end_of_line){ view_set_cursor(app, &view, seek_xy(100000.f, y, 1, view.unwrapped_lines), 1); } +CUSTOM_COMMAND_SIG(seek_whitespace_up_end_line){ + exec_command(app, seek_whitespace_up); + exec_command(app, seek_end_of_line); +} + +CUSTOM_COMMAND_SIG(seek_whitespace_down_end_line){ + exec_command(app, seek_whitespace_down); + exec_command(app, seek_end_of_line); +} + // // Fancy Editing diff --git a/4coder_build_commands.cpp b/4coder_build_commands.cpp new file mode 100644 index 00000000..1e76bdfe --- /dev/null +++ b/4coder_build_commands.cpp @@ -0,0 +1,234 @@ +/* +4coder_build_commands.cpp - Commands for building. + +TYPE: 'drop-in-command-pack' +*/ + +// TOP + +#if !defined(FCODER_BUILD_COMMANDS_CPP) +#define FCODER_BUILD_COMMANDS_CPP + +#include "4coder_helper/4coder_helper.h" + +#include "4coder_default_framework.h" + +// NOTE(allen|a4.0.9): This is provided to establish a default method of getting +// a "build directory". This function tries to setup the build directory in the +// directory of the given buffer, if it cannot get that information it get's the +// 4coder hot directory. +// +// There is no requirement that a custom build system in 4coder actually use the +// directory given by this function. +enum Get_Build_Directory_Result{ + BuildDir_None, + BuildDir_AtFile, + BuildDir_AtHot +}; + +static int32_t +get_build_directory(Application_Links *app, Buffer_Summary *buffer, String *dir_out){ + int32_t result = BuildDir_None; + + if (buffer && buffer->file_name){ + if (!match_cc(buffer->file_name, buffer->buffer_name)){ + String dir = make_string_cap(buffer->file_name, + buffer->file_name_len, + buffer->file_name_len+1); + remove_last_folder(&dir); + append_ss(dir_out, dir); + result = BuildDir_AtFile; + } + } + + if (!result){ + int32_t len = directory_get_hot(app, dir_out->str, + dir_out->memory_size - dir_out->size); + if (len + dir_out->size < dir_out->memory_size){ + dir_out->size += len; + result = BuildDir_AtHot; + } + } + + return(result); +} + +// TODO(allen): Better names for the "standard build search" family. +static int32_t +standard_build_search(Application_Links *app, View_Summary *view, Buffer_Summary *active_buffer, String *dir, String *command, int32_t perform_backup, int32_t use_path_in_command, String filename, String commandname){ + int32_t result = false; + + for(;;){ + int32_t old_size = dir->size; + append_ss(dir, filename); + + if (file_exists(app, dir->str, dir->size)){ + dir->size = old_size; + + if (use_path_in_command){ + append_s_char(command, '"'); + append_ss(command, *dir); + append_ss(command, commandname); + append_s_char(command, '"'); + } + else{ + append_ss(command, commandname); + } + + char space[512]; + String message = make_fixed_width_string(space); + append_ss(&message, make_lit_string("Building with: ")); + append_ss(&message, *command); + append_s_char(&message, '\n'); + print_message(app, message.str, message.size); + + exec_system_command(app, view, buffer_identifier(literal("*compilation*")), dir->str, dir->size, command->str, command->size, CLI_OverlapWithConflict); + result = true; + break; + } + dir->size = old_size; + + if (directory_cd(app, dir->str, &dir->size, dir->memory_size, literal("..")) == 0){ + if (perform_backup){ + dir->size = directory_get_hot(app, dir->str, dir->memory_size); + char backup_space[256]; + String backup_command = make_fixed_width_string(backup_space); + append_ss(&backup_command, make_lit_string("echo could not find ")); + append_ss(&backup_command, filename); + exec_system_command(app, view, buffer_identifier(literal("*compilation*")), dir->str, dir->size, backup_command.str, backup_command.size, CLI_OverlapWithConflict); + } + break; + } + } + + return(result); +} + +#if defined(_WIN32) + +// NOTE(allen): Build search rule for windows. +static int32_t +execute_standard_build_search(Application_Links *app, View_Summary *view, + Buffer_Summary *active_buffer, + String *dir, String *command, int32_t perform_backup){ + int32_t result = standard_build_search(app, view, active_buffer, dir, command, perform_backup, true, make_lit_string("build.bat"), make_lit_string("build")); + return(result); +} + +#elif defined(__linux__) + +// NOTE(allen): Build search rule for linux. +static int32_t +execute_standard_build_search(Application_Links *app, View_Summary *view, Buffer_Summary *active_buffer, String *dir, String *command, bool32 perform_backup){ + char dir_space[512]; + String dir_copy = make_fixed_width_string(dir_space); + copy(&dir_copy, *dir); + + int32_t result = standard_build_search(app, view, active_buffer, dir, command, 0, 1, make_lit_string("build.sh"), make_lit_string("build.sh")); + + if (!result){ + result = standard_build_search(app, view, active_buffer, &dir_copy, command, perform_backup, 0, make_lit_string("Makefile"), make_lit_string("make")); + } + + return(result); +} + +#else +# error No build search rule for this platform. +#endif + +// NOTE(allen): This searches first using the active file's directory, +// then if no build script is found, it searches from 4coders hot directory. +static void +execute_standard_build(Application_Links *app, View_Summary *view, Buffer_Summary *active_buffer){ + char dir_space[512]; + String dir = make_fixed_width_string(dir_space); + + char command_str_space[512]; + String command = make_fixed_width_string(command_str_space); + + int32_t build_dir_type = get_build_directory(app, active_buffer, &dir); + + if (build_dir_type == BuildDir_AtFile){ + if (!execute_standard_build_search(app, view, active_buffer, &dir, &command, false)){ + dir.size = 0; + command.size = 0; + build_dir_type = get_build_directory(app, 0, &dir); + } + } + + if (build_dir_type == BuildDir_AtHot){ + execute_standard_build_search(app, view, active_buffer, &dir, &command, true); + } +} + +CUSTOM_COMMAND_SIG(build_search){ + uint32_t access = AccessAll; + View_Summary view = get_active_view(app, access); + Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); + execute_standard_build(app, &view, &buffer); + prev_location = null_location; + lock_jump_buffer(literal("*compilation*")); +} + +#define GET_COMP_BUFFER(app) get_buffer_by_name(app, literal("*compilation*"), AccessAll) + +static View_Summary +get_or_open_build_panel(Application_Links *app){ + View_Summary view = {0}; + + Buffer_Summary buffer = GET_COMP_BUFFER(app); + if (buffer.exists){ + view = get_first_view_with_buffer(app, buffer.buffer_id); + } + if (!view.exists){ + view = open_special_note_view(app); + } + + return(view); +} + +static void +set_fancy_compilation_buffer_font(Application_Links *app){ + Buffer_Summary comp_buffer = get_buffer_by_name(app, literal("*compilation*"), AccessAll); + buffer_set_font(app, &comp_buffer, literal("Inconsolata")); +} + +CUSTOM_COMMAND_SIG(build_in_build_panel){ + uint32_t access = AccessAll; + View_Summary view = get_active_view(app, access); + Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); + + View_Summary build_view = get_or_open_build_panel(app); + + execute_standard_build(app, &build_view, &buffer); + set_fancy_compilation_buffer_font(app); + + prev_location = null_location; + lock_jump_buffer(literal("*compilation*")); +} + +CUSTOM_COMMAND_SIG(close_build_panel){ + close_special_note_view(app); +} + +CUSTOM_COMMAND_SIG(change_to_build_panel){ + View_Summary view = open_special_note_view(app, false); + + if (!view.exists){ + Buffer_Summary buffer = GET_COMP_BUFFER(app); + if (buffer.exists){ + view = open_special_note_view(app); + view_set_buffer(app, &view, buffer.buffer_id, 0); + } + } + + if (view.exists){ + set_active_view(app, &view); + } +} + +#endif + +// BOTTOM + diff --git a/4coder_clipboard.cpp b/4coder_clipboard.cpp new file mode 100644 index 00000000..56e13c01 --- /dev/null +++ b/4coder_clipboard.cpp @@ -0,0 +1,147 @@ +/* +4coder_clipboard.cpp - Copy paste commands and clipboard related setup. + +TYPE: 'drop-in-command-pack' +*/ + +// TOP + +#if !defined(FCODER_CLIPBOARD_CPP) +#define FCODER_CLIPBOARD_CPP + +#include "4coder_default_framework.h" + +#include "4coder_helper/4coder_helper.h" + +static bool32 +clipboard_copy(Application_Links *app, int32_t start, int32_t end, Buffer_Summary *buffer_out, uint32_t access){ + View_Summary view = get_active_view(app, access); + Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); + bool32 result = 0; + + if (buffer.exists){ + if (0 <= start && start <= end && end <= buffer.size){ + int32_t size = (end - start); + char *str = (char*)app->memory; + + if (size <= app->memory_size){ + buffer_read_range(app, &buffer, start, end, str); + clipboard_post(app, 0, str, size); + if (buffer_out){*buffer_out = buffer;} + result = 1; + } + } + } + + return(result); +} + +static int32_t +clipboard_cut(Application_Links *app, int32_t start, int32_t end, Buffer_Summary *buffer_out, uint32_t access){ + Buffer_Summary buffer = {0}; + int32_t result = false; + + if (clipboard_copy(app, start, end, &buffer, access)){ + buffer_replace_range(app, &buffer, start, end, 0, 0); + if (buffer_out){*buffer_out = buffer;} + } + + return(result); +} + +CUSTOM_COMMAND_SIG(copy){ + uint32_t access = AccessProtected; + View_Summary view = get_active_view(app, access); + Range range = get_range(&view); + clipboard_copy(app, range.min, range.max, 0, access); +} + +CUSTOM_COMMAND_SIG(cut){ + uint32_t access = AccessOpen; + View_Summary view = get_active_view(app, access); + Range range = get_range(&view); + clipboard_cut(app, range.min, range.max, 0, access); +} + +CUSTOM_COMMAND_SIG(paste){ + uint32_t access = AccessOpen; + int32_t count = clipboard_count(app, 0); + if (count > 0){ + View_Summary view = get_active_view(app, access); + + view_paste_index[view.view_id].next_rewrite = RewritePaste; + + int32_t paste_index = 0; + view_paste_index[view.view_id].index = paste_index; + + int32_t len = clipboard_index(app, 0, paste_index, 0, 0); + char *str = 0; + + if (len <= app->memory_size){ + str = (char*)app->memory; + } + + if (str){ + clipboard_index(app, 0, paste_index, str, len); + + Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); + int32_t pos = view.cursor.pos; + buffer_replace_range(app, &buffer, pos, pos, str, len); + view_set_mark(app, &view, seek_pos(pos)); + view_set_cursor(app, &view, seek_pos(pos + len), true); + + // TODO(allen): Send this to all views. + Theme_Color paste; + paste.tag = Stag_Paste; + get_theme_colors(app, &paste, 1); + view_post_fade(app, &view, 0.667f, pos, pos + len, paste.color); + } + } +} + +CUSTOM_COMMAND_SIG(paste_next){ + uint32_t access = AccessOpen; + int32_t count = clipboard_count(app, 0); + if (count > 0){ + View_Summary view = get_active_view(app, access); + + if (view_paste_index[view.view_id].rewrite == RewritePaste){ + view_paste_index[view.view_id].next_rewrite = RewritePaste; + + int32_t paste_index = view_paste_index[view.view_id].index + 1; + view_paste_index[view.view_id].index = paste_index; + + int32_t len = clipboard_index(app, 0, paste_index, 0, 0); + char *str = 0; + + if (len <= app->memory_size){ + str = (char*)app->memory; + } + + if (str){ + clipboard_index(app, 0, paste_index, str, len); + + Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); + Range range = get_range(&view); + int32_t pos = range.min; + + buffer_replace_range(app, &buffer, range.min, range.max, str, len); + view_set_cursor(app, &view, seek_pos(pos + len), true); + + // TODO(allen): Send this to all views. + Theme_Color paste; + paste.tag = Stag_Paste; + get_theme_colors(app, &paste, 1); + view_post_fade(app, &view, 0.667f, pos, pos + len, paste.color); + } + } + else{ + exec_command(app, paste); + } + } +} + +#endif + +// BOTTOM + diff --git a/4coder_default_bindings.cpp b/4coder_default_bindings.cpp index 354530b1..d1f8f1c1 100644 --- a/4coder_default_bindings.cpp +++ b/4coder_default_bindings.cpp @@ -1,314 +1,23 @@ +/* +4coder_default_bidings.cpp - Supplies the default bindings used for default 4coder behavior. + +TYPE: 'build-target' +*/ // TOP -#ifndef FCODER_DEFAULT_BINDINGS +#if !defined(FCODER_DEFAULT_BINDINGS) #define FCODER_DEFAULT_BINDINGS #include "4coder_default_include.cpp" -// NOTE(allen|a3.3): All of your custom ids should be enumerated -// as shown here, they may start at 0, and you can only have -// 2^24 of them so don't be wasteful! -enum My_Maps{ - my_code_map, - my_maps_count -}; - -CUSTOM_COMMAND_SIG(write_allen_todo){ - write_string(app, make_lit_string("// TODO(allen): ")); -} - -CUSTOM_COMMAND_SIG(write_allen_note){ - write_string(app, make_lit_string("// NOTE(allen): ")); -} - -CUSTOM_COMMAND_SIG(write_allen_doc){ - write_string(app, make_lit_string("/* DOC() */")); -} - -CUSTOM_COMMAND_SIG(write_zero_struct){ - write_string(app, make_lit_string(" = {0};")); -} - -CUSTOM_COMMAND_SIG(switch_to_compilation){ - - char name[] = "*compilation*"; - int32_t name_size = sizeof(name)-1; - - uint32_t access = AccessOpen; - View_Summary view = get_active_view(app, access); - Buffer_Summary buffer = get_buffer_by_name(app, name, name_size, access); - - view_set_buffer(app, &view, buffer.buffer_id, 0); -} - -CUSTOM_COMMAND_SIG(rewrite_as_single_caps){ - uint32_t access = AccessOpen; - View_Summary view = get_active_view(app, access); - Full_Cursor cursor = view.cursor; - - // TODO(allen): This can be rewritten now without moving the - // cursor around, instead just calling the boundary seek. - Range range = {0}; - exec_command(app, seek_token_left); - refresh_view(app, &view); - range.min = view.cursor.pos; - - exec_command(app, seek_token_right); - refresh_view(app, &view); - range.max = view.cursor.pos; - - String string = {0}; - string.str = (char*)app->memory; - string.size = range.max - range.min; - assert(string.size < app->memory_size); - - Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); - buffer_read_range(app, &buffer, range.min, range.max, string.str); - - int32_t is_first = true; - for (int32_t i = 0; i < string.size; ++i){ - if (char_is_alpha_true(string.str[i])){ - if (is_first){ - is_first = false; - } - else{ - string.str[i] = char_to_lower(string.str[i]); - } - } - else{ - is_first = true; - } - } - - buffer_replace_range(app, &buffer, range.min, range.max, string.str, string.size); - - view_set_cursor(app, &view, seek_line_char(cursor.line+1, cursor.character), true); -} - -CUSTOM_COMMAND_SIG(open_my_files){ - uint32_t access = AccessAll; - View_Summary view = get_active_view(app, access); - view_open_file(app, &view, literal("w:/4ed/data/test/basic.cpp"), true); -} - -CUSTOM_COMMAND_SIG(build_at_launch_location){ - uint32_t access = AccessAll; - View_Summary view = get_active_view(app, access); - exec_system_command(app, &view, buffer_identifier(literal("*compilation*")),literal("."), literal("build"), CLI_OverlapWithConflict); -} - -CUSTOM_COMMAND_SIG(seek_whitespace_up_end_line){ - exec_command(app, seek_whitespace_up); - exec_command(app, seek_end_of_line); -} - -CUSTOM_COMMAND_SIG(seek_whitespace_down_end_line){ - exec_command(app, seek_whitespace_down); - exec_command(app, seek_end_of_line); -} - -HOOK_SIG(my_start){ - default_4coder_initialize(app); - default_4coder_side_by_side_panels(app); - - // no meaning for return - return(0); -} - -HOOK_SIG(my_exit){ - // if this returns zero it cancels the exit. - return(1); -} - -HOOK_SIG(my_view_adjust){ - int32_t count = 0; - int32_t new_wrap_width = 0; - for (View_Summary view = get_view_first(app, AccessAll); - view.exists; - get_view_next(app, &view, AccessAll)){ - new_wrap_width += view.view_region.x1 - view.view_region.x0; - ++count; - } - - new_wrap_width /= count; - new_wrap_width = (int32_t)(new_wrap_width * .9f); - - int32_t new_min_base_width = (int32_t)(new_wrap_width * .77f); - if (automatically_adjust_wrapping){ - adjust_all_buffer_wrap_widths(app, new_wrap_width, new_min_base_width); - } - - // no meaning for return - return(0); -} - -CUSTOM_COMMAND_SIG(newline_or_goto_position){ - View_Summary view = get_active_view(app, AccessProtected); - Buffer_Summary buffer = get_buffer(app, view.buffer_id, AccessProtected); - - if (buffer.lock_flags & AccessProtected){ - exec_command(app, goto_jump_at_cursor); - lock_jump_buffer(buffer); - } - else{ - exec_command(app, write_character); - } -} - -// TODO(allen): Eliminate this hook if you can. -OPEN_FILE_HOOK_SIG(my_file_settings){ - // NOTE(allen|a4.0.8): The get_parameter_buffer was eliminated - // and instead the buffer is passed as an explicit parameter through - // the function call. That is where buffer_id comes from here. - uint32_t access = AccessAll; - Buffer_Summary buffer = get_buffer(app, buffer_id, access); - assert(buffer.exists); - - int32_t treat_as_code = 0; - int32_t wrap_lines = 1; - - if (buffer.file_name && buffer.size < (16 << 20)){ - String ext = file_extension(make_string(buffer.file_name, buffer.file_name_len)); - if (match_ss(ext, make_lit_string("cpp"))) treat_as_code = 1; - else if (match_ss(ext, make_lit_string("h"))) treat_as_code = 1; - else if (match_ss(ext, make_lit_string("c"))) treat_as_code = 1; - else if (match_ss(ext, make_lit_string("hpp"))) treat_as_code = 1; - } - - if (treat_as_code){ - wrap_lines = 0; - } - if (buffer.file_name[0] == '*'){ - wrap_lines = 0; - } - - buffer_set_setting(app, &buffer, BufferSetting_WrapPosition, default_wrap_width); - buffer_set_setting(app, &buffer, BufferSetting_MinimumBaseWrapPosition, default_min_base_width); - buffer_set_setting(app, &buffer, BufferSetting_MapID, (treat_as_code)?((int32_t)my_code_map):((int32_t)mapid_file)); - - if (treat_as_code && enable_code_wrapping && buffer.size < (1 << 18)){ - // NOTE(allen|a4.0.12): There is a little bit of grossness going on here. - // If we set BufferSetting_Lex to true, it will launch a lexing job. - // If a lexing job is active when we set BufferSetting_VirtualWhitespace, the call can fail. - // Unfortunantely without tokens virtual whitespace doesn't really make sense. - // So for now I have it automatically turning on lexing when virtual whitespace is turned on. - // Cleaning some of that up is a goal for future versions. - buffer_set_setting(app, &buffer, BufferSetting_WrapLine, 1); - buffer_set_setting(app, &buffer, BufferSetting_VirtualWhitespace, 1); - } - else{ - buffer_set_setting(app, &buffer, BufferSetting_WrapLine, wrap_lines); - buffer_set_setting(app, &buffer, BufferSetting_Lex, treat_as_code); - } - - // no meaning for return - return(0); -} - -OPEN_FILE_HOOK_SIG(my_file_save){ - uint32_t access = AccessAll; - Buffer_Summary buffer = get_buffer(app, buffer_id, access); - assert(buffer.exists); - - int32_t is_virtual = 0; - if (automatically_indent_text_on_save && buffer_get_setting(app, &buffer, BufferSetting_VirtualWhitespace, &is_virtual)){ - if (is_virtual){ - auto_tab_whole_file_by_summary(app, &buffer); - } - } - - // no meaning for return - return(0); -} - -// NOTE(allen|a4.0.9): The input filter allows you to modify the input -// to a frame before 4coder starts processing it at all. -// -// Right now it only has access to the mouse state, but it will be -// extended to have access to the key presses soon. -static bool32 suppressing_mouse = false; - -INPUT_FILTER_SIG(my_suppress_mouse_filter){ - if (suppressing_mouse){ - *mouse = null_mouse_state; - mouse->x = -100; - mouse->y = -100; - } -} - -static void -set_mouse_suppression(Application_Links *app, int32_t suppress){ - if (suppress){ - suppressing_mouse = 1; - show_mouse_cursor(app, MouseCursorShow_Never); - } - else{ - suppressing_mouse = 0; - show_mouse_cursor(app, MouseCursorShow_Always); - } -} - -CUSTOM_COMMAND_SIG(suppress_mouse){ - set_mouse_suppression(app, true); -} - -CUSTOM_COMMAND_SIG(allow_mouse){ - set_mouse_suppression(app, false); -} - -CUSTOM_COMMAND_SIG(toggle_mouse){ - set_mouse_suppression(app, !suppressing_mouse); -} - -CUSTOM_COMMAND_SIG(execute_arbitrary_command){ - // NOTE(allen): This isn't a super powerful version of this command, I will expand - // upon it so that it has all the cmdid_* commands by default. However, with this - // as an example you have everything you need to make it work already. You could - // even use app->memory to create a hash table in the start hook. - Query_Bar bar; - char space[1024]; - bar.prompt = make_lit_string("Command: "); - bar.string = make_fixed_width_string(space); - - if (!query_user_string(app, &bar)) return; - - // NOTE(allen): Here I chose to end this query bar because when I call another - // command it might ALSO have query bars and I don't want this one hanging - // around at that point. Since the bar exists on my stack the result of the query - // is still available in bar.string though. - end_query_bar(app, &bar, 0); - - if (match_ss(bar.string, make_lit_string("load project"))){ - exec_command(app, load_project); - } - else if (match_ss(bar.string, make_lit_string("open all code"))){ - exec_command(app, open_all_code); - } - else if(match_ss(bar.string, make_lit_string("close all code"))){ - exec_command(app, close_all_code); - } - else if (match_ss(bar.string, make_lit_string("open menu"))){ - exec_command(app, cmdid_open_menu); - } - else if (match_ss(bar.string, make_lit_string("dos lines"))){ - exec_command(app, eol_dosify); - } - else if (match_ss(bar.string, make_lit_string("nix lines"))){ - exec_command(app, eol_nixify); - } - else{ - print_message(app, literal("unrecognized command\n")); - } -} - void default_keys(Bind_Helper *context){ begin_map(context, mapid_global); - bind(context, 'p', MDFR_CTRL, open_panel_vsplit); - bind(context, '_', MDFR_CTRL, open_panel_hsplit); - bind(context, 'P', MDFR_CTRL, close_panel); + //bind(context, 'p', MDFR_CTRL, open_panel_vsplit); + //bind(context, '_', MDFR_CTRL, open_panel_hsplit); + //bind(context, 'P', MDFR_CTRL, close_panel); bind(context, ',', MDFR_CTRL, change_active_panel); bind(context, 'n', MDFR_CTRL, interactive_new); @@ -318,8 +27,8 @@ default_keys(Bind_Helper *context){ bind(context, 'i', MDFR_CTRL, interactive_switch_buffer); bind(context, 'w', MDFR_CTRL, save_as); - bind(context, 'c', MDFR_ALT, cmdid_open_color_tweaker); - bind(context, 'd', MDFR_ALT, cmdid_open_debug); + bind(context, 'c', MDFR_ALT, open_color_tweaker); + bind(context, 'd', MDFR_ALT, open_debug); bind(context, '.', MDFR_ALT, change_to_build_panel); bind(context, ',', MDFR_ALT, close_build_panel); @@ -336,7 +45,7 @@ default_keys(Bind_Helper *context){ bind(context, 's', MDFR_ALT, show_scrollbar); bind(context, 'w', MDFR_ALT, hide_scrollbar); - // TODO(allen): This is apparently not working on Linux. Need to try it on windows still. + // TODO(allen): This is apparently not working on Linux, must investigate. bind(context, key_f2, MDFR_CTRL, toggle_mouse); bind(context, key_page_up, MDFR_CTRL, toggle_fullscreen); bind(context, 'E', MDFR_ALT, exit_4coder); @@ -363,9 +72,9 @@ default_keys(Bind_Helper *context){ end_map(context); - begin_map(context, my_code_map); + begin_map(context, default_code_map); - // NOTE(allen|a3.1): Set this map (my_code_map == mapid_user_custom) to + // NOTE(allen|a3.1): Set this map (default_code_map == mapid_user_custom) to // inherit from mapid_file. When searching if a key is bound // in this map, if it is not found here it will then search mapid_file. // @@ -391,15 +100,16 @@ default_keys(Bind_Helper *context){ bind(context, '\t', MDFR_CTRL, auto_tab_range); bind(context, '\t', MDFR_SHIFT, auto_tab_line_at_cursor); - bind(context, 't', MDFR_ALT, write_allen_todo); - bind(context, 'y', MDFR_ALT, write_allen_note); - bind(context, 'r', MDFR_ALT, write_allen_doc); + bind(context, 't', MDFR_ALT, write_todo); + bind(context, 'y', MDFR_ALT, write_note); + bind(context, 'r', MDFR_ALT, write_block); bind(context, '[', MDFR_CTRL, open_long_braces); bind(context, '{', MDFR_CTRL, open_long_braces_semicolon); bind(context, '}', MDFR_CTRL, open_long_braces_break); bind(context, 'i', MDFR_ALT, if0_off); bind(context, '1', MDFR_ALT, open_file_in_quotes); bind(context, '0', MDFR_CTRL, write_zero_struct); + bind(context, 'I', MDFR_CTRL, list_all_functions_current_buffer); end_map(context); @@ -460,25 +170,21 @@ default_keys(Bind_Helper *context){ bind(context, 'F', MDFR_ALT, list_all_substring_locations_case_insensitive); bind(context, 'g', MDFR_CTRL, goto_line); bind(context, 'j', MDFR_CTRL, to_lowercase); - bind(context, 'K', MDFR_CTRL, cmdid_kill_buffer); + bind(context, 'K', MDFR_CTRL, kill_buffer); bind(context, 'l', MDFR_CTRL, toggle_line_wrap); bind(context, 'm', MDFR_CTRL, cursor_mark_swap); - bind(context, 'O', MDFR_CTRL, cmdid_reopen); + bind(context, 'O', MDFR_CTRL, reopen); bind(context, 'q', MDFR_CTRL, query_replace); bind(context, 'r', MDFR_CTRL, reverse_search); - bind(context, 's', MDFR_CTRL, cmdid_save); + bind(context, 's', MDFR_CTRL, save); bind(context, 'T', MDFR_CTRL, list_all_locations_of_identifier); bind(context, 'u', MDFR_CTRL, to_uppercase); - bind(context, 'U', MDFR_CTRL, rewrite_as_single_caps); bind(context, 'v', MDFR_CTRL, paste_and_indent); bind(context, 'v', MDFR_ALT, toggle_virtual_whitespace); bind(context, 'V', MDFR_CTRL, paste_next_and_indent); bind(context, 'x', MDFR_CTRL, cut); - bind(context, 'y', MDFR_CTRL, cmdid_redo); - bind(context, 'z', MDFR_CTRL, cmdid_undo); - - bind(context, '1', MDFR_CTRL, eol_dosify); - bind(context, '!', MDFR_CTRL, eol_nixify); + bind(context, 'y', MDFR_CTRL, redo); + bind(context, 'z', MDFR_CTRL, undo); bind(context, '2', MDFR_CTRL, decrease_line_wrap); bind(context, '3', MDFR_CTRL, increase_line_wrap); @@ -492,8 +198,6 @@ default_keys(Bind_Helper *context){ end_map(context); } - - #ifndef NO_BINDING extern "C" int32_t @@ -501,18 +205,7 @@ get_bindings(void *data, int32_t size){ Bind_Helper context_ = begin_bind_helper(data, size); Bind_Helper *context = &context_; - // NOTE(allen|a3.1): Hooks have no loyalties to maps. All hooks are global - // and once set they always apply, regardless of what map is active. - set_hook(context, hook_start, my_start); - set_hook(context, hook_exit, my_exit); - set_hook(context, hook_view_size_change, my_view_adjust); - - set_open_file_hook(context, my_file_settings); - set_save_file_hook(context, my_file_save); - set_command_caller(context, default_command_caller); - set_input_filter(context, my_suppress_mouse_filter); - set_scroll_rule(context, smooth_scroll_rule); - + set_all_default_hooks(context); default_keys(context); int32_t result = end_bind_helper(context); @@ -524,3 +217,4 @@ get_bindings(void *data, int32_t size){ #endif //FCODER_DEFAULT_BINDINGS // BOTTOM + diff --git a/4coder_default_framework.h b/4coder_default_framework.h index 23e6528c..0ead6276 100644 --- a/4coder_default_framework.h +++ b/4coder_default_framework.h @@ -10,8 +10,20 @@ TYPE: 'internal-for-default-system' #if !defined(FCODER_DEFAULT_FRAMEWORK_H) #define FCODER_DEFAULT_FRAMEWORK_H +#include "4coder_base_commands.cpp" + #include "4coder_helper/4coder_helper.h" #include "4coder_lib/4coder_mem.h" +#include "4cpp/4cpp_lexer.h" + +// +// Command Maps +// + +enum Default_Maps{ + default_code_map, + default_maps_count +}; // // Global Memory @@ -34,12 +46,14 @@ unlock_jump_buffer(){ static void lock_jump_buffer(char *name, int32_t size){ - copy(&locked_buffer, make_string(name, size)); + if (size <= locked_buffer.memory_size){ + copy(&locked_buffer, make_string(name, size)); + } } static void lock_jump_buffer(Buffer_Summary buffer){ - copy(&locked_buffer, make_string(buffer.buffer_name, buffer.buffer_name_len)); + lock_jump_buffer(buffer.buffer_name, buffer.buffer_name_len); } static View_Summary @@ -125,6 +139,601 @@ struct View_Paste_Index{ View_Paste_Index view_paste_index_[16]; View_Paste_Index *view_paste_index = view_paste_index_ - 1; + +// +// System Buffer Names +// + +static char out_buffer_space[1024]; +static char command_space[1024]; +static char hot_directory_space[1024]; + + +// +// Mouse Suppression +// + +static bool32 suppressing_mouse = false; + +static void +set_mouse_suppression(Application_Links *app, int32_t suppress){ + if (suppress){ + suppressing_mouse = 1; + show_mouse_cursor(app, MouseCursorShow_Never); + } + else{ + suppressing_mouse = 0; + show_mouse_cursor(app, MouseCursorShow_Always); + } +} + +CUSTOM_COMMAND_SIG(suppress_mouse){ + set_mouse_suppression(app, true); +} + +CUSTOM_COMMAND_SIG(allow_mouse){ + set_mouse_suppression(app, false); +} + +CUSTOM_COMMAND_SIG(toggle_mouse){ + set_mouse_suppression(app, !suppressing_mouse); +} + + +// +// Projects +// + +static char *default_extensions[] = { + "cpp", + "hpp", + "c", + "h", + "cc" +}; + +struct Fkey_Command{ + char command[128]; + char out[128]; + bool32 use_build_panel; +}; + +struct Project{ + char dir_space[256]; + char *dir; + int32_t dir_len; + + char extension_space[256]; + char *extensions[94]; + int32_t extension_count; + + Fkey_Command fkey_commands[16]; + + bool32 close_all_code_when_this_project_closes; + bool32 close_all_files_when_project_opens; +}; + +static Project null_project = {}; +static Project current_project = {}; + +static void +set_project_extensions(Project *project, String src){ + int32_t mode = 0; + int32_t j = 0, k = 0; + for (int32_t i = 0; i < src.size; ++i){ + switch (mode){ + case 0: + { + if (src.str[i] == '.'){ + mode = 1; + project->extensions[k++] = &project->extension_space[j]; + } + }break; + + case 1: + { + if (src.str[i] == '.'){ + project->extension_space[j++] = 0; + project->extensions[k++] = &project->extension_space[j]; + } + else{ + project->extension_space[j++] = src.str[i]; + } + }break; + } + } + project->extension_space[j++] = 0; + project->extension_count = k; +} + +static char** +get_current_code_extensions(int32_t *extension_count_out){ + char **extension_list = default_extensions; + int32_t extension_count = ArrayCount(default_extensions); + if (current_project.dir != 0){ + extension_list = current_project.extensions; + extension_count = current_project.extension_count; + } + *extension_count_out = extension_count; + return(extension_list); +} + + +// +// Location Jumping State +// + +typedef struct ID_Based_Jump_Location{ + int32_t buffer_id; + int32_t line; + int32_t column; +} ID_Based_Jump_Location; + +static ID_Based_Jump_Location null_location = {0}; +static ID_Based_Jump_Location prev_location = {0}; + + +// +// Config File Parsing +// + +struct Config_Line{ + Cpp_Token id_token; + Cpp_Token subscript_token; + Cpp_Token eq_token; + Cpp_Token val_token; + int32_t val_array_start; + int32_t val_array_end; + int32_t val_array_count; + bool32 read_success; +}; + +struct Config_Item{ + Config_Line line; + Cpp_Token_Array array; + char *mem; + String id; + int32_t subscript_index; + bool32 has_subscript; +}; + +struct Config_Array_Reader{ + Cpp_Token_Array array; + char *mem; + int32_t i; + int32_t val_array_end; + bool32 good; +}; + +static Cpp_Token +read_config_token(Cpp_Token_Array array, int32_t *i_ptr){ + Cpp_Token token = {0}; + + int32_t i = *i_ptr; + + for (; i < array.count; ++i){ + Cpp_Token comment_token = array.tokens[i]; + if (comment_token.type != CPP_TOKEN_COMMENT){ + break; + } + } + + if (i < array.count){ + token = array.tokens[i]; + } + + *i_ptr = i; + + return(token); +} + +static Config_Line +read_config_line(Cpp_Token_Array array, int32_t *i_ptr){ + Config_Line config_line = {0}; + + int32_t i = *i_ptr; + + config_line.id_token = read_config_token(array, &i); + if (config_line.id_token.type == CPP_TOKEN_IDENTIFIER){ + ++i; + if (i < array.count){ + Cpp_Token token = read_config_token(array, &i); + + bool32 subscript_success = 1; + if (token.type == CPP_TOKEN_BRACKET_OPEN){ + subscript_success = 0; + ++i; + if (i < array.count){ + config_line.subscript_token = read_config_token(array, &i); + if (config_line.subscript_token.type == CPP_TOKEN_INTEGER_CONSTANT){ + ++i; + if (i < array.count){ + token = read_config_token(array, &i); + if (token.type == CPP_TOKEN_BRACKET_CLOSE){ + ++i; + if (i < array.count){ + token = read_config_token(array, &i); + subscript_success = 1; + } + } + } + } + } + } + + if (subscript_success){ + if (token.type == CPP_TOKEN_EQ){ + config_line.eq_token = read_config_token(array, &i); + ++i; + if (i < array.count){ + Cpp_Token val_token = read_config_token(array, &i); + + bool32 array_success = 1; + if (val_token.type == CPP_TOKEN_BRACE_OPEN){ + array_success = 0; + ++i; + if (i < array.count){ + config_line.val_array_start = i; + + bool32 expecting_array_item = 1; + for (; i < array.count; ++i){ + Cpp_Token array_token = read_config_token(array, &i); + if (array_token.size == 0){ + break; + } + if (array_token.type == CPP_TOKEN_BRACE_CLOSE){ + config_line.val_array_end = i; + array_success = 1; + break; + } + else{ + if (array_token.type == CPP_TOKEN_COMMA){ + if (!expecting_array_item){ + expecting_array_item = 1; + } + else{ + break; + } + } + else{ + if (expecting_array_item){ + expecting_array_item = 0; + ++config_line.val_array_count; + } + } + } + } + } + } + + if (array_success){ + config_line.val_token = val_token; + ++i; + if (i < array.count){ + Cpp_Token semicolon_token = read_config_token(array, &i); + if (semicolon_token.type == CPP_TOKEN_SEMICOLON){ + config_line.read_success = 1; + } + } + } + } + } + } + } + } + + if (!config_line.read_success){ + for (; i < array.count; ++i){ + Cpp_Token token = read_config_token(array, &i); + if (token.type == CPP_TOKEN_SEMICOLON){ + break; + } + } + } + + *i_ptr = i; + + return(config_line); +} + +static Config_Item +get_config_item(Config_Line line, char *mem, Cpp_Token_Array array){ + Config_Item item = {0}; + item.line = line; + item.array = array; + item.mem = mem; + if (line.id_token.size != 0){ + item.id = make_string(mem + line.id_token.start, line.id_token.size); + } + + if (line.subscript_token.size != 0){ + String subscript_str = make_string(mem + line.subscript_token.start,line.subscript_token.size); + item.subscript_index = str_to_int_s(subscript_str); + item.has_subscript = 1; + } + + return(item); +} + +static bool32 +config_var(Config_Item item, char *var_name, int32_t *subscript, uint32_t token_type, void *var_out){ + bool32 result = 0; + bool32 subscript_succes = 1; + if (item.line.val_token.type == token_type){ + if ((var_name == 0 && item.id.size == 0) || match(item.id, var_name)){ + if (subscript){ + if (item.has_subscript){ + *subscript = item.subscript_index; + } + else{ + subscript_succes = 0; + } + } + + if (subscript_succes){ + if (var_out){ + switch (token_type){ + case CPP_TOKEN_BOOLEAN_CONSTANT: + { + *(bool32*)var_out = (item.mem[item.line.val_token.start] == 't'); + }break; + + case CPP_TOKEN_INTEGER_CONSTANT: + { + String val = make_string(item.mem + item.line.val_token.start, item.line.val_token.size); + *(int32_t*)var_out = str_to_int(val); + }break; + + case CPP_TOKEN_STRING_CONSTANT: + { + *(String*)var_out = make_string(item.mem + item.line.val_token.start + 1,item.line.val_token.size - 2); + }break; + + case CPP_TOKEN_BRACE_OPEN: + { + Config_Array_Reader *array_reader = (Config_Array_Reader*)var_out; + array_reader->array = item.array; + array_reader->mem = item.mem; + array_reader->i = item.line.val_array_start; + array_reader->val_array_end = item.line.val_array_end; + array_reader->good = 1; + }break; + } + } + result = 1; + } + } + } + return(result); +} + +static bool32 +config_bool_var(Config_Item item, char *var_name, int32_t *subscript, bool32 *var_out){ + bool32 result = config_var(item, var_name, subscript, CPP_TOKEN_BOOLEAN_CONSTANT, var_out); + return(result); +} + +static bool32 +config_int_var(Config_Item item, char *var_name, int32_t *subscript, int32_t *var_out){ + bool32 result = config_var(item, var_name, subscript, CPP_TOKEN_INTEGER_CONSTANT, var_out); + return(result); +} + +static bool32 +config_string_var(Config_Item item, char *var_name, int32_t *subscript, String *var_out){ + bool32 result = config_var(item, var_name, subscript, CPP_TOKEN_STRING_CONSTANT, var_out); + return(result); +} + +static bool32 +config_array_var(Config_Item item, char *var_name, int32_t *subscript, Config_Array_Reader *array_reader){ + bool32 result = config_var(item, var_name, subscript, CPP_TOKEN_BRACE_OPEN, array_reader); + return(result); +} + +static bool32 +config_array_next_item(Config_Array_Reader *array_reader, Config_Item *item){ + bool32 result = 0; + + for (;array_reader->i < array_reader->val_array_end; + ++array_reader->i){ + Cpp_Token array_token = read_config_token(array_reader->array, &array_reader->i); + if (array_token.size == 0 || array_reader->i >= array_reader->val_array_end){ + break; + } + + if (array_token.type == CPP_TOKEN_BRACE_CLOSE){ + break; + } + + switch (array_token.type){ + case CPP_TOKEN_BOOLEAN_CONSTANT: + case CPP_TOKEN_INTEGER_CONSTANT: + case CPP_TOKEN_STRING_CONSTANT: + { + Config_Line line = {0}; + line.val_token = array_token; + line.read_success = 1; + *item = get_config_item(line, array_reader->mem, array_reader->array); + result = 1; + ++array_reader->i; + goto doublebreak; + }break; + } + } + doublebreak:; + + array_reader->good = result; + return(result); +} + +static bool32 +config_array_good(Config_Array_Reader *array_reader){ + bool32 result = (array_reader->good); + return(result); +} + + +// +// Configuration +// + +static bool32 enable_code_wrapping = 1; +static bool32 automatically_adjust_wrapping = 1; +static int32_t default_wrap_width = 672; +static int32_t default_min_base_width = 550; +static bool32 automatically_indent_text_on_save = 1; + +static String default_theme_name = make_lit_string("4coder"); +static String default_font_name = make_lit_string("Liberation Sans"); + +static String user_name = {0}; + +static bool32 +get_current_name(char **name_out, int32_t *len_out){ + bool32 result = false; + *name_out = 0; + if (user_name.str != 0){ + *name_out = user_name.str; + *len_out = user_name.size; + result = true; + } + return(result); +} + +// TODO(allen): Stop handling files this way! My own API should be able to do this!!?!?!?!!?!?!!!!? +#include + +static bool32 +file_handle_dump(Partition *part, FILE *file, char **mem_ptr, int32_t *size_ptr){ + bool32 success = 0; + + fseek(file, 0, SEEK_END); + int32_t size = ftell(file); + char *mem = (char*)push_block(part, size+1); + fseek(file, 0, SEEK_SET); + int32_t check_size = (int32_t)fread(mem, 1, size, file); + if (check_size == size){ + mem[size] = 0; + success = 1; + } + + *mem_ptr = mem; + *size_ptr = size; + + return(success); +} + +static void +process_config_file(Application_Links *app){ + Partition *part = &global_part; + FILE *file = fopen("config.4coder", "rb"); + + if (!file){ + char space[256]; + int32_t size = get_4ed_path(app, space, sizeof(space)); + String str = make_string_cap(space, size, sizeof(space)); + append_sc(&str, "/config.4coder"); + terminate_with_null(&str); + file = fopen(str.str, "rb"); + } + + if (file){ + Temp_Memory temp = begin_temp_memory(part); + + char *mem = 0; + int32_t size = 0; + bool32 file_read_success = file_handle_dump(part, file, &mem, &size); + + if (file_read_success){ + fclose(file); + + Cpp_Token_Array array; + array.count = 0; + array.max_count = (1 << 20)/sizeof(Cpp_Token); + array.tokens = push_array(&global_part, Cpp_Token, array.max_count); + + Cpp_Lex_Data S = cpp_lex_data_init(); + Cpp_Lex_Result result = cpp_lex_step(&S, mem, size+1, HAS_NULL_TERM, &array, NO_OUT_LIMIT); + + if (result == LexResult_Finished){ + int32_t new_wrap_width = default_wrap_width; + int32_t new_min_base_width = default_min_base_width; + + for (int32_t i = 0; i < array.count; ++i){ + Config_Line config_line = read_config_line(array, &i); + + if (config_line.read_success){ + Config_Item item = get_config_item(config_line, mem, array); + + config_bool_var(item, "enable_code_wrapping", 0, &enable_code_wrapping); + config_bool_var(item, "automatically_adjust_wrapping", 0, &automatically_adjust_wrapping); + config_bool_var(item, "automatically_indent_text_on_save", 0, &automatically_indent_text_on_save); + + config_int_var(item, "default_wrap_width", 0, &new_wrap_width); + config_int_var(item, "default_min_base_width", 0, &new_min_base_width); + + config_string_var(item, "default_theme_name", 0, &default_theme_name); + config_string_var(item, "default_font_name", 0, &default_font_name); + config_string_var(item, "user_name", 0, &user_name); + } + } + adjust_all_buffer_wrap_widths(app, new_wrap_width, new_min_base_width); + default_wrap_width = new_wrap_width; + default_min_base_width = new_min_base_width; + } + } + + end_temp_memory(temp); + } + else{ + print_message(app, literal("Did not find config.4coder, using default settings\n")); + } +} + + +// +// Framework Init Functions +// + +void +init_memory(Application_Links *app){ + int32_t part_size = (32 << 20); + int32_t general_size = (4 << 20); + + void *part_mem = memory_allocate(app, part_size); + global_part = make_part(part_mem, part_size); + + void *general_mem = memory_allocate(app, general_size); + general_memory_open(&global_general, general_mem, general_size); +} + +static void +default_4coder_initialize(Application_Links *app){ + init_memory(app); + process_config_file(app); + change_theme(app, default_theme_name.str, default_theme_name.size); + change_font(app, default_font_name.str, default_font_name.size, 1); +} + +static void +default_4coder_side_by_side_panels(Application_Links *app){ + exec_command(app, open_panel_vsplit); + exec_command(app, hide_scrollbar); + exec_command(app, change_active_panel); + exec_command(app, hide_scrollbar); +} + +static void +default_4coder_one_panel(Application_Links *app){ + exec_command(app, hide_scrollbar); +} + +static void +default_4coder_full_width_bottom_side_by_side_panels(Application_Links){ + // TODO(allen): +} + #endif // BOTTOM diff --git a/4coder_default_hooks.cpp b/4coder_default_hooks.cpp new file mode 100644 index 00000000..7ae0efd4 --- /dev/null +++ b/4coder_default_hooks.cpp @@ -0,0 +1,255 @@ +/* +4coder_default_hooks.cpp - Sets up the hooks for the default framework. + +TYPE: 'internal-for-default-system' +*/ + +// TOP + +#if !defined(FCODER_DEFAULT_HOOKS_CPP) +#define FCODER_DEFAULT_HOOKS_CPP + +#include "4coder_default_framework.h" +#include "4coder_helper/4coder_bind_helper.h" + +HOOK_SIG(default_start){ + default_4coder_initialize(app); + default_4coder_side_by_side_panels(app); + + // no meaning for return + return(0); +} + +// NOTE(allen|a4.0.9): All command calls can now go through this hook +// If this hook is not implemented a default behavior of calling the +// command is used. It is important to note that paste_next does not +// work without this hook. +// NOTE(allen|a4.0.10): As of this version the word_complete command +// also relies on this particular command caller hook. +COMMAND_CALLER_HOOK(default_command_caller){ + View_Summary view = get_active_view(app, AccessAll); + + view_paste_index[view.view_id].next_rewrite = 0; + exec_command(app, cmd); + view_paste_index[view.view_id].rewrite = view_paste_index[view.view_id].next_rewrite; + + return(0); +} + +HOOK_SIG(default_exit){ + // if this returns zero it cancels the exit. + return(1); +} + +HOOK_SIG(default_view_adjust){ + int32_t count = 0; + int32_t new_wrap_width = 0; + for (View_Summary view = get_view_first(app, AccessAll); + view.exists; + get_view_next(app, &view, AccessAll)){ + new_wrap_width += view.view_region.x1 - view.view_region.x0; + ++count; + } + + new_wrap_width /= count; + new_wrap_width = (int32_t)(new_wrap_width * .9f); + + int32_t new_min_base_width = (int32_t)(new_wrap_width * .77f); + if (automatically_adjust_wrapping){ + adjust_all_buffer_wrap_widths(app, new_wrap_width, new_min_base_width); + default_wrap_width = new_wrap_width; + default_min_base_width = new_min_base_width; + } + + // no meaning for return + return(0); +} + +// TODO(allen): Eliminate this hook if you can. +OPEN_FILE_HOOK_SIG(default_file_settings){ + // NOTE(allen|a4.0.8): The get_parameter_buffer was eliminated + // and instead the buffer is passed as an explicit parameter through + // the function call. That is where buffer_id comes from here. + uint32_t access = AccessAll; + Buffer_Summary buffer = get_buffer(app, buffer_id, access); + Assert(buffer.exists); + + int32_t treat_as_code = 0; + int32_t wrap_lines = 1; + + if (buffer.file_name && buffer.size < (16 << 20)){ + String ext = file_extension(make_string(buffer.file_name, buffer.file_name_len)); + + if (match_ss(ext, make_lit_string("cpp")) || + match_ss(ext, make_lit_string("h")) || + match_ss(ext, make_lit_string("c")) || + match_ss(ext, make_lit_string("hpp"))){ + treat_as_code = 1; + } + } + + if (treat_as_code){ + wrap_lines = 0; + } + if (buffer.file_name[0] == '*'){ + wrap_lines = 0; + } + + buffer_set_setting(app, &buffer, BufferSetting_WrapPosition, default_wrap_width); + buffer_set_setting(app, &buffer, BufferSetting_MinimumBaseWrapPosition, default_min_base_width); + buffer_set_setting(app, &buffer, BufferSetting_MapID, (treat_as_code)?((int32_t)default_code_map):((int32_t)mapid_file)); + + if (treat_as_code && enable_code_wrapping && buffer.size < (1 << 18)){ + // NOTE(allen|a4.0.12): There is a little bit of grossness going on here. + // If we set BufferSetting_Lex to true, it will launch a lexing job. + // If a lexing job is active when we set BufferSetting_VirtualWhitespace, the call can fail. + // Unfortunantely without tokens virtual whitespace doesn't really make sense. + // So for now I have it automatically turning on lexing when virtual whitespace is turned on. + // Cleaning some of that up is a goal for future versions. + buffer_set_setting(app, &buffer, BufferSetting_WrapLine, 1); + buffer_set_setting(app, &buffer, BufferSetting_VirtualWhitespace, 1); + } + else{ + buffer_set_setting(app, &buffer, BufferSetting_WrapLine, wrap_lines); + buffer_set_setting(app, &buffer, BufferSetting_Lex, treat_as_code); + } + + // no meaning for return + return(0); +} + +OPEN_FILE_HOOK_SIG(default_file_save){ + uint32_t access = AccessAll; + Buffer_Summary buffer = get_buffer(app, buffer_id, access); + Assert(buffer.exists); + +#if defined(FCODER_AUTO_INDENT_CPP) + int32_t is_virtual = 0; + if (automatically_indent_text_on_save && buffer_get_setting(app, &buffer, BufferSetting_VirtualWhitespace, &is_virtual)){ + if (is_virtual){ + auto_tab_whole_file_by_summary(app, &buffer); + } + } +#endif + + // no meaning for return + return(0); +} + +// NOTE(allen|a4.0.9): The input filter allows you to modify the input +// to a frame before 4coder starts processing it at all. +// +// Right now it only has access to the mouse state, but it will be +// extended to have access to the key presses soon. +INPUT_FILTER_SIG(default_suppress_mouse_filter){ + if (suppressing_mouse){ + *mouse = null_mouse_state; + mouse->x = -100; + mouse->y = -100; + } +} + +// NOTE(allen|a4): scroll rule information +// +// The parameters: +// target_x, target_y +// This is where the view would like to be for the purpose of +// following the cursor, doing mouse wheel work, etc. +// +// scroll_x, scroll_y +// These are pointers to where the scrolling actually is. If you bind +// the scroll rule it is you have to update these in some way to move +// the actual location of the scrolling. +// +// view_id +// This corresponds to which view is computing it's new scrolling position. +// This id DOES correspond to the views that View_Summary contains. +// This will always be between 1 and 16 (0 is a null id). +// See below for an example of having state that carries across scroll udpates. +// +// is_new_target +// If the target of the view is different from the last target in either x or y +// this is true, otherwise it is false. +// +// The return: +// Should be true if and only if scroll_x or scroll_y are changed. +// +// Don't try to use the app pointer in a scroll rule, you're asking for trouble. +// +// If you don't bind scroll_rule, nothing bad will happen, yo will get default +// 4coder scrolling behavior. +// + +struct Scroll_Velocity{ + float x, y; +}; + +Scroll_Velocity scroll_velocity_[16] = {0}; +Scroll_Velocity *scroll_velocity = scroll_velocity_ - 1; + +static int32_t +smooth_camera_step(float target, float *current, float *vel, float S, float T){ + int32_t result = 0; + float curr = *current; + float v = *vel; + if (curr != target){ + if (curr > target - .1f && curr < target + .1f){ + curr = target; + v = 1.f; + } + else{ + float L = curr + T*(target - curr); + + int32_t sign = (target > curr) - (target < curr); + float V = curr + sign*v; + + if (sign > 0) curr = (LV)?(L):(V); + + if (curr == V){ + v *= S; + } + } + + *current = curr; + *vel = v; + result = 1; + } + return(result); +} + +SCROLL_RULE_SIG(smooth_scroll_rule){ + Scroll_Velocity *velocity = scroll_velocity + view_id; + int32_t result = 0; + if (velocity->x == 0.f){ + velocity->x = 1.f; + velocity->y = 1.f; + } + + if (smooth_camera_step(target_y, scroll_y, &velocity->y, 80.f, 1.f/2.f)){ + result = 1; + } + if (smooth_camera_step(target_x, scroll_x, &velocity->x, 80.f, 1.f/2.f)){ + result = 1; + } + + return(result); +} + +static void +set_all_default_hooks(Bind_Helper *context){ + set_hook(context, hook_start, default_start); + set_hook(context, hook_exit, default_exit); + set_hook(context, hook_view_size_change, default_view_adjust); + + set_open_file_hook(context, default_file_settings); + set_save_file_hook(context, default_file_save); + set_command_caller(context, default_command_caller); + set_input_filter(context, default_suppress_mouse_filter); + set_scroll_rule(context, smooth_scroll_rule); +} + +#endif + +// BOTTOM + diff --git a/4coder_default_include.cpp b/4coder_default_include.cpp index 038017dc..2dc6ad68 100644 --- a/4coder_default_include.cpp +++ b/4coder_default_include.cpp @@ -1,16 +1,28 @@ +/* +4coder_default_include.cpp - Default set of commands and setup used in 4coder. -#ifndef FCODER_DEFAULT_INCLUDE -#define FCODER_DEFAULT_INCLUDE +TYPE: 'major-system-include' +*/ + +// TOP + +#if !defined(FCODER_DEFAULT_INCLUDE_CPP) +#define FCODER_DEFAULT_INCLUDE_CPP + +#include "4coder_function_list.cpp" #include "4coder_API/custom.h" - -#include "4coder_jump_parsing.cpp" - #include "4coder_default_framework.h" #include "4coder_base_commands.cpp" #include "4coder_auto_indent.cpp" #include "4coder_search.cpp" +#include "4coder_jump_parsing.cpp" +#include "4coder_clipboard.cpp" +#include "4coder_system_command.cpp" +#include "4coder_build_commands.cpp" +#include "4coder_project_commands.cpp" +#include "4coder_default_hooks.cpp" #include "4coder_helper/4coder_bind_helper.h" #include "4coder_helper/4coder_helper.h" @@ -45,157 +57,80 @@ basic_seek(Application_Links *app, int32_t seek_type, uint32_t flags){ view_set_cursor(app, &view, seek_pos(pos), true); } -#define seek_command(n, dir, flags) CUSTOM_COMMAND_SIG(seek_##n##_##dir){ basic_seek(app, dir, flags); } - #define right true #define left false -seek_command(whitespace, right, BoundaryWhitespace) -seek_command(whitespace, left, BoundaryWhitespace) -seek_command(token, right, BoundaryToken) -seek_command(token, left, BoundaryToken) -seek_command(white_or_token, right, BoundaryToken | BoundaryWhitespace) -seek_command(white_or_token, left, BoundaryToken | BoundaryWhitespace) -seek_command(alphanumeric, right, BoundaryAlphanumeric) -seek_command(alphanumeric, left, BoundaryAlphanumeric) -seek_command(alphanumeric_or_camel, right, BoundaryAlphanumeric | BoundaryCamelCase) -seek_command(alphanumeric_or_camel, left, BoundaryAlphanumeric | BoundaryCamelCase) +CUSTOM_COMMAND_SIG(seek_whitespace_right){ basic_seek(app, right, BoundaryWhitespace); } +CUSTOM_COMMAND_SIG(seek_whitespace_left){ basic_seek(app, left, BoundaryWhitespace); } +CUSTOM_COMMAND_SIG(seek_token_right){ basic_seek(app, right, BoundaryToken); } +CUSTOM_COMMAND_SIG(seek_token_left){ basic_seek(app, left, BoundaryToken); } +CUSTOM_COMMAND_SIG(seek_white_or_token_right){basic_seek(app, right, BoundaryToken | BoundaryWhitespace);} +CUSTOM_COMMAND_SIG(seek_white_or_token_left){basic_seek(app, left, BoundaryToken | BoundaryWhitespace);} +CUSTOM_COMMAND_SIG(seek_alphanumeric_right){ basic_seek(app, right, BoundaryAlphanumeric); } +CUSTOM_COMMAND_SIG(seek_alphanumeric_left){ basic_seek(app, left, BoundaryAlphanumeric); } +CUSTOM_COMMAND_SIG(seek_alphanumeric_or_camel_right){ basic_seek(app, right, BoundaryAlphanumeric | BoundaryCamelCase); } +CUSTOM_COMMAND_SIG(seek_alphanumeric_or_camel_left){ basic_seek(app, left, BoundaryAlphanumeric | BoundaryCamelCase); } #undef right #undef left // -// Clipboard +// Fast Deletes // -static bool32 -clipboard_copy(Application_Links *app, int32_t start, int32_t end, Buffer_Summary *buffer_out, - uint32_t access){ +CUSTOM_COMMAND_SIG(backspace_word){ + uint32_t access = AccessOpen; + View_Summary view = get_active_view(app, access); Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); - bool32 result = 0; if (buffer.exists){ - if (0 <= start && start <= end && end <= buffer.size){ - int32_t size = (end - start); - char *str = (char*)app->memory; - - if (size <= app->memory_size){ - buffer_read_range(app, &buffer, start, end, str); - clipboard_post(app, 0, str, size); - if (buffer_out){*buffer_out = buffer;} - result = 1; - } - } + int32_t pos2 = 0, pos1 = 0; + + pos2 = view.cursor.pos; + exec_command(app, seek_alphanumeric_left); + refresh_view(app, &view); + pos1 = view.cursor.pos; + + buffer_replace_range(app, &buffer, pos1, pos2, 0, 0); } - - return(result); } -static int32_t -clipboard_cut(Application_Links *app, int32_t start, int32_t end, Buffer_Summary *buffer_out, uint32_t access){ - Buffer_Summary buffer = {0}; - int32_t result = false; +CUSTOM_COMMAND_SIG(delete_word){ + uint32_t access = AccessOpen; - if (clipboard_copy(app, start, end, &buffer, access)){ - buffer_replace_range(app, &buffer, start, end, 0, 0); - if (buffer_out){*buffer_out = buffer;} - } - - return(result); -} - -CUSTOM_COMMAND_SIG(copy){ - uint32_t access = AccessProtected; View_Summary view = get_active_view(app, access); - Range range = get_range(&view); - clipboard_copy(app, range.min, range.max, 0, access); + Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); + + if (buffer.exists){ + int32_t pos2 = 0, pos1 = 0; + + pos1 = view.cursor.pos; + exec_command(app, seek_alphanumeric_right); + refresh_view(app, &view); + pos2 = view.cursor.pos; + + buffer_replace_range(app, &buffer, pos1, pos2, 0, 0); + } } -CUSTOM_COMMAND_SIG(cut){ +CUSTOM_COMMAND_SIG(snipe_token_or_word){ uint32_t access = AccessOpen; + View_Summary view = get_active_view(app, access); - Range range = get_range(&view); - clipboard_cut(app, range.min, range.max, 0, access); + Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); + + int32_t pos1 = buffer_boundary_seek(app, &buffer, view.cursor.pos, 0, BoundaryToken | BoundaryWhitespace); + int32_t pos2 = buffer_boundary_seek(app, &buffer, pos1, 1, BoundaryToken | BoundaryWhitespace); + + Range range = make_range(pos1, pos2); + buffer_replace_range(app, &buffer, range.start, range.end, 0, 0); } -CUSTOM_COMMAND_SIG(paste){ - uint32_t access = AccessOpen; - int32_t count = clipboard_count(app, 0); - if (count > 0){ - View_Summary view = get_active_view(app, access); - - view_paste_index[view.view_id].next_rewrite = RewritePaste; - - int32_t paste_index = 0; - view_paste_index[view.view_id].index = paste_index; - - int32_t len = clipboard_index(app, 0, paste_index, 0, 0); - char *str = 0; - - if (len <= app->memory_size){ - str = (char*)app->memory; - } - - if (str){ - clipboard_index(app, 0, paste_index, str, len); - - Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); - int32_t pos = view.cursor.pos; - buffer_replace_range(app, &buffer, pos, pos, str, len); - view_set_mark(app, &view, seek_pos(pos)); - view_set_cursor(app, &view, seek_pos(pos + len), true); - - // TODO(allen): Send this to all views. - Theme_Color paste; - paste.tag = Stag_Paste; - get_theme_colors(app, &paste, 1); - view_post_fade(app, &view, 0.667f, pos, pos + len, paste.color); - } - } -} -CUSTOM_COMMAND_SIG(paste_next){ - uint32_t access = AccessOpen; - int32_t count = clipboard_count(app, 0); - if (count > 0){ - View_Summary view = get_active_view(app, access); - - if (view_paste_index[view.view_id].rewrite == RewritePaste){ - view_paste_index[view.view_id].next_rewrite = RewritePaste; - - int32_t paste_index = view_paste_index[view.view_id].index + 1; - view_paste_index[view.view_id].index = paste_index; - - int32_t len = clipboard_index(app, 0, paste_index, 0, 0); - char *str = 0; - - if (len <= app->memory_size){ - str = (char*)app->memory; - } - - if (str){ - clipboard_index(app, 0, paste_index, str, len); - - Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); - Range range = get_range(&view); - int32_t pos = range.min; - - buffer_replace_range(app, &buffer, range.min, range.max, str, len); - view_set_cursor(app, &view, seek_pos(pos + len), true); - - // TODO(allen): Send this to all views. - Theme_Color paste; - paste.tag = Stag_Paste; - get_theme_colors(app, &paste, 1); - view_post_fade(app, &view, 0.667f, pos, pos + len, paste.color); - } - } - else{ - exec_command(app, paste); - } - } -} +// +// Clipboard + Indent Combo Command +// CUSTOM_COMMAND_SIG(paste_and_indent){ exec_command(app, paste); @@ -207,7 +142,10 @@ CUSTOM_COMMAND_SIG(paste_next_and_indent){ exec_command(app, auto_tab_range); } -////////////////////////// + +// +// Combined Write Commands +// static void write_string(Application_Links *app, View_Summary *view, Buffer_Summary *buffer, String string){ @@ -302,60 +240,49 @@ CUSTOM_COMMAND_SIG(if0_off){ } } - -// -// Fast Deletes -// - -CUSTOM_COMMAND_SIG(backspace_word){ - uint32_t access = AccessOpen; +CUSTOM_COMMAND_SIG(write_todo){ + char space[512]; + String str = make_fixed_width_string(space); - View_Summary view = get_active_view(app, access); - Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); - - if (buffer.exists){ - int32_t pos2 = 0, pos1 = 0; - - pos2 = view.cursor.pos; - exec_command(app, seek_alphanumeric_left); - refresh_view(app, &view); - pos1 = view.cursor.pos; - - buffer_replace_range(app, &buffer, pos1, pos2, 0, 0); + char *name = 0; + int32_t name_len = 0; + if (get_current_name(&name, &name_len)){ + append(&str, "// TODO("); + append(&str, make_string(name, name_len)); + append(&str, "): "); } -} - -CUSTOM_COMMAND_SIG(delete_word){ - uint32_t access = AccessOpen; - - View_Summary view = get_active_view(app, access); - Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); - - if (buffer.exists){ - int32_t pos2 = 0, pos1 = 0; - - pos1 = view.cursor.pos; - exec_command(app, seek_alphanumeric_right); - refresh_view(app, &view); - pos2 = view.cursor.pos; - - buffer_replace_range(app, &buffer, pos1, pos2, 0, 0); + else{ + append(&str, "// TODO: "); } + + write_string(app, str); } -CUSTOM_COMMAND_SIG(snipe_token_or_word){ - uint32_t access = AccessOpen; +CUSTOM_COMMAND_SIG(write_note){ + char space[512]; + String str = make_fixed_width_string(space); - View_Summary view = get_active_view(app, access); - Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); + char *name = 0; + int32_t name_len = 0; + if (get_current_name(&name, &name_len)){ + append(&str, "// NOTE("); + append(&str, make_string(name, name_len)); + append(&str, "): "); + } + else{ + append(&str, "// NOTE: "); + } - int32_t pos1 = buffer_boundary_seek(app, &buffer, view.cursor.pos, 0, BoundaryToken | BoundaryWhitespace); - int32_t pos2 = buffer_boundary_seek(app, &buffer, pos1, 1, BoundaryToken | BoundaryWhitespace); - - Range range = make_range(pos1, pos2); - buffer_replace_range(app, &buffer, range.start, range.end, 0, 0); + write_string(app, str); } +CUSTOM_COMMAND_SIG(write_block){ + write_string(app, make_lit_string("/* */")); +} + +CUSTOM_COMMAND_SIG(write_zero_struct){ + write_string(app, make_lit_string(" = {0};")); +} // @@ -413,1289 +340,51 @@ CUSTOM_COMMAND_SIG(open_in_other){ // -// System Commands +// Execute Arbitrary Command // -static char out_buffer_space[1024]; -static char command_space[1024]; -static char hot_directory_space[1024]; - -CUSTOM_COMMAND_SIG(execute_any_cli){ - Query_Bar bar_out = {0}; - Query_Bar bar_cmd = {0}; +CUSTOM_COMMAND_SIG(execute_arbitrary_command){ + // NOTE(allen): This isn't a super powerful version of this command, I will expand + // upon it so that it has all the cmdid_* commands by default. However, with this + // as an example you have everything you need to make it work already. You could + // even use app->memory to create a hash table in the start hook. + Query_Bar bar; + char space[1024]; + bar.prompt = make_lit_string("Command: "); + bar.string = make_fixed_width_string(space); - bar_out.prompt = make_lit_string("Output Buffer: "); - bar_out.string = make_fixed_width_string(out_buffer_space); - if (!query_user_string(app, &bar_out)) return; + if (!query_user_string(app, &bar)) return; - bar_cmd.prompt = make_lit_string("Command: "); - bar_cmd.string = make_fixed_width_string(command_space); - if (!query_user_string(app, &bar_cmd)) return; + // NOTE(allen): Here I chose to end this query bar because when I call another + // command it might ALSO have query bars and I don't want this one hanging + // around at that point. Since the bar exists on my stack the result of the query + // is still available in bar.string though. + end_query_bar(app, &bar, 0); - String hot_directory = make_fixed_width_string(hot_directory_space); - hot_directory.size = directory_get_hot(app, hot_directory.str, hot_directory.memory_size); - - uint32_t access = AccessAll; - View_Summary view = get_active_view(app, access); - - exec_system_command(app, &view, buffer_identifier(bar_out.string.str, bar_out.string.size), hot_directory.str, hot_directory.size, bar_cmd.string.str, bar_cmd.string.size, CLI_OverlapWithConflict | CLI_CursorAtEnd); -} - -CUSTOM_COMMAND_SIG(execute_previous_cli){ - String out_buffer = make_string_slowly(out_buffer_space); - String cmd = make_string_slowly(command_space); - String hot_directory = make_string_slowly(hot_directory_space); - - if (out_buffer.size > 0 && cmd.size > 0 && hot_directory.size > 0){ - uint32_t access = AccessAll; - View_Summary view = get_active_view(app, access); - - exec_system_command(app, &view, buffer_identifier(out_buffer.str, out_buffer.size), hot_directory.str, hot_directory.size, cmd.str, cmd.size, CLI_OverlapWithConflict | CLI_CursorAtEnd); + if (match_ss(bar.string, make_lit_string("load project"))){ + exec_command(app, load_project); } -} - - -// -// Default Building Stuff -// - -// NOTE(allen|a4.0.9): This is provided to establish a default method of getting -// a "build directory". This function tries to setup the build directory in the -// directory of the given buffer, if it cannot get that information it get's the -// 4coder hot directory. -// -// There is no requirement that a custom build system in 4coder actually use the -// directory given by this function. -enum Get_Build_Directory_Result{ - BuildDir_None, - BuildDir_AtFile, - BuildDir_AtHot -}; - -static int32_t -get_build_directory(Application_Links *app, Buffer_Summary *buffer, String *dir_out){ - int32_t result = BuildDir_None; - - if (buffer && buffer->file_name){ - if (!match_cc(buffer->file_name, buffer->buffer_name)){ - String dir = make_string_cap(buffer->file_name, - buffer->file_name_len, - buffer->file_name_len+1); - remove_last_folder(&dir); - append_ss(dir_out, dir); - result = BuildDir_AtFile; - } + else if (match_ss(bar.string, make_lit_string("open all code"))){ + exec_command(app, open_all_code); } - - if (!result){ - int32_t len = directory_get_hot(app, dir_out->str, - dir_out->memory_size - dir_out->size); - if (len + dir_out->size < dir_out->memory_size){ - dir_out->size += len; - result = BuildDir_AtHot; - } + else if(match_ss(bar.string, make_lit_string("close all code"))){ + exec_command(app, close_all_code); } - - return(result); -} - -// TODO(allen): Better names for the "standard build search" family. -static int32_t -standard_build_search(Application_Links *app, View_Summary *view, Buffer_Summary *active_buffer, String *dir, String *command, int32_t perform_backup, int32_t use_path_in_command, String filename, String commandname){ - int32_t result = false; - - for(;;){ - int32_t old_size = dir->size; - append_ss(dir, filename); - - if (file_exists(app, dir->str, dir->size)){ - dir->size = old_size; - - if (use_path_in_command){ - append_s_char(command, '"'); - append_ss(command, *dir); - append_ss(command, commandname); - append_s_char(command, '"'); - } - else{ - append_ss(command, commandname); - } - - char space[512]; - String message = make_fixed_width_string(space); - append_ss(&message, make_lit_string("Building with: ")); - append_ss(&message, *command); - append_s_char(&message, '\n'); - print_message(app, message.str, message.size); - - exec_system_command(app, view, buffer_identifier(literal("*compilation*")), dir->str, dir->size, command->str, command->size, CLI_OverlapWithConflict); - result = true; - break; - } - dir->size = old_size; - - if (directory_cd(app, dir->str, &dir->size, dir->memory_size, literal("..")) == 0){ - if (perform_backup){ - dir->size = directory_get_hot(app, dir->str, dir->memory_size); - char backup_space[256]; - String backup_command = make_fixed_width_string(backup_space); - append_ss(&backup_command, make_lit_string("echo could not find ")); - append_ss(&backup_command, filename); - exec_system_command(app, view, buffer_identifier(literal("*compilation*")), dir->str, dir->size, backup_command.str, backup_command.size, CLI_OverlapWithConflict); - } - break; - } + else if (match_ss(bar.string, make_lit_string("open menu"))){ + exec_command(app, cmdid_open_menu); } - - return(result); -} - -#if defined(_WIN32) - -// NOTE(allen): Build search rule for windows. -static int32_t -execute_standard_build_search(Application_Links *app, View_Summary *view, - Buffer_Summary *active_buffer, - String *dir, String *command, int32_t perform_backup){ - int32_t result = standard_build_search(app, view, active_buffer, dir, command, perform_backup, true, make_lit_string("build.bat"), make_lit_string("build")); - return(result); -} - -#elif defined(__linux__) - -// NOTE(allen): Build search rule for linux. -static int32_t -execute_standard_build_search(Application_Links *app, View_Summary *view, Buffer_Summary *active_buffer, String *dir, String *command, bool32 perform_backup){ - char dir_space[512]; - String dir_copy = make_fixed_width_string(dir_space); - copy(&dir_copy, *dir); - - int32_t result = standard_build_search(app, view, active_buffer, dir, command, 0, 1, make_lit_string("build.sh"), make_lit_string("build.sh")); - - if (!result){ - result = standard_build_search(app, view, active_buffer, &dir_copy, command, perform_backup, 0, make_lit_string("Makefile"), make_lit_string("make")); + else if (match_ss(bar.string, make_lit_string("dos lines"))){ + exec_command(app, eol_dosify); } - - return(result); -} - -#else -# error No build search rule for this platform. -#endif - - -// NOTE(allen): This searches first using the active file's directory, -// then if no build script is found, it searches from 4coders hot directory. -static void -execute_standard_build(Application_Links *app, View_Summary *view, Buffer_Summary *active_buffer){ - char dir_space[512]; - String dir = make_fixed_width_string(dir_space); - - char command_str_space[512]; - String command = make_fixed_width_string(command_str_space); - - int32_t build_dir_type = get_build_directory(app, active_buffer, &dir); - - if (build_dir_type == BuildDir_AtFile){ - if (!execute_standard_build_search(app, view, active_buffer, &dir, &command, false)){ - dir.size = 0; - command.size = 0; - build_dir_type = get_build_directory(app, 0, &dir); - } - } - - if (build_dir_type == BuildDir_AtHot){ - execute_standard_build_search(app, view, active_buffer, &dir, &command, true); - } -} - -CUSTOM_COMMAND_SIG(build_search){ - uint32_t access = AccessAll; - View_Summary view = get_active_view(app, access); - Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); - execute_standard_build(app, &view, &buffer); - prev_location = null_location; - lock_jump_buffer(literal("*compilation*")); -} - -#define GET_COMP_BUFFER(app) get_buffer_by_name(app, literal("*compilation*"), AccessAll) - -static View_Summary -get_or_open_build_panel(Application_Links *app){ - View_Summary view = {0}; - - Buffer_Summary buffer = GET_COMP_BUFFER(app); - if (buffer.exists){ - view = get_first_view_with_buffer(app, buffer.buffer_id); - } - if (!view.exists){ - view = open_special_note_view(app); - } - - return(view); -} - -static void -set_fancy_compilation_buffer_font(Application_Links *app){ - Buffer_Summary comp_buffer = get_buffer_by_name(app, literal("*compilation*"), AccessAll); - buffer_set_font(app, &comp_buffer, literal("Inconsolata")); -} - -CUSTOM_COMMAND_SIG(build_in_build_panel){ - uint32_t access = AccessAll; - View_Summary view = get_active_view(app, access); - Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); - - View_Summary build_view = get_or_open_build_panel(app); - - execute_standard_build(app, &build_view, &buffer); - set_fancy_compilation_buffer_font(app); - - prev_location = null_location; - lock_jump_buffer(literal("*compilation*")); -} - -CUSTOM_COMMAND_SIG(close_build_panel){ - close_special_note_view(app); -} - -CUSTOM_COMMAND_SIG(change_to_build_panel){ - View_Summary view = open_special_note_view(app, false); - - if (!view.exists){ - Buffer_Summary buffer = GET_COMP_BUFFER(app); - if (buffer.exists){ - view = open_special_note_view(app); - view_set_buffer(app, &view, buffer.buffer_id, 0); - } - } - - if (view.exists){ - set_active_view(app, &view); - } -} - -// NOTE(allen|a4): scroll rule information -// -// The parameters: -// target_x, target_y -// This is where the view would like to be for the purpose of -// following the cursor, doing mouse wheel work, etc. -// -// scroll_x, scroll_y -// These are pointers to where the scrolling actually is. If you bind -// the scroll rule it is you have to update these in some way to move -// the actual location of the scrolling. -// -// view_id -// This corresponds to which view is computing it's new scrolling position. -// This id DOES correspond to the views that View_Summary contains. -// This will always be between 1 and 16 (0 is a null id). -// See below for an example of having state that carries across scroll udpates. -// -// is_new_target -// If the target of the view is different from the last target in either x or y -// this is true, otherwise it is false. -// -// The return: -// Should be true if and only if scroll_x or scroll_y are changed. -// -// Don't try to use the app pointer in a scroll rule, you're asking for trouble. -// -// If you don't bind scroll_rule, nothing bad will happen, yo will get default -// 4coder scrolling behavior. -// - -struct Scroll_Velocity{ - float x, y; -}; - -Scroll_Velocity scroll_velocity_[16] = {0}; -Scroll_Velocity *scroll_velocity = scroll_velocity_ - 1; - -static int32_t -smooth_camera_step(float target, float *current, float *vel, float S, float T){ - int32_t result = 0; - float curr = *current; - float v = *vel; - if (curr != target){ - if (curr > target - .1f && curr < target + .1f){ - curr = target; - v = 1.f; - } - else{ - float L = curr + T*(target - curr); - - int32_t sign = (target > curr) - (target < curr); - float V = curr + sign*v; - - if (sign > 0) curr = (LV)?(L):(V); - - if (curr == V){ - v *= S; - } - } - - *current = curr; - *vel = v; - result = 1; - } - return(result); -} - -SCROLL_RULE_SIG(smooth_scroll_rule){ - Scroll_Velocity *velocity = scroll_velocity + view_id; - int32_t result = 0; - if (velocity->x == 0.f){ - velocity->x = 1.f; - velocity->y = 1.f; - } - - if (smooth_camera_step(target_y, scroll_y, &velocity->y, 80.f, 1.f/2.f)){ - result = 1; - } - if (smooth_camera_step(target_x, scroll_x, &velocity->x, 80.f, 1.f/2.f)){ - result = 1; - } - - return(result); -} - -// NOTE(allen|a4.0.9): All command calls can now go through this hook -// If this hook is not implemented a default behavior of calling the -// command is used. It is important to note that paste_next does not -// work without this hook. -// NOTE(allen|a4.0.10): As of this version the word_complete command -// also relies on this particular command caller hook. -COMMAND_CALLER_HOOK(default_command_caller){ - View_Summary view = get_active_view(app, AccessAll); - - view_paste_index[view.view_id].next_rewrite = 0; - exec_command(app, cmd); - view_paste_index[view.view_id].rewrite = view_paste_index[view.view_id].next_rewrite; - - return(0); -} - -struct Config_Line{ - Cpp_Token id_token; - Cpp_Token subscript_token; - Cpp_Token eq_token; - Cpp_Token val_token; - int32_t val_array_start; - int32_t val_array_end; - int32_t val_array_count; - bool32 read_success; -}; - -struct Config_Item{ - Config_Line line; - Cpp_Token_Array array; - char *mem; - String id; - int32_t subscript_index; - bool32 has_subscript; -}; - -struct Config_Array_Reader{ - Cpp_Token_Array array; - char *mem; - int32_t i; - int32_t val_array_end; - bool32 good; -}; - -static Cpp_Token -read_config_token(Cpp_Token_Array array, int32_t *i_ptr){ - Cpp_Token token = {0}; - - int32_t i = *i_ptr; - - for (; i < array.count; ++i){ - Cpp_Token comment_token = array.tokens[i]; - if (comment_token.type != CPP_TOKEN_COMMENT){ - break; - } - } - - if (i < array.count){ - token = array.tokens[i]; - } - - *i_ptr = i; - - return(token); -} - -static Config_Line -read_config_line(Cpp_Token_Array array, int32_t *i_ptr){ - Config_Line config_line = {0}; - - int32_t i = *i_ptr; - - config_line.id_token = read_config_token(array, &i); - if (config_line.id_token.type == CPP_TOKEN_IDENTIFIER){ - ++i; - if (i < array.count){ - Cpp_Token token = read_config_token(array, &i); - - bool32 subscript_success = 1; - if (token.type == CPP_TOKEN_BRACKET_OPEN){ - subscript_success = 0; - ++i; - if (i < array.count){ - config_line.subscript_token = read_config_token(array, &i); - if (config_line.subscript_token.type == CPP_TOKEN_INTEGER_CONSTANT){ - ++i; - if (i < array.count){ - token = read_config_token(array, &i); - if (token.type == CPP_TOKEN_BRACKET_CLOSE){ - ++i; - if (i < array.count){ - token = read_config_token(array, &i); - subscript_success = 1; - } - } - } - } - } - } - - if (subscript_success){ - if (token.type == CPP_TOKEN_EQ){ - config_line.eq_token = read_config_token(array, &i); - ++i; - if (i < array.count){ - Cpp_Token val_token = read_config_token(array, &i); - - bool32 array_success = 1; - if (val_token.type == CPP_TOKEN_BRACE_OPEN){ - array_success = 0; - ++i; - if (i < array.count){ - config_line.val_array_start = i; - - bool32 expecting_array_item = 1; - for (; i < array.count; ++i){ - Cpp_Token array_token = read_config_token(array, &i); - if (array_token.size == 0){ - break; - } - if (array_token.type == CPP_TOKEN_BRACE_CLOSE){ - config_line.val_array_end = i; - array_success = 1; - break; - } - else{ - if (array_token.type == CPP_TOKEN_COMMA){ - if (!expecting_array_item){ - expecting_array_item = 1; - } - else{ - break; - } - } - else{ - if (expecting_array_item){ - expecting_array_item = 0; - ++config_line.val_array_count; - } - } - } - } - } - } - - if (array_success){ - config_line.val_token = val_token; - ++i; - if (i < array.count){ - Cpp_Token semicolon_token = read_config_token(array, &i); - if (semicolon_token.type == CPP_TOKEN_SEMICOLON){ - config_line.read_success = 1; - } - } - } - } - } - } - } - } - - if (!config_line.read_success){ - for (; i < array.count; ++i){ - Cpp_Token token = read_config_token(array, &i); - if (token.type == CPP_TOKEN_SEMICOLON){ - break; - } - } - } - - *i_ptr = i; - - return(config_line); -} - -static Config_Item -get_config_item(Config_Line line, char *mem, Cpp_Token_Array array){ - Config_Item item = {0}; - item.line = line; - item.array = array; - item.mem = mem; - if (line.id_token.size != 0){ - item.id = make_string(mem + line.id_token.start, line.id_token.size); - } - - if (line.subscript_token.size != 0){ - String subscript_str = make_string(mem + line.subscript_token.start,line.subscript_token.size); - item.subscript_index = str_to_int_s(subscript_str); - item.has_subscript = 1; - } - - return(item); -} - -static bool32 -config_var(Config_Item item, char *var_name, int32_t *subscript, uint32_t token_type, void *var_out){ - bool32 result = 0; - bool32 subscript_succes = 1; - if (item.line.val_token.type == token_type){ - if ((var_name == 0 && item.id.size == 0) || match(item.id, var_name)){ - if (subscript){ - if (item.has_subscript){ - *subscript = item.subscript_index; - } - else{ - subscript_succes = 0; - } - } - - if (subscript_succes){ - if (var_out){ - switch (token_type){ - case CPP_TOKEN_BOOLEAN_CONSTANT: - { - *(bool32*)var_out = (item.mem[item.line.val_token.start] == 't'); - }break; - - case CPP_TOKEN_INTEGER_CONSTANT: - { - String val = make_string(item.mem + item.line.val_token.start, item.line.val_token.size); - *(int32_t*)var_out = str_to_int(val); - }break; - - case CPP_TOKEN_STRING_CONSTANT: - { - *(String*)var_out = make_string(item.mem + item.line.val_token.start + 1,item.line.val_token.size - 2); - }break; - - case CPP_TOKEN_BRACE_OPEN: - { - Config_Array_Reader *array_reader = (Config_Array_Reader*)var_out; - array_reader->array = item.array; - array_reader->mem = item.mem; - array_reader->i = item.line.val_array_start; - array_reader->val_array_end = item.line.val_array_end; - array_reader->good = 1; - }break; - } - } - result = 1; - } - } - } - return(result); -} - -static bool32 -config_bool_var(Config_Item item, char *var_name, int32_t *subscript, bool32 *var_out){ - bool32 result = config_var(item, var_name, subscript, CPP_TOKEN_BOOLEAN_CONSTANT, var_out); - return(result); -} - -static bool32 -config_int_var(Config_Item item, char *var_name, int32_t *subscript, int32_t *var_out){ - bool32 result = config_var(item, var_name, subscript, CPP_TOKEN_INTEGER_CONSTANT, var_out); - return(result); -} - -static bool32 -config_string_var(Config_Item item, char *var_name, int32_t *subscript, String *var_out){ - bool32 result = config_var(item, var_name, subscript, CPP_TOKEN_STRING_CONSTANT, var_out); - return(result); -} - -static bool32 -config_array_var(Config_Item item, char *var_name, int32_t *subscript, Config_Array_Reader *array_reader){ - bool32 result = config_var(item, var_name, subscript, CPP_TOKEN_BRACE_OPEN, array_reader); - return(result); -} - -static bool32 -config_array_next_item(Config_Array_Reader *array_reader, Config_Item *item){ - bool32 result = 0; - - for (;array_reader->i < array_reader->val_array_end; - ++array_reader->i){ - Cpp_Token array_token = read_config_token(array_reader->array, &array_reader->i); - if (array_token.size == 0 || array_reader->i >= array_reader->val_array_end){ - break; - } - - if (array_token.type == CPP_TOKEN_BRACE_CLOSE){ - break; - } - - switch (array_token.type){ - case CPP_TOKEN_BOOLEAN_CONSTANT: - case CPP_TOKEN_INTEGER_CONSTANT: - case CPP_TOKEN_STRING_CONSTANT: - { - Config_Line line = {0}; - line.val_token = array_token; - line.read_success = 1; - *item = get_config_item(line, array_reader->mem, array_reader->array); - result = 1; - ++array_reader->i; - goto doublebreak; - }break; - } - } - doublebreak:; - - array_reader->good = result; - return(result); -} - -static bool32 -config_array_good(Config_Array_Reader *array_reader){ - bool32 result = (array_reader->good); - return(result); -} - -// NOTE(allen|a4.0.12): A primordial config system (actually really hate this but it seems best at least right now... arg) - -static bool32 enable_code_wrapping = 1; -static bool32 automatically_adjust_wrapping = 1; -static int32_t default_wrap_width = 672; -static int32_t default_min_base_width = 550; -static bool32 automatically_indent_text_on_save = 1; - -static String default_theme_name = make_lit_string("4coder"); -static String default_font_name = make_lit_string("Liberation Sans"); - -#include - -static void -adjust_all_buffer_wrap_widths(Application_Links *app, int32_t wrap_widths, int32_t min_base_width){ - for (Buffer_Summary buffer = get_buffer_first(app, AccessAll); - buffer.exists; - get_buffer_next(app, &buffer, AccessAll)){ - buffer_set_setting(app, &buffer, BufferSetting_WrapPosition, wrap_widths); - buffer_set_setting(app, &buffer, BufferSetting_MinimumBaseWrapPosition, min_base_width); - } - default_wrap_width = wrap_widths; - default_min_base_width = min_base_width; -} - -static bool32 -file_handle_dump(Partition *part, FILE *file, char **mem_ptr, int32_t *size_ptr){ - bool32 success = 0; - - fseek(file, 0, SEEK_END); - int32_t size = ftell(file); - char *mem = (char*)push_block(part, size+1); - fseek(file, 0, SEEK_SET); - int32_t check_size = (int32_t)fread(mem, 1, size, file); - if (check_size == size){ - mem[size] = 0; - success = 1; - } - - *mem_ptr = mem; - *size_ptr = size; - - return(success); -} - -static void -process_config_file(Application_Links *app){ - Partition *part = &global_part; - FILE *file = fopen("config.4coder", "rb"); - - if (!file){ - char space[256]; - int32_t size = get_4ed_path(app, space, sizeof(space)); - String str = make_string_cap(space, size, sizeof(space)); - append_sc(&str, "/config.4coder"); - terminate_with_null(&str); - file = fopen(str.str, "rb"); - } - - if (file){ - Temp_Memory temp = begin_temp_memory(part); - - char *mem = 0; - int32_t size = 0; - bool32 file_read_success = file_handle_dump(part, file, &mem, &size); - - if (file_read_success){ - fclose(file); - - Cpp_Token_Array array; - array.count = 0; - array.max_count = (1 << 20)/sizeof(Cpp_Token); - array.tokens = push_array(&global_part, Cpp_Token, array.max_count); - - Cpp_Lex_Data S = cpp_lex_data_init(); - Cpp_Lex_Result result = cpp_lex_step(&S, mem, size+1, HAS_NULL_TERM, &array, NO_OUT_LIMIT); - - if (result == LexResult_Finished){ - int32_t new_wrap_width = default_wrap_width; - int32_t new_min_base_width = default_min_base_width; - - for (int32_t i = 0; i < array.count; ++i){ - Config_Line config_line = read_config_line(array, &i); - - if (config_line.read_success){ - Config_Item item = get_config_item(config_line, mem, array); - - config_bool_var(item, "enable_code_wrapping", 0, &enable_code_wrapping); - config_bool_var(item, "automatically_adjust_wrapping", 0, &automatically_adjust_wrapping); - config_bool_var(item, "automatically_indent_text_on_save", 0, &automatically_indent_text_on_save); - - config_int_var(item, "default_wrap_width", 0, &new_wrap_width); - config_int_var(item, "default_min_base_width", 0, &new_min_base_width); - - config_string_var(item, "default_theme_name", 0, &default_theme_name); - config_string_var(item, "default_font_name", 0, &default_font_name); - } - } - adjust_all_buffer_wrap_widths(app, new_wrap_width, new_min_base_width); - } - } - - end_temp_memory(temp); + else if (match_ss(bar.string, make_lit_string("nix lines"))){ + exec_command(app, eol_nixify); } else{ - print_message(app, literal("Did not find config.4coder, using default settings\n")); + print_message(app, literal("unrecognized command\n")); } } -// NOTE(allen): Project system setup - -static char *default_extensions[] = { - "cpp", - "hpp", - "c", - "h", - "cc" -}; - -struct Fkey_Command{ - char command[128]; - char out[128]; - bool32 use_build_panel; -}; - -struct Project{ - char dir_space[256]; - char *dir; - int32_t dir_len; - - char extension_space[256]; - char *extensions[94]; - int32_t extension_count; - - Fkey_Command fkey_commands[16]; - - bool32 close_all_code_when_this_project_closes; - bool32 close_all_files_when_project_opens; -}; - -static Project null_project = {}; -static Project current_project = {}; - -static void -set_project_extensions(Project *project, String src){ - int32_t mode = 0; - int32_t j = 0, k = 0; - for (int32_t i = 0; i < src.size; ++i){ - switch (mode){ - case 0: - { - if (src.str[i] == '.'){ - mode = 1; - project->extensions[k++] = &project->extension_space[j]; - } - }break; - - case 1: - { - if (src.str[i] == '.'){ - project->extension_space[j++] = 0; - project->extensions[k++] = &project->extension_space[j]; - } - else{ - project->extension_space[j++] = src.str[i]; - } - }break; - } - } - project->extension_space[j++] = 0; - project->extension_count = k; -} - -// TODO(allen): make this a string operation or a lexer operation or something -static void -interpret_escaped_string(char *dst, String src){ - int32_t mode = 0; - int32_t j = 0; - for (int32_t i = 0; i < src.size; ++i){ - switch (mode){ - case 0: - { - if (src.str[i] == '\\'){ - mode = 1; - } - else{ - dst[j++] = src.str[i]; - } - }break; - - case 1: - { - switch (src.str[i]){ - case '\\':{dst[j++] = '\\'; mode = 0;}break; - case 'n': {dst[j++] = '\n'; mode = 0;}break; - case 't': {dst[j++] = '\t'; mode = 0;}break; - case '"': {dst[j++] = '"'; mode = 0;}break; - case '0': {dst[j++] = '\0'; mode = 0;}break; - } - }break; - } - } - dst[j] = 0; -} - -static void -close_all_files_with_extension(Application_Links *app, Partition *scratch_part, char **extension_list, int32_t extension_count){ - Temp_Memory temp = begin_temp_memory(scratch_part); - - int32_t buffers_to_close_max = partition_remaining(scratch_part)/sizeof(int32_t); - int32_t *buffers_to_close = push_array(scratch_part, int32_t, buffers_to_close_max); - - int32_t buffers_to_close_count = 0; - bool32 do_repeat = 0; - do{ - buffers_to_close_count = 0; - do_repeat = 0; - - uint32_t access = AccessAll; - Buffer_Summary buffer = {0}; - for (buffer = get_buffer_first(app, access); - buffer.exists; - get_buffer_next(app, &buffer, access)){ - - bool32 is_match = 1; - if (extension_count > 0){ - String extension = file_extension(make_string(buffer.file_name, buffer.file_name_len)); - is_match = 0; - for (int32_t i = 0; i < extension_count; ++i){ - if (match(extension, extension_list[i])){ - is_match = 1; - break; - } - } - } - - if (is_match){ - if (buffers_to_close_count >= buffers_to_close_max){ - do_repeat = 1; - break; - } - buffers_to_close[buffers_to_close_count++] = buffer.buffer_id; - } - } - - for (int32_t i = 0; i < buffers_to_close_count; ++i){ - kill_buffer(app, buffer_identifier(buffers_to_close[i]), true, 0); - } - } - while(do_repeat); - - end_temp_memory(temp); -} - -static void -open_all_files_with_extension(Application_Links *app, Partition *scratch_part, char **extension_list, int32_t extension_count){ - Temp_Memory temp = begin_temp_memory(scratch_part); - - int32_t max_size = partition_remaining(scratch_part); - char *memory = push_array(scratch_part, char, max_size); - - String dir = make_string_cap(memory, 0, max_size); - dir.size = directory_get_hot(app, dir.str, dir.memory_size); - int32_t dir_size = dir.size; - - // NOTE(allen|a3.4.4): Here we get the list of files in this directory. - // Notice that we free_file_list at the end. - File_List list = get_file_list(app, dir.str, dir.size); - - for (int32_t i = 0; i < list.count; ++i){ - File_Info *info = list.infos + i; - if (!info->folder){ - bool32 is_match = 1; - - if (extension_count > 0){ - is_match = 0; - - String extension = make_string_cap(info->filename, info->filename_len, info->filename_len+1); - extension = file_extension(extension); - for (int32_t j = 0; j < extension_count; ++j){ - if (match(extension, extension_list[j])){ - is_match = 1; - break; - } - } - - if (is_match){ - // NOTE(allen): There's no way in the 4coder API to use relative - // paths at the moment, so everything should be full paths. Which is - // managable. Here simply set the dir string size back to where it - // was originally, so that new appends overwrite old ones. - dir.size = dir_size; - append_sc(&dir, info->filename); - create_buffer(app, dir.str, dir.size, 0); - } - } - } - } - - free_file_list(app, list); - - end_temp_memory(temp); -} - -static char** -get_standard_code_extensions(int32_t *extension_count_out){ - char **extension_list = default_extensions; - int32_t extension_count = ArrayCount(default_extensions); - if (current_project.dir != 0){ - extension_list = current_project.extensions; - extension_count = current_project.extension_count; - } - *extension_count_out = extension_count; - return(extension_list); -} - -// NOTE(allen|a4.0.14): open_all_code and close_all_code now use the extensions set in the loaded project. If there is no project loaded the extensions ".cpp.hpp.c.h.cc" are used. -CUSTOM_COMMAND_SIG(open_all_code){ - int32_t extension_count = 0; - char **extension_list = get_standard_code_extensions(&extension_count); - open_all_files_with_extension(app, &global_part, extension_list, extension_count); -} - -CUSTOM_COMMAND_SIG(close_all_code){ - int32_t extension_count = 0; - char **extension_list = get_standard_code_extensions(&extension_count); - close_all_files_with_extension(app, &global_part, extension_list, extension_count); -} - -CUSTOM_COMMAND_SIG(load_project){ - Partition *part = &global_part; - - char project_file_space[512]; - String project_name = make_fixed_width_string(project_file_space); - project_name.size = directory_get_hot(app, project_name.str, project_name.memory_size); - if (project_name.size >= project_name.memory_size){ - project_name.size = 0; - } - - if (project_name.size != 0){ - int32_t original_size = project_name.size; - append_sc(&project_name, "project.4coder"); - terminate_with_null(&project_name); - - // TODO(allen): make sure we do nothing when this project is already open - - FILE *file = fopen(project_name.str, "rb"); - if (file){ - project_name.size = original_size; - terminate_with_null(&project_name); - - Temp_Memory temp = begin_temp_memory(part); - - char *mem = 0; - int32_t size = 0; - bool32 file_read_success = file_handle_dump(part, file, &mem, &size); - if (file_read_success){ - fclose(file); - - Cpp_Token_Array array; - array.count = 0; - array.max_count = (1 << 20)/sizeof(Cpp_Token); - array.tokens = push_array(&global_part, Cpp_Token, array.max_count); - - Cpp_Lex_Data S = cpp_lex_data_init(); - Cpp_Lex_Result result = cpp_lex_step(&S, mem, size+1, HAS_NULL_TERM, &array, NO_OUT_LIMIT); - - if (result == LexResult_Finished){ - // Clear out current project - if (current_project.close_all_code_when_this_project_closes){ - exec_command(app, close_all_code); - } - current_project = null_project; - - // Set new project directory - { - current_project.dir = current_project.dir_space; - String str = make_fixed_width_string(current_project.dir_space); - copy(&str, project_name); - terminate_with_null(&str); - current_project.dir_len = str.size; - } - - // Read the settings from project.4coder - for (int32_t i = 0; i < array.count; ++i){ - Config_Line config_line = read_config_line(array, &i); - if (config_line.read_success){ - Config_Item item = get_config_item(config_line, mem, array); - - { - String str = {0}; - if (config_string_var(item, "extensions", 0, &str)){ - if (str.size < sizeof(current_project.extension_space)){ - set_project_extensions(¤t_project, str); - print_message(app, str.str, str.size); - print_message(app, "\n", 1); - } - else{ - print_message(app, literal("STRING TOO LONG!\n")); - } - } - } - - { -#if defined(_WIN32) -#define FKEY_COMMAND "fkey_command_win" -#elif defined(__linux__) -#define FKEY_COMMAND "fkey_command_linux" -#else -#error no project configuration names for this platform -#endif - - int32_t index = 0; - Config_Array_Reader array_reader = {0}; - if (config_array_var(item, FKEY_COMMAND, &index, &array_reader)){ - if (index >= 1 && index <= 16){ - Config_Item array_item = {0}; - int32_t item_index = 0; - - char space[256]; - String msg = make_fixed_width_string(space); - append(&msg, FKEY_COMMAND"["); - append_int_to_str(&msg, index); - append(&msg, "] = {"); - - for (config_array_next_item(&array_reader, &array_item); - config_array_good(&array_reader); - config_array_next_item(&array_reader, &array_item)){ - - if (item_index >= 3){ - break; - } - - append(&msg, "["); - append_int_to_str(&msg, item_index); - append(&msg, "] = "); - - bool32 read_string = 0; - bool32 read_bool = 0; - - char *dest_str = 0; - int32_t dest_str_size = 0; - - bool32 *dest_bool = 0; - - switch (item_index){ - case 0: - { - dest_str = current_project.fkey_commands[index-1].command; - dest_str_size = sizeof(current_project.fkey_commands[index-1].command); - read_string = 1; - }break; - - case 1: - { - dest_str = current_project.fkey_commands[index-1].out; - dest_str_size = sizeof(current_project.fkey_commands[index-1].out); - read_string = 1; - }break; - - case 2: - { - dest_bool = ¤t_project.fkey_commands[index-1].use_build_panel; - read_bool = 1; - }break; - } - - if (read_string){ - if (config_int_var(array_item, 0, 0, 0)){ - append(&msg, "NULL, "); - dest_str[0] = 0; - } - - String str = {0}; - if (config_string_var(array_item, 0, 0, &str)){ - if (str.size < dest_str_size){ - interpret_escaped_string(dest_str, str); - append(&msg, dest_str); - append(&msg, ", "); - } - else{ - append(&msg, "STRING TOO LONG!, "); - } - } - } - - if (read_bool){ - if (config_bool_var(array_item, 0, 0, dest_bool)){ - if (dest_bool){ - append(&msg, "true, "); - } - else{ - append(&msg, "false, "); - } - } - } - - item_index++; - } - - append(&msg, "}\n"); - print_message(app, msg.str, msg.size); - } - } - } - } - } - - if (current_project.close_all_files_when_project_opens){ - close_all_files_with_extension(app, &global_part, 0, 0); - } - - // Open all project files - exec_command(app, open_all_code); - } - } - - end_temp_memory(temp); - } - else{ - char message_space[512]; - String message = make_fixed_width_string(message_space); - append_sc(&message, "Did not find project.4coder. "); - if (current_project.dir != 0){ - append_sc(&message, "Continuing with: "); - append_sc(&message, current_project.dir); - } - else{ - append_sc(&message, "Continuing without a project"); - } - print_message(app, message.str, message.size); - } - } - else{ - print_message(app, literal("Failed trying to get project file name")); - } -} - -CUSTOM_COMMAND_SIG(project_fkey_command){ - User_Input input = get_command_input(app); - if (input.type == UserInputKey){ - if (input.key.keycode >= key_f1 && input.key.keycode <= key_f16){ - int32_t ind = (input.key.keycode - key_f1); - - char *command = current_project.fkey_commands[ind].command; - char *out = current_project.fkey_commands[ind].out; - bool32 use_build_panel = current_project.fkey_commands[ind].use_build_panel; - - if (command[0] != 0){ - int32_t command_len = str_size(command); - - View_Summary view_ = {0}; - View_Summary *view = 0; - Buffer_Identifier buffer_id = {0}; - uint32_t flags = 0; - - bool32 set_fancy_font = 0; - - if (out[0] != 0){ - int32_t out_len = str_size(out); - buffer_id = buffer_identifier(out, out_len); - - view = &view_; - - if (use_build_panel){ - view_ = get_or_open_build_panel(app); - if (match(out, "*compilation*")){ - set_fancy_font = 1; - } - } - else{ - view_ = get_active_view(app, AccessAll); - } - - prev_location = null_location; - lock_jump_buffer(out, out_len); - } - else{ - // TODO(allen): fix the exec_system_command call so it can take a null buffer_id. - buffer_id = buffer_identifier(literal("*dump*")); - } - - exec_system_command(app, view, buffer_id, current_project.dir, current_project.dir_len, command, command_len, flags); - if (set_fancy_font){ - set_fancy_compilation_buffer_font(app); - } - } - } - } -} - -// -// Default Framework -// - -void -init_memory(Application_Links *app){ - int32_t part_size = (32 << 20); - int32_t general_size = (4 << 20); - - void *part_mem = memory_allocate(app, part_size); - global_part = make_part(part_mem, part_size); - - void *general_mem = memory_allocate(app, general_size); - general_memory_open(&global_general, general_mem, general_size); -} - -static void -default_4coder_initialize(Application_Links *app){ - init_memory(app); - process_config_file(app); - change_theme(app, default_theme_name.str, default_theme_name.size); - change_font(app, default_font_name.str, default_font_name.size, 1); -} - -static void -default_4coder_side_by_side_panels(Application_Links *app){ - exec_command(app, open_panel_vsplit); - exec_command(app, hide_scrollbar); - exec_command(app, change_active_panel); - exec_command(app, hide_scrollbar); -} - #endif +// BOTTOM + diff --git a/power/4coder_function_list.cpp b/4coder_function_list.cpp similarity index 96% rename from power/4coder_function_list.cpp rename to 4coder_function_list.cpp index 0fc79e4f..618fcf59 100644 --- a/power/4coder_function_list.cpp +++ b/4coder_function_list.cpp @@ -1,6 +1,23 @@ +/* +4coder_function_list.cpp - Command for listing all functions in a C/C++ file in a jump list. + +TYPE: 'drop-in-command-pack' +*/ // TOP +#if !defined(FCODER_FUNCTION_LIST_CPP) +#define FCODER_FUNCTION_LIST_CPP + +#include "4coder_API/custom.h" + +#include "4coder_default_framework.h" + +#include "4coder_helper/4coder_helper.h" +#include "4coder_helper/4coder_streaming.h" + +#include "4coder_lib/4coder_mem.h" + // NOTE(allen|a4.0.14): This turned out to be a nasty little routine. There might // be a better way to do it with just tokens that I didn't see the first time // through. Once I build a real parser this should become almost just as easy as @@ -10,7 +27,6 @@ // will then provide the "list_all_functions_current_buffer" command. // - // // Declaration list // @@ -278,5 +294,7 @@ CUSTOM_COMMAND_SIG(list_all_functions_current_buffer){ list_all_functions(app, &global_part, &buffer); } +#endif + // BOTTOM diff --git a/4coder_helper/4coder_helper.h b/4coder_helper/4coder_helper.h index 28b26898..d25ae354 100644 --- a/4coder_helper/4coder_helper.h +++ b/4coder_helper/4coder_helper.h @@ -1,327 +1,337 @@ -/* - * Miscellaneous helpers for common operations. - */ - -#if !defined(FCODER_HELPER_H) -#define FCODER_HELPER_H - -#include "4coder_seek_types.h" - -inline void -exec_command(Application_Links *app, Custom_Command_Function *func){ - func(app); -} - -inline void -exec_command(Application_Links *app, Generic_Command cmd){ - if (cmd.cmdid < cmdid_count){ - exec_command(app, cmd.cmdid); - } - else{ - exec_command(app, cmd.command); - } -} - -inline View_Summary -get_first_view_with_buffer(Application_Links *app, int32_t buffer_id){ - View_Summary result = {}; - View_Summary test = {}; - - if (buffer_id != 0){ - uint32_t access = AccessAll; - for(test = get_view_first(app, access); - test.exists; - get_view_next(app, &test, access)){ - - Buffer_Summary buffer = get_buffer(app, test.buffer_id, access); - - if(buffer.buffer_id == buffer_id){ - result = test; - break; - } - } - } - - return(result); -} - -inline int32_t -key_is_unmodified(Key_Event_Data *key){ - char *mods = key->modifiers; - int32_t unmodified = !mods[MDFR_CONTROL_INDEX] && !mods[MDFR_ALT_INDEX]; - return(unmodified); -} - -static int32_t -query_user_general(Application_Links *app, Query_Bar *bar, bool32 force_number){ - User_Input in; - int32_t success = 1; - int32_t good_character = 0; - - // NOTE(allen|a3.4.4): It will not cause an *error* if we continue on after failing to. - // start a query bar, but it will be unusual behavior from the point of view of the - // user, if this command starts intercepting input even though no prompt is shown. - // This will only happen if you have a lot of bars open already or if the current view - // doesn't support query bars. - if (start_query_bar(app, bar, 0) == 0) return 0; - - for (;;){ - // NOTE(allen|a3.4.4): This call will block until the user does one of the input - // types specified in the flags. The first set of flags are inputs you'd like to intercept - // that you don't want to abort on. The second set are inputs that you'd like to cause - // the command to abort. If an event satisfies both flags, it is treated as an abort. - in = get_user_input(app, EventOnAnyKey, EventOnEsc | EventOnButton); - - // NOTE(allen|a3.4.4): The responsible thing to do on abort is to end the command - // without waiting on get_user_input again. - if (in.abort){ - success = 0; - break; - } - - good_character = 0; - if (key_is_unmodified(&in.key)){ - if (force_number){ - if (in.key.character >= '0' && in.key.character <= '9'){ - good_character = 1; - } - } - else{ - if (in.key.character != 0){ - good_character = 1; - } - } - } - - // NOTE(allen|a3.4.4): All we have to do to update the query bar is edit our - // local Query_Bar struct! This is handy because it means our Query_Bar - // is always correct for typical use without extra work updating the bar. - if (in.type == UserInputKey){ - if (in.key.keycode == '\n' || in.key.keycode == '\t'){ - break; - } - else if (in.key.keycode == key_back){ - if (bar->string.size > 0){ - --bar->string.size; - } - } - else if (good_character){ - append_s_char(&bar->string, in.key.character); - } - } - } - - terminate_with_null(&bar->string); - - return(success); -} - -inline int32_t -query_user_string(Application_Links *app, Query_Bar *bar){ - int32_t success = query_user_general(app, bar, false); - return(success); -} - -inline int32_t -query_user_number(Application_Links *app, Query_Bar *bar){ - int32_t success = query_user_general(app, bar, true); - return(success); -} - -inline char -buffer_get_char(Application_Links *app, Buffer_Summary *buffer, int32_t pos){ - char result = ' '; - *buffer = get_buffer(app, buffer->buffer_id, AccessAll); - if (pos >= 0 && pos < buffer->size){ - buffer_read_range(app, buffer, pos, pos+1, &result); - } - return(result); -} - -inline Buffer_Identifier -buffer_identifier(char *str, int32_t len){ - Buffer_Identifier identifier; - identifier.name = str; - identifier.name_len = len; - identifier.id = 0; - return(identifier); -} - -inline Buffer_Identifier -buffer_identifier(int32_t id){ - Buffer_Identifier identifier; - identifier.name = 0; - identifier.name_len = 0; - identifier.id = id; - return(identifier); -} - -static Buffer_Summary -create_buffer(Application_Links *app, char *filename, int32_t filename_len, Buffer_Create_Flag flags){ - Buffer_Summary buffer = {0}; - - Buffer_Creation_Data data = {0}; - begin_buffer_creation(app, &data, flags); - buffer_creation_name(app, &data, filename, filename_len, 0); - buffer = end_buffer_creation(app, &data); - - return(buffer); -} - -inline Range -make_range(int32_t p1, int32_t p2){ - Range range; - if (p1 < p2){ - range.min = p1; - range.max = p2; - } - else{ - range.min = p2; - range.max = p1; - } - return(range); -} - -struct Buffer_Rect{ - int32_t char0, line0; - int32_t char1, line1; -}; - -#ifndef Swap -#define Swap(T,a,b) do{ T t = a; a = b; b = t; } while(0) -#endif - -inline Buffer_Rect -get_rect(View_Summary *view){ - Buffer_Rect rect = {0}; - - rect.char0 = view->mark.character; - rect.line0 = view->mark.line; - - rect.char1 = view->cursor.character; - rect.line1 = view->cursor.line; - - if (rect.line0 > rect.line1){ - Swap(int32_t, rect.line0, rect.line1); - } - if (rect.char0 > rect.char1){ - Swap(int32_t, rect.char0, rect.char1); - } - - return(rect); -} - -inline i32_Rect -get_line_x_rect(View_Summary *view){ - i32_Rect rect = {0}; - - if (view->unwrapped_lines){ - rect.x0 = (int32_t)view->mark.unwrapped_x; - rect.x1 = (int32_t)view->cursor.unwrapped_x; - } - else{ - rect.x0 = (int32_t)view->mark.wrapped_x; - rect.x1 = (int32_t)view->cursor.wrapped_x; - } - rect.y0 = view->mark.line; - rect.y1 = view->cursor.line; - - if (rect.y0 > rect.y1){ - Swap(int32_t, rect.y0, rect.y1); - } - if (rect.x0 > rect.x1){ - Swap(int32_t, rect.x0, rect.x1); - } - - return(rect); -} - -static int32_t -open_file(Application_Links *app, Buffer_Summary *buffer_out, char *filename, int32_t filename_len, int32_t background, int32_t never_new){ - int32_t result = false; - Buffer_Summary buffer = get_buffer_by_name(app, filename, filename_len, AccessProtected|AccessHidden); - - if (buffer.exists){ - if (buffer_out) *buffer_out = buffer; - result = true; - } - else{ - Buffer_Create_Flag flags = 0; - if (background){ - flags |= BufferCreate_Background; - } - if (never_new){ - flags |= BufferCreate_NeverNew; - } - buffer = create_buffer(app, filename, filename_len, flags); - if (buffer.exists){ - if (buffer_out) *buffer_out = buffer; - result = true; - } - } - - return(result); -} - -static int32_t -view_open_file(Application_Links *app, View_Summary *view, char *filename, int32_t filename_len, int32_t never_new){ - int32_t result = 0; - - if (view){ - Buffer_Summary buffer = {0}; - if (open_file(app, &buffer, filename, filename_len, false, never_new)){ - view_set_buffer(app, view, buffer.buffer_id, 0); - result = 1; - } - } - - return(result); -} - -static void -get_view_next_looped(Application_Links *app, View_Summary *view, uint32_t access){ - get_view_next(app, view, access); - if (!view->exists){ - *view = get_view_first(app, access); - } -} - -static void -refresh_buffer(Application_Links *app, Buffer_Summary *buffer){ - *buffer = get_buffer(app, buffer->buffer_id, AccessAll); -} - -static void -refresh_view(Application_Links *app, View_Summary *view){ - *view = get_view(app, view->view_id, AccessAll); -} - -inline float -get_view_y(View_Summary *view){ - float y = view->cursor.wrapped_y; - if (view->unwrapped_lines){ - y = view->cursor.unwrapped_y; - } - return(y); -} - -inline float -get_view_x(View_Summary *view){ - float x = view->cursor.wrapped_x; - if (view->unwrapped_lines){ - x = view->cursor.unwrapped_x; - } - return(x); -} - -inline Range -get_range(View_Summary *view){ - Range range = make_range(view->cursor.pos, view->mark.pos); - return(range); -} - -#if !defined(ArrayCount) -# define ArrayCount(a) (sizeof(a)/sizeof(a[0])) -#endif - -#endif +/* + * Miscellaneous helpers for common operations. + */ + +#if !defined(FCODER_HELPER_H) +#define FCODER_HELPER_H + +#include "4coder_seek_types.h" + +inline void +exec_command(Application_Links *app, Custom_Command_Function *func){ + func(app); +} + +inline void +exec_command(Application_Links *app, Generic_Command cmd){ + if (cmd.cmdid < cmdid_count){ + exec_command(app, cmd.cmdid); + } + else{ + exec_command(app, cmd.command); + } +} + +inline View_Summary +get_first_view_with_buffer(Application_Links *app, int32_t buffer_id){ + View_Summary result = {}; + View_Summary test = {}; + + if (buffer_id != 0){ + uint32_t access = AccessAll; + for(test = get_view_first(app, access); + test.exists; + get_view_next(app, &test, access)){ + + Buffer_Summary buffer = get_buffer(app, test.buffer_id, access); + + if(buffer.buffer_id == buffer_id){ + result = test; + break; + } + } + } + + return(result); +} + +inline int32_t +key_is_unmodified(Key_Event_Data *key){ + char *mods = key->modifiers; + int32_t unmodified = !mods[MDFR_CONTROL_INDEX] && !mods[MDFR_ALT_INDEX]; + return(unmodified); +} + +static int32_t +query_user_general(Application_Links *app, Query_Bar *bar, bool32 force_number){ + User_Input in; + int32_t success = 1; + int32_t good_character = 0; + + // NOTE(allen|a3.4.4): It will not cause an *error* if we continue on after failing to. + // start a query bar, but it will be unusual behavior from the point of view of the + // user, if this command starts intercepting input even though no prompt is shown. + // This will only happen if you have a lot of bars open already or if the current view + // doesn't support query bars. + if (start_query_bar(app, bar, 0) == 0) return 0; + + for (;;){ + // NOTE(allen|a3.4.4): This call will block until the user does one of the input + // types specified in the flags. The first set of flags are inputs you'd like to intercept + // that you don't want to abort on. The second set are inputs that you'd like to cause + // the command to abort. If an event satisfies both flags, it is treated as an abort. + in = get_user_input(app, EventOnAnyKey, EventOnEsc | EventOnButton); + + // NOTE(allen|a3.4.4): The responsible thing to do on abort is to end the command + // without waiting on get_user_input again. + if (in.abort){ + success = 0; + break; + } + + good_character = 0; + if (key_is_unmodified(&in.key)){ + if (force_number){ + if (in.key.character >= '0' && in.key.character <= '9'){ + good_character = 1; + } + } + else{ + if (in.key.character != 0){ + good_character = 1; + } + } + } + + // NOTE(allen|a3.4.4): All we have to do to update the query bar is edit our + // local Query_Bar struct! This is handy because it means our Query_Bar + // is always correct for typical use without extra work updating the bar. + if (in.type == UserInputKey){ + if (in.key.keycode == '\n' || in.key.keycode == '\t'){ + break; + } + else if (in.key.keycode == key_back){ + if (bar->string.size > 0){ + --bar->string.size; + } + } + else if (good_character){ + append_s_char(&bar->string, in.key.character); + } + } + } + + terminate_with_null(&bar->string); + + return(success); +} + +inline int32_t +query_user_string(Application_Links *app, Query_Bar *bar){ + int32_t success = query_user_general(app, bar, false); + return(success); +} + +inline int32_t +query_user_number(Application_Links *app, Query_Bar *bar){ + int32_t success = query_user_general(app, bar, true); + return(success); +} + +inline char +buffer_get_char(Application_Links *app, Buffer_Summary *buffer, int32_t pos){ + char result = ' '; + *buffer = get_buffer(app, buffer->buffer_id, AccessAll); + if (pos >= 0 && pos < buffer->size){ + buffer_read_range(app, buffer, pos, pos+1, &result); + } + return(result); +} + +inline Buffer_Identifier +buffer_identifier(char *str, int32_t len){ + Buffer_Identifier identifier; + identifier.name = str; + identifier.name_len = len; + identifier.id = 0; + return(identifier); +} + +inline Buffer_Identifier +buffer_identifier(int32_t id){ + Buffer_Identifier identifier; + identifier.name = 0; + identifier.name_len = 0; + identifier.id = id; + return(identifier); +} + +static Buffer_Summary +create_buffer(Application_Links *app, char *filename, int32_t filename_len, Buffer_Create_Flag flags){ + Buffer_Summary buffer = {0}; + + Buffer_Creation_Data data = {0}; + begin_buffer_creation(app, &data, flags); + buffer_creation_name(app, &data, filename, filename_len, 0); + buffer = end_buffer_creation(app, &data); + + return(buffer); +} + +inline Range +make_range(int32_t p1, int32_t p2){ + Range range; + if (p1 < p2){ + range.min = p1; + range.max = p2; + } + else{ + range.min = p2; + range.max = p1; + } + return(range); +} + +static void +adjust_all_buffer_wrap_widths(Application_Links *app, int32_t wrap_width, int32_t min_base_width){ + for (Buffer_Summary buffer = get_buffer_first(app, AccessAll); + buffer.exists; + get_buffer_next(app, &buffer, AccessAll)){ + buffer_set_setting(app, &buffer, BufferSetting_WrapPosition, wrap_width); + buffer_set_setting(app, &buffer, BufferSetting_MinimumBaseWrapPosition, min_base_width); + } +} + +struct Buffer_Rect{ + int32_t char0, line0; + int32_t char1, line1; +}; + +#ifndef Swap +#define Swap(T,a,b) do{ T t = a; a = b; b = t; } while(0) +#endif + +inline Buffer_Rect +get_rect(View_Summary *view){ + Buffer_Rect rect = {0}; + + rect.char0 = view->mark.character; + rect.line0 = view->mark.line; + + rect.char1 = view->cursor.character; + rect.line1 = view->cursor.line; + + if (rect.line0 > rect.line1){ + Swap(int32_t, rect.line0, rect.line1); + } + if (rect.char0 > rect.char1){ + Swap(int32_t, rect.char0, rect.char1); + } + + return(rect); +} + +inline i32_Rect +get_line_x_rect(View_Summary *view){ + i32_Rect rect = {0}; + + if (view->unwrapped_lines){ + rect.x0 = (int32_t)view->mark.unwrapped_x; + rect.x1 = (int32_t)view->cursor.unwrapped_x; + } + else{ + rect.x0 = (int32_t)view->mark.wrapped_x; + rect.x1 = (int32_t)view->cursor.wrapped_x; + } + rect.y0 = view->mark.line; + rect.y1 = view->cursor.line; + + if (rect.y0 > rect.y1){ + Swap(int32_t, rect.y0, rect.y1); + } + if (rect.x0 > rect.x1){ + Swap(int32_t, rect.x0, rect.x1); + } + + return(rect); +} + +static int32_t +open_file(Application_Links *app, Buffer_Summary *buffer_out, char *filename, int32_t filename_len, int32_t background, int32_t never_new){ + int32_t result = false; + Buffer_Summary buffer = get_buffer_by_name(app, filename, filename_len, AccessProtected|AccessHidden); + + if (buffer.exists){ + if (buffer_out) *buffer_out = buffer; + result = true; + } + else{ + Buffer_Create_Flag flags = 0; + if (background){ + flags |= BufferCreate_Background; + } + if (never_new){ + flags |= BufferCreate_NeverNew; + } + buffer = create_buffer(app, filename, filename_len, flags); + if (buffer.exists){ + if (buffer_out) *buffer_out = buffer; + result = true; + } + } + + return(result); +} + +static int32_t +view_open_file(Application_Links *app, View_Summary *view, char *filename, int32_t filename_len, int32_t never_new){ + int32_t result = 0; + + if (view){ + Buffer_Summary buffer = {0}; + if (open_file(app, &buffer, filename, filename_len, false, never_new)){ + view_set_buffer(app, view, buffer.buffer_id, 0); + result = 1; + } + } + + return(result); +} + +static void +get_view_next_looped(Application_Links *app, View_Summary *view, uint32_t access){ + get_view_next(app, view, access); + if (!view->exists){ + *view = get_view_first(app, access); + } +} + +static void +refresh_buffer(Application_Links *app, Buffer_Summary *buffer){ + *buffer = get_buffer(app, buffer->buffer_id, AccessAll); +} + +static void +refresh_view(Application_Links *app, View_Summary *view){ + *view = get_view(app, view->view_id, AccessAll); +} + +inline float +get_view_y(View_Summary *view){ + float y = view->cursor.wrapped_y; + if (view->unwrapped_lines){ + y = view->cursor.unwrapped_y; + } + return(y); +} + +inline float +get_view_x(View_Summary *view){ + float x = view->cursor.wrapped_x; + if (view->unwrapped_lines){ + x = view->cursor.unwrapped_x; + } + return(x); +} + +inline Range +get_range(View_Summary *view){ + Range range = make_range(view->cursor.pos, view->mark.pos); + return(range); +} + +#if !defined(ArrayCount) +# define ArrayCount(a) (sizeof(a)/sizeof(a[0])) +#endif + +#endif diff --git a/4coder_helper/4coder_long_seek.h b/4coder_helper/4coder_long_seek.h index 83cc91f0..e625c903 100644 --- a/4coder_helper/4coder_long_seek.h +++ b/4coder_helper/4coder_long_seek.h @@ -884,7 +884,7 @@ read_line(Application_Links *app, Partition *part, Buffer_Summary *buffer, int32 int32_t success = 0; if (buffer_compute_cursor(app, buffer, seek_line_char(line, 1), &begin)){ - if (buffer_compute_cursor(app, buffer, seek_line_char(line, 65536), &end)){ + if (buffer_compute_cursor(app, buffer, seek_line_char(line, -1), &end)){ if (begin.line == line){ if (0 <= begin.pos && begin.pos <= end.pos && end.pos <= buffer->size){ int32_t size = (end.pos - begin.pos); @@ -919,7 +919,7 @@ buffer_get_line_end(Application_Links *app, Buffer_Summary *buffer, int32_t line Partial_Cursor partial_cursor; int32_t result = buffer->size; if (line <= buffer->line_count){ - buffer_compute_cursor(app, buffer, seek_line_char(line, 65536), &partial_cursor); + buffer_compute_cursor(app, buffer, seek_line_char(line, -1), &partial_cursor); result = partial_cursor.pos; } return(result); @@ -931,7 +931,7 @@ buffer_line_is_blank(Application_Links *app, Buffer_Summary *buffer, int32_t lin bool32 result = 0; if (line <= buffer->line_count){ buffer_compute_cursor(app, buffer, seek_line_char(line, 1), &start); - buffer_compute_cursor(app, buffer, seek_line_char(line, 65536), &end); + buffer_compute_cursor(app, buffer, seek_line_char(line, -1), &end); static const int32_t chunk_size = 1024; char chunk[chunk_size]; diff --git a/4coder_jump_parsing.cpp b/4coder_jump_parsing.cpp index 84f30ad2..a0bb4c44 100644 --- a/4coder_jump_parsing.cpp +++ b/4coder_jump_parsing.cpp @@ -22,13 +22,6 @@ typedef struct Name_Based_Jump_Location{ int32_t column; } Name_Based_Jump_Location; -typedef struct ID_Based_Jump_Location{ - int32_t buffer_id; - int32_t line; - int32_t column; -} ID_Based_Jump_Location; -static ID_Based_Jump_Location null_location = {0}; - static void jump_to_location(Application_Links *app, View_Summary *view, Name_Based_Jump_Location *l){ if (view_open_file(app, view, l->file.str, l->file.size, true)){ @@ -55,8 +48,9 @@ static int32_t parse_jump_location(String line, Name_Based_Jump_Location *location, int32_t skip_sub_errors, int32_t *colon_char){ int32_t result = false; + int32_t whitespace_length = 0; String original_line = line; - line = skip_chop_whitespace(line); + line = skip_chop_whitespace(line, &whitespace_length); int32_t colon_pos = 0; int32_t is_ms_style = 0; @@ -102,7 +96,7 @@ parse_jump_location(String line, Name_Based_Jump_Location *location, int32_t ski location->column = 1; } - *colon_char = colon_pos; + *colon_char = colon_pos + whitespace_length; result = true; } } @@ -137,7 +131,7 @@ parse_jump_location(String line, Name_Based_Jump_Location *location, int32_t ski location->file = filename; location->line = str_to_int_s(line_number); location->column = str_to_int_s(column_number); - *colon_char = colon_pos3; + *colon_char = colon_pos3 + whitespace_length; result = true; } } @@ -151,7 +145,7 @@ parse_jump_location(String line, Name_Based_Jump_Location *location, int32_t ski location->file = filename; location->line = str_to_int_s(line_number); location->column = 0; - *colon_char = colon_pos2; + *colon_char = colon_pos2 + whitespace_length; result = true; } } @@ -253,9 +247,7 @@ seek_next_jump_in_view(Application_Links *app, Partition *part, View_Summary *vi Name_Based_Jump_Location location = {0}; int32_t line = view->cursor.line; int32_t colon_index = 0; - if (seek_next_jump_in_buffer(app, part, view->buffer_id, - line+direction, skip_sub_errors, direction, - &line, &colon_index, &location)){ + if (seek_next_jump_in_buffer(app, part, view->buffer_id, line+direction, skip_sub_errors, direction, &line, &colon_index, &location)){ result = true; *line_out = line; *colon_index_out = colon_index; @@ -277,8 +269,6 @@ skip_this_jump(ID_Based_Jump_Location prev, ID_Based_Jump_Location jump){ return(result); } -static ID_Based_Jump_Location prev_location = {0}; - static int32_t advance_cursor_in_jump_view(Application_Links *app, Partition *part, View_Summary *view, int32_t skip_repeats, int32_t skip_sub_error, int32_t direction, Name_Based_Jump_Location *location_out){ int32_t result = true; @@ -289,10 +279,9 @@ advance_cursor_in_jump_view(Application_Links *app, Partition *part, View_Summar do{ Temp_Memory temp = begin_temp_memory(part); - if (seek_next_jump_in_view(app, part, view, - skip_sub_error, direction, - &line, &colon_index, &location)){ + if (seek_next_jump_in_view(app, part, view, skip_sub_error, direction, &line, &colon_index, &location)){ jump = convert_name_based_to_id_based(app, location); + view_set_cursor(app, view, seek_line_char(line, colon_index+1), true); result = true; } else{ @@ -313,16 +302,14 @@ advance_cursor_in_jump_view(Application_Links *app, Partition *part, View_Summar } static int32_t -seek_error(Application_Links *app, Partition *part, int32_t skip_repeats, int32_t skip_sub_errors, int32_t direction){ +seek_jump(Application_Links *app, Partition *part, int32_t skip_repeats, int32_t skip_sub_errors, int32_t direction){ int32_t result = 0; View_Summary view = get_view_for_locked_jump_buffer(app); if (view.exists){ Name_Based_Jump_Location location = {0}; - if (advance_cursor_in_jump_view(app, &global_part, &view, - skip_repeats, skip_sub_errors, direction, - &location)){ + if (advance_cursor_in_jump_view(app, &global_part, &view, skip_repeats, skip_sub_errors, direction, &location)){ View_Summary active_view = get_active_view(app, AccessAll); if (active_view.view_id == view.view_id){ exec_command(app, change_active_panel); @@ -342,28 +329,28 @@ CUSTOM_COMMAND_SIG(goto_next_jump){ int32_t skip_repeats = true; int32_t skip_sub_errors = true; int32_t dir = 1; - seek_error(app, &global_part, skip_repeats, skip_sub_errors, dir); + seek_jump(app, &global_part, skip_repeats, skip_sub_errors, dir); } CUSTOM_COMMAND_SIG(goto_prev_jump){ int32_t skip_repeats = true; int32_t skip_sub_errors = true; int32_t dir = -1; - seek_error(app, &global_part, skip_repeats, skip_sub_errors, dir); + seek_jump(app, &global_part, skip_repeats, skip_sub_errors, dir); } CUSTOM_COMMAND_SIG(goto_next_jump_no_skips){ int32_t skip_repeats = false; int32_t skip_sub_errors = true; int32_t dir = 1; - seek_error(app, &global_part, skip_repeats, skip_sub_errors, dir); + seek_jump(app, &global_part, skip_repeats, skip_sub_errors, dir); } CUSTOM_COMMAND_SIG(goto_prev_jump_no_skips){ int32_t skip_repeats = false; int32_t skip_sub_errors = true; int32_t dir = -1; - seek_error(app, &global_part, skip_repeats, skip_sub_errors, dir); + seek_jump(app, &global_part, skip_repeats, skip_sub_errors, dir); } CUSTOM_COMMAND_SIG(goto_first_jump){ @@ -374,11 +361,29 @@ CUSTOM_COMMAND_SIG(goto_first_jump){ view_set_cursor(app, &view, seek_pos(0), true); prev_location = null_location; - seek_error(app, &global_part, false, true, 1); + seek_jump(app, &global_part, false, true, 1); } end_temp_memory(temp); } +// +// Insert Newline - or Tigger Jump on Read Only Buffer +// + +CUSTOM_COMMAND_SIG(newline_or_goto_position){ + View_Summary view = get_active_view(app, AccessProtected); + Buffer_Summary buffer = get_buffer(app, view.buffer_id, AccessProtected); + + if (buffer.lock_flags & AccessProtected){ + exec_command(app, goto_jump_at_cursor); + lock_jump_buffer(buffer); + } + else{ + exec_command(app, write_character); + } +} + +#define seek_error seek_jump #define goto_next_error goto_next_jump #define goto_prev_error goto_prev_jump #define goto_next_error_no_skips goto_next_jump_no_skips diff --git a/4coder_lib/4coder_string.h b/4coder_lib/4coder_string.h index 958c81dd..84dfa847 100644 --- a/4coder_lib/4coder_string.h +++ b/4coder_lib/4coder_string.h @@ -1,5 +1,5 @@ /* -4coder_string.h - Version 1.0.14 +4coder_string.h - Version 1.0.59 no warranty implied; use at your own risk This software is in the public domain. Where that dedication is not @@ -94,8 +94,10 @@ FSTRING_INLINE String make_string_slowly(void *str); FSTRING_INLINE String substr_tail(String str, i32_4tech start); FSTRING_INLINE String substr(String str, i32_4tech start, i32_4tech size); FSTRING_LINK String skip_whitespace(String str); +FSTRING_LINK String skip_whitespace_measure(String str, i32_4tech *skip_length); FSTRING_LINK String chop_whitespace(String str); FSTRING_LINK String skip_chop_whitespace(String str); +FSTRING_LINK String skip_chop_whitespace_measure(String str, i32_4tech *skip_length); FSTRING_INLINE String tailstr(String str); FSTRING_LINK b32_4tech match_cc(char *a, char *b); FSTRING_LINK b32_4tech match_sc(String a, char *b); @@ -199,6 +201,8 @@ FSTRING_LINK String get_first_word(String source); FSTRING_INLINE String make_string(void *str, i32_4tech size, i32_4tech mem_size){return(make_string_cap(str,size,mem_size));} FSTRING_INLINE String substr(String str, i32_4tech start){return(substr_tail(str,start));} +FSTRING_LINK String skip_whitespace(String str, i32_4tech *skip_length){return(skip_whitespace_measure(str,skip_length));} +FSTRING_LINK String skip_chop_whitespace(String str, i32_4tech *skip_length){return(skip_chop_whitespace_measure(str,skip_length));} FSTRING_LINK b32_4tech match(char *a, char *b){return(match_cc(a,b));} FSTRING_LINK b32_4tech match(String a, char *b){return(match_sc(a,b));} FSTRING_INLINE b32_4tech match(char *a, String b){return(match_cs(a,b));} @@ -460,6 +464,20 @@ skip_whitespace(String str) } #endif + +#if defined(FSTRING_IMPLEMENTATION) +FSTRING_LINK String +skip_whitespace_measure(String str, i32_4tech *skip_length) +{ + String result = {0}; + i32_4tech i = 0; + for (; i < str.size && char_is_whitespace(str.str[i]); ++i); + result = substr(str, i, str.size - i); + *skip_length = i; + return(result); +} +#endif + #if defined(FSTRING_IMPLEMENTATION) FSTRING_LINK String chop_whitespace(String str) @@ -482,6 +500,17 @@ skip_chop_whitespace(String str) } #endif + +#if defined(FSTRING_IMPLEMENTATION) +FSTRING_LINK String +skip_chop_whitespace_measure(String str, i32_4tech *skip_length) +{ + str = skip_whitespace_measure(str, skip_length); + str = chop_whitespace(str); + return(str); +} +#endif + #if !defined(FSTRING_GUARD) FSTRING_INLINE String tailstr(String str) @@ -2031,7 +2060,7 @@ static void get_absolutes(String name, Absolutes *absolutes, b32_4tech implicit_first, b32_4tech implicit_last){ if (name.size != 0){ i32_4tech count = 0; - i32_4tech max = sizeof(absolutes->a)/sizeof(absolutes->a[0]) - 1; + i32_4tech max = (sizeof(absolutes->a)/sizeof(*absolutes->a)) - 1; if (implicit_last) --max; String str; diff --git a/4coder_project_commands.cpp b/4coder_project_commands.cpp new file mode 100644 index 00000000..4b17e100 --- /dev/null +++ b/4coder_project_commands.cpp @@ -0,0 +1,428 @@ +/* +4coder_project_commands.cpp - Commands for loading and using a project. + +TYPE: 'drop-in-command-pack' +*/ + +// TOP + +#if !defined(FCODER_PROJECT_COMMANDS_CPP) +#define FCODER_PROJECT_COMMANDS_CPP + +#include "4coder_default_framework.h" +#include "4coder_lib/4coder_mem.h" + +#include "4coder_build_commands.cpp" + +// TODO(allen): make this a string operation or a lexer operation or something +static void +interpret_escaped_string(char *dst, String src){ + int32_t mode = 0; + int32_t j = 0; + for (int32_t i = 0; i < src.size; ++i){ + switch (mode){ + case 0: + { + if (src.str[i] == '\\'){ + mode = 1; + } + else{ + dst[j++] = src.str[i]; + } + }break; + + case 1: + { + switch (src.str[i]){ + case '\\':{dst[j++] = '\\'; mode = 0;}break; + case 'n': {dst[j++] = '\n'; mode = 0;}break; + case 't': {dst[j++] = '\t'; mode = 0;}break; + case '"': {dst[j++] = '"'; mode = 0;}break; + case '0': {dst[j++] = '\0'; mode = 0;}break; + } + }break; + } + } + dst[j] = 0; +} + +static void +close_all_files_with_extension(Application_Links *app, Partition *scratch_part, char **extension_list, int32_t extension_count){ + Temp_Memory temp = begin_temp_memory(scratch_part); + + int32_t buffers_to_close_max = partition_remaining(scratch_part)/sizeof(int32_t); + int32_t *buffers_to_close = push_array(scratch_part, int32_t, buffers_to_close_max); + + int32_t buffers_to_close_count = 0; + bool32 do_repeat = 0; + do{ + buffers_to_close_count = 0; + do_repeat = 0; + + uint32_t access = AccessAll; + Buffer_Summary buffer = {0}; + for (buffer = get_buffer_first(app, access); + buffer.exists; + get_buffer_next(app, &buffer, access)){ + + bool32 is_match = 1; + if (extension_count > 0){ + String extension = file_extension(make_string(buffer.file_name, buffer.file_name_len)); + is_match = 0; + for (int32_t i = 0; i < extension_count; ++i){ + if (match(extension, extension_list[i])){ + is_match = 1; + break; + } + } + } + + if (is_match){ + if (buffers_to_close_count >= buffers_to_close_max){ + do_repeat = 1; + break; + } + buffers_to_close[buffers_to_close_count++] = buffer.buffer_id; + } + } + + for (int32_t i = 0; i < buffers_to_close_count; ++i){ + kill_buffer(app, buffer_identifier(buffers_to_close[i]), true, 0); + } + } + while(do_repeat); + + end_temp_memory(temp); +} + +static void +open_all_files_with_extension(Application_Links *app, Partition *scratch_part, char **extension_list, int32_t extension_count){ + Temp_Memory temp = begin_temp_memory(scratch_part); + + int32_t max_size = partition_remaining(scratch_part); + char *memory = push_array(scratch_part, char, max_size); + + String dir = make_string_cap(memory, 0, max_size); + dir.size = directory_get_hot(app, dir.str, dir.memory_size); + int32_t dir_size = dir.size; + + // NOTE(allen|a3.4.4): Here we get the list of files in this directory. + // Notice that we free_file_list at the end. + File_List list = get_file_list(app, dir.str, dir.size); + + for (int32_t i = 0; i < list.count; ++i){ + File_Info *info = list.infos + i; + if (!info->folder){ + bool32 is_match = 1; + + if (extension_count > 0){ + is_match = 0; + + String extension = make_string_cap(info->filename, info->filename_len, info->filename_len+1); + extension = file_extension(extension); + for (int32_t j = 0; j < extension_count; ++j){ + if (match(extension, extension_list[j])){ + is_match = 1; + break; + } + } + + if (is_match){ + // NOTE(allen): There's no way in the 4coder API to use relative + // paths at the moment, so everything should be full paths. Which is + // managable. Here simply set the dir string size back to where it + // was originally, so that new appends overwrite old ones. + dir.size = dir_size; + append_sc(&dir, info->filename); + create_buffer(app, dir.str, dir.size, 0); + } + } + } + } + + free_file_list(app, list); + + end_temp_memory(temp); +} + +// NOTE(allen|a4.0.14): open_all_code and close_all_code now use the extensions set in the loaded project. If there is no project loaded the extensions ".cpp.hpp.c.h.cc" are used. +CUSTOM_COMMAND_SIG(open_all_code){ + int32_t extension_count = 0; + char **extension_list = get_current_code_extensions(&extension_count); + open_all_files_with_extension(app, &global_part, extension_list, extension_count); +} + +CUSTOM_COMMAND_SIG(close_all_code){ + int32_t extension_count = 0; + char **extension_list = get_current_code_extensions(&extension_count); + close_all_files_with_extension(app, &global_part, extension_list, extension_count); +} + +CUSTOM_COMMAND_SIG(load_project){ + Partition *part = &global_part; + + char project_file_space[512]; + String project_name = make_fixed_width_string(project_file_space); + project_name.size = directory_get_hot(app, project_name.str, project_name.memory_size); + if (project_name.size >= project_name.memory_size){ + project_name.size = 0; + } + + if (project_name.size != 0){ + int32_t original_size = project_name.size; + append_sc(&project_name, "project.4coder"); + terminate_with_null(&project_name); + + FILE *file = fopen(project_name.str, "rb"); + if (file){ + project_name.size = original_size; + terminate_with_null(&project_name); + + Temp_Memory temp = begin_temp_memory(part); + + char *mem = 0; + int32_t size = 0; + bool32 file_read_success = file_handle_dump(part, file, &mem, &size); + if (file_read_success){ + fclose(file); + + Cpp_Token_Array array; + array.count = 0; + array.max_count = (1 << 20)/sizeof(Cpp_Token); + array.tokens = push_array(&global_part, Cpp_Token, array.max_count); + + Cpp_Lex_Data S = cpp_lex_data_init(); + Cpp_Lex_Result result = cpp_lex_step(&S, mem, size+1, HAS_NULL_TERM, &array, NO_OUT_LIMIT); + + if (result == LexResult_Finished){ + // Clear out current project + if (current_project.close_all_code_when_this_project_closes){ + exec_command(app, close_all_code); + } + current_project = null_project; + + // Set new project directory + { + current_project.dir = current_project.dir_space; + String str = make_fixed_width_string(current_project.dir_space); + copy(&str, project_name); + terminate_with_null(&str); + current_project.dir_len = str.size; + } + + // Read the settings from project.4coder + for (int32_t i = 0; i < array.count; ++i){ + Config_Line config_line = read_config_line(array, &i); + if (config_line.read_success){ + Config_Item item = get_config_item(config_line, mem, array); + + { + String str = {0}; + if (config_string_var(item, "extensions", 0, &str)){ + if (str.size < sizeof(current_project.extension_space)){ + set_project_extensions(¤t_project, str); + print_message(app, str.str, str.size); + print_message(app, "\n", 1); + } + else{ + print_message(app, literal("STRING TOO LONG!\n")); + } + } + } + + { +#if defined(_WIN32) +#define FKEY_COMMAND "fkey_command_win" +#elif defined(__linux__) +#define FKEY_COMMAND "fkey_command_linux" +#else +#error no project configuration names for this platform +#endif + + int32_t index = 0; + Config_Array_Reader array_reader = {0}; + if (config_array_var(item, FKEY_COMMAND, &index, &array_reader)){ + if (index >= 1 && index <= 16){ + Config_Item array_item = {0}; + int32_t item_index = 0; + + char space[256]; + String msg = make_fixed_width_string(space); + append(&msg, FKEY_COMMAND"["); + append_int_to_str(&msg, index); + append(&msg, "] = {"); + + for (config_array_next_item(&array_reader, &array_item); + config_array_good(&array_reader); + config_array_next_item(&array_reader, &array_item)){ + + if (item_index >= 3){ + break; + } + + append(&msg, "["); + append_int_to_str(&msg, item_index); + append(&msg, "] = "); + + bool32 read_string = 0; + bool32 read_bool = 0; + + char *dest_str = 0; + int32_t dest_str_size = 0; + + bool32 *dest_bool = 0; + + switch (item_index){ + case 0: + { + dest_str = current_project.fkey_commands[index-1].command; + dest_str_size = sizeof(current_project.fkey_commands[index-1].command); + read_string = 1; + }break; + + case 1: + { + dest_str = current_project.fkey_commands[index-1].out; + dest_str_size = sizeof(current_project.fkey_commands[index-1].out); + read_string = 1; + }break; + + case 2: + { + dest_bool = ¤t_project.fkey_commands[index-1].use_build_panel; + read_bool = 1; + }break; + } + + if (read_string){ + if (config_int_var(array_item, 0, 0, 0)){ + append(&msg, "NULL, "); + dest_str[0] = 0; + } + + String str = {0}; + if (config_string_var(array_item, 0, 0, &str)){ + if (str.size < dest_str_size){ + interpret_escaped_string(dest_str, str); + append(&msg, dest_str); + append(&msg, ", "); + } + else{ + append(&msg, "STRING TOO LONG!, "); + } + } + } + + if (read_bool){ + if (config_bool_var(array_item, 0, 0, dest_bool)){ + if (dest_bool){ + append(&msg, "true, "); + } + else{ + append(&msg, "false, "); + } + } + } + + item_index++; + } + + append(&msg, "}\n"); + print_message(app, msg.str, msg.size); + } + } + } + } + } + + if (current_project.close_all_files_when_project_opens){ + close_all_files_with_extension(app, &global_part, 0, 0); + } + + // Open all project files + exec_command(app, open_all_code); + } + } + + end_temp_memory(temp); + } + else{ + char message_space[512]; + String message = make_fixed_width_string(message_space); + append_sc(&message, "Did not find project.4coder. "); + if (current_project.dir != 0){ + append_sc(&message, "Continuing with: "); + append_sc(&message, current_project.dir); + } + else{ + append_sc(&message, "Continuing without a project"); + } + print_message(app, message.str, message.size); + } + } + else{ + print_message(app, literal("Failed trying to get project file name")); + } +} + +static void +exec_project_fkey_command(Application_Links *app, int32_t command_ind){ + char *command = current_project.fkey_commands[command_ind].command; + char *out = current_project.fkey_commands[command_ind].out; + bool32 use_build_panel = current_project.fkey_commands[command_ind].use_build_panel; + + if (command[0] != 0){ + int32_t command_len = str_size(command); + + View_Summary view_ = {0}; + View_Summary *view = 0; + Buffer_Identifier buffer_id = {0}; + uint32_t flags = 0; + + bool32 set_fancy_font = 0; + + if (out[0] != 0){ + int32_t out_len = str_size(out); + buffer_id = buffer_identifier(out, out_len); + + view = &view_; + + if (use_build_panel){ + view_ = get_or_open_build_panel(app); + if (match(out, "*compilation*")){ + set_fancy_font = 1; + } + } + else{ + view_ = get_active_view(app, AccessAll); + } + + prev_location = null_location; + lock_jump_buffer(out, out_len); + } + else{ + // TODO(allen): fix the exec_system_command call so it can take a null buffer_id. + buffer_id = buffer_identifier(literal("*dump*")); + } + + exec_system_command(app, view, buffer_id, current_project.dir, current_project.dir_len, command, command_len, flags); + if (set_fancy_font){ + set_fancy_compilation_buffer_font(app); + } + } +} + +CUSTOM_COMMAND_SIG(project_fkey_command){ + User_Input input = get_command_input(app); + if (input.type == UserInputKey){ + if (input.key.keycode >= key_f1 && input.key.keycode <= key_f16){ + int32_t ind = (input.key.keycode - key_f1); + exec_project_fkey_command(app, ind); + } + } +} + +#endif + +// BOTTOM + diff --git a/4coder_system_command.cpp b/4coder_system_command.cpp new file mode 100644 index 00000000..3737a8f0 --- /dev/null +++ b/4coder_system_command.cpp @@ -0,0 +1,53 @@ +/* +4coder_system_command.cpp - Commands for executing arbitrary system command line instructions. + +TYPE: 'drop-in-command-pack' +*/ + +// TOP + +#if !defined(FCODER_SYSTEM_COMMAND_CPP) +#define FCODER_SYSTEM_COMMAND_CPP + +#include "4coder_default_framework.h" + +CUSTOM_COMMAND_SIG(execute_any_cli){ + Query_Bar bar_out = {0}; + Query_Bar bar_cmd = {0}; + + bar_out.prompt = make_lit_string("Output Buffer: "); + bar_out.string = make_fixed_width_string(out_buffer_space); + if (!query_user_string(app, &bar_out)) return; + + bar_cmd.prompt = make_lit_string("Command: "); + bar_cmd.string = make_fixed_width_string(command_space); + if (!query_user_string(app, &bar_cmd)) return; + + String hot_directory = make_fixed_width_string(hot_directory_space); + hot_directory.size = directory_get_hot(app, hot_directory.str, hot_directory.memory_size); + + uint32_t access = AccessAll; + View_Summary view = get_active_view(app, access); + + exec_system_command(app, &view, buffer_identifier(bar_out.string.str, bar_out.string.size), hot_directory.str, hot_directory.size, bar_cmd.string.str, bar_cmd.string.size, CLI_OverlapWithConflict | CLI_CursorAtEnd); + lock_jump_buffer(bar_out.string.str, bar_out.string.size); +} + +CUSTOM_COMMAND_SIG(execute_previous_cli){ + String out_buffer = make_string_slowly(out_buffer_space); + String cmd = make_string_slowly(command_space); + String hot_directory = make_string_slowly(hot_directory_space); + + if (out_buffer.size > 0 && cmd.size > 0 && hot_directory.size > 0){ + uint32_t access = AccessAll; + View_Summary view = get_active_view(app, access); + + exec_system_command(app, &view, buffer_identifier(out_buffer.str, out_buffer.size), hot_directory.str, hot_directory.size, cmd.str, cmd.size, CLI_OverlapWithConflict | CLI_CursorAtEnd); + lock_jump_buffer(out_buffer.str, out_buffer.size); + } +} + +#endif + +// BOTTOM + diff --git a/4ed.cpp b/4ed.cpp index cc42e158..1f2063da 100644 --- a/4ed.cpp +++ b/4ed.cpp @@ -62,22 +62,22 @@ typedef struct Consumption_Record{ } Consumption_Record; typedef struct Available_Input{ - Key_Summary *keys; + Key_Input_Data *keys; Mouse_State *mouse; Consumption_Record records[Input_Count]; } Available_Input; internal Available_Input -init_available_input(Key_Summary *keys, Mouse_State *mouse){ +init_available_input(Key_Input_Data *keys, Mouse_State *mouse){ Available_Input result = {0}; result.keys = keys; result.mouse = mouse; return(result); } -internal Key_Summary +internal Key_Input_Data direct_get_key_data(Available_Input *available){ - Key_Summary result = *available->keys; + Key_Input_Data result = *available->keys; return(result); } @@ -87,9 +87,9 @@ direct_get_mouse_state(Available_Input *available){ return(result); } -internal Key_Summary +internal Key_Input_Data get_key_data(Available_Input *available){ - Key_Summary result = {0}; + Key_Input_Data result = {0}; if (!available->records[Input_AnyKey].consumed){ result = *available->keys; @@ -1688,46 +1688,32 @@ App_Step_Sig(app_step){ if (prev_width != current_width || prev_height != current_height){ layout_refit(&models->layout, prev_width, prev_height); - } } // NOTE(allen): prepare input information - Key_Summary key_summary = {0}; - { - for (i32 i = 0; i < input->keys.press_count; ++i){ - key_summary.keys[key_summary.count++] = input->keys.press[i]; - } - for (i32 i = 0; i < input->keys.hold_count; ++i){ - key_summary.keys[key_summary.count++] = input->keys.hold[i]; - } - if (models->input_filter){ models->input_filter(&input->mouse); } Key_Event_Data mouse_event = {0}; - memcpy(mouse_event.modifiers, input->keys.modifiers, sizeof(input->keys.modifiers)); - if (input->mouse.press_l){ mouse_event.keycode = key_mouse_left; - key_summary.keys[key_summary.count++] = mouse_event; + input->keys.keys[input->keys.count++] = mouse_event; + } + else if (input->mouse.release_l){ + mouse_event.keycode = key_mouse_left_release; + input->keys.keys[input->keys.count++] = mouse_event; } if (input->mouse.press_r){ mouse_event.keycode = key_mouse_right; - key_summary.keys[key_summary.count++] = mouse_event; + input->keys.keys[input->keys.count++] = mouse_event; } - - if (input->mouse.release_l){ - mouse_event.keycode = key_mouse_left_release; - key_summary.keys[key_summary.count++] = mouse_event; - } - - if (input->mouse.release_r){ + else if (input->mouse.release_r){ mouse_event.keycode = key_mouse_right_release; - key_summary.keys[key_summary.count++] = mouse_event; + input->keys.keys[input->keys.count++] = mouse_event; } input->mouse.wheel = -input->mouse.wheel; @@ -1996,11 +1982,11 @@ App_Step_Sig(app_step){ } // NOTE(allen): pass events to debug - vars->available_input = init_available_input(&key_summary, &input->mouse); + vars->available_input = init_available_input(&input->keys, &input->mouse); { Debug_Data *debug = &models->debug; - Key_Summary key_data = get_key_data(&vars->available_input); + Key_Input_Data key_data = get_key_data(&vars->available_input); Debug_Input_Event *events = debug->input_events; @@ -2033,7 +2019,7 @@ App_Step_Sig(app_step){ get_flags |= abort_flags; if ((get_flags & EventOnAnyKey) || (get_flags & EventOnEsc)){ - Key_Summary key_data = get_key_data(&vars->available_input); + Key_Input_Data key_data = get_key_data(&vars->available_input); for (i32 key_i = 0; key_i < key_data.count; ++key_i){ Key_Event_Data key = get_single_key(&key_data, key_i); @@ -2259,7 +2245,7 @@ App_Step_Sig(app_step){ // NOTE(allen): command execution { - Key_Summary key_data = get_key_data(&vars->available_input); + Key_Input_Data key_data = get_key_data(&vars->available_input); b32 hit_something = 0; b32 hit_esc = 0; @@ -2379,6 +2365,11 @@ App_Step_Sig(app_step){ "If you're new to 4coder there are some tutorials at http://4coder.net/tutorials.html\n" "\n" "Newest features:\n" + "- find all functions in the current buffer and list them in a jump buffer\n" + "-option to set user name in config.4coder\n" + " The user name is used in and comment writing commands\n" + "\n" + "New in alpha 4.0.14:\n" "-Option to have wrap widths automatically adjust based on average view width\n" "-The 'config.4coder' file can now be placed with the 4ed executable file\n" "-New options in 'config.4coder' to specify the font and color theme\n" @@ -2389,7 +2380,7 @@ App_Step_Sig(app_step){ "New in alpha 4.0.12 and 4.0.13:\n" "-Text files wrap lines at whitespace when possible\n" "-New code wrapping feature is on by default\n" - "-Introduced a 'config.4coder' for setting several wrapping options:" + "-Introduced a 'config.4coder' for setting several wrapping options:\n" " enable_code_wrapping: set to false if you want the text like behavior\n" " default_wrap_width: the wrap width to set in new files\n" "- decrease the current buffer's wrap width\n" @@ -2635,8 +2626,7 @@ App_Step_Sig(app_step){ } } - do_render_file_view(system, view, scroll_vars, active_view, - panel->inner, active, target, &dead_input); + do_render_file_view(system, view, scroll_vars, active_view, panel->inner, active, target, &dead_input); draw_pop_clip(target); diff --git a/4ed.h b/4ed.h index 8776af83..dfc66d68 100644 --- a/4ed.h +++ b/4ed.h @@ -23,35 +23,24 @@ struct Application_Memory{ i32 user_memory_size; }; -#define KEY_INPUT_BUFFER_SIZE 4 -#define KEY_INPUT_BUFFER_DSIZE (KEY_INPUT_BUFFER_SIZE << 1) +#define KEY_INPUT_BUFFER_SIZE 8 +#define KEY_EXTRA_SIZE 2 struct Key_Input_Data{ - Key_Event_Data press[KEY_INPUT_BUFFER_SIZE]; - Key_Event_Data hold[KEY_INPUT_BUFFER_SIZE]; - i32 press_count; - i32 hold_count; - - // TODO(allen): determine if we still need this. - char modifiers[MDFR_INDEX_COUNT]; + Key_Event_Data keys[KEY_INPUT_BUFFER_SIZE + KEY_EXTRA_SIZE]; + i32 count; }; static Key_Input_Data null_key_input_data = {0}; -struct Key_Summary{ - i32 count; - Key_Event_Data keys[KEY_INPUT_BUFFER_DSIZE + 2]; -}; - inline Key_Event_Data -get_single_key(Key_Summary *summary, i32 index){ - Key_Event_Data key; - key = summary->keys[index]; - return key; +get_single_key(Key_Input_Data *data, i32 index){ + Key_Event_Data key = data->keys[index]; + return(key); } typedef struct Input_Summary{ Mouse_State mouse; - Key_Summary keys; + Key_Input_Data keys; f32 dt; } Input_Summary; diff --git a/4ed_api_implementation.cpp b/4ed_api_implementation.cpp index 26aec44a..acf1fec7 100644 --- a/4ed_api_implementation.cpp +++ b/4ed_api_implementation.cpp @@ -187,8 +187,7 @@ API_EXPORT bool32 Exec_System_Command(Application_Links *app, View_Summary *view, Buffer_Identifier buffer, char *path, int32_t path_len, char *command, int32_t command_len, Command_Line_Interface_Flag flags) /* DOC_PARAM(view, If the view parameter is non-null it specifies a view to display the command's output buffer, otherwise the command will still work but if there is a buffer capturing the output it will not automatically be displayed.) -DOC_PARAM(buffer, The buffer the command will output to is specified by the buffer parameter. -See Buffer_Identifier for information on how this type specifies a buffer. The command will cause a crash if no file is specified.) +DOC_PARAM(buffer, The buffer the command will output to is specified by the buffer parameter. See Buffer_Identifier for information on how this type specifies a buffer. The command will cause a crash if no file is specified.) DOC_PARAM(path, The path parameter specifies the path in which the command shall be executed. The string need not be null terminated.) DOC_PARAM(path_len, The parameter path_len specifies the length of the path string.) DOC_PARAM(command, The command parameter specifies the command that shall be executed. The string need not be null terminated.) @@ -1636,9 +1635,6 @@ DOC_SEE(Full_Cursor) if (vptr){ file = vptr->file_data.file; if (file && !file->is_loading){ - if (seek.type == buffer_seek_line_char && seek.character <= 0){ - seek.character = 1; - } result = true; *cursor_out = view_compute_cursor(vptr, seek, 0); fill_view_summary(view, vptr, cmd); @@ -1673,9 +1669,6 @@ DOC_SEE(Buffer_Seek) Assert(file); if (!file->is_loading){ result = true; - if (seek.type == buffer_seek_line_char && seek.character <= 0){ - seek.character = 1; - } Full_Cursor cursor = view_compute_cursor(vptr, seek, 0); view_set_cursor(vptr, cursor, set_preferred_x, file->settings.unwrapped_lines); fill_view_summary(view, vptr, cmd); @@ -1726,12 +1719,13 @@ DOC_SEE(Buffer_Seek) if (vptr){ file = vptr->file_data.file; if (file && !file->is_loading){ - result = true; if (seek.type != buffer_seek_pos){ + result = true; cursor = view_compute_cursor(vptr, seek, 0); vptr->edit_pos->mark = cursor.pos; } else{ + result = true; vptr->edit_pos->mark = seek.pos; } fill_view_summary(view, vptr, cmd); @@ -1905,17 +1899,17 @@ DOC_SEE(Mouse_State) /* API_EXPORT Event_Message Get_Event_Message (Application_Links *app){ - Event_Message message = {0}; - System_Functions *system = (System_Functions*)app->system_links; - Coroutine *coroutine = (Coroutine*)app->current_coroutine; - - if (app->type_coroutine == Co_View){ - Assert(coroutine); - system->yield_coroutine(coroutine); - message = *(Event_Message*)coroutine->in; - } - - return(message); +Event_Message message = {0}; +System_Functions *system = (System_Functions*)app->system_links; +Coroutine *coroutine = (Coroutine*)app->current_coroutine; + +if (app->type_coroutine == Co_View){ +Assert(coroutine); +system->yield_coroutine(coroutine); +message = *(Event_Message*)coroutine->in; +} + +return(message); } */ diff --git a/4ed_file_view.cpp b/4ed_file_view.cpp index b73e6753..1cdfe2a0 100644 --- a/4ed_file_view.cpp +++ b/4ed_file_view.cpp @@ -853,7 +853,7 @@ file_grow_starts_as_needed(General_Memory *general, Gap_Buffer *buffer, i32 addi i32 target_lines = count + additional_lines; if (target_lines > max || max == 0){ - max = l_round_up(target_lines + max, KB(1)); + max = l_round_up_i32(target_lines + max, KB(1)); i32 *new_lines = (i32*)general_memory_reallocate(general, buffer->line_starts, sizeof(i32)*count, sizeof(f32)*max); @@ -1904,7 +1904,7 @@ file_create_from_string(System_Functions *system, Models *models, Editing_File * Gap_Buffer_Init init = buffer_begin_init(&file->state.buffer, val.str, val.size); for (; buffer_init_need_more(&init); ){ i32 page_size = buffer_init_page_size(&init); - page_size = l_round_up(page_size, KB(4)); + page_size = l_round_up_i32(page_size, KB(4)); if (page_size < KB(4)){ page_size = KB(4); } @@ -2080,7 +2080,7 @@ Job_Callback_Sig(job_full_lex){ } } while (still_lexing); - i32 new_max = l_round_up(tokens.count+1, KB(1)); + i32 new_max = l_round_up_i32(tokens.count+1, KB(1)); system->acquire_lock(FRAME_LOCK); { @@ -2207,7 +2207,7 @@ file_first_lex_serial(Mem_Options *mem, Editing_File *file){ } } while (still_lexing); - i32 new_max = l_round_up(tokens.count+1, KB(1)); + i32 new_max = l_round_up_i32(tokens.count+1, KB(1)); { Assert(file->state.swap_array.tokens == 0); @@ -2321,7 +2321,7 @@ file_relex_parallel(System_Functions *system, Mem_Options *mem, Editing_File *fi if (inline_lex){ i32 new_count = cpp_relex_get_new_count(&state, array->count, &relex_array); if (new_count > array->max_count){ - i32 new_max = l_round_up(new_count, KB(1)); + i32 new_max = l_round_up_i32(new_count, KB(1)); array->tokens = (Cpp_Token*) general_memory_reallocate(general, array->tokens, array->count*sizeof(Cpp_Token), new_max*sizeof(Cpp_Token)); array->max_count = new_max; @@ -2436,7 +2436,7 @@ file_relex_serial(Mem_Options *mem, Editing_File *file, i32 start_i, i32 end_i, i32 new_count = cpp_relex_get_new_count(&state, array->count, &relex_array); if (new_count > array->max_count){ - i32 new_max = l_round_up(new_count, KB(1)); + i32 new_max = l_round_up_i32(new_count, KB(1)); array->tokens = (Cpp_Token*)general_memory_reallocate(general, array->tokens, array->count*sizeof(Cpp_Token), new_max*sizeof(Cpp_Token)); array->max_count = new_max; } @@ -2766,6 +2766,22 @@ view_cursor_move(View *view, i32 line, i32 character){ view_cursor_move(view, cursor); } +inline void +view_show_file(View *view){ + Editing_File *file = view->file_data.file; + if (file){ + view->map = get_map(view->persistent.models, file->settings.base_map_id); + } + else{ + view->map = get_map(view->persistent.models, mapid_global); + } + + if (view->showing_ui != VUI_None){ + view->showing_ui = VUI_None; + view->changed_context_in_step = 1; + } +} + internal void view_set_file(View *view, Editing_File *file, Models *models){ Assert(file); @@ -2792,6 +2808,10 @@ view_set_file(View *view, Editing_File *file, Models *models){ if (edit_pos->cursor.line == 0){ view_cursor_move(view, 0); } + + if (view->showing_ui == VUI_None){ + view_show_file(view); + } } struct Relative_Scrolling{ @@ -3714,22 +3734,6 @@ view_show_theme(View *view){ view->changed_context_in_step = 1; } -inline void -view_show_file(View *view){ - Editing_File *file = view->file_data.file; - if (file){ - view->map = get_map(view->persistent.models, file->settings.base_map_id); - } - else{ - view->map = get_map(view->persistent.models, mapid_global); - } - - if (view->showing_ui != VUI_None){ - view->showing_ui = VUI_None; - view->changed_context_in_step = 1; - } -} - internal String make_string_terminated(Partition *part, char *str, i32 len){ char *space = (char*)push_array(part, char, len + 1); @@ -4600,7 +4604,7 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su View_Step_Result result = {0}; GUI_Target *target = &view->gui_target; Models *models = view->persistent.models; - Key_Summary keys = input.keys; + Key_Input_Data keys = input.keys; b32 show_scrollbar = !view->hide_scrollbar; @@ -5754,23 +5758,19 @@ do_step_file_view(System_Functions *system, } { - Key_Event_Data key; - Key_Summary *keys = &user_input->keys; + Key_Input_Data *keys = &user_input->keys; void *ptr = (b + 1); - String string; - char activation_key; + String string = gui_read_string(&ptr); + AllowLocal(string); - i32 i, count; - - string = gui_read_string(&ptr); - activation_key = *(char*)ptr; + char activation_key = *(char*)ptr; activation_key = char_to_upper(activation_key); if (activation_key != 0){ - count = keys->count; - for (i = 0; i < count; ++i){ - key = get_single_key(keys, i); + i32 count = keys->count; + for (i32 i = 0; i < count; ++i){ + Key_Event_Data key = get_single_key(keys, i); if (char_to_upper(key.character) == activation_key){ target->active = b->id; result.is_animating = 1; diff --git a/4ed_gui.cpp b/4ed_gui.cpp index f21be2c2..8e9764f4 100644 --- a/4ed_gui.cpp +++ b/4ed_gui.cpp @@ -1254,9 +1254,7 @@ gui_do_jump(GUI_Target *target, GUI_View_Jump jump, GUI_Scroll_Vars vars){ } internal void -gui_standard_list(GUI_Target *target, GUI_id id, GUI_Scroll_Vars *vars, i32_Rect scroll_region, - Key_Summary *keys, i32 *list_i, GUI_Item_Update *update, - i16 user_up_key, i16 user_down_key){ +gui_standard_list(GUI_Target *target, GUI_id id, GUI_Scroll_Vars *vars, i32_Rect scroll_region, Key_Input_Data *keys, i32 *list_i, GUI_Item_Update *update, i16 user_up_key, i16 user_down_key){ if (update->has_adjustment){ *list_i = update->adjustment_value; diff --git a/4ed_layout.cpp b/4ed_layout.cpp index 11cdb68f..4fa49eec 100644 --- a/4ed_layout.cpp +++ b/4ed_layout.cpp @@ -277,29 +277,25 @@ layout_get_rect(Editing_Layout *layout, i32 id, i32 which_child){ internal i32_Rect layout_get_panel_rect(Editing_Layout *layout, Panel *panel){ Assert(layout->panel_count > 1); - i32_Rect r = layout_get_rect(layout, panel->parent, panel->which_child); - return(r); } internal void layout_fix_all_panels(Editing_Layout *layout){ - Panel *panel; Panel_Divider *dividers = layout->dividers; AllowLocal(dividers); i32 panel_count = layout->panel_count; if (panel_count > 1){ - for (panel = layout->used_sentinel.next; + for (Panel *panel = layout->used_sentinel.next; panel != &layout->used_sentinel; panel = panel->next){ panel->full = layout_get_panel_rect(layout, panel); panel_fix_internal_area(panel); } } - else{ - panel = layout->used_sentinel.next; + Panel *panel = layout->used_sentinel.next; panel->full.x0 = 0; panel->full.y0 = 0; panel->full.x1 = layout->full_width; @@ -316,10 +312,8 @@ layout_refit(Editing_Layout *layout, i32 prev_width, i32 prev_height){ i32 max = layout->panel_max_count - 1; Panel_Divider *divider = dividers; - if (layout->panel_count > 1){ Assert(prev_width != 0 && prev_height != 0); - for (i32 i = 0; i < max; ++i, ++divider){ if (divider->v_divider){ divider->pos = divider->pos; @@ -373,8 +367,8 @@ layout_compute_position(Editing_Layout *layout, Panel_Divider *divider, i32 pos) internal void layout_compute_abs_step(Editing_Layout *layout, i32 divider_id, i32_Rect rect, i32 *abs_pos){ Panel_Divider *div = layout->dividers + divider_id; - i32 p0 = 0, p1 = 0; + i32 p0 = 0, p1 = 0; if (div->v_divider){ p0 = rect.x0; p1 = rect.x1; } @@ -405,11 +399,7 @@ layout_compute_abs_step(Editing_Layout *layout, i32 divider_id, i32_Rect rect, i internal void layout_compute_absolute_positions(Editing_Layout *layout, i32 *abs_pos){ - i32_Rect r; - r.x0 = 0; - r.y0 = 0; - r.x1 = layout->full_width; - r.y1 = layout->full_height; + i32_Rect r = i32R(0, 0, layout->full_width, layout->full_height); if (layout->panel_count > 1){ layout_compute_abs_step(layout, layout->root, r, abs_pos); } @@ -434,14 +424,12 @@ layout_get_min_max_step_up(Editing_Layout *layout, b32 v, i32 divider_id, i32 wh } if (divider->parent != -1){ - layout_get_min_max_step_up(layout, v, divider->parent, divider->which_child, - abs_pos, min_out, max_out); + layout_get_min_max_step_up(layout, v, divider->parent, divider->which_child, abs_pos, min_out, max_out); } } internal void -layout_get_min_max_step_down(Editing_Layout *layout, b32 v, i32 divider_id, i32 which_child, - i32 *abs_pos, i32 *min_out, i32 *max_out){ +layout_get_min_max_step_down(Editing_Layout *layout, b32 v, i32 divider_id, i32 which_child, i32 *abs_pos, i32 *min_out, i32 *max_out){ Panel_Divider *divider = layout->dividers + divider_id; // NOTE(allen): The min/max is switched here, because children on the -1 side @@ -504,8 +492,8 @@ layout_get_min_max(Editing_Layout *layout, Panel_Divider *divider, i32 *abs_pos, internal void layout_update_pos_step(Editing_Layout *layout, i32 divider_id, i32_Rect rect, i32 *abs_pos){ Panel_Divider *div = layout->dividers + divider_id; - i32 p0 = 0, p1 = 0; + i32 p0 = 0, p1 = 0; if (div->v_divider){ p0 = rect.x0; p1 = rect.x1; } @@ -516,6 +504,7 @@ layout_update_pos_step(Editing_Layout *layout, i32 divider_id, i32_Rect rect, i3 i32 pos = abs_pos[divider_id]; i32_Rect r1 = rect, r2 = rect; f32 lpos = unlerp((f32)p0, (f32)pos, (f32)p1); + lpos = clamp(0.f, lpos, 1.f); div->pos = lpos; @@ -539,11 +528,7 @@ layout_update_pos_step(Editing_Layout *layout, i32 divider_id, i32_Rect rect, i3 internal void layout_update_all_positions(Editing_Layout *layout, i32 *abs_pos){ - i32_Rect r; - r.x0 = 0; - r.y0 = 0; - r.x1 = layout->full_width; - r.y1 = layout->full_height; + i32_Rect r = i32R(0, 0, layout->full_width, layout->full_height); if (layout->panel_count > 1){ layout_update_pos_step(layout, layout->root, r, abs_pos); } diff --git a/4ed_math.h b/4ed_math.h index 57f41c23..468972be 100644 --- a/4ed_math.h +++ b/4ed_math.h @@ -647,13 +647,28 @@ hit_check(int32_t x, int32_t y, i32_Rect rect){ } inline i32_Rect -get_inner_rect(i32_Rect outer, int32_t margin){ +get_inner_rect(i32_Rect outer, i32 margin){ i32_Rect r; r.x0 = outer.x0 + margin; r.y0 = outer.y0 + margin; r.x1 = outer.x1 - margin; r.y1 = outer.y1 - margin; - return r; + return(r); +} + +inline f32_Rect +get_inner_rect(f32_Rect outer, f32 margin){ + f32_Rect r; + r.x0 = outer.x0 + margin; + r.y0 = outer.y0 + margin; + r.x1 = outer.x1 - margin; + r.y1 = outer.y1 - margin; + return(r); +} + +inline int32_t +fits_inside(i32_Rect rect, i32_Rect outer){ + return(rect.x0 >= outer.x0 && rect.x1 <= outer.x1 && rect.y0 >= outer.y0 && rect.y1 <= outer.y1); } // BOTTOM diff --git a/4ed_rendering.h b/4ed_rendering.h index bae1a73e..75cf926c 100644 --- a/4ed_rendering.h +++ b/4ed_rendering.h @@ -151,6 +151,7 @@ struct Render_Target{ void *context; i32_Rect clip_boxes[5]; i32 clip_top; + b32 clip_all; i32 width, height; i32 bound_texture; u32 color; @@ -166,8 +167,6 @@ struct Render_Target{ Draw_Push_Clip *push_clip; Draw_Pop_Clip *pop_clip; Draw_Push_Piece *push_piece; - - //i32 dpi; }; #define DpiMultiplier(n,dpi) ((n) * (dpi) / 96) diff --git a/4ed_rendering_helper.cpp b/4ed_rendering_helper.cpp index 4836b146..9c30d292 100644 --- a/4ed_rendering_helper.cpp +++ b/4ed_rendering_helper.cpp @@ -9,20 +9,6 @@ // TOP -#if 0 -inline i32_Rect -i32_rect_zero(){ - i32_Rect rect={0}; - return(rect); -} - -inline f32_Rect -f32_rect_zero(){ - f32_Rect rect={0}; - return(rect); -} -#endif - inline void draw_push_clip(Render_Target *target, i32_Rect clip_box){ target->push_clip(target, clip_box); diff --git a/4ed_site.ctm b/4ed_site.ctm index 354cc4e313167a70641924d0f5033610a68e8767..d6332672b99d088e1612a5184bbc5cfd640f321b 100644 GIT binary patch delta 24 gcmbQjzJz_l6lQ@<*O%IEsJz6;%)r3V#l^q?0COw{oB#j- delta 7 OcmZ3&K81b56lMSl=mL%a diff --git a/4ed_system_shared.cpp b/4ed_system_shared.cpp index d4a2abb8..c327c9a0 100644 --- a/4ed_system_shared.cpp +++ b/4ed_system_shared.cpp @@ -266,69 +266,66 @@ draw_safe_push(Render_Target *target, i32 size, void *x){ internal void draw_push_piece(Render_Target *target, Render_Piece_Combined piece){ - PutStruct(Render_Piece_Header, piece.header); - - switch (piece.header.type){ - case piece_type_rectangle: - case piece_type_outline: - PutStruct(Render_Piece_Rectangle, piece.rectangle); - break; + if (!target->clip_all){ + PutStruct(Render_Piece_Header, piece.header); - case piece_type_gradient: - PutStruct(Render_Piece_Gradient, piece.gradient); - break; + switch (piece.header.type){ + case piece_type_rectangle: + case piece_type_outline: + PutStruct(Render_Piece_Rectangle, piece.rectangle); + break; + + case piece_type_gradient: + PutStruct(Render_Piece_Gradient, piece.gradient); + break; + + case piece_type_glyph: + case piece_type_mono_glyph: + PutStruct(Render_Piece_Glyph, piece.glyph); + break; + + case piece_type_mono_glyph_advance: + PutStruct(Render_Piece_Glyph_Advance, piece.glyph_advance); + break; + } - case piece_type_glyph: - case piece_type_mono_glyph: - PutStruct(Render_Piece_Glyph, piece.glyph); - break; - - case piece_type_mono_glyph_advance: - PutStruct(Render_Piece_Glyph_Advance, piece.glyph_advance); - break; + Assert(target->size <= target->max); } - - Assert(target->size <= target->max); } internal void draw_push_piece_clip(Render_Target *target, i32_Rect clip_box){ - // TODO(allen): optimize out if there are two clip box changes in a row - Render_Piece_Change_Clip clip; - Render_Piece_Header header; - - header.type = piece_type_change_clip; - clip.box = clip_box; - - PutStruct(Render_Piece_Header, header); - PutStruct(Render_Piece_Change_Clip, clip); -} - -inline int32_t -fits_inside(i32_Rect rect, i32_Rect outer){ - return (rect.x0 >= outer.x0 && rect.x1 <= outer.x1 && - rect.y0 >= outer.y0 && rect.y1 <= outer.y1); + if (!target->clip_all){ + // TODO(allen): optimize out if there are two clip box changes in a row + Render_Piece_Change_Clip clip; + Render_Piece_Header header; + + header.type = piece_type_change_clip; + clip.box = clip_box; + + PutStruct(Render_Piece_Header, header); + PutStruct(Render_Piece_Change_Clip, clip); + } } internal void draw_push_clip(Render_Target *target, i32_Rect clip_box){ - Assert(target->clip_top == -1 || - fits_inside(clip_box, target->clip_boxes[target->clip_top])); + Assert(target->clip_top == -1 || fits_inside(clip_box, target->clip_boxes[target->clip_top])); Assert(target->clip_top+1 < ArrayCount(target->clip_boxes)); target->clip_boxes[++target->clip_top] = clip_box; + target->clip_all = (clip_box.x0 >= clip_box.x1 || clip_box.y0 >= clip_box.y1); draw_push_piece_clip(target, clip_box); } internal i32_Rect draw_pop_clip(Render_Target *target){ - i32_Rect result = {0}; - i32_Rect clip_box = {0}; - Assert(target->clip_top > 0); - result = target->clip_boxes[target->clip_top]; + i32_Rect result = target->clip_boxes[target->clip_top]; --target->clip_top; - clip_box = target->clip_boxes[target->clip_top]; + i32_Rect clip_box = target->clip_boxes[target->clip_top]; + + target->clip_all = (clip_box.x0 >= clip_box.x1 || clip_box.y0 >= clip_box.y1); draw_push_piece_clip(target, clip_box); return(result); @@ -352,12 +349,7 @@ private_draw_rectangle(Render_Target *target, f32_Rect rect, u32 color){ inline void private_draw_rectangle_outline(Render_Target *target, f32_Rect rect, u32 color){ - f32_Rect r; - r.x0 = rect.x0 + .5f; - r.y0 = rect.y0 + .5f; - r.x1 = rect.x1 - .5f; - r.y1 = rect.y1 - .5f; - + f32_Rect r = get_inner_rect(rect, .5f); draw_set_color(target, color); draw_bind_texture(target, 0); glBegin(GL_LINE_STRIP); diff --git a/4tech_defines.h b/4tech_defines.h index a30a4842..f916793a 100644 --- a/4tech_defines.h +++ b/4tech_defines.h @@ -59,18 +59,34 @@ typedef double f64; #define Max(a,b) (((a)>(b))?(a):(b)) #define Min(a,b) (((a)<(b))?(a):(b)) -#define ceil32(v) (((v)>0)?( (v == (i32)(v))?((i32)(v)):((i32)((v)+1.f)) ):( ((i32)(v)) )) - -#define floor32(v) (((v)<0)?( (v == (i32)(v))?((i32)(v)):((i32)((v)-1.f)) ):( ((i32)(v)) )) - -#define round32(v) (floor32(v + 0.5f)) - -#define trunc32(v) (i32)(v) - -#define div_ceil(n,d) ( ((n) % (d) != 0) + ((n) / (d)) ) - -#define l_round_up(x,b) ( ((x)+(b)-1) - (((x)+(b)-1)%(b)) ) - +inline i32 ceil32(f32 v){ + return(((v)>0)?( (v == (i32)(v))?((i32)(v)):((i32)((v)+1.f)) ):( ((i32)(v)) )); + } + + inline i32 floor32(f32 v){ + return(((v)<0)?( (v == (i32)(v))?((i32)(v)):((i32)((v)-1.f)) ):( ((i32)(v)) )); + } + + inline i32 round32(f32 v){ + return(floor32(v + 0.5f)); + } + + inline i32 trun32(f32 v){ + return((i32)(v)); + } + + inline i32 div_ceil(i32 n, i32 d){ + return( ((n) % (d) != 0) + ((n) / (d)) ); + } + + inline i32 l_round_up_i32(i32 x, i32 b){ +return( ((x)+(b)-1) - (((x)+(b)-1)%(b)) ); + } + + inline u32 l_round_up_u32(u32 x, u32 b){ + return( ((x)+(b)-1) - (((x)+(b)-1)%(b)) ); + } + #define STR__(s) #s #define STR_(s) STR__(s) diff --git a/custom_4coder.dll b/custom_4coder.dll new file mode 100644 index 0000000000000000000000000000000000000000..8ca698f1a145224b7cb4addde6aad7c5f427d7bf GIT binary patch literal 292864 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 z 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%0AW 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 literal 0 HcmV?d00001 diff --git a/custom_4coder.pdb b/custom_4coder.pdb new file mode 100644 index 0000000000000000000000000000000000000000..7fb61c828a9884adacf9fe0437675088d2045f2f GIT binary patch literal 1699840 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�{UCYTtvV8|7&QMoNuo)&YT~cJ`A3MeKqeh>R#%3 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�T=|i1XX2o?6>pzePCdRYF`(*vQUTk7~wrX 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

Mi%2d8Wy_ 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

p3KO(2$;k1|em7vG&{zT{hVu=lNY_ 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

>Ym0mqCZS&8y&Z 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

>(FcD;L40U`FjsiX62em<*q{>cc4Elr#<}s!d4S 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 literal 0 HcmV?d00001 diff --git a/file/4coder_buffer.cpp b/file/4coder_buffer.cpp index 4dd15d45..9668505f 100644 --- a/file/4coder_buffer.cpp +++ b/file/4coder_buffer.cpp @@ -502,7 +502,7 @@ buffer_replace_range(Gap_Buffer *buffer, i32 start, i32 end, char *str, i32 len, assert(buffer->size1 + buffer->gap_size + buffer->size2 == buffer->max); } else{ - *request_amount = l_round_up(2*(*shift_amount + size), 4 << 10); + *request_amount = l_round_up_i32(2*(*shift_amount + size), 4 << 10); result = 1; } @@ -1235,6 +1235,7 @@ buffer_partial_from_line_character(Gap_Buffer *buffer, i32 line, i32 character){ } i32 size = buffer_size(buffer); + i32 this_start = buffer->line_starts[line_index]; i32 max_character = (size-this_start) + 1; if (line_index+1 < buffer->line_count){ @@ -1242,14 +1243,28 @@ buffer_partial_from_line_character(Gap_Buffer *buffer, i32 line, i32 character){ max_character = (next_start-this_start); } - if (character <= 0){ - character = 1; + i32 adjusted_pos = 0; + if (character > 0){ + if (character > max_character){ + adjusted_pos = max_character - 1; + } + else{ + adjusted_pos = character - 1; + } } - if (character > max_character){ - character = max_character; + else if (character == 0){ + adjusted_pos = 0; + } + else{ + if (-character > max_character){ + adjusted_pos = 0; + } + else{ + adjusted_pos = max_character + character; + } } - result.pos = this_start + character - 1; + result.pos = this_start + adjusted_pos; result.line = line_index + 1; result.character = character; diff --git a/file/4coder_file.cpp b/file/4coder_file.cpp index 6ccb01b5..8f1a5ada 100644 --- a/file/4coder_file.cpp +++ b/file/4coder_file.cpp @@ -285,7 +285,7 @@ file_compute_cursor_from_line_character(Editing_File *file, i32 line, i32 charac inline b32 file_compute_partial_cursor(Editing_File *file, Buffer_Seek seek, Partial_Cursor *cursor){ - b32 result = 1; + b32 result = true; switch (seek.type){ case buffer_seek_pos: { @@ -299,7 +299,7 @@ file_compute_partial_cursor(Editing_File *file, Buffer_Seek seek, Partial_Cursor default: { - result = 0; + result = false; }break; } return(result); diff --git a/meta/build.cpp b/meta/build.cpp index 632936cc..0134e9e6 100644 --- a/meta/build.cpp +++ b/meta/build.cpp @@ -445,6 +445,7 @@ standard_build(char *cdir, u32 flags){ fsm_generator(cdir); metagen(cdir); do_buildsuper(cdir, Custom_Experiments); + //do_buildsuper(cdir, Custom_Casey); //do_buildsuper(cdir, Custom_ChronalVim); build_main(cdir, flags); } diff --git a/power/4coder_casey.cpp b/power/4coder_casey.cpp index 9996b98a..8f41ab89 100644 --- a/power/4coder_casey.cpp +++ b/power/4coder_casey.cpp @@ -4,7 +4,7 @@ to know what I'm actually even doing. So if you decide to use the code in here, be advised that it might be super crashy or break something or cause you to lose work or who knows what else! - + DON'T SAY I WE DIDN'T WARN YA: This custom extension provided "as is" without warranty of any kind, either express or implied, including without limitation any implied warranties of condition, uninterrupted use, @@ -16,9 +16,9 @@ - High priority: - Buffer switching still seems a little bit broken. I find I can't reliably hit switch-return and switch to the most recently viewed file that wasn't one of the two currently viewed buffers? - + - High-DPI settings break rendering and all fonts just show up as solid squares <<< Check this again - + - Pretty sure auto-indent has some bugs. Things that should be pretty easy to indent properly even from only a few surrounding lines seem to be indented improperly at the moment - Multi-line comments should default to indenting to the indentation of the line prior? @@ -34,24 +34,24 @@ as well - similarly, scrolling breaks, in that it thinks it has "hit the end" of the buffer when you cursor down, but the cursor and the rest of the wrapped lines are actually off the bottom of the screen) - + - Search: - Should highlight all matches in the buffer - Seems to buggily break out of the search sometimes for no reason? (eg., you hit the end and it just drops out of the search instead of stopping?) - Tracked this one down: I think it is because spurious mousewheel or other inputs break out of the search. How can this be prevented? - + - Display: - When switching _back_ to a buffer, it seems like it loses the scroll position, instead preferring to center the cursor? This is undesirable IMO... <<< Check this again - + - I'd like to be able to hide the mark in text entry mode, and show the whole highlighted region in edit mode - perhaps even with a magic split at the top or bottom that shows where the mark is if it's off screen? - There are often repaint bugs with 4coder coming to the front / unminimizing, etc. I think this might have something to do with the way you're doing lots of semaphore locking but I haven't investigated yet. <<< How are we doing on this bug? It might be fixed but I haven't heard from anyone. - + - Need a word-wrap mode that wraps at word boundaries instead of characters - Need to be able to set a word wrap length at something other than the window - First go-to-line for a file seems to still just go to the beginning of the buffer? @@ -64,7 +64,7 @@ of people on The Stream(TM) - Some kind of matching brace display so in long ifs, etc., you can see what they match (maybe draw it directly into the buffer?) - + - Indentation: - Multiple // lines don't seem to indent properly. The first one will go to the correct place, but the subsequent ones will go to the first column regardless? - Need to have better indentation / wrapping control for typing in comments. @@ -74,13 +74,13 @@ etc. - It should never reindent text in comments that it doesn't know how to indent - eg., in a comment block, it shouldn't decide to move things around if it doesn't know what they are - Sometimes when I hit [ it inserts a [ _and_ a space? I think this is related to the auto-indent? <<< Check this again - + - Buffer management: - I'd like to be able to set a buffer to "auto-revert", so it reloads automatically whenever it changes externally - If you undo back to where there are no changes, the "buffer changed" flag should be cleared - Seems like there's no way to switch to buffers whose names are substrings of other buffers' names without using the mouse? <<< Check this again - + - File system - When switching to a buffer that has changed on disk, notify? Really this can just be some way to query the modification flag and then the customization layer can do it? @@ -88,14 +88,14 @@ - I'd prefer it if file-open could create new files, and that I could get called on that so I can insert my boilerplate headers on new files - I'd prefer it if file-open deleted per-character instead of deleting entire path sections - + - Need auto-complete for things like "arbitrary command", with options listed, etc., so this should either be built into 4ed, or the custom DLL should have the ability to display possible completions and iterate over internal cmdid's, etc. Possibly the latter, for maximal ability of customizers to add their own commands? - + - Macro recording/playback - + - Arbitrary cool features: - Once you can highlight things in 4coder buffers, I could make it so that my metacompiler output _ranges_ for errors, so it highlights the whole token rather @@ -107,7 +107,7 @@ - You should just implement a shell inside 4coder which can call all the 4coder stuff as well as execute system stuff, so that from now on you just write scripts "in 4coder", etc., so they are always portable everywhere 4coder runs? - + - Things I should write: - Ability to do "file open from same directory as the current buffer" - Spell-checker @@ -139,11 +139,11 @@ struct Parsed_Error { int exists; - + String target_file_name; int target_line_number; int target_column_number; - + int source_buffer_id; int source_position; }; @@ -157,7 +157,7 @@ static char BuildDirectory[4096] = "./"; enum token_type { Token_Unknown, - + Token_OpenParen, Token_CloseParen, Token_Asterisk, @@ -168,13 +168,13 @@ enum token_type Token_Colon, Token_Number, Token_Comma, - + Token_EndOfStream, }; struct token { token_type Type; - + size_t TextLength; char *Text; }; @@ -189,7 +189,7 @@ IsEndOfLine(char C) { bool Result = ((C == '\n') || (C == '\r')); - + return(Result); } @@ -201,7 +201,7 @@ IsWhitespace(char C) (C == '\v') || (C == '\f') || IsEndOfLine(C)); - + return(Result); } @@ -210,7 +210,7 @@ IsAlpha(char C) { bool Result = (((C >= 'a') && (C <= 'z')) || ((C >= 'A') && (C <= 'Z'))); - + return(Result); } @@ -218,7 +218,7 @@ inline bool IsNumeric(char C) { bool Result = ((C >= '0') && (C <= '9')); - + return(Result); } @@ -250,7 +250,7 @@ EatAllWhitespace(tokenizer *Tokenizer) { ++Tokenizer->At; } - + if(Tokenizer->At[0] == '*') { Tokenizer->At += 2; @@ -267,7 +267,7 @@ static token GetToken(tokenizer *Tokenizer) { EatAllWhitespace(Tokenizer); - + token Token = {}; Token.TextLength = 1; Token.Text = Tokenizer->At; @@ -276,7 +276,7 @@ GetToken(tokenizer *Tokenizer) switch(C) { case 0: {--Tokenizer->At; Token.Type = Token_EndOfStream;} break; - + case '(': {Token.Type = Token_OpenParen;} break; case ')': {Token.Type = Token_CloseParen;} break; case '*': {Token.Type = Token_Asterisk;} break; @@ -286,7 +286,7 @@ GetToken(tokenizer *Tokenizer) case '%': {Token.Type = Token_Percent;} break; case ':': {Token.Type = Token_Colon;} break; case ',': {Token.Type = Token_Comma;} break; - + default: { if(IsNumeric(C)) @@ -307,7 +307,7 @@ GetToken(tokenizer *Tokenizer) } } break; } - + return(Token); } @@ -325,7 +325,7 @@ IsH(String extension) bool Result = (match(extension, make_lit_string("h")) || match(extension, make_lit_string("hpp")) || match(extension, make_lit_string("hin"))); - + return(Result); } @@ -335,7 +335,7 @@ IsCPP(String extension) bool Result = (match(extension, make_lit_string("c")) || match(extension, make_lit_string("cpp")) || match(extension, make_lit_string("cin"))); - + return(Result); } @@ -343,7 +343,7 @@ inline bool IsINL(String extension) { bool Result = (match(extension, make_lit_string("inl")) != 0); - + return(Result); } @@ -351,7 +351,7 @@ inline bool IsCode(String extension) { bool Result = (IsH(extension) || IsCPP(extension) || IsINL(extension)); - + return(Result); } @@ -404,7 +404,7 @@ DeleteAfterCommand(struct Application_Links *app, unsigned long long CommandID) { unsigned int access = AccessOpen; View_Summary view = get_active_view(app, access); - + int pos2 = view.cursor.pos; if (CommandID < cmdid_count){ exec_command(app, (Command_ID)CommandID); @@ -414,9 +414,9 @@ DeleteAfterCommand(struct Application_Links *app, unsigned long long CommandID) } refresh_view(app, &view); int pos1 = view.cursor.pos; - + Range range = make_range(pos1, pos2); - + Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); buffer_replace_range(app, &buffer, range.min, range.max, 0, 0); } @@ -435,18 +435,18 @@ CUSTOM_COMMAND_SIG(casey_kill_to_end_of_line) { unsigned int access = AccessOpen; View_Summary view = get_active_view(app, access); - + int pos2 = view.cursor.pos; exec_command(app, seek_end_of_line); refresh_view(app, &view); int pos1 = view.cursor.pos; - + Range range = make_range(pos1, pos2); if(pos1 == pos2) { range.max += 1; } - + Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); buffer_replace_range(app, &buffer, range.min, range.max, 0, 0); exec_command(app, auto_tab_line_at_cursor); @@ -496,16 +496,16 @@ inline switch_to_result SwitchToOrLoadFile(struct Application_Links *app, String FileName, bool CreateIfNotFound = false) { switch_to_result Result = {}; - + SanitizeSlashes(FileName); unsigned int access = AccessAll; View_Summary view = get_active_view(app, access); Buffer_Summary buffer = get_buffer_by_name(app, FileName.str, FileName.size, access); - + Result.view = view; Result.buffer = buffer; - + if(buffer.exists) { view_set_buffer(app, &view, buffer.buffer_id, 0); @@ -525,7 +525,7 @@ SwitchToOrLoadFile(struct Application_Links *app, String FileName, bool CreateIf Result.Switched = true; } } - + return(Result); } @@ -543,29 +543,29 @@ CUSTOM_COMMAND_SIG(casey_build_search) // we should properly suballocating from app->memory. String dir = make_string(app->memory, 0, app->memory_size); dir.size = directory_get_hot(app, dir.str, dir.memory_size); - + while (keep_going) { old_size = dir.size; append(&dir, "build.bat"); - + if (file_exists(app, dir.str, dir.size)) { dir.size = old_size; memcpy(BuildDirectory, dir.str, dir.size); BuildDirectory[dir.size] = 0; - + // TODO(allen): There are ways this could be boiled down // to one print message which would be better. print_message(app, literal("Building with: ")); print_message(app, BuildDirectory, dir.size); print_message(app, literal("build.bat\n")); - + return; } - + dir.size = old_size; - + if (directory_cd(app, dir.str, &dir.size, dir.memory_size, literal("..")) == 0) { keep_going = 0; @@ -579,7 +579,7 @@ CUSTOM_COMMAND_SIG(casey_find_corresponding_file) unsigned int access = AccessProtected; View_Summary view = get_active_view(app, access); Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); - + String extension = file_extension(make_string(buffer.file_name, buffer.file_name_len)); if (extension.str) { @@ -589,14 +589,14 @@ CUSTOM_COMMAND_SIG(casey_find_corresponding_file) "hin", "h", }; - + char *CExtensions[] = { "c", "cin", "cpp", }; - + int ExtensionCount = 0; char **Extensions = 0; if(IsH(extension)) @@ -609,7 +609,7 @@ CUSTOM_COMMAND_SIG(casey_find_corresponding_file) ExtensionCount = ArrayCount(HExtensions); Extensions = HExtensions; } - + int MaxExtensionLength = 3; int Space = (int)(buffer.file_name_len + MaxExtensionLength); String FileNameStem = make_string(buffer.file_name, (int)(extension.str - buffer.file_name), 0); @@ -621,7 +621,7 @@ CUSTOM_COMMAND_SIG(casey_find_corresponding_file) TestFileName.size = 0; append(&TestFileName, FileNameStem); append(&TestFileName, Extensions[ExtensionIndex]); - + if(SwitchToOrLoadFile(app, TestFileName, ((ExtensionIndex + 1) == ExtensionCount)).Switched) { break; @@ -635,12 +635,12 @@ CUSTOM_COMMAND_SIG(casey_find_corresponding_file_other_window) unsigned int access = AccessProtected; View_Summary old_view = get_active_view(app, access); Buffer_Summary buffer = get_buffer(app, old_view.buffer_id, access); - + exec_command(app, change_active_panel); View_Summary new_view = get_active_view(app, AccessAll); view_set_buffer(app, &new_view, buffer.buffer_id, 0); - -// exec_command(app, casey_find_corresponding_file); + + // exec_command(app, casey_find_corresponding_file); } CUSTOM_COMMAND_SIG(casey_save_and_make_without_asking) @@ -657,11 +657,6 @@ CUSTOM_COMMAND_SIG(casey_save_and_make_without_asking) save_buffer(app, &buffer, buffer.file_name, buffer.file_name_len, 0); } - // NOTE(allen): The parameter pushing made it a little easier - // to deal with this particular pattern where two similar strings - // were both used. Now both strings need to exist at the same - // time on the users side. - int size = app->memory_size/2; String dir = make_string(app->memory, 0, size); String command = make_string((char*)app->memory + size, 0, size); @@ -683,14 +678,17 @@ CUSTOM_COMMAND_SIG(casey_save_and_make_without_asking) { unsigned int access = AccessAll; View_Summary view = get_active_view(app, access); + char *BufferName = GlobalCompilationBufferName; + int BufferNameLength = (int)strlen(GlobalCompilationBufferName); exec_system_command(app, &view, - buffer_identifier(GlobalCompilationBufferName, (int)strlen(GlobalCompilationBufferName)), + buffer_identifier(BufferName, BufferNameLength), dir.str, dir.size, command.str, command.size, CLI_OverlapWithConflict); + lock_jump_buffer(BufferName, BufferNameLength); } - exec_command(app, change_active_panel); + exec_command(app, change_active_panel); prev_location = null_location; } @@ -699,7 +697,7 @@ internal bool casey_errors_are_the_same(Parsed_Error a, Parsed_Error b) { bool result = ((a.exists == b.exists) && compare(a.target_file_name, b.target_file_name) && (a.target_line_number == b.target_line_number)); - + return(result); } @@ -713,7 +711,7 @@ casey_goto_error(Application_Links *app, Parsed_Error e) { app->view_set_cursor(app, &Switch.view, seek_line_char(e.target_line_number, e.target_column_number), 1); } - + View_Summary compilation_view = get_first_view_with_buffer(app, e.source_buffer_id); if(compilation_view.exists) { @@ -726,24 +724,24 @@ internal Parsed_Error casey_parse_error(Application_Links *app, Buffer_Summary buffer, View_Summary view) { Parsed_Error result = {}; - + refresh_view(app, &view); int restore_pos = view.cursor.pos; - + // TODO(allen): view_compute_cursor can get these // positions without ever changing the position of the cursor. app->view_set_cursor(app, &view, seek_line_char(view.cursor.line, 1), 1); int start = view.cursor.pos; - + app->view_set_cursor(app, &view, seek_line_char(view.cursor.line, 65536), 1); int end = view.cursor.pos; - + app->view_set_cursor(app, &view, seek_pos(restore_pos), 1); - + int size = end - start; - + char *ParsingRegion = (char *)malloc(size + 1); -// char *ParsingRegion = (char *)app->push_memory(app, size + 1); + // char *ParsingRegion = (char *)app->push_memory(app, size + 1); app->buffer_read_range(app, &buffer, start, end, ParsingRegion); ParsingRegion[size] = 0; tokenizer Tokenizer = {ParsingRegion}; @@ -756,7 +754,7 @@ casey_parse_error(Application_Links *app, Buffer_Summary buffer, View_Summary vi if(LineToken.Type == Token_Number) { token CloseToken = GetToken(&Tokenizer); - + int column_number = 0; if(CloseToken.Type == Token_Comma) { @@ -767,7 +765,7 @@ casey_parse_error(Application_Links *app, Buffer_Summary buffer, View_Summary vi CloseToken = GetToken(&Tokenizer); } } - + if(CloseToken.Type == Token_CloseParen) { token ColonToken = GetToken(&Tokenizer); @@ -775,7 +773,7 @@ casey_parse_error(Application_Links *app, Buffer_Summary buffer, View_Summary vi { // NOTE(casey): We maybe found an error! int line_number = atoi(LineToken.Text); - + char *Seek = Token.Text; while(Seek != ParsingRegion) { @@ -787,17 +785,17 @@ casey_parse_error(Application_Links *app, Buffer_Summary buffer, View_Summary vi } break; } - + --Seek; } - + result.exists = true; result.target_file_name = make_string(Seek, (int)(Token.Text - Seek));; result.target_line_number = line_number; result.target_column_number = column_number; result.source_buffer_id = buffer.buffer_id; result.source_position = start + (int)(ColonToken.Text - ParsingRegion); - + break; } } @@ -809,7 +807,7 @@ casey_parse_error(Application_Links *app, Buffer_Summary buffer, View_Summary vi } } free(ParsingRegion); - + return(result); } @@ -818,10 +816,10 @@ casey_seek_error_dy(Application_Links *app, int dy) { Buffer_Summary Buffer = app->get_buffer_by_name(app, GlobalCompilationBufferName, (int)strlen(GlobalCompilationBufferName), AccessAll); View_Summary compilation_view = get_first_view_with_buffer(app, Buffer.buffer_id); - + // NOTE(casey): First get the current error (which may be none, if we've never parsed before) Parsed_Error StartingError = casey_parse_error(app, Buffer, compilation_view); - + // NOTE(casey): Now hunt for the previous distinct error for(;;) { @@ -846,7 +844,7 @@ casey_seek_error_dy(Application_Links *app, int dy) CUSTOM_COMMAND_SIG(casey_goto_previous_error) { -// casey_seek_error_dy(app, -1); + // casey_seek_error_dy(app, -1); seek_error(app, &global_part, true, false, -1); } @@ -888,13 +886,13 @@ CUSTOM_COMMAND_SIG(casey_fill_paragraph) enum calc_node_type { CalcNode_UnaryMinus, - + CalcNode_Add, CalcNode_Subtract, CalcNode_Multiply, CalcNode_Divide, CalcNode_Mod, - + CalcNode_Constant, }; struct calc_node @@ -909,7 +907,7 @@ internal double ExecCalcNode(calc_node *Node) { double Result = 0.0f; - + if(Node) { switch(Node->Type) @@ -924,7 +922,7 @@ ExecCalcNode(calc_node *Node) default: {Assert(!"AHHHHH!");} } } - + return(Result); } @@ -954,10 +952,10 @@ internal calc_node * ParseNumber(tokenizer *Tokenizer) { calc_node *Result = AddNode(CalcNode_Constant); - + token Token = GetToken(Tokenizer); Result->Value = atof(Token.Text); - + return(Result); } @@ -965,7 +963,7 @@ internal calc_node * ParseConstant(tokenizer *Tokenizer) { calc_node *Result = 0; - + token Token = PeekToken(Tokenizer); if(Token.Type == Token_Minus) { @@ -977,7 +975,7 @@ ParseConstant(tokenizer *Tokenizer) { Result = ParseNumber(Tokenizer); } - + return(Result); } @@ -985,7 +983,7 @@ internal calc_node * ParseMultiplyExpression(tokenizer *Tokenizer) { calc_node *Result = 0; - + token Token = PeekToken(Tokenizer); if((Token.Type == Token_Minus) || (Token.Type == Token_Number)) @@ -1003,7 +1001,7 @@ ParseMultiplyExpression(tokenizer *Tokenizer) Result = AddNode(CalcNode_Multiply, Result, ParseNumber(Tokenizer)); } } - + return(Result); } @@ -1011,7 +1009,7 @@ internal calc_node * ParseAddExpression(tokenizer *Tokenizer) { calc_node *Result = 0; - + token Token = PeekToken(Tokenizer); if((Token.Type == Token_Minus) || (Token.Type == Token_Number)) @@ -1029,7 +1027,7 @@ ParseAddExpression(tokenizer *Tokenizer) Result = AddNode(CalcNode_Subtract, Result, ParseMultiplyExpression(Tokenizer)); } } - + return(Result); } @@ -1037,7 +1035,7 @@ internal calc_node * ParseCalc(tokenizer *Tokenizer) { calc_node *Node = ParseAddExpression(Tokenizer); - + return(Node); } @@ -1045,26 +1043,26 @@ CUSTOM_COMMAND_SIG(casey_quick_calc) { unsigned int access = AccessOpen; View_Summary view = get_active_view(app, access); - + Range range = get_range(&view); - + size_t Size = range.max - range.min; char *Stuff = (char *)malloc(Size + 1); Stuff[Size] = 0; - + Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); buffer_read_range(app, &buffer, range.min, range.max, Stuff); - + tokenizer Tokenizer = {Stuff}; calc_node *CalcTree = ParseCalc(&Tokenizer); double ComputedValue = ExecCalcNode(CalcTree); FreeCalcNode(CalcTree); - + char ResultBuffer[256]; int ResultSize = sprintf(ResultBuffer, "%f", ComputedValue); - + buffer_replace_range(app, &buffer, range.min, range.max, ResultBuffer, ResultSize); - + free(Stuff); } @@ -1072,7 +1070,7 @@ internal void OpenProject(Application_Links *app, char *ProjectFileName) { int TotalOpenAttempts = 0; - + FILE *ProjectFile = fopen(ProjectFileName, "r"); if(ProjectFile) { @@ -1082,13 +1080,13 @@ OpenProject(Application_Links *app, char *ProjectFileName) { --BuildDirSize; } - + if((BuildDirSize) && (BuildDirectory[BuildDirSize - 1] != '/')) { BuildDirectory[BuildDirSize++] = '/'; BuildDirectory[BuildDirSize] = 0; } - + char SourceFileDirectoryName[4096]; char FileDirectoryName[4096]; while(fgets(SourceFileDirectoryName, sizeof(SourceFileDirectoryName) - 1, ProjectFile)) @@ -1101,15 +1099,15 @@ OpenProject(Application_Links *app, char *ProjectFileName) { --dir.size; } - + if(dir.size && dir.str[dir.size-1] != '/') { dir.str[dir.size++] = '/'; } - + File_List list = get_file_list(app, dir.str, dir.size); int dir_size = dir.size; - + for (int i = 0; i < list.count; ++i) { File_Info *info = list.infos + i; @@ -1125,16 +1123,16 @@ OpenProject(Application_Links *app, char *ProjectFileName) // was originally, so that new appends overwrite old ones. dir.size = dir_size; append(&dir, info->filename); - + open_file(app, 0, dir.str, dir.size, true, true); ++TotalOpenAttempts; } } } - + free_file_list(app, list); } - + fclose(ProjectFile); } } @@ -1145,13 +1143,13 @@ CUSTOM_COMMAND_SIG(casey_execute_arbitrary_command) char space[1024], more_space[1024]; bar.prompt = make_lit_string("Command: "); bar.string = make_fixed_width_string(space); - + if (!query_user_string(app, &bar)) return; end_query_bar(app, &bar, 0); - + if(match(bar.string, make_lit_string("project"))) { -// exec_command(app, open_all_code); + // exec_command(app, open_all_code); } else if(match(bar.string, make_lit_string("open menu"))) { @@ -1163,7 +1161,7 @@ CUSTOM_COMMAND_SIG(casey_execute_arbitrary_command) append(&bar.prompt, make_lit_string("Unrecognized: ")); append(&bar.prompt, bar.string); bar.string.size = 0; - + start_query_bar(app, &bar, 0); get_user_input(app, EventOnAnyKey | EventOnButton, 0); } @@ -1182,7 +1180,7 @@ UpdateModalIndicator(Application_Links *app) {Stag_Margin_Active, 0x404040}, {Stag_Bar, 0xCACACA} }; - + Theme_Color edit_colors[] = { {Stag_Cursor, 0xFF0000}, @@ -1193,7 +1191,7 @@ UpdateModalIndicator(Application_Links *app) {Stag_Margin_Active, 0x934420}, {Stag_Bar, 0x934420} }; - + if (GlobalEditMode){ set_theme_colors(app, edit_colors, ArrayCount(edit_colors)); } @@ -1304,10 +1302,10 @@ OPEN_FILE_HOOK_SIG(casey_file_settings) unsigned int access = AccessAll; //Buffer_Summary buffer = app->get_parameter_buffer(app, 0, access); Buffer_Summary buffer = get_buffer(app, buffer_id, access); - + int treat_as_code = 0; int treat_as_project = 0; - + if (buffer.file_name && buffer.size < (16 << 20)) { String ext = file_extension(make_string(buffer.file_name, buffer.file_name_len)); @@ -1323,10 +1321,10 @@ OPEN_FILE_HOOK_SIG(casey_file_settings) { OpenProject(app, buffer.file_name); // NOTE(casey): Don't actually want to kill this, or you can never edit the project. -// exec_command(app, cmdid_kill_buffer); - + // exec_command(app, cmdid_kill_buffer); + } - + return(0); } @@ -1334,7 +1332,7 @@ bool CubicUpdateFixedDuration1(float *P0, float *V0, float P1, float V1, float Duration, float dt) { bool Result = false; - + if(dt > 0) { if(Duration < dt) @@ -1347,27 +1345,27 @@ CubicUpdateFixedDuration1(float *P0, float *V0, float P1, float V1, float Durati { float t = (dt / Duration); float u = (1.0f - t); - + float C0 = 1*u*u*u; float C1 = 3*u*u*t; float C2 = 3*u*t*t; float C3 = 1*t*t*t; - + float dC0 = -3*u*u; float dC1 = -6*u*t + 3*u*u; float dC2 = 6*u*t - 3*t*t; float dC3 = 3*t*t; - + float B0 = *P0; float B1 = *P0 + (Duration / 3.0f) * *V0; float B2 = P1 - (Duration / 3.0f) * V1; float B3 = P1; - + *P0 = C0*B0 + C1*B1 + C2*B2 + C3*B3; *V0 = (dC0*B0 + dC1*B1 + dC2*B2 + dC3*B3) * (1.0f / Duration); } } - + return(Result); } @@ -1385,18 +1383,18 @@ SCROLL_RULE_SIG(casey_smooth_scroll_rule){ if(is_new_target) { if((*scroll_x != target_x) || - (*scroll_y != target_y)) + (*scroll_y != target_y)) { velocity->t = 0.1f; } } - + if(velocity->t > 0) { result = !(CubicUpdateFixedDuration1(scroll_x, &velocity->x, target_x, 0.0f, velocity->t, dt) || - CubicUpdateFixedDuration1(scroll_y, &velocity->y, target_y, 0.0f, velocity->t, dt)); + CubicUpdateFixedDuration1(scroll_y, &velocity->y, target_y, 0.0f, velocity->t, dt)); } - + velocity->t -= dt; if(velocity->t < 0) { @@ -1404,7 +1402,7 @@ SCROLL_RULE_SIG(casey_smooth_scroll_rule){ *scroll_x = target_x; *scroll_y = target_y; } - + return(result); } @@ -1415,7 +1413,7 @@ static WINDOWPLACEMENT GlobalWindowPosition = {sizeof(GlobalWindowPosition)}; internal BOOL CALLBACK win32_find_4coder_window(HWND Window, LPARAM LParam) { BOOL Result = TRUE; - + char TestClassName[256]; GetClassName(Window, TestClassName, sizeof(TestClassName)); if((strcmp("4coder-win32-wndclass", TestClassName) == 0) && @@ -1424,7 +1422,7 @@ internal BOOL CALLBACK win32_find_4coder_window(HWND Window, LPARAM LParam) GlobalWindowHandle = Window; Result = FALSE; } - + return(Result); } @@ -1435,21 +1433,21 @@ win32_toggle_fullscreen(void) // NOTE(casey): This follows Raymond Chen's prescription // for fullscreen toggling, see: // http://blogs.msdn.com/b/oldnewthing/archive/2010/04/12/9994016.aspx - + HWND Window = GlobalWindowHandle; DWORD Style = GetWindowLong(Window, GWL_STYLE); if(Style & WS_OVERLAPPEDWINDOW) { MONITORINFO MonitorInfo = {sizeof(MonitorInfo)}; if(GetWindowPlacement(Window, &GlobalWindowPosition) && - GetMonitorInfo(MonitorFromWindow(Window, MONITOR_DEFAULTTOPRIMARY), &MonitorInfo)) + GetMonitorInfo(MonitorFromWindow(Window, MONITOR_DEFAULTTOPRIMARY), &MonitorInfo)) { SetWindowLong(Window, GWL_STYLE, Style & ~WS_OVERLAPPEDWINDOW); SetWindowPos(Window, HWND_TOP, - MonitorInfo.rcMonitor.left, MonitorInfo.rcMonitor.top, - MonitorInfo.rcMonitor.right - MonitorInfo.rcMonitor.left, - MonitorInfo.rcMonitor.bottom - MonitorInfo.rcMonitor.top, - SWP_NOOWNERZORDER | SWP_FRAMECHANGED); + MonitorInfo.rcMonitor.left, MonitorInfo.rcMonitor.top, + MonitorInfo.rcMonitor.right - MonitorInfo.rcMonitor.left, + MonitorInfo.rcMonitor.bottom - MonitorInfo.rcMonitor.top, + SWP_NOOWNERZORDER | SWP_FRAMECHANGED); } } else @@ -1457,8 +1455,8 @@ win32_toggle_fullscreen(void) SetWindowLong(Window, GWL_STYLE, Style | WS_OVERLAPPEDWINDOW); SetWindowPlacement(Window, &GlobalWindowPosition); SetWindowPos(Window, 0, 0, 0, 0, 0, - SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | - SWP_NOOWNERZORDER | SWP_FRAMECHANGED); + SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | + SWP_NOOWNERZORDER | SWP_FRAMECHANGED); } #else ShowWindow(GlobalWindowHandle, SW_MAXIMIZE); @@ -1477,10 +1475,10 @@ HOOK_SIG(casey_start) exec_command(app, open_panel_vsplit); exec_command(app, hide_scrollbar); exec_command(app, change_active_panel); - + change_theme(app, literal("Handmade Hero")); change_font(app, literal("Liberation Mono"), true); - + Theme_Color colors[] = { {Stag_Default, 0xA08563}, @@ -1514,9 +1512,9 @@ HOOK_SIG(casey_start) // {Stag_Next_Undo, }, }; set_theme_colors(app, colors, ArrayCount(colors)); - + win32_toggle_fullscreen(); - + return(0); } @@ -1524,14 +1522,14 @@ extern "C" GET_BINDING_DATA(get_bindings) { Bind_Helper context_actual = begin_bind_helper(data, size); Bind_Helper *context = &context_actual; - + set_hook(context, hook_start, casey_start); set_command_caller(context, default_command_caller); set_open_file_hook(context, casey_file_settings); set_scroll_rule(context, casey_smooth_scroll_rule); - + EnumWindows(win32_find_4coder_window, 0); - + begin_map(context, mapid_global); { bind(context, 'z', MDFR_NONE, cmdid_interactive_open); @@ -1542,28 +1540,28 @@ extern "C" GET_BINDING_DATA(get_bindings) bind(context, key_page_up, MDFR_NONE, search); bind(context, key_page_down, MDFR_NONE, reverse_search); bind(context, 'm', MDFR_NONE, casey_save_and_make_without_asking); - + // NOTE(allen): Added this so mouse would keep working rougly as before. // Of course now there could be a modal click behavior if that will be useful. // As well as right click. bind(context, key_mouse_left, MDFR_NONE, click_set_cursor); } end_map(context); - + begin_map(context, mapid_file); - + bind_vanilla_keys(context, write_character); - + bind(context, key_insert, MDFR_NONE, begin_free_typing); bind(context, '`', MDFR_NONE, begin_free_typing); bind(context, key_esc, MDFR_NONE, end_free_typing); bind(context, '\n', MDFR_NONE, casey_newline_and_indent); bind(context, '\n', MDFR_SHIFT, casey_newline_and_indent); - + // NOTE(casey): Modal keys come here. bind(context, ' ', MDFR_NONE, modal_space); bind(context, ' ', MDFR_SHIFT, modal_space); - + bind(context, '\\', MDFR_NONE, modal_back_slash); bind(context, '\'', MDFR_NONE, modal_single_quote); bind(context, ',', MDFR_NONE, modal_comma); @@ -1600,7 +1598,7 @@ extern "C" GET_BINDING_DATA(get_bindings) bind(context, 'x', MDFR_NONE, modal_x); bind(context, 'y', MDFR_NONE, modal_y); bind(context, 'z', MDFR_NONE, modal_z); - + bind(context, '1', MDFR_NONE, modal_1); bind(context, '2', MDFR_NONE, modal_2); bind(context, '3', MDFR_NONE, modal_3); @@ -1613,42 +1611,42 @@ extern "C" GET_BINDING_DATA(get_bindings) bind(context, '0', MDFR_NONE, modal_0); bind(context, '-', MDFR_NONE, modal_minus); bind(context, '=', MDFR_NONE, modal_equals); - + bind(context, key_back, MDFR_NONE, modal_backspace); bind(context, key_back, MDFR_SHIFT, modal_backspace); - + bind(context, key_up, MDFR_NONE, modal_up); bind(context, key_up, MDFR_SHIFT, modal_up); - + bind(context, key_down, MDFR_NONE, modal_down); bind(context, key_down, MDFR_SHIFT, modal_down); - + bind(context, key_left, MDFR_NONE, modal_left); bind(context, key_left, MDFR_SHIFT, modal_left); - + bind(context, key_right, MDFR_NONE, modal_right); bind(context, key_right, MDFR_SHIFT, modal_right); - + bind(context, key_del, MDFR_NONE, modal_delete); bind(context, key_del, MDFR_SHIFT, modal_delete); - + bind(context, key_home, MDFR_NONE, modal_home); bind(context, key_home, MDFR_SHIFT, modal_home); - + bind(context, key_end, MDFR_NONE, modal_end); bind(context, key_end, MDFR_SHIFT, modal_end); - + bind(context, key_page_up, MDFR_NONE, modal_page_up); bind(context, key_page_up, MDFR_SHIFT, modal_page_up); - + bind(context, key_page_down, MDFR_NONE, modal_page_down); bind(context, key_page_down, MDFR_SHIFT, modal_page_down); - + bind(context, '\t', MDFR_NONE, modal_tab); bind(context, '\t', MDFR_SHIFT, modal_tab); - + end_map(context); - + end_bind_helper(context); return context->write_total; } \ No newline at end of file diff --git a/power/4coder_experiments.cpp b/power/4coder_experiments.cpp index dc729fb2..812fd754 100644 --- a/power/4coder_experiments.cpp +++ b/power/4coder_experiments.cpp @@ -1,9 +1,16 @@ +/* +4coder_experiments.cpp - Supplies extension bindings to the defaults with experimental new features. + +TYPE: 'build-target' +*/ // TOP -#include "4coder_default_include.cpp" +#if !defined(FCODER_EXPERIMENTS_CPP) +#define FCODER_EXPERIMENTS_CPP -#include "4coder_function_list.cpp" +#include "4coder_default_include.cpp" +#include "4coder_miblo_numbers.cpp" #define NO_BINDING #include "4coder_default_bindings.cpp" @@ -12,8 +19,6 @@ # define BIND_4CODER_TESTS(context) ((void)context) #endif -#include "4coder_miblo_numbers.cpp" - #include static float @@ -108,8 +113,8 @@ multi-cursor showing but it is unclear to me how to do that conveniently. Since this won't exist inside a coroutine what does such an API even look like??? It's clear to me now that I may need to start pushing for the view routine before -I am even able to support the GUI. Because that will the -system up to allow me to think about the problem in more ways. +I am even able to support the GUI. Because that will set up the +system to allow me to think about the problem in more ways. Finally I have decided not to pursue this direction any more, it just seems like the wrong way to do it, so I'll stop without @@ -540,7 +545,7 @@ view_set_to_region(Application_Links *app, View_Summary *view, int32_t major_pos static float scope_center_threshold = 0.75f; -CUSTOM_COMMAND_SIG(highlight_surroundng_scope){ +CUSTOM_COMMAND_SIG(highlight_surrounding_scope){ uint32_t access = AccessProtected; View_Summary view = get_active_view(app, access); Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); @@ -714,6 +719,334 @@ CUSTOM_COMMAND_SIG(place_in_scope){ } } +CUSTOM_COMMAND_SIG(delete_current_scope){ + uint32_t access = AccessOpen; + View_Summary view = get_active_view(app, access); + Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); + + int32_t top = view.cursor.pos; + int32_t bottom = view.mark.pos; + + if (top > bottom){ + int32_t x = top; + top = bottom; + bottom = x; + } + + if (buffer_get_char(app, &buffer, top) == '{' && buffer_get_char(app, &buffer, bottom-1) == '}'){ + int32_t top_len = 1; + int32_t bottom_len = 1; + if (buffer_get_char(app, &buffer, top-1) == '\n'){ + top_len = 2; + } + if (buffer_get_char(app, &buffer, bottom+1) == '\n'){ + bottom_len = 2; + } + + Buffer_Edit edits[2]; + edits[0].str_start = 0; + edits[0].len = 0; + edits[0].start = top+1 - top_len; + edits[0].end = top+1; + + edits[1].str_start = 0; + edits[1].len = 0; + edits[1].start = bottom-1; + edits[1].end = bottom-1 + bottom_len; + + buffer_batch_edit(app, &buffer, 0, 0, edits, 2, BatchEdit_Normal); + } +} + +struct Statement_Parser{ + Stream_Tokens stream; + int32_t token_index; + Buffer_Summary *buffer; +}; + +static Cpp_Token* +parser_next_token(Statement_Parser *parser){ + Cpp_Token *result = 0; + bool32 still_looping = true; + while (parser->token_index >= parser->stream.end && still_looping){ + still_looping = forward_stream_tokens(&parser->stream); + } + if (parser->token_index < parser->stream.end){ + result = &parser->stream.tokens[parser->token_index]; + ++parser->token_index; + } + return(result); +} + +static bool32 parse_statement_down(Application_Links *app, Statement_Parser *parser, Cpp_Token *token_out); + +static bool32 +parse_for_down(Application_Links *app, Statement_Parser *parser, Cpp_Token *token_out){ + bool32 success = false; + Cpp_Token *token = parser_next_token(parser); + + int32_t paren_level = 0; + while (token != 0){ + if (!(token->flags & CPP_TFLAG_PP_BODY)){ + switch (token->type){ + case CPP_TOKEN_PARENTHESE_OPEN: + { + ++paren_level; + }break; + + case CPP_TOKEN_PARENTHESE_CLOSE: + { + --paren_level; + if (paren_level == 0){ + success = parse_statement_down(app, parser, token_out); + goto finished; + } + else if (paren_level < 0){ + success = false; + goto finished; + } + }break; + } + } + + token = parser_next_token(parser); + } + + finished:; + return(success); +} + +static bool32 +parse_if_down(Application_Links *app, Statement_Parser *parser, Cpp_Token *token_out){ + bool32 success = false; + Cpp_Token *token = parser_next_token(parser); + + if (token != 0){ + success = parse_statement_down(app, parser, token_out); + if (success){ + token = parser_next_token(parser); + if (token != 0 && token->type == CPP_TOKEN_KEY_CONTROL_FLOW){ + char lexeme[32]; + if (sizeof(lexeme)-1 >= token->size){ + if (buffer_read_range(app, parser->buffer, token->start, token->start + token->size, lexeme)){ + lexeme[token->size] = 0; + if (match(lexeme, "else")){ + success = parse_statement_down(app, parser, token_out); + } + } + } + } + } + } + + return(success); +} + +static bool32 +parse_block_down(Application_Links *app, Statement_Parser *parser, Cpp_Token *token_out){ + bool32 success = false; + Cpp_Token *token = parser_next_token(parser); + + int32_t nest_level = 0; + while (token != 0){ + switch (token->type){ + case CPP_TOKEN_BRACE_OPEN: + { + ++nest_level; + }break; + + case CPP_TOKEN_BRACE_CLOSE: + { + if (nest_level == 0){ + *token_out = *token; + success = true; + goto finished; + } + --nest_level; + }break; + } + token = parser_next_token(parser); + } + + finished:; + return(success); +} + +static bool32 +parse_statement_down(Application_Links *app, Statement_Parser *parser, Cpp_Token *token_out){ + bool32 success = false; + Cpp_Token *token = parser_next_token(parser); + + if (token != 0){ + bool32 not_getting_block = false; + + do{ + switch (token->type){ + case CPP_TOKEN_BRACE_CLOSE: + { + goto finished; + }break; + + case CPP_TOKEN_KEY_CONTROL_FLOW: + { + char lexeme[32]; + if (sizeof(lexeme)-1 >= token->size){ + if (buffer_read_range(app, parser->buffer, token->start, token->start + token->size, lexeme)){ + lexeme[token->size] = 0; + if (match(lexeme, "for")){ + success = parse_for_down(app, parser, token_out); + goto finished; + } + else if (match(lexeme, "if")){ + success = parse_if_down(app, parser, token_out); + goto finished; + } + else if (match(lexeme, "else")){ + success = false; + goto finished; + } + } + } + }break; + + case CPP_TOKEN_BRACE_OPEN: + { + if (!not_getting_block){ + success = parse_block_down(app, parser, token_out); + goto finished; + } + }break; + + case CPP_TOKEN_SEMICOLON: + { + success = true; + *token_out = *token; + goto finished; + }break; + + case CPP_TOKEN_EQ: + { + not_getting_block = true; + }break; + } + + token = parser_next_token(parser); + }while(token != 0); + } + + finished:; + return(success); +} + +static bool32 +find_whole_statement_down(Application_Links *app, Buffer_Summary *buffer, int32_t pos, int32_t *start_out, int32_t *end_out){ + bool32 result = false; + int32_t start = pos; + int32_t end = start; + + Cpp_Get_Token_Result get_result = {0}; + + if (buffer_get_token_index(app, buffer, pos, &get_result)){ + Statement_Parser parser = {0}; + parser.token_index = get_result.token_index; + + if (parser.token_index < 0){ + parser.token_index = 0; + } + if (get_result.in_whitespace){ + parser.token_index += 1; + } + + static const int32_t chunk_cap = 512; + Cpp_Token chunk[chunk_cap]; + + if (init_stream_tokens(&parser.stream, app, buffer, parser.token_index, chunk, chunk_cap)){ + parser.buffer = buffer; + + Cpp_Token end_token = {0}; + if (parse_statement_down(app, &parser, &end_token)){ + end = end_token.start + end_token.size; + result = true; + } + } + } + + *start_out = start; + *end_out = end; + return(result); +} + +CUSTOM_COMMAND_SIG(scope_absorb_down){ + uint32_t access = AccessOpen; + View_Summary view = get_active_view(app, access); + Buffer_Summary buffer = get_buffer(app, view.buffer_id, access); + + int32_t top = view.cursor.pos; + int32_t bottom = view.mark.pos; + + if (top > bottom){ + int32_t x = top; + top = bottom; + bottom = x; + } + + Partition *part = &global_part; + + Temp_Memory temp = begin_temp_memory(part); + if (buffer_get_char(app, &buffer, top) == '{' && buffer_get_char(app, &buffer, bottom-1) == '}'){ + Range range; + if (find_whole_statement_down(app, &buffer, bottom, &range.start, &range.end)){ + char *string_space = push_array(part, char, range.end - range.start); + buffer_read_range(app, &buffer, range.start, range.end, string_space); + + String string = make_string(string_space, range.end - range.start); + string = skip_chop_whitespace(string); + + int32_t newline_count = 0; + for (char *ptr = string_space; ptr < string.str; ++ptr){ + if (*ptr == '\n'){ + ++newline_count; + } + } + + bool32 extra_newline = false; + if (newline_count >= 2){ + extra_newline = true; + } + + int32_t edit_len = string.size + 1; + if (extra_newline){ + edit_len += 1; + } + + char *edit_str = push_array(part, char, edit_len); + if (extra_newline){ + edit_str[0] = '\n'; + copy_fast_unsafe(edit_str+1, string); + edit_str[edit_len-1] = '\n'; + } + else{ + copy_fast_unsafe(edit_str, string); + edit_str[edit_len-1] = '\n'; + } + + Buffer_Edit edits[2]; + edits[0].str_start = 0; + edits[0].len = edit_len; + edits[0].start = bottom-1; + edits[0].end = bottom-1; + + edits[1].str_start = 0; + edits[1].len = 0; + edits[1].start = range.start; + edits[1].end = range.end; + + buffer_batch_edit(app, &buffer, edit_str, edit_len, edits, 2, BatchEdit_Normal); + } + } + end_temp_memory(temp); +} + // NOTE(allen): Some basic code manipulation ideas. CUSTOM_COMMAND_SIG(rename_parameter){ @@ -890,17 +1223,17 @@ CUSTOM_COMMAND_SIG(write_explicit_enum_values){ ++token_index; - int32_t closed_correctly = 0; int32_t seeker_index = token_index; Stream_Tokens seek_stream = begin_temp_stream_token(&stream); - int32_t still_looping = 0; + bool32 closed_correctly = false; + bool32 still_looping = false; do{ for (; seeker_index < stream.end; ++seeker_index){ Cpp_Token *token_seeker = stream.tokens + seeker_index; switch (token_seeker->type){ case CPP_TOKEN_BRACE_CLOSE: - closed_correctly = 1; + closed_correctly = true; goto finished_seek; case CPP_TOKEN_BRACE_OPEN: @@ -915,15 +1248,15 @@ CUSTOM_COMMAND_SIG(write_explicit_enum_values){ if (closed_correctly){ int32_t count_estimate = 1 + (seeker_index - token_index)/2; - Buffer_Edit *edits = push_array(part, Buffer_Edit, count_estimate); int32_t edit_count = 0; + Buffer_Edit *edits = push_array(part, Buffer_Edit, count_estimate); char *string_base = (char*)partition_current(part); String string = make_string(string_base, 0, partition_remaining(part)); + closed_correctly = false; + still_looping = false; int32_t value = 0; - closed_correctly = 0; - still_looping = 0; do{ for (;token_index < stream.end; ++token_index){ Cpp_Token *token_ptr = stream.tokens + token_index; @@ -1016,12 +1349,12 @@ get_bindings(void *data, int32_t size){ Bind_Helper context_ = begin_bind_helper(data, size); Bind_Helper *context = &context_; - set_hook(context, hook_start, my_start); - set_hook(context, hook_view_size_change, my_view_adjust); + set_hook(context, hook_start, default_start); + set_hook(context, hook_view_size_change, default_view_adjust); - set_open_file_hook(context, my_file_settings); - set_save_file_hook(context, my_file_save); - set_input_filter(context, my_suppress_mouse_filter); + set_open_file_hook(context, default_file_settings); + set_save_file_hook(context, default_file_save); + set_input_filter(context, default_suppress_mouse_filter); set_command_caller(context, default_command_caller); set_scroll_rule(context, smooth_scroll_rule); @@ -1048,14 +1381,17 @@ get_bindings(void *data, int32_t size){ end_map(context); - begin_map(context, my_code_map); - bind(context, '[', MDFR_ALT, highlight_surroundng_scope); + begin_map(context, default_code_map); + bind(context, '[', MDFR_ALT, highlight_surrounding_scope); bind(context, ']', MDFR_ALT, highlight_prev_scope_absolute); bind(context, '\'', MDFR_ALT, highlight_next_scope_absolute); + bind(context, '/', MDFR_ALT, place_in_scope); + bind(context, '-', MDFR_ALT, delete_current_scope); + bind(context, 'j', MDFR_ALT, scope_absorb_down); + bind(context, key_insert, MDFR_CTRL, write_explicit_enum_values); bind(context, 'p', MDFR_ALT, rename_parameter); - bind(context, 'I', MDFR_CTRL, list_all_functions_current_buffer); end_map(context); BIND_4CODER_TESTS(context); @@ -1064,5 +1400,7 @@ get_bindings(void *data, int32_t size){ return(result); } +#endif + // BOTTOM diff --git a/power/4coder_miblo_numbers.cpp b/power/4coder_miblo_numbers.cpp index 15d53e07..803e9dad 100644 --- a/power/4coder_miblo_numbers.cpp +++ b/power/4coder_miblo_numbers.cpp @@ -1,8 +1,18 @@ +/* +4coder_miblo_numbers.cpp - Commands for so called "Miblo Number Operations" which involve incrementing +and decrementing various forms of number as numerical objects despite being encoded as text objects. -#if !defined(MIBLO_NUMBERS_4CODER) -#define MIBLO_NUMBERS_4CODER +TYPE: 'drop-in-command-pack' +*/ -// TODO(allen): thevaber number converter idea +// TOP + +#if !defined(FCODER_MIBLO_NUMBERS_CPP) +#define FCODER_MIBLO_NUMBERS_CPP + +#include "4coder_API/custom.h" +#include "4coder_helper/4coder_helper.h" +#include "4coder_helper/4coder_streaming.h" static int32_t get_numeric_string_at_cursor(Application_Links *app, Buffer_Summary *buffer, int32_t start_pos, int32_t *numeric_start, int32_t *numeric_end){ @@ -198,14 +208,14 @@ increment_timestamp(Miblo_Timestamp t, int32_t type, int32_t amt){ amt = 0; // TODO(allen): someday do the math, instead of being lazy. - while (r.second < 0){ - --amt; - r.second += 60; + while (r.second < 0){ + --amt; + r.second += 60; } - while (r.second >= 60){ - ++amt; - r.second -= 60; + while (r.second >= 60){ + ++amt; + r.second -= 60; } case MIBLO_MINUTE: @@ -236,7 +246,7 @@ timestamp_to_str(String *dest, Miblo_Timestamp t){ if (t.hour > 0){ append_int_to_str(dest, t.hour); - append(dest, ":"); + append(dest, ":"); } if (t.minute >= 10){ @@ -279,7 +289,7 @@ get_timestamp_at_cursor(Application_Links *app, Buffer_Summary *buffer, int32_t int32_t count_colons = 0; for (int32_t i = 0; i < str.size; ++i){ if (str.str[i] == ':'){ - ++count_colons; + ++count_colons; } } @@ -305,19 +315,19 @@ get_timestamp_at_cursor(Application_Links *app, Buffer_Summary *buffer, int32_t } if (count_colons == 2){ - t.hour = str_to_int(make_string(str.str + number_start[0], number_end[0] - number_start[0])); - - if (number_end[1] - number_start[1] == 2){ - - t.minute = str_to_int(make_string(str.str + number_start[1], number_end[1] - number_start[1])); - - if (number_end[2] - number_start[2] == 2){ - t.second = str_to_int(make_string(str.str + number_start[2], number_end[2] - number_start[2])); + t.hour = str_to_int(make_string(str.str + number_start[0], number_end[0] - number_start[0])); + + if (number_end[1] - number_start[1] == 2){ - success = 1; + t.minute = str_to_int(make_string(str.str + number_start[1], number_end[1] - number_start[1])); + + if (number_end[2] - number_start[2] == 2){ + t.second = str_to_int(make_string(str.str + number_start[2], number_end[2] - number_start[2])); + + success = 1; + } } } - } else{ if (number_end[0] - number_start[0] == 2 || number_end[0] - number_start[0] == 1){ t.minute = str_to_int(make_string(str.str + number_start[0], number_end[0] - number_start[0])); @@ -331,10 +341,10 @@ get_timestamp_at_cursor(Application_Links *app, Buffer_Summary *buffer, int32_t } if (success){ - info->start = timestamp_start; - info->end = timestamp_end; - info->time = t; - result = 1; + info->start = timestamp_start; + info->end = timestamp_end; + info->time = t; + result = 1; } } } @@ -378,4 +388,4 @@ CUSTOM_COMMAND_SIG(miblo_decrement_time_stamp_minute){ #endif - +// BOTTOM diff --git a/project.4coder b/project.4coder index 39cda7cd..c12965db 100644 --- a/project.4coder +++ b/project.4coder @@ -3,33 +3,14 @@ extensions=".c.cpp.h.hpp.bat.sh"; fkey_command_win[1] = {"build.bat", "*compilation*", true}; fkey_command_win[2] = {"site\\build.bat", "*compilation*", true}; fkey_command_win[3] = {"string\\build.bat", "*compilation*", true}; -fkey_command_win[4] = {0, 0}; + fkey_command_win[5] = {"..\\misc\\run.bat", "*run*"}; -fkey_command_win[6] = {0, 0}; -fkey_command_win[7] = {0, 0}; -fkey_command_win[8] = {0, 0}; -fkey_command_win[9] = {0, 0}; -fkey_command_win[10] = {0, 0}; -fkey_command_win[11] = {0, 0}; -fkey_command_win[8] = {"package.bat", "*package*"}; -fkey_command_win[13] = {0, 0}; -fkey_command_win[14] = {0, 0}; -fkey_command_win[15] = {0, 0}; -fkey_command_win[16] = {0, 0}; + +fkey_command_win[12] = {"package.bat", "*package*"}; fkey_command_linux[1] = {"./build.sh", "*compilation*", true}; fkey_command_linux[2] = {"site/build.sh", "*compilation*", true}; -fkey_command_linux[3] = {0, 0}; -fkey_command_linux[4] = {0, 0}; + fkey_command_linux[5] = {"../build/4ed", "*run*"}; -fkey_command_linux[6] = {0, 0}; -fkey_command_linux[7] = {0, 0}; -fkey_command_linux[8] = {0, 0}; -fkey_command_linux[9] = {0, 0}; -fkey_command_linux[10] = {0, 0}; -fkey_command_linux[11] = {0, 0}; + fkey_command_linux[12] = {"./package.sh", "*package*"}; -fkey_command_linux[13] = {0, 0}; -fkey_command_linux[14] = {0, 0}; -fkey_command_linux[15] = {0, 0}; -fkey_command_linux[16] = {0, 0}; diff --git a/string/4coder_string_build_num.txt b/string/4coder_string_build_num.txt index 34184db2..fb61d50d 100644 --- a/string/4coder_string_build_num.txt +++ b/string/4coder_string_build_num.txt @@ -1,5 +1,5 @@ 1 0 -59 +61 diff --git a/string/_4coder_string.ctm b/string/_4coder_string.ctm index c333a4063e16ba7c9cb3d818e8a70352421cf1bc..97e7ccb872a3a779766aac7a0c346ae533afb9ab 100644 GIT binary patch delta 72 zcmZn>J|euKh122dFNeE}D=#rJGcYh%1BrOGH{wfxd?1&h?nFAnJRNyS7(ePlI>Tzs OXcZ72q`rWOfdK$`-W7-d delta 7 OcmX>i+#a) - 1; + i32_4tech max = (sizeof(absolutes->a)/sizeof(*absolutes->a)) - 1; if (implicit_last) --max; String str; diff --git a/win32_4ed.cpp b/win32_4ed.cpp index c041ce13..25d0b473 100644 --- a/win32_4ed.cpp +++ b/win32_4ed.cpp @@ -38,6 +38,7 @@ #include #include +#include "win32_gl.h" #define GL_TEXTURE_MAX_LEVEL 0x813D @@ -594,7 +595,7 @@ Sys_Grow_Thread_Memory_Sig(system_grow_thread_memory){ system_acquire_lock(CANCEL_LOCK0 + memory->id - 1); void *old_data = memory->data; i32 old_size = memory->size; - i32 new_size = l_round_up(memory->size*2, KB(4)); + i32 new_size = l_round_up_i32(memory->size*2, KB(4)); memory->data = system_get_memory(new_size); memory->size = new_size; if (old_data){ @@ -1575,6 +1576,148 @@ Win32Resize(i32 width, i32 height){ } } +internal void* +win32_load_gl_always(char *name, HMODULE module){ + void *p = (void *)wglGetProcAddress(name), *r = 0; + if(p == 0 || + (p == (void*)0x1) || (p == (void*)0x2) || (p == (void*)0x3) || + (p == (void*)-1) ){ + r = (void *)GetProcAddress(module, name); + } + else{ + r = p; + } + return(r); +} + +internal void +OpenGLDebugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const char *message, const void *userParam) +{ + OutputDebugStringA(message); + OutputDebugStringA("\n"); +} + +internal void +Win32InitGL(){ + // GL context initialization + { + PIXELFORMATDESCRIPTOR format; + int format_id; + BOOL success; + HDC dc; + + format.nSize = sizeof(format); + format.nVersion = 1; + format.dwFlags = PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW; + format.iPixelType = PFD_TYPE_RGBA; + format.cColorBits = 32; + format.cRedBits = 0; + format.cRedShift = 0; + format.cGreenBits = 0; + format.cGreenShift = 0; + format.cBlueBits = 0; + format.cBlueShift = 0; + format.cAlphaBits = 0; + format.cAlphaShift = 0; + format.cAccumBits = 0; + format.cAccumRedBits = 0; + format.cAccumGreenBits = 0; + format.cAccumBlueBits = 0; + format.cAccumAlphaBits = 0; + format.cDepthBits = 24; + format.cStencilBits = 8; + format.cAuxBuffers = 0; + format.iLayerType = PFD_MAIN_PLANE; + format.bReserved = 0; + format.dwLayerMask = 0; + format.dwVisibleMask = 0; + format.dwDamageMask = 0; + + dc = GetDC(win32vars.window_handle); + Assert(dc); + format_id = ChoosePixelFormat(dc, &format); + Assert(format_id != 0); + success = SetPixelFormat(dc, format_id, &format); + Assert(success == TRUE); + + HGLRC glcontext = wglCreateContext(dc); + wglMakeCurrent(dc, glcontext); + + { + HMODULE module = LoadLibraryA("opengl32.dll"); + + wglCreateContextAttribsARB_Function *wglCreateContextAttribsARB = 0; + wglCreateContextAttribsARB = (wglCreateContextAttribsARB_Function*) + win32_load_gl_always("wglCreateContextAttribsARB", module); + + wglChoosePixelFormatARB_Function *wglChoosePixelFormatARB = 0; + wglChoosePixelFormatARB = (wglChoosePixelFormatARB_Function*) + win32_load_gl_always("wglChoosePixelFormatARB", module); + + if (wglCreateContextAttribsARB != 0 && wglChoosePixelFormatARB != 0){ + const int choosePixel_attribList[] = + { + WGL_DRAW_TO_WINDOW_ARB, TRUE, + WGL_SUPPORT_OPENGL_ARB, TRUE, + //WGL_DOUBLE_BUFFER_ARB, GL_TRUE, + WGL_PIXEL_TYPE_ARB, WGL_TYPE_RGBA_ARB, + WGL_COLOR_BITS_ARB, 32, + WGL_DEPTH_BITS_ARB, 24, + WGL_STENCIL_BITS_ARB, 8, + 0, + }; + + i32 extended_format_id; + UINT num_formats = 0; + BOOL result = 0; + + result = wglChoosePixelFormatARB(dc, choosePixel_attribList, 0, 1, &extended_format_id, &num_formats); + + if (result != 0 && num_formats > 0){ + const int createContext_attribList[] = { + WGL_CONTEXT_MAJOR_VERSION_ARB, 3, + WGL_CONTEXT_MINOR_VERSION_ARB, 2, + WGL_CONTEXT_PROFILE_MASK_ARB, WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB, + 0 + }; + + if (extended_format_id == format_id){ + HGLRC extended_context = wglCreateContextAttribsARB(dc, 0, createContext_attribList); + if (extended_context){ + wglMakeCurrent(dc, extended_context); + wglDeleteContext(glcontext); + glcontext = extended_context; + } + } + } + } + } + + ReleaseDC(win32vars.window_handle, dc); + } + +#if FRED_INTERNAL + // NOTE(casey): This slows down GL but puts error messages to + // the debug console immediately whenever you do something wrong + glDebugMessageCallback_type *glDebugMessageCallback = + (glDebugMessageCallback_type *)wglGetProcAddress("glDebugMessageCallback"); + glDebugMessageControl_type *glDebugMessageControl = + (glDebugMessageControl_type *)wglGetProcAddress("glDebugMessageControl"); + if(glDebugMessageCallback && glDebugMessageControl) + { + glDebugMessageCallback(OpenGLDebugCallback, 0); + glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, 0, GL_TRUE); + glEnable(GL_DEBUG_OUTPUT); + glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS); + } +#endif + + glEnable(GL_TEXTURE_2D); + glEnable(GL_SCISSOR_TEST); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +} + internal void Win32SetCursorFromUpdate(Application_Mouse_Cursor cursor){ switch (cursor){ @@ -1602,6 +1745,120 @@ Win32HighResolutionTime(){ return(result); } +internal void +Win32Foo(WPARAM wParam, LPARAM lParam){ + b8 previous_state = ((lParam & Bit_30)?(1):(0)); + b8 current_state = ((lParam & Bit_31)?(0):(1)); + + if (current_state){ + u8 key = keycode_lookup_table[(u8)wParam]; + + i32 *count = &win32vars.input_chunk.trans.key_data.count; + Key_Event_Data *data = win32vars.input_chunk.trans.key_data.keys; + b8 *control_keys = win32vars.input_chunk.pers.control_keys; + i32 control_keys_size = sizeof(win32vars.input_chunk.pers.control_keys); + + if (*count < KEY_INPUT_BUFFER_SIZE){ + if (!key){ + UINT vk = (UINT)wParam; + UINT scan = (UINT)((lParam >> 16) & 0x7F); + BYTE state[256]; + BYTE control_state = 0; + WORD x1 = 0, x2 = 0, x = 0, junk_x; + i32 result1 = 0, result2 = 0, result = 0; + + GetKeyboardState(state); + x1 = 0; + result1 = ToAscii(vk, scan, state, &x1, 0); + if (result1 < 0){ + ToAscii(vk, scan, state, &junk_x, 0); + } + result1 = (result1 == 1); + if (!usable_ascii((char)x1)){ + result1 = 0; + } + + control_state = state[VK_CONTROL]; + state[VK_CONTROL] = 0; + x2 = 0; + result2 = ToAscii(vk, scan, state, &x2, 0); + if (result2 < 0){ + ToAscii(vk, scan, state, &junk_x, 0); + } + result2 = (result2 == 1); + if (!usable_ascii((char)x2)){ + result2 = 0; + } + + // TODO(allen): This is becoming a really major issue. + // Apparently control + i outputs a '\t' which is VALID ascii + // according to this system. So it reports the key as '\t'. + // This wasn't an issue before because we were ignoring control + // when computing character_no_caps_lock which is what is used + // for commands. But that is incorrect for some keyboard layouts + // where control+alt is used to signal AltGr for important keys. + if (result1 && result2){ + char c1 = char_to_upper((char)x1); + char cParam = char_to_upper((char)wParam); + + if ((c1 == '\n' || c1 == '\r') && cParam != VK_RETURN){ + result1 = 0; + } + if (c1 == '\t' && cParam != VK_TAB){ + result1 = 0; + } + } + + if (result1){ + x = x1; + state[VK_CONTROL] = control_state; + result = 1; + } + else if (result2){ + x = x2; + result = 1; + } + + if (result == 1 && x < 128){ + key = (u8)x; + if (key == '\r') key = '\n'; + data[*count].character = key; + + state[VK_CAPITAL] = 0; + x = 0; + result = ToAscii(vk, scan, state, &x, 0); + if (result < 0){ + ToAscii(vk, scan, state, &junk_x, 0); + } + result = (result == 1); + if (!usable_ascii((char)x)){ + result = 0; + } + + if (result){ + key = (u8)x; + if (key == '\r') key = '\n'; + data[*count].character_no_caps_lock = key; + data[*count].keycode = key; + } + } + if (result != 1 || x >= 128){ + data[*count].character = 0; + data[*count].character_no_caps_lock = 0; + data[*count].keycode = 0; + } + } + else{ + data[*count].character = 0; + data[*count].character_no_caps_lock = 0; + data[*count].keycode = key; + } + memcpy(data[*count].modifiers, control_keys, control_keys_size); + data[*count].modifiers[MDFR_HOLD_INDEX] = previous_state; + ++(*count); + } + } +} internal LRESULT @@ -1609,8 +1866,7 @@ Win32Callback(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ LRESULT result = 0; switch (uMsg){ - case WM_MENUCHAR: - case WM_SYSCHAR:break; + case WM_MENUCHAR:break; case WM_SYSKEYDOWN: case WM_SYSKEYUP: @@ -1648,9 +1904,8 @@ Win32Callback(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ }break; } - b8 ctrl, alt; - ctrl = (controls->r_ctrl || (controls->l_ctrl && !controls->r_alt)); - alt = (controls->l_alt || (controls->r_alt && !controls->l_ctrl)); + b8 ctrl = (controls->r_ctrl || (controls->l_ctrl && !controls->r_alt)); + b8 alt = (controls->l_alt || (controls->r_alt && !controls->l_ctrl)); if (win32vars.lctrl_lalt_is_altgr){ if (controls->l_alt && controls->l_ctrl){ @@ -1666,136 +1921,71 @@ Win32Callback(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ default: { - b8 previous_state = ((lParam & Bit_30)?(1):(0)); b8 current_state = ((lParam & Bit_31)?(0):(1)); - win32vars.got_useful_event = 1; - if (current_state){ u8 key = keycode_lookup_table[(u8)wParam]; - i32 *count = 0; - Key_Event_Data *data = 0; - b8 *control_keys = 0; - i32 control_keys_size = 0; - - if (!previous_state){ - count = &win32vars.input_chunk.trans.key_data.press_count; - data = win32vars.input_chunk.trans.key_data.press; - } - else{ - count = &win32vars.input_chunk.trans.key_data.hold_count; - data = win32vars.input_chunk.trans.key_data.hold; - } - control_keys = win32vars.input_chunk.pers.control_keys; - control_keys_size = sizeof(win32vars.input_chunk.pers.control_keys); - - if (*count < KEY_INPUT_BUFFER_SIZE){ - if (!key){ - UINT vk = (UINT)wParam; - UINT scan = (UINT)((lParam >> 16) & 0x7F); - BYTE state[256]; - BYTE control_state = 0; - WORD x1 = 0, x2 = 0, x = 0, junk_x; - i32 result1 = 0, result2 = 0, result = 0; - - GetKeyboardState(state); - x1 = 0; - result1 = ToAscii(vk, scan, state, &x1, 0); - if (result1 < 0){ - ToAscii(vk, scan, state, &junk_x, 0); - } - result1 = (result1 == 1); - if (!usable_ascii((char)x1)){ - result1 = 0; - } - - control_state = state[VK_CONTROL]; - state[VK_CONTROL] = 0; - x2 = 0; - result2 = ToAscii(vk, scan, state, &x2, 0); - if (result2 < 0){ - ToAscii(vk, scan, state, &junk_x, 0); - } - result2 = (result2 == 1); - if (!usable_ascii((char)x2)){ - result2 = 0; - } - - // TODO(allen): This is becoming a really major issue. - // Apparently control + i outputs a '\t' which is VALID ascii - // according to this system. So it reports the key as '\t'. - // This wasn't an issue before because we were ignoring control - // when computing character_no_caps_lock which is what is used - // for commands. But that is incorrect for some keyboard layouts - // where control+alt is used to signal AltGr for important keys. - if (result1 && result2){ - char c1 = char_to_upper((char)x1); - char cParam = char_to_upper((char)wParam); - - if ((c1 == '\n' || c1 == '\r') && cParam != VK_RETURN){ - result1 = 0; - } - if (c1 == '\t' && cParam != VK_TAB){ - result1 = 0; - } - } - - if (result1){ - x = x1; - state[VK_CONTROL] = control_state; - result = 1; - } - else if (result2){ - x = x2; - result = 1; - } - - if (result == 1 && x < 128){ - key = (u8)x; - if (key == '\r') key = '\n'; - data[*count].character = key; - - state[VK_CAPITAL] = 0; - x = 0; - result = ToAscii(vk, scan, state, &x, 0); - if (result < 0){ - ToAscii(vk, scan, state, &junk_x, 0); - } - result = (result == 1); - if (!usable_ascii((char)x)){ - result = 0; - } - - if (result){ - key = (u8)x; - if (key == '\r') key = '\n'; - data[*count].character_no_caps_lock = key; - data[*count].keycode = key; - } - } - if (result != 1 || x >= 128){ - data[*count].character = 0; - data[*count].character_no_caps_lock = 0; - data[*count].keycode = 0; - } - } - else{ - data[*count].character = 0; - data[*count].character_no_caps_lock = 0; - data[*count].keycode = key; - } + if (key != 0){ + i32 *count = &win32vars.input_chunk.trans.key_data.count; + Key_Event_Data *data = win32vars.input_chunk.trans.key_data.keys; + b8 *control_keys = win32vars.input_chunk.pers.control_keys; + i32 control_keys_size = sizeof(win32vars.input_chunk.pers.control_keys); + + Assert(*count < KEY_INPUT_BUFFER_SIZE); + data[*count].character = 0; + data[*count].character_no_caps_lock = 0; + data[*count].keycode = key; memcpy(data[*count].modifiers, control_keys, control_keys_size); - data[*count].modifiers[MDFR_HOLD_INDEX] = previous_state; ++(*count); + + win32vars.got_useful_event = 1; } } - - result = DefWindowProc(hwnd, uMsg, wParam, lParam); }break; }/* switch */ }break; + case WM_CHAR: case WM_SYSCHAR: case WM_UNICHAR: + { + u8 character = wParam & 0x7F; + + if (character == '\r'){ + character = '\n'; + } + else if ((character < 32 && character != '\t') || character == 127){ + break; + } + + u8 character_no_caps_lock = character; + + i32 *count = &win32vars.input_chunk.trans.key_data.count; + Key_Event_Data *data = win32vars.input_chunk.trans.key_data.keys; + b8 *control_keys = win32vars.input_chunk.pers.control_keys; + i32 control_keys_size = sizeof(win32vars.input_chunk.pers.control_keys); + + BYTE state[256]; + GetKeyboardState(state); + if (state[VK_CAPITAL]){ + if (character_no_caps_lock >= 'a' && character_no_caps_lock <= 'z'){ + character_no_caps_lock += (u8)('A' - 'a'); + } + else if (character_no_caps_lock >= 'A' && character_no_caps_lock <= 'Z'){ + character_no_caps_lock += (u8)('a' - 'A'); + } + } + + Assert(*count < KEY_INPUT_BUFFER_SIZE); + data[*count].character = character; + data[*count].character_no_caps_lock = character_no_caps_lock; + data[*count].keycode = character_no_caps_lock; + memcpy(data[*count].modifiers, control_keys, control_keys_size); + ++(*count); + + result = DefWindowProc(hwnd, uMsg, wParam, lParam); + win32vars.got_useful_event = 1; + }break; + case WM_MOUSEMOVE: { i32 new_x = LOWORD(lParam); @@ -1865,12 +2055,10 @@ Win32Callback(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ case WM_SIZE: { win32vars.got_useful_event = 1; - if (win32vars.target.handle){ - i32 new_width = LOWORD(lParam); - i32 new_height = HIWORD(lParam); - - Win32Resize(new_width, new_height); - } + i32 new_width = LOWORD(lParam); + i32 new_height = HIWORD(lParam); + + Win32Resize(new_width, new_height); }break; case WM_PAINT: @@ -1907,21 +2095,6 @@ Win32Callback(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ return(result); } -#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 -#define GL_DEBUG_OUTPUT 0x92E0 - -typedef void GLDEBUGPROC_TYPE(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const char * message, const GLvoid * userParam); -typedef GLDEBUGPROC_TYPE * GLDEBUGPROC; -typedef void glDebugMessageControl_type(GLenum source, GLenum type, GLenum severity, GLsizei count, GLuint * ids, GLboolean enabled); -typedef void glDebugMessageCallback_type(GLDEBUGPROC callback, void * userParam); - -internal void -OpenGLDebugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const char *message, const void *userParam) -{ - OutputDebugStringA(message); - OutputDebugStringA("\n"); -} - int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, @@ -2177,65 +2350,9 @@ WinMain(HINSTANCE hInstance, #endif GetClientRect(win32vars.window_handle, &window_rect); - - DWORD pfd_flags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL; - - // NOTE(allen): This is probably not an issue on linux and - // does not need to be ported. - if (!win32vars.settings.stream_mode){ - pfd_flags |= PFD_DOUBLEBUFFER; - } - - static PIXELFORMATDESCRIPTOR pfd = { - sizeof(PIXELFORMATDESCRIPTOR), - 1, - pfd_flags, - PFD_TYPE_RGBA, - 32, - 0, 0, 0, 0, 0, 0, - 0, - 0, - 0, - 0, 0, 0, 0, - 16, - 0, - 0, - PFD_MAIN_PLANE, - 0, - 0, 0, 0 }; - // TODO(allen): get an upgraded context to see if that fixes the nvidia card issues. - { - i32 pixel_format; - pixel_format = ChoosePixelFormat(hdc, &pfd); - SetPixelFormat(hdc, pixel_format, &pfd); - - win32vars.target.handle = hdc; - win32vars.target.context = wglCreateContext(hdc); - wglMakeCurrent(hdc, (HGLRC)win32vars.target.context); - } ReleaseDC(win32vars.window_handle, hdc); -#if FRED_INTERNAL - // NOTE(casey): This slows down GL but puts error messages to - // the debug console immediately whenever you do something wrong - glDebugMessageCallback_type *glDebugMessageCallback = - (glDebugMessageCallback_type *)wglGetProcAddress("glDebugMessageCallback"); - glDebugMessageControl_type *glDebugMessageControl = - (glDebugMessageControl_type *)wglGetProcAddress("glDebugMessageControl"); - if(glDebugMessageCallback && glDebugMessageControl) - { - glDebugMessageCallback(OpenGLDebugCallback, 0); - glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, 0, GL_TRUE); - glEnable(GL_DEBUG_OUTPUT); - glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS); - } -#endif - - glEnable(GL_TEXTURE_2D); - glEnable(GL_SCISSOR_TEST); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - + Win32InitGL(); Win32Resize(window_rect.right - window_rect.left, window_rect.bottom - window_rect.top); @@ -2316,28 +2433,96 @@ WinMain(HINSTANCE hInstance, if (!(win32vars.first && win32vars.settings.stream_mode)){ system_release_lock(FRAME_LOCK); - if (win32vars.running_cli == 0){ - win32vars.got_useful_event = 0; - for (;win32vars.got_useful_event == 0;){ - if (GetMessage(&msg, 0, 0, 0)){ - if (msg.message == WM_QUIT){ - keep_playing = 0; - }else{ + b32 get_more_messages = true; + do{ + if (win32vars.got_useful_event == 0){ + get_more_messages = GetMessage(&msg, 0, 0, 0); + } + else{ + get_more_messages = PeekMessage(&msg, 0, 0, 0, 1); + } + + if (get_more_messages){ + if (msg.message == WM_QUIT){ + keep_playing = 0; + }else{ + b32 treat_normally = true; + if (msg.message == WM_KEYDOWN || msg.message == WM_SYSKEYDOWN){ + switch (msg.wParam){ + case VK_CONTROL:case VK_LCONTROL:case VK_RCONTROL: + case VK_MENU:case VK_LMENU:case VK_RMENU: + case VK_SHIFT:case VK_LSHIFT:case VK_RSHIFT:break; + + default: treat_normally = false; break; + } + } + + if (treat_normally){ TranslateMessage(&msg); DispatchMessage(&msg); } + else{ + Control_Keys *controls = &win32vars.input_chunk.pers.controls; + + b8 ctrl = (controls->r_ctrl || (controls->l_ctrl && !controls->r_alt)); + b8 alt = (controls->l_alt || (controls->r_alt && !controls->l_ctrl)); + + if (win32vars.lctrl_lalt_is_altgr){ + if (controls->l_alt && controls->l_ctrl){ + ctrl = 0; + alt = 0; + } + } + + BYTE ctrl_state = 0, alt_state = 0; + BYTE state[256]; + if (ctrl || alt){ + GetKeyboardState(state); + if (ctrl){ + ctrl_state = state[VK_CONTROL]; + state[VK_CONTROL] = 0; + } + if (alt){ + alt_state = state[VK_MENU]; + state[VK_MENU] = 0; + } + SetKeyboardState(state); + + TranslateMessage(&msg); + DispatchMessage(&msg); + + if (ctrl){ + state[VK_CONTROL] = ctrl_state; + } + if (alt){ + state[VK_MENU] = alt_state; + } + SetKeyboardState(state); + } + else{ + TranslateMessage(&msg); + DispatchMessage(&msg); + } +#if 0 + UINT count = 0; + INPUT in[1]; + if (ctrl){ + in[count].type = INPUT_KEYBOARD; + in[count].ki.wVk = VK_CONTROL; + in[count].ki.wScan = 0; + in[count].ki.dwFlags = KEYEVENTF_KEYUP; + in[count].ki.time = 0; + in[count].ki.dwExtraInfo = GetMessageExtraInfo(); + ++count; + } + if(count > 0){ + SendInput(count, in, sizeof(in)); + } +#endif + } } } - } - - while (PeekMessage(&msg, 0, 0, 0, 1)){ - if (msg.message == WM_QUIT){ - keep_playing = 0; - }else{ - TranslateMessage(&msg); - DispatchMessage(&msg); - } - } + }while(get_more_messages); system_acquire_lock(FRAME_LOCK); } @@ -2398,7 +2583,6 @@ WinMain(HINSTANCE hInstance, input.dt = frame_useconds / 1000000.f; input.keys = input_chunk.trans.key_data; - memcpy(input.keys.modifiers, input_chunk.pers.control_keys, sizeof(input_chunk.pers.control_keys)); input.mouse.out_of_window = input_chunk.trans.out_of_window; diff --git a/win32_gl.h b/win32_gl.h new file mode 100644 index 00000000..c5a4a7d6 --- /dev/null +++ b/win32_gl.h @@ -0,0 +1,83 @@ +/* +WGL declarations for 4coder. +By Allen Webster +Created 27.01.2017 (dd.mm.yyyy) +*/ + +// TOP + +#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 +#define WGL_DRAW_TO_WINDOW_ARB 0x2001 +#define WGL_DRAW_TO_BITMAP_ARB 0x2002 +#define WGL_ACCELERATION_ARB 0x2003 +#define WGL_NEED_PALETTE_ARB 0x2004 +#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 +#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 +#define WGL_SWAP_METHOD_ARB 0x2007 +#define WGL_NUMBER_OVERLAYS_ARB 0x2008 +#define WGL_NUMBER_UNDERLAYS_ARB 0x2009 +#define WGL_TRANSPARENT_ARB 0x200A +#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 +#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 +#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 +#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A +#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B +#define WGL_SHARE_DEPTH_ARB 0x200C +#define WGL_SHARE_STENCIL_ARB 0x200D +#define WGL_SHARE_ACCUM_ARB 0x200E +#define WGL_SUPPORT_GDI_ARB 0x200F +#define WGL_SUPPORT_OPENGL_ARB 0x2010 +#define WGL_DOUBLE_BUFFER_ARB 0x2011 +#define WGL_STEREO_ARB 0x2012 +#define WGL_PIXEL_TYPE_ARB 0x2013 +#define WGL_COLOR_BITS_ARB 0x2014 +#define WGL_RED_BITS_ARB 0x2015 +#define WGL_RED_SHIFT_ARB 0x2016 +#define WGL_GREEN_BITS_ARB 0x2017 +#define WGL_GREEN_SHIFT_ARB 0x2018 +#define WGL_BLUE_BITS_ARB 0x2019 +#define WGL_BLUE_SHIFT_ARB 0x201A +#define WGL_ALPHA_BITS_ARB 0x201B +#define WGL_ALPHA_SHIFT_ARB 0x201C +#define WGL_ACCUM_BITS_ARB 0x201D +#define WGL_ACCUM_RED_BITS_ARB 0x201E +#define WGL_ACCUM_GREEN_BITS_ARB 0x201F +#define WGL_ACCUM_BLUE_BITS_ARB 0x2020 +#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021 +#define WGL_DEPTH_BITS_ARB 0x2022 +#define WGL_STENCIL_BITS_ARB 0x2023 +#define WGL_AUX_BUFFERS_ARB 0x2024 +#define WGL_NO_ACCELERATION_ARB 0x2025 +#define WGL_GENERIC_ACCELERATION_ARB 0x2026 +#define WGL_FULL_ACCELERATION_ARB 0x2027 +#define WGL_SWAP_EXCHANGE_ARB 0x2028 +#define WGL_SWAP_COPY_ARB 0x2029 +#define WGL_SWAP_UNDEFINED_ARB 0x202A +#define WGL_TYPE_RGBA_ARB 0x202B +#define WGL_TYPE_COLORINDEX_ARB 0x202C +typedef BOOL wglChoosePixelFormatARB_Function(HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); + +#define WGL_CONTEXT_DEBUG_BIT_ARB 0x00000001 +#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002 +#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 +#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 +#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 +#define WGL_CONTEXT_FLAGS_ARB 0x2094 +#define ERROR_INVALID_VERSION_ARB 0x2095 +#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 +#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 +#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 +typedef HGLRC wglCreateContextAttribsARB_Function(HDC hDC, HGLRC hshareContext, const int *attribList); + +typedef const char* wglGetExtensionsStringARB_Function(HDC hdc); + +typedef void GLDEBUGPROC_TYPE(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const char * message, const GLvoid * userParam); +typedef GLDEBUGPROC_TYPE * GLDEBUGPROC; +typedef void glDebugMessageControl_type(GLenum source, GLenum type, GLenum severity, GLsizei count, GLuint * ids, GLboolean enabled); +typedef void glDebugMessageCallback_type(GLDEBUGPROC callback, void * userParam); + +#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 +#define GL_DEBUG_OUTPUT 0x92E0 + +// BOTTOM +