From f0b9b76d9fd8f95788efc8dce889e160df839d51 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Fri, 10 Aug 2018 17:42:15 -0700 Subject: [PATCH] Generic lifetime buckets for core variables --- 4coder_API/types.h | 15 +- 4coder_clipboard.cpp | 15 +- 4coder_default_framework.cpp | 14 +- 4coder_default_hooks.cpp | 7 +- 4coder_generated/app_functions.h | 56 ++++--- 4coder_generated/command_metadata.h | 22 +-- 4coder_search.cpp | 6 +- 4ed_api_implementation.cpp | 230 +++++++++++++++++----------- 4ed_app_models.h | 1 + 4ed_app_target.cpp | 4 +- 4ed_file.h | 1 + 4ed_view.h | 1 - 4ed_working_set.cpp | 5 +- themes/theme-sunlight.4coder | 4 +- 14 files changed, 227 insertions(+), 154 deletions(-) diff --git a/4coder_API/types.h b/4coder_API/types.h index e456b483..78267994 100644 --- a/4coder_API/types.h +++ b/4coder_API/types.h @@ -689,10 +689,17 @@ STRUCT Query_Bar{ String string; }; -/* DOC(This feature is not implemented.) */ -STRUCT Event_Message{ - /* DOC(This feature is not implemented.) */ - int32_t type; +static int32_t CoreVariableIndex_ERROR = -1; + +ENUM(int32_t, Lifetime_Type){ + LifetimeType_View = 0, + LifetimeType_Buffer = 1, +}; + +STRUCT Lifetime_Handle{ + Lifetime_Type type; + View_ID view_id; + Buffer_ID buffer_id; }; ENUM(int16_t, UI_Item_Type){ diff --git a/4coder_clipboard.cpp b/4coder_clipboard.cpp index 9c67e02a..22948eb8 100644 --- a/4coder_clipboard.cpp +++ b/4coder_clipboard.cpp @@ -50,10 +50,10 @@ CUSTOM_DOC("At the cursor, insert the text at the top of the clipboard.") int32_t count = clipboard_count(app, 0); if (count > 0){ View_Summary view = get_active_view(app, access); - - view_set_variable(app, &view, view_next_rewrite_loc, RewritePaste); + Lifetime_Handle view_life = view_get_lifetime_handle(app, view.view_id); + core_variable_set(app, view_life, view_next_rewrite_loc, RewritePaste); int32_t paste_index = 0; - view_set_variable(app, &view, view_paste_index_loc, paste_index); + core_variable_set(app, view_life, view_paste_index_loc, paste_index); int32_t len = clipboard_index(app, 0, paste_index, 0, 0); char *str = 0; @@ -87,15 +87,16 @@ CUSTOM_DOC("If the previous command was paste or paste_next, replaces the paste int32_t count = clipboard_count(app, 0); if (count > 0){ View_Summary view = get_active_view(app, access); + Lifetime_Handle view_life = view_get_lifetime_handle(app, view.view_id); uint64_t rewrite = 0; - view_get_variable(app, &view, view_rewrite_loc, &rewrite); + core_variable_get(app, view_life, view_rewrite_loc, &rewrite); if (rewrite == RewritePaste){ - view_set_variable(app, &view, view_next_rewrite_loc, RewritePaste); + core_variable_set(app, view_life, view_next_rewrite_loc, RewritePaste); uint64_t prev_paste_index = 0; - view_get_variable(app, &view, view_paste_index_loc, &prev_paste_index); + core_variable_get(app, view_life, view_paste_index_loc, &prev_paste_index); int32_t paste_index = (int32_t)prev_paste_index + 1; - view_set_variable(app, &view, view_paste_index_loc, paste_index); + core_variable_set(app, view_life, view_paste_index_loc, paste_index); int32_t len = clipboard_index(app, 0, paste_index, 0, 0); char *str = 0; diff --git a/4coder_default_framework.cpp b/4coder_default_framework.cpp index 9fad4fa7..81835268 100644 --- a/4coder_default_framework.cpp +++ b/4coder_default_framework.cpp @@ -56,13 +56,15 @@ new_view_settings(Application_Links *app, View_Summary *view){ static void view_set_passive(Application_Links *app, View_Summary *view, bool32 value){ - view_set_variable(app, view, view_is_passive_loc, (uint64_t)value); + Lifetime_Handle view_life = view_get_lifetime_handle(app, view->view_id); + core_variable_set(app, view_life, view_is_passive_loc, (uint64_t)value); } static bool32 view_get_is_passive(Application_Links *app, View_Summary *view){ + Lifetime_Handle view_life = view_get_lifetime_handle(app, view->view_id); uint64_t is_passive = 0; - view_get_variable(app, view, view_is_passive_loc, &is_passive); + core_variable_get(app, view_life, view_is_passive_loc, &is_passive); return(is_passive != 0); } @@ -245,10 +247,10 @@ default_4coder_initialize(Application_Links *app, int32_t override_font_size, bo load_folder_of_themes_into_live_set(app, &global_part, "themes"); load_config_and_apply(app, &global_part, &global_config, override_font_size, override_hinting); - view_rewrite_loc = create_view_variable(app, "DEFAULT.rewrite" , (uint64_t)0); - view_next_rewrite_loc = create_view_variable(app, "DEFAULT.next_rewrite", (uint64_t)0); - view_paste_index_loc = create_view_variable(app, "DEFAULT.paste_index" , (uint64_t)0); - view_is_passive_loc = create_view_variable(app, "DEFAULT.is_passive" , (uint64_t)false); + view_rewrite_loc = create_core_variable(app, LifetimeType_View, "DEFAULT.rewrite" , (uint64_t)0); + view_next_rewrite_loc = create_core_variable(app, LifetimeType_View, "DEFAULT.next_rewrite", (uint64_t)0); + view_paste_index_loc = create_core_variable(app, LifetimeType_View, "DEFAULT.paste_index" , (uint64_t)0); + view_is_passive_loc = create_core_variable(app, LifetimeType_View, "DEFAULT.is_passive" , (uint64_t)false); } static void diff --git a/4coder_default_hooks.cpp b/4coder_default_hooks.cpp index 90536c46..d1f25b5c 100644 --- a/4coder_default_hooks.cpp +++ b/4coder_default_hooks.cpp @@ -42,12 +42,13 @@ START_HOOK_SIG(default_start){ // also relies on this particular command caller hook. COMMAND_CALLER_HOOK(default_command_caller){ View_Summary view = get_active_view(app, AccessAll); + Lifetime_Handle view_life = view_get_lifetime_handle(app, view.view_id); - view_set_variable(app, &view, view_next_rewrite_loc, 0); + core_variable_set(app, view_life, view_next_rewrite_loc, 0); exec_command(app, cmd); uint64_t next_rewrite = 0; - view_get_variable(app, &view, view_next_rewrite_loc, &next_rewrite); - view_set_variable(app, &view, view_rewrite_loc, next_rewrite); + core_variable_get(app, view_life, view_next_rewrite_loc, &next_rewrite); + core_variable_set(app, view_life, view_rewrite_loc, next_rewrite); return(0); } diff --git a/4coder_generated/app_functions.h b/4coder_generated/app_functions.h index f76cadcf..438442da 100644 --- a/4coder_generated/app_functions.h +++ b/4coder_generated/app_functions.h @@ -25,6 +25,7 @@ struct Application_Links; #define BUFFER_REMOVE_MARKERS_SIG(n) bool32 n(Application_Links *app, Buffer_Summary *buffer, Marker_Handle marker) #define BUFFER_GET_SETTING_SIG(n) bool32 n(Application_Links *app, Buffer_Summary *buffer, Buffer_Setting_ID setting, int32_t *value_out) #define BUFFER_SET_SETTING_SIG(n) bool32 n(Application_Links *app, Buffer_Summary *buffer, Buffer_Setting_ID setting, int32_t value) +#define BUFFER_GET_LIFETIME_HANDLE_SIG(n) Lifetime_Handle n(Application_Links *app, Buffer_ID buffer_id) #define BUFFER_TOKEN_COUNT_SIG(n) int32_t n(Application_Links *app, Buffer_Summary *buffer) #define BUFFER_READ_TOKENS_SIG(n) bool32 n(Application_Links *app, Buffer_Summary *buffer, int32_t start_token, int32_t end_token, Cpp_Token *tokens_out) #define BUFFER_GET_TOKEN_INDEX_SIG(n) bool32 n(Application_Links *app, Buffer_Summary *buffer, int32_t pos, Cpp_Get_Token_Result *get_result) @@ -41,6 +42,7 @@ struct Application_Links; #define SET_ACTIVE_VIEW_SIG(n) bool32 n(Application_Links *app, View_Summary *view) #define VIEW_GET_SETTING_SIG(n) bool32 n(Application_Links *app, View_Summary *view, View_Setting_ID setting, int32_t *value_out) #define VIEW_SET_SETTING_SIG(n) bool32 n(Application_Links *app, View_Summary *view, View_Setting_ID setting, int32_t value) +#define VIEW_GET_LIFETIME_HANDLE_SIG(n) Lifetime_Handle n(Application_Links *app, View_ID view_id) #define VIEW_SET_SPLIT_PROPORTION_SIG(n) bool32 n(Application_Links *app, View_Summary *view, float t) #define VIEW_COMPUTE_CURSOR_SIG(n) bool32 n(Application_Links *app, View_Summary *view, Buffer_Seek seek, Full_Cursor *cursor_out) #define VIEW_SET_CURSOR_SIG(n) bool32 n(Application_Links *app, View_Summary *view, Buffer_Seek seek, bool32 set_preferred_x) @@ -49,13 +51,13 @@ struct Application_Links; #define VIEW_SET_HIGHLIGHT_SIG(n) bool32 n(Application_Links *app, View_Summary *view, int32_t start, int32_t end, bool32 turn_on) #define VIEW_SET_BUFFER_SIG(n) bool32 n(Application_Links *app, View_Summary *view, Buffer_ID buffer_id, Set_Buffer_Flag flags) #define VIEW_POST_FADE_SIG(n) bool32 n(Application_Links *app, View_Summary *view, float seconds, int32_t start, int32_t end, int_color color) -#define CREATE_VIEW_VARIABLE_SIG(n) int32_t n(Application_Links *app, char *null_terminated_name, uint64_t default_value) -#define VIEW_SET_VARIABLE_SIG(n) bool32 n(Application_Links *app, View_Summary *view, int32_t location, uint64_t value) -#define VIEW_GET_VARIABLE_SIG(n) bool32 n(Application_Links *app, View_Summary *view, int32_t location, uint64_t *value_out) #define VIEW_START_UI_MODE_SIG(n) int32_t n(Application_Links *app, View_Summary *view) #define VIEW_END_UI_MODE_SIG(n) int32_t n(Application_Links *app, View_Summary *view) #define VIEW_SET_UI_SIG(n) bool32 n(Application_Links *app, View_Summary *view, UI_Control *control) #define VIEW_GET_UI_COPY_SIG(n) UI_Control n(Application_Links *app, View_Summary *view, struct Partition *part) +#define CREATE_CORE_VARIABLE_SIG(n) int32_t n(Application_Links *app, Lifetime_Type type, char *null_terminated_name, uint64_t default_value) +#define CORE_VARIABLE_SET_SIG(n) bool32 n(Application_Links *app, Lifetime_Handle handle, int32_t location, uint64_t value) +#define CORE_VARIABLE_GET_SIG(n) bool32 n(Application_Links *app, Lifetime_Handle handle, int32_t location, uint64_t *value_out) #define GET_USER_INPUT_SIG(n) User_Input n(Application_Links *app, Input_Type_Flag get_type, Input_Type_Flag abort_type) #define GET_COMMAND_INPUT_SIG(n) User_Input n(Application_Links *app) #define GET_MOUSE_STATE_SIG(n) Mouse_State n(Application_Links *app) @@ -121,6 +123,7 @@ typedef BUFFER_GET_MARKERS_SIG(Buffer_Get_Markers_Function); typedef BUFFER_REMOVE_MARKERS_SIG(Buffer_Remove_Markers_Function); typedef BUFFER_GET_SETTING_SIG(Buffer_Get_Setting_Function); typedef BUFFER_SET_SETTING_SIG(Buffer_Set_Setting_Function); +typedef BUFFER_GET_LIFETIME_HANDLE_SIG(Buffer_Get_Lifetime_Handle_Function); typedef BUFFER_TOKEN_COUNT_SIG(Buffer_Token_Count_Function); typedef BUFFER_READ_TOKENS_SIG(Buffer_Read_Tokens_Function); typedef BUFFER_GET_TOKEN_INDEX_SIG(Buffer_Get_Token_Index_Function); @@ -137,6 +140,7 @@ typedef CLOSE_VIEW_SIG(Close_View_Function); typedef SET_ACTIVE_VIEW_SIG(Set_Active_View_Function); typedef VIEW_GET_SETTING_SIG(View_Get_Setting_Function); typedef VIEW_SET_SETTING_SIG(View_Set_Setting_Function); +typedef VIEW_GET_LIFETIME_HANDLE_SIG(View_Get_Lifetime_Handle_Function); typedef VIEW_SET_SPLIT_PROPORTION_SIG(View_Set_Split_Proportion_Function); typedef VIEW_COMPUTE_CURSOR_SIG(View_Compute_Cursor_Function); typedef VIEW_SET_CURSOR_SIG(View_Set_Cursor_Function); @@ -145,13 +149,13 @@ typedef VIEW_SET_MARK_SIG(View_Set_Mark_Function); typedef VIEW_SET_HIGHLIGHT_SIG(View_Set_Highlight_Function); typedef VIEW_SET_BUFFER_SIG(View_Set_Buffer_Function); typedef VIEW_POST_FADE_SIG(View_Post_Fade_Function); -typedef CREATE_VIEW_VARIABLE_SIG(Create_View_Variable_Function); -typedef VIEW_SET_VARIABLE_SIG(View_Set_Variable_Function); -typedef VIEW_GET_VARIABLE_SIG(View_Get_Variable_Function); typedef VIEW_START_UI_MODE_SIG(View_Start_UI_Mode_Function); typedef VIEW_END_UI_MODE_SIG(View_End_UI_Mode_Function); typedef VIEW_SET_UI_SIG(View_Set_UI_Function); typedef VIEW_GET_UI_COPY_SIG(View_Get_UI_Copy_Function); +typedef CREATE_CORE_VARIABLE_SIG(Create_Core_Variable_Function); +typedef CORE_VARIABLE_SET_SIG(Core_Variable_Set_Function); +typedef CORE_VARIABLE_GET_SIG(Core_Variable_Get_Function); typedef GET_USER_INPUT_SIG(Get_User_Input_Function); typedef GET_COMMAND_INPUT_SIG(Get_Command_Input_Function); typedef GET_MOUSE_STATE_SIG(Get_Mouse_State_Function); @@ -219,6 +223,7 @@ Buffer_Get_Markers_Function *buffer_get_markers; Buffer_Remove_Markers_Function *buffer_remove_markers; Buffer_Get_Setting_Function *buffer_get_setting; Buffer_Set_Setting_Function *buffer_set_setting; +Buffer_Get_Lifetime_Handle_Function *buffer_get_lifetime_handle; Buffer_Token_Count_Function *buffer_token_count; Buffer_Read_Tokens_Function *buffer_read_tokens; Buffer_Get_Token_Index_Function *buffer_get_token_index; @@ -235,6 +240,7 @@ Close_View_Function *close_view; Set_Active_View_Function *set_active_view; View_Get_Setting_Function *view_get_setting; View_Set_Setting_Function *view_set_setting; +View_Get_Lifetime_Handle_Function *view_get_lifetime_handle; View_Set_Split_Proportion_Function *view_set_split_proportion; View_Compute_Cursor_Function *view_compute_cursor; View_Set_Cursor_Function *view_set_cursor; @@ -243,13 +249,13 @@ View_Set_Mark_Function *view_set_mark; View_Set_Highlight_Function *view_set_highlight; View_Set_Buffer_Function *view_set_buffer; View_Post_Fade_Function *view_post_fade; -Create_View_Variable_Function *create_view_variable; -View_Set_Variable_Function *view_set_variable; -View_Get_Variable_Function *view_get_variable; View_Start_UI_Mode_Function *view_start_ui_mode; View_End_UI_Mode_Function *view_end_ui_mode; View_Set_UI_Function *view_set_ui; View_Get_UI_Copy_Function *view_get_ui_copy; +Create_Core_Variable_Function *create_core_variable; +Core_Variable_Set_Function *core_variable_set; +Core_Variable_Get_Function *core_variable_get; Get_User_Input_Function *get_user_input; Get_Command_Input_Function *get_command_input; Get_Mouse_State_Function *get_mouse_state; @@ -316,6 +322,7 @@ Buffer_Get_Markers_Function *buffer_get_markers_; Buffer_Remove_Markers_Function *buffer_remove_markers_; Buffer_Get_Setting_Function *buffer_get_setting_; Buffer_Set_Setting_Function *buffer_set_setting_; +Buffer_Get_Lifetime_Handle_Function *buffer_get_lifetime_handle_; Buffer_Token_Count_Function *buffer_token_count_; Buffer_Read_Tokens_Function *buffer_read_tokens_; Buffer_Get_Token_Index_Function *buffer_get_token_index_; @@ -332,6 +339,7 @@ Close_View_Function *close_view_; Set_Active_View_Function *set_active_view_; View_Get_Setting_Function *view_get_setting_; View_Set_Setting_Function *view_set_setting_; +View_Get_Lifetime_Handle_Function *view_get_lifetime_handle_; View_Set_Split_Proportion_Function *view_set_split_proportion_; View_Compute_Cursor_Function *view_compute_cursor_; View_Set_Cursor_Function *view_set_cursor_; @@ -340,13 +348,13 @@ View_Set_Mark_Function *view_set_mark_; View_Set_Highlight_Function *view_set_highlight_; View_Set_Buffer_Function *view_set_buffer_; View_Post_Fade_Function *view_post_fade_; -Create_View_Variable_Function *create_view_variable_; -View_Set_Variable_Function *view_set_variable_; -View_Get_Variable_Function *view_get_variable_; View_Start_UI_Mode_Function *view_start_ui_mode_; View_End_UI_Mode_Function *view_end_ui_mode_; View_Set_UI_Function *view_set_ui_; View_Get_UI_Copy_Function *view_get_ui_copy_; +Create_Core_Variable_Function *create_core_variable_; +Core_Variable_Set_Function *core_variable_set_; +Core_Variable_Get_Function *core_variable_get_; Get_User_Input_Function *get_user_input_; Get_Command_Input_Function *get_command_input_; Get_Mouse_State_Function *get_mouse_state_; @@ -421,6 +429,7 @@ app_links->buffer_get_markers_ = Buffer_Get_Markers;\ app_links->buffer_remove_markers_ = Buffer_Remove_Markers;\ app_links->buffer_get_setting_ = Buffer_Get_Setting;\ app_links->buffer_set_setting_ = Buffer_Set_Setting;\ +app_links->buffer_get_lifetime_handle_ = Buffer_Get_Lifetime_Handle;\ app_links->buffer_token_count_ = Buffer_Token_Count;\ app_links->buffer_read_tokens_ = Buffer_Read_Tokens;\ app_links->buffer_get_token_index_ = Buffer_Get_Token_Index;\ @@ -437,6 +446,7 @@ app_links->close_view_ = Close_View;\ app_links->set_active_view_ = Set_Active_View;\ app_links->view_get_setting_ = View_Get_Setting;\ app_links->view_set_setting_ = View_Set_Setting;\ +app_links->view_get_lifetime_handle_ = View_Get_Lifetime_Handle;\ app_links->view_set_split_proportion_ = View_Set_Split_Proportion;\ app_links->view_compute_cursor_ = View_Compute_Cursor;\ app_links->view_set_cursor_ = View_Set_Cursor;\ @@ -445,13 +455,13 @@ app_links->view_set_mark_ = View_Set_Mark;\ app_links->view_set_highlight_ = View_Set_Highlight;\ app_links->view_set_buffer_ = View_Set_Buffer;\ app_links->view_post_fade_ = View_Post_Fade;\ -app_links->create_view_variable_ = Create_View_Variable;\ -app_links->view_set_variable_ = View_Set_Variable;\ -app_links->view_get_variable_ = View_Get_Variable;\ app_links->view_start_ui_mode_ = View_Start_UI_Mode;\ app_links->view_end_ui_mode_ = View_End_UI_Mode;\ app_links->view_set_ui_ = View_Set_UI;\ app_links->view_get_ui_copy_ = View_Get_UI_Copy;\ +app_links->create_core_variable_ = Create_Core_Variable;\ +app_links->core_variable_set_ = Core_Variable_Set;\ +app_links->core_variable_get_ = Core_Variable_Get;\ app_links->get_user_input_ = Get_User_Input;\ app_links->get_command_input_ = Get_Command_Input;\ app_links->get_mouse_state_ = Get_Mouse_State;\ @@ -518,6 +528,7 @@ static inline bool32 buffer_get_markers(Application_Links *app, Buffer_Summary * static inline bool32 buffer_remove_markers(Application_Links *app, Buffer_Summary *buffer, Marker_Handle marker){return(app->buffer_remove_markers(app, buffer, marker));} static inline bool32 buffer_get_setting(Application_Links *app, Buffer_Summary *buffer, Buffer_Setting_ID setting, int32_t *value_out){return(app->buffer_get_setting(app, buffer, setting, value_out));} static inline bool32 buffer_set_setting(Application_Links *app, Buffer_Summary *buffer, Buffer_Setting_ID setting, int32_t value){return(app->buffer_set_setting(app, buffer, setting, value));} +static inline Lifetime_Handle buffer_get_lifetime_handle(Application_Links *app, Buffer_ID buffer_id){return(app->buffer_get_lifetime_handle(app, buffer_id));} static inline int32_t buffer_token_count(Application_Links *app, Buffer_Summary *buffer){return(app->buffer_token_count(app, buffer));} static inline bool32 buffer_read_tokens(Application_Links *app, Buffer_Summary *buffer, int32_t start_token, int32_t end_token, Cpp_Token *tokens_out){return(app->buffer_read_tokens(app, buffer, start_token, end_token, tokens_out));} static inline bool32 buffer_get_token_index(Application_Links *app, Buffer_Summary *buffer, int32_t pos, Cpp_Get_Token_Result *get_result){return(app->buffer_get_token_index(app, buffer, pos, get_result));} @@ -534,6 +545,7 @@ static inline bool32 close_view(Application_Links *app, View_Summary *view){retu static inline bool32 set_active_view(Application_Links *app, View_Summary *view){return(app->set_active_view(app, view));} static inline bool32 view_get_setting(Application_Links *app, View_Summary *view, View_Setting_ID setting, int32_t *value_out){return(app->view_get_setting(app, view, setting, value_out));} static inline bool32 view_set_setting(Application_Links *app, View_Summary *view, View_Setting_ID setting, int32_t value){return(app->view_set_setting(app, view, setting, value));} +static inline Lifetime_Handle view_get_lifetime_handle(Application_Links *app, View_ID view_id){return(app->view_get_lifetime_handle(app, view_id));} static inline bool32 view_set_split_proportion(Application_Links *app, View_Summary *view, float t){return(app->view_set_split_proportion(app, view, t));} static inline bool32 view_compute_cursor(Application_Links *app, View_Summary *view, Buffer_Seek seek, Full_Cursor *cursor_out){return(app->view_compute_cursor(app, view, seek, cursor_out));} static inline bool32 view_set_cursor(Application_Links *app, View_Summary *view, Buffer_Seek seek, bool32 set_preferred_x){return(app->view_set_cursor(app, view, seek, set_preferred_x));} @@ -542,13 +554,13 @@ static inline bool32 view_set_mark(Application_Links *app, View_Summary *view, B static inline bool32 view_set_highlight(Application_Links *app, View_Summary *view, int32_t start, int32_t end, bool32 turn_on){return(app->view_set_highlight(app, view, start, end, turn_on));} static inline bool32 view_set_buffer(Application_Links *app, View_Summary *view, Buffer_ID buffer_id, Set_Buffer_Flag flags){return(app->view_set_buffer(app, view, buffer_id, flags));} static inline bool32 view_post_fade(Application_Links *app, View_Summary *view, float seconds, int32_t start, int32_t end, int_color color){return(app->view_post_fade(app, view, seconds, start, end, color));} -static inline int32_t create_view_variable(Application_Links *app, char *null_terminated_name, uint64_t default_value){return(app->create_view_variable(app, null_terminated_name, default_value));} -static inline bool32 view_set_variable(Application_Links *app, View_Summary *view, int32_t location, uint64_t value){return(app->view_set_variable(app, view, location, value));} -static inline bool32 view_get_variable(Application_Links *app, View_Summary *view, int32_t location, uint64_t *value_out){return(app->view_get_variable(app, view, location, value_out));} static inline int32_t view_start_ui_mode(Application_Links *app, View_Summary *view){return(app->view_start_ui_mode(app, view));} static inline int32_t view_end_ui_mode(Application_Links *app, View_Summary *view){return(app->view_end_ui_mode(app, view));} static inline bool32 view_set_ui(Application_Links *app, View_Summary *view, UI_Control *control){return(app->view_set_ui(app, view, control));} static inline UI_Control view_get_ui_copy(Application_Links *app, View_Summary *view, struct Partition *part){return(app->view_get_ui_copy(app, view, part));} +static inline int32_t create_core_variable(Application_Links *app, Lifetime_Type type, char *null_terminated_name, uint64_t default_value){return(app->create_core_variable(app, type, null_terminated_name, default_value));} +static inline bool32 core_variable_set(Application_Links *app, Lifetime_Handle handle, int32_t location, uint64_t value){return(app->core_variable_set(app, handle, location, value));} +static inline bool32 core_variable_get(Application_Links *app, Lifetime_Handle handle, int32_t location, uint64_t *value_out){return(app->core_variable_get(app, handle, location, value_out));} static inline User_Input get_user_input(Application_Links *app, Input_Type_Flag get_type, Input_Type_Flag abort_type){return(app->get_user_input(app, get_type, abort_type));} static inline User_Input get_command_input(Application_Links *app){return(app->get_command_input(app));} static inline Mouse_State get_mouse_state(Application_Links *app){return(app->get_mouse_state(app));} @@ -615,6 +627,7 @@ static inline bool32 buffer_get_markers(Application_Links *app, Buffer_Summary * static inline bool32 buffer_remove_markers(Application_Links *app, Buffer_Summary *buffer, Marker_Handle marker){return(app->buffer_remove_markers_(app, buffer, marker));} static inline bool32 buffer_get_setting(Application_Links *app, Buffer_Summary *buffer, Buffer_Setting_ID setting, int32_t *value_out){return(app->buffer_get_setting_(app, buffer, setting, value_out));} static inline bool32 buffer_set_setting(Application_Links *app, Buffer_Summary *buffer, Buffer_Setting_ID setting, int32_t value){return(app->buffer_set_setting_(app, buffer, setting, value));} +static inline Lifetime_Handle buffer_get_lifetime_handle(Application_Links *app, Buffer_ID buffer_id){return(app->buffer_get_lifetime_handle_(app, buffer_id));} static inline int32_t buffer_token_count(Application_Links *app, Buffer_Summary *buffer){return(app->buffer_token_count_(app, buffer));} static inline bool32 buffer_read_tokens(Application_Links *app, Buffer_Summary *buffer, int32_t start_token, int32_t end_token, Cpp_Token *tokens_out){return(app->buffer_read_tokens_(app, buffer, start_token, end_token, tokens_out));} static inline bool32 buffer_get_token_index(Application_Links *app, Buffer_Summary *buffer, int32_t pos, Cpp_Get_Token_Result *get_result){return(app->buffer_get_token_index_(app, buffer, pos, get_result));} @@ -631,6 +644,7 @@ static inline bool32 close_view(Application_Links *app, View_Summary *view){retu static inline bool32 set_active_view(Application_Links *app, View_Summary *view){return(app->set_active_view_(app, view));} static inline bool32 view_get_setting(Application_Links *app, View_Summary *view, View_Setting_ID setting, int32_t *value_out){return(app->view_get_setting_(app, view, setting, value_out));} static inline bool32 view_set_setting(Application_Links *app, View_Summary *view, View_Setting_ID setting, int32_t value){return(app->view_set_setting_(app, view, setting, value));} +static inline Lifetime_Handle view_get_lifetime_handle(Application_Links *app, View_ID view_id){return(app->view_get_lifetime_handle_(app, view_id));} static inline bool32 view_set_split_proportion(Application_Links *app, View_Summary *view, float t){return(app->view_set_split_proportion_(app, view, t));} static inline bool32 view_compute_cursor(Application_Links *app, View_Summary *view, Buffer_Seek seek, Full_Cursor *cursor_out){return(app->view_compute_cursor_(app, view, seek, cursor_out));} static inline bool32 view_set_cursor(Application_Links *app, View_Summary *view, Buffer_Seek seek, bool32 set_preferred_x){return(app->view_set_cursor_(app, view, seek, set_preferred_x));} @@ -639,13 +653,13 @@ static inline bool32 view_set_mark(Application_Links *app, View_Summary *view, B static inline bool32 view_set_highlight(Application_Links *app, View_Summary *view, int32_t start, int32_t end, bool32 turn_on){return(app->view_set_highlight_(app, view, start, end, turn_on));} static inline bool32 view_set_buffer(Application_Links *app, View_Summary *view, Buffer_ID buffer_id, Set_Buffer_Flag flags){return(app->view_set_buffer_(app, view, buffer_id, flags));} static inline bool32 view_post_fade(Application_Links *app, View_Summary *view, float seconds, int32_t start, int32_t end, int_color color){return(app->view_post_fade_(app, view, seconds, start, end, color));} -static inline int32_t create_view_variable(Application_Links *app, char *null_terminated_name, uint64_t default_value){return(app->create_view_variable_(app, null_terminated_name, default_value));} -static inline bool32 view_set_variable(Application_Links *app, View_Summary *view, int32_t location, uint64_t value){return(app->view_set_variable_(app, view, location, value));} -static inline bool32 view_get_variable(Application_Links *app, View_Summary *view, int32_t location, uint64_t *value_out){return(app->view_get_variable_(app, view, location, value_out));} static inline int32_t view_start_ui_mode(Application_Links *app, View_Summary *view){return(app->view_start_ui_mode_(app, view));} static inline int32_t view_end_ui_mode(Application_Links *app, View_Summary *view){return(app->view_end_ui_mode_(app, view));} static inline bool32 view_set_ui(Application_Links *app, View_Summary *view, UI_Control *control){return(app->view_set_ui_(app, view, control));} static inline UI_Control view_get_ui_copy(Application_Links *app, View_Summary *view, struct Partition *part){return(app->view_get_ui_copy_(app, view, part));} +static inline int32_t create_core_variable(Application_Links *app, Lifetime_Type type, char *null_terminated_name, uint64_t default_value){return(app->create_core_variable_(app, type, null_terminated_name, default_value));} +static inline bool32 core_variable_set(Application_Links *app, Lifetime_Handle handle, int32_t location, uint64_t value){return(app->core_variable_set_(app, handle, location, value));} +static inline bool32 core_variable_get(Application_Links *app, Lifetime_Handle handle, int32_t location, uint64_t *value_out){return(app->core_variable_get_(app, handle, location, value_out));} static inline User_Input get_user_input(Application_Links *app, Input_Type_Flag get_type, Input_Type_Flag abort_type){return(app->get_user_input_(app, get_type, abort_type));} static inline User_Input get_command_input(Application_Links *app){return(app->get_command_input_(app));} static inline Mouse_State get_mouse_state(Application_Links *app){return(app->get_mouse_state_(app));} diff --git a/4coder_generated/command_metadata.h b/4coder_generated/command_metadata.h index e5d7877e..3e8f6409 100644 --- a/4coder_generated/command_metadata.h +++ b/4coder_generated/command_metadata.h @@ -223,7 +223,7 @@ int32_t source_name_len; int32_t line_number; }; static Command_Metadata fcoder_metacmd_table[202] = { -{ PROC_LINKS(allow_mouse, 0), "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "/home/allen/4ed/code/4coder_default_framework.cpp", 49, 191 }, +{ PROC_LINKS(allow_mouse, 0), "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "/home/allen/4ed/code/4coder_default_framework.cpp", 49, 193 }, { PROC_LINKS(auto_tab_line_at_cursor, 0), "auto_tab_line_at_cursor", 23, "Auto-indents the line on which the cursor sits.", 47, "/home/allen/4ed/code/4coder_auto_indent.cpp", 43, 722 }, { PROC_LINKS(auto_tab_range, 0), "auto_tab_range", 14, "Auto-indents the range between the cursor and the mark.", 55, "/home/allen/4ed/code/4coder_auto_indent.cpp", 43, 733 }, { PROC_LINKS(auto_tab_whole_file, 0), "auto_tab_whole_file", 19, "Audo-indents the entire current buffer.", 39, "/home/allen/4ed/code/4coder_auto_indent.cpp", 43, 712 }, @@ -233,8 +233,8 @@ static Command_Metadata fcoder_metacmd_table[202] = { { PROC_LINKS(build_in_build_panel, 0), "build_in_build_panel", 20, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*. Puts the *compilation* buffer in a panel at the footer of the current view.", 230, "/home/allen/4ed/code/4coder_build_commands.cpp", 46, 187 }, { PROC_LINKS(build_search, 0), "build_search", 12, "Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*.", 153, "/home/allen/4ed/code/4coder_build_commands.cpp", 46, 155 }, { PROC_LINKS(center_view, 0), "center_view", 11, "Centers the view vertically on the line on which the cursor sits.", 65, "/home/allen/4ed/code/4coder_base_commands.cpp", 45, 120 }, -{ PROC_LINKS(change_active_panel, 0), "change_active_panel", 19, "Change the currently active panel, moving to the panel with the next highest view_id.", 85, "/home/allen/4ed/code/4coder_default_framework.cpp", 49, 133 }, -{ PROC_LINKS(change_active_panel_backwards, 0), "change_active_panel_backwards", 29, "Change the currently active panel, moving to the panel with the next lowest view_id.", 84, "/home/allen/4ed/code/4coder_default_framework.cpp", 49, 143 }, +{ PROC_LINKS(change_active_panel, 0), "change_active_panel", 19, "Change the currently active panel, moving to the panel with the next highest view_id.", 85, "/home/allen/4ed/code/4coder_default_framework.cpp", 49, 135 }, +{ PROC_LINKS(change_active_panel_backwards, 0), "change_active_panel_backwards", 29, "Change the currently active panel, moving to the panel with the next lowest view_id.", 84, "/home/allen/4ed/code/4coder_default_framework.cpp", 49, 145 }, { PROC_LINKS(change_to_build_panel, 0), "change_to_build_panel", 21, "If the special build panel is open, makes the build panel the active panel.", 75, "/home/allen/4ed/code/4coder_build_commands.cpp", 46, 209 }, { PROC_LINKS(clean_all_lines, 0), "clean_all_lines", 15, "Removes trailing whitespace from all lines in the current buffer.", 65, "/home/allen/4ed/code/4coder_base_commands.cpp", 45, 368 }, { PROC_LINKS(click_set_cursor, 0), "click_set_cursor", 16, "Sets the cursor position to the mouse position.", 47, "/home/allen/4ed/code/4coder_base_commands.cpp", 45, 174 }, @@ -345,14 +345,14 @@ static Command_Metadata fcoder_metacmd_table[202] = { { PROC_LINKS(open_long_braces_break, 0), "open_long_braces_break", 22, "At the cursor, insert a '{' and '}break;' separated by a blank line.", 68, "/home/allen/4ed/code/4coder_combined_write_commands.cpp", 55, 74 }, { PROC_LINKS(open_long_braces_semicolon, 0), "open_long_braces_semicolon", 26, "At the cursor, insert a '{' and '};' separated by a blank line.", 63, "/home/allen/4ed/code/4coder_combined_write_commands.cpp", 55, 66 }, { PROC_LINKS(open_matching_file_cpp, 0), "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "/home/allen/4ed/code/4coder_base_commands.cpp", 45, 1387 }, -{ PROC_LINKS(open_panel_hsplit, 0), "open_panel_hsplit", 17, "Create a new panel by horizontally splitting the active panel.", 62, "/home/allen/4ed/code/4coder_default_framework.cpp", 49, 162 }, -{ PROC_LINKS(open_panel_vsplit, 0), "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "/home/allen/4ed/code/4coder_default_framework.cpp", 49, 153 }, +{ PROC_LINKS(open_panel_hsplit, 0), "open_panel_hsplit", 17, "Create a new panel by horizontally splitting the active panel.", 62, "/home/allen/4ed/code/4coder_default_framework.cpp", 49, 164 }, +{ PROC_LINKS(open_panel_vsplit, 0), "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "/home/allen/4ed/code/4coder_default_framework.cpp", 49, 155 }, { PROC_LINKS(page_down, 0), "page_down", 9, "Scrolls the view down one view height and moves the cursor down one view height.", 80, "/home/allen/4ed/code/4coder_base_commands.cpp", 45, 288 }, { PROC_LINKS(page_up, 0), "page_up", 7, "Scrolls the view up one view height and moves the cursor up one view height.", 76, "/home/allen/4ed/code/4coder_base_commands.cpp", 45, 279 }, { PROC_LINKS(paste, 0), "paste", 5, "At the cursor, insert the text at the top of the clipboard.", 59, "/home/allen/4ed/code/4coder_clipboard.cpp", 41, 46 }, -{ PROC_LINKS(paste_and_indent, 0), "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "/home/allen/4ed/code/4coder_clipboard.cpp", 41, 130 }, +{ PROC_LINKS(paste_and_indent, 0), "paste_and_indent", 16, "Paste from the top of clipboard and run auto-indent on the newly pasted text.", 77, "/home/allen/4ed/code/4coder_clipboard.cpp", 41, 131 }, { PROC_LINKS(paste_next, 0), "paste_next", 10, "If the previous command was paste or paste_next, replaces the paste range with the next text down on the clipboard, otherwise operates as the paste command.", 156, "/home/allen/4ed/code/4coder_clipboard.cpp", 41, 83 }, -{ PROC_LINKS(paste_next_and_indent, 0), "paste_next_and_indent", 21, "Paste the next item on the clipboard and run auto-indent on the newly pasted text.", 82, "/home/allen/4ed/code/4coder_clipboard.cpp", 41, 137 }, +{ PROC_LINKS(paste_next_and_indent, 0), "paste_next_and_indent", 21, "Paste the next item on the clipboard and run auto-indent on the newly pasted text.", 82, "/home/allen/4ed/code/4coder_clipboard.cpp", 41, 138 }, { PROC_LINKS(place_in_scope, 0), "place_in_scope", 14, "Wraps the code contained in the range between cursor and mark with a new curly brace scope.", 91, "/home/allen/4ed/code/4coder_scope_commands.cpp", 46, 481 }, { PROC_LINKS(project_fkey_command, 0), "project_fkey_command", 20, "Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.", 175, "/home/allen/4ed/code/4coder_project_commands.cpp", 48, 1078 }, { PROC_LINKS(project_go_to_root_directory, 0), "project_go_to_root_directory", 28, "Changes 4coder's hot directory to the root directory of the currently loaded project. With no loaded project nothing hapepns.", 125, "/home/allen/4ed/code/4coder_project_commands.cpp", 48, 1103 }, @@ -361,7 +361,7 @@ static Command_Metadata fcoder_metacmd_table[202] = { { PROC_LINKS(query_replace_selection, 0), "query_replace_selection", 23, "Queries the user for a string, and incrementally replace every occurence of the string found in the selected range with the specified string.", 141, "/home/allen/4ed/code/4coder_base_commands.cpp", 45, 950 }, { PROC_LINKS(redo, 0), "redo", 4, "Advances forewards through the undo history.", 44, "/home/allen/4ed/code/4coder_base_commands.cpp", 45, 1459 }, { PROC_LINKS(reload_themes, 0), "reload_themes", 13, "Loads all the theme files in the theme folder, replacing duplicates with the new theme data.", 92, "/home/allen/4ed/code/4coder_base_commands.cpp", 45, 1479 }, -{ PROC_LINKS(remap_interactive, 0), "remap_interactive", 17, "Switch to a named key binding map.", 34, "/home/allen/4ed/code/4coder_default_framework.cpp", 49, 211 }, +{ PROC_LINKS(remap_interactive, 0), "remap_interactive", 17, "Switch to a named key binding map.", 34, "/home/allen/4ed/code/4coder_default_framework.cpp", 49, 213 }, { PROC_LINKS(rename_file_query, 0), "rename_file_query", 17, "Queries the user for a new name and renames the file of the current buffer, altering the buffer's name too.", 107, "/home/allen/4ed/code/4coder_base_commands.cpp", 45, 1090 }, { PROC_LINKS(reopen, 0), "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "/home/allen/4ed/code/4coder_base_commands.cpp", 45, 1465 }, { PROC_LINKS(replace_in_range, 0), "replace_in_range", 16, "Queries the user for two strings, and replaces all occurences of the first string in the range between the cursor and the mark with the second string.", 150, "/home/allen/4ed/code/4coder_base_commands.cpp", 45, 810 }, @@ -404,14 +404,14 @@ static Command_Metadata fcoder_metacmd_table[202] = { { PROC_LINKS(show_scrollbar, 0), "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "/home/allen/4ed/code/4coder_base_commands.cpp", 45, 450 }, { PROC_LINKS(snipe_token_or_word, 0), "snipe_token_or_word", 19, "Delete a single, whole token on or to the left of the cursor and post it to the clipboard.", 90, "/home/allen/4ed/code/4coder_seek.cpp", 36, 1259 }, { PROC_LINKS(snipe_token_or_word_right, 0), "snipe_token_or_word_right", 25, "Delete a single, whole token on or to the right of the cursor and post it to the clipboard.", 91, "/home/allen/4ed/code/4coder_seek.cpp", 36, 1265 }, -{ PROC_LINKS(suppress_mouse, 0), "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "/home/allen/4ed/code/4coder_default_framework.cpp", 49, 185 }, +{ PROC_LINKS(suppress_mouse, 0), "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "/home/allen/4ed/code/4coder_default_framework.cpp", 49, 187 }, { PROC_LINKS(swap_buffers_between_panels, 0), "swap_buffers_between_panels", 27, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "/home/allen/4ed/code/4coder_base_commands.cpp", 45, 1411 }, { PROC_LINKS(to_lowercase, 0), "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "/home/allen/4ed/code/4coder_base_commands.cpp", 45, 348 }, { PROC_LINKS(to_uppercase, 0), "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "/home/allen/4ed/code/4coder_base_commands.cpp", 45, 328 }, { PROC_LINKS(toggle_filebar, 0), "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "/home/allen/4ed/code/4coder_base_commands.cpp", 45, 478 }, -{ PROC_LINKS(toggle_fullscreen, 0), "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "/home/allen/4ed/code/4coder_default_framework.cpp", 49, 203 }, +{ PROC_LINKS(toggle_fullscreen, 0), "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "/home/allen/4ed/code/4coder_default_framework.cpp", 49, 205 }, { PROC_LINKS(toggle_line_wrap, 0), "toggle_line_wrap", 16, "Toggles the current buffer's line wrapping status.", 50, "/home/allen/4ed/code/4coder_base_commands.cpp", 45, 487 }, -{ PROC_LINKS(toggle_mouse, 0), "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "/home/allen/4ed/code/4coder_default_framework.cpp", 49, 197 }, +{ PROC_LINKS(toggle_mouse, 0), "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "/home/allen/4ed/code/4coder_default_framework.cpp", 49, 199 }, { PROC_LINKS(toggle_show_whitespace, 0), "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "/home/allen/4ed/code/4coder_base_commands.cpp", 45, 554 }, { PROC_LINKS(toggle_virtual_whitespace, 0), "toggle_virtual_whitespace", 25, "Toggles the current buffer's virtual whitespace status.", 55, "/home/allen/4ed/code/4coder_base_commands.cpp", 45, 543 }, { PROC_LINKS(undo, 0), "undo", 4, "Advances backwards through the undo history.", 44, "/home/allen/4ed/code/4coder_base_commands.cpp", 45, 1453 }, diff --git a/4coder_search.cpp b/4coder_search.cpp index 9a580df7..aa105820 100644 --- a/4coder_search.cpp +++ b/4coder_search.cpp @@ -828,12 +828,14 @@ CUSTOM_DOC("Iteratively tries completing the word to the left of the cursor with if (buffer.exists){ int32_t do_init = false; + Lifetime_Handle view_life = view_get_lifetime_handle(app, view.view_id); + uint64_t rewrite = 0; - view_get_variable(app, &view, view_rewrite_loc, &rewrite); + core_variable_get(app, view_life, view_rewrite_loc, &rewrite); if (rewrite != RewriteWordComplete){ do_init = true; } - view_set_variable(app, &view, view_next_rewrite_loc, RewriteWordComplete); + core_variable_set(app, view_life, view_next_rewrite_loc, RewriteWordComplete); if (!complete_state.initialized){ do_init = true; } diff --git a/4ed_api_implementation.cpp b/4ed_api_implementation.cpp index fb558136..28820d46 100644 --- a/4ed_api_implementation.cpp +++ b/4ed_api_implementation.cpp @@ -103,7 +103,6 @@ fill_view_summary(System_Functions *system, View_Summary *view, View *vptr, Comm internal Editing_File* get_file_from_identifier(System_Functions *system, Working_Set *working_set, Buffer_Identifier buffer){ Editing_File *file = 0; - if (buffer.id){ file = working_set_get_active_file(working_set, buffer.id); } @@ -111,22 +110,25 @@ get_file_from_identifier(System_Functions *system, Working_Set *working_set, Buf String name = make_string(buffer.name, buffer.name_len); file = working_set_contains_name(working_set, name); } - + return(file); +} + +internal Editing_File* +imp_get_file(Command_Data *cmd, Buffer_ID buffer_id){ + Working_Set *working_set = &cmd->models->working_set; + Editing_File *file = working_set_get_active_file(working_set, buffer_id); + if (file != 0 && !file_is_ready(file)){ + file = 0; + } return(file); } internal Editing_File* imp_get_file(Command_Data *cmd, Buffer_Summary *buffer){ Editing_File *file = 0; - Working_Set *working_set = &cmd->models->working_set;; - if (buffer && buffer->exists){ - file = working_set_get_active_file(working_set, buffer->buffer_id); - if (file != 0 && !file_is_ready(file)){ - file = 0; - } + file = imp_get_file(cmd, buffer->buffer_id); } - return(file); } @@ -134,7 +136,6 @@ internal View* imp_get_view(Command_Data *cmd, View_ID view_id){ Live_Views *live_set = cmd->live_set; View *vptr = 0; - view_id = view_id - 1; if (view_id >= 0 && view_id < live_set->max){ vptr = live_set->views + view_id; @@ -142,18 +143,15 @@ imp_get_view(Command_Data *cmd, View_ID view_id){ vptr = 0; } } - return(vptr); } internal View* imp_get_view(Command_Data *cmd, View_Summary *view){ View *vptr = 0; - - if (view && view->exists){ + if (view != 0 && view->exists){ vptr = imp_get_view(cmd, view->view_id); } - return(vptr); } @@ -927,10 +925,10 @@ DOC_RETURN(returns non-zero on success) */{ Command_Data *cmd = (Command_Data*)app->cmd_context; Editing_File *file = imp_get_file(cmd, buffer); - bool32 result = 0; + bool32 result = false; - if (file){ - result = 1; + if (file != 0){ + result = true; switch (setting){ case BufferSetting_Lex: { @@ -1197,6 +1195,19 @@ DOC_SEE(Buffer_Setting_ID) return(result); } +API_EXPORT Lifetime_Handle +Buffer_Get_Lifetime_Handle(Application_Links *app, Buffer_ID buffer_id) +{ + Command_Data *cmd = (Command_Data*)app->cmd_context; + Editing_File *file = imp_get_file(cmd, buffer_id); + Lifetime_Handle lifetime = {0}; + if (file != 0){ + lifetime.type = LifetimeType_Buffer; + lifetime.buffer_id = buffer_id; + } + return(lifetime); +} + API_EXPORT int32_t Buffer_Token_Count(Application_Links *app, Buffer_Summary *buffer) /* @@ -1206,13 +1217,12 @@ If the buffer does not exist or if it is not a lexed buffer, the return is zero. */{ Command_Data *cmd = (Command_Data*)app->cmd_context; Editing_File *file = imp_get_file(cmd, buffer); - int32_t count = 0; - - if (file && file->state.token_array.tokens && file->state.tokens_complete){ + if (file != 0 && + file->state.token_array.tokens && + file->state.tokens_complete){ count = file->state.token_array.count; } - return(count); } @@ -1808,7 +1818,6 @@ in the system, the call will fail.) layout_fix_all_panels(&models->layout); } - return(result); } @@ -1817,11 +1826,9 @@ Set_Active_View(Application_Links *app, View_Summary *view) /* DOC_PARAM(view, The view parameter specifies which view to make active.) DOC_RETURN(This call returns non-zero on success.) - DOC(If the given view is open, it is set as the active view, and takes subsequent commands and is returned from get_active_view.) - DOC_SEE(get_active_view) */{ Command_Data *cmd = (Command_Data*)app->cmd_context; @@ -1932,6 +1939,19 @@ DOC_SEE(View_Setting_ID) return(result); } +API_EXPORT Lifetime_Handle +View_Get_Lifetime_Handle(Application_Links *app, View_ID view_id) +{ + Command_Data *cmd = (Command_Data*)app->cmd_context; + View *view = imp_get_view(cmd, view_id); + Lifetime_Handle lifetime = {0}; + if (view != 0){ + lifetime.type = LifetimeType_View; + lifetime.view_id = view_id; + } + return(lifetime); +} + API_EXPORT bool32 View_Set_Split_Proportion(Application_Links *app, View_Summary *view, float t) /* @@ -2185,54 +2205,8 @@ DOC_SEE(int_color) } API_EXPORT int32_t -Create_View_Variable(Application_Links *app, char *null_terminated_name, uint64_t default_value){ - Command_Data *cmd = (Command_Data*)app->cmd_context; - Models *models = cmd->models; - String name = make_string_slowly(null_terminated_name); - return(dynamic_variables_lookup_or_create(&models->mem.general, - &models->view_variable_layout, name, default_value)); -} - -API_EXPORT bool32 -View_Set_Variable(Application_Links *app, View_Summary *view, int32_t location, uint64_t value){ - Command_Data *cmd = (Command_Data*)app->cmd_context; - View *vptr = imp_get_view(cmd, view); - bool32 result = false; - if (vptr != 0){ - Models *models = cmd->models; - u64 *ptr = 0; - if (dynamic_variables_get_ptr(&models->mem.general, - &models->view_variable_layout, - &vptr->transient.dynamic_vars, - location, &ptr)){ - result = true; - *ptr = value; - } - } - return(result); -} - -API_EXPORT bool32 -View_Get_Variable(Application_Links *app, View_Summary *view, int32_t location, uint64_t *value_out){ - Command_Data *cmd = (Command_Data*)app->cmd_context; - View *vptr = imp_get_view(cmd, view); - bool32 result = false; - if (vptr != 0){ - Models *models = cmd->models; - u64 *ptr = 0; - if (dynamic_variables_get_ptr(&models->mem.general, - &models->view_variable_layout, - &vptr->transient.dynamic_vars, - location, &ptr)){ - result = true; - *value_out = *ptr; - } - } - return(result); -} - -API_EXPORT int32_t -View_Start_UI_Mode(Application_Links *app, View_Summary *view){ +View_Start_UI_Mode(Application_Links *app, View_Summary *view) +{ Command_Data *cmd = (Command_Data*)app->cmd_context; View *vptr = imp_get_view(cmd, view); if (vptr != 0){ @@ -2246,7 +2220,8 @@ View_Start_UI_Mode(Application_Links *app, View_Summary *view){ } API_EXPORT int32_t -View_End_UI_Mode(Application_Links *app, View_Summary *view){ +View_End_UI_Mode(Application_Links *app, View_Summary *view) +{ Command_Data *cmd = (Command_Data*)app->cmd_context; View *vptr = imp_get_view(cmd, view); if (vptr != 0){ @@ -2265,7 +2240,8 @@ View_End_UI_Mode(Application_Links *app, View_Summary *view){ } API_EXPORT bool32 -View_Set_UI(Application_Links *app, View_Summary *view, UI_Control *control){ +View_Set_UI(Application_Links *app, View_Summary *view, UI_Control *control) +{ Command_Data *cmd = (Command_Data*)app->cmd_context; View *vptr = imp_get_view(cmd, view); Models *models = cmd->models; @@ -2358,7 +2334,8 @@ View_Set_UI(Application_Links *app, View_Summary *view, UI_Control *control){ } API_EXPORT UI_Control -View_Get_UI_Copy(Application_Links *app, View_Summary *view, struct Partition *part){ +View_Get_UI_Copy(Application_Links *app, View_Summary *view, struct Partition *part) +{ Command_Data *cmd = (Command_Data*)app->cmd_context; View *vptr = imp_get_view(cmd, view); UI_Control result = {0}; @@ -2378,6 +2355,89 @@ View_Get_UI_Copy(Application_Links *app, View_Summary *view, struct Partition *p return(result); } +API_EXPORT int32_t +Create_Core_Variable(Application_Links *app, Lifetime_Type type, char *null_terminated_name, uint64_t default_value) +{ + Command_Data *cmd = (Command_Data*)app->cmd_context; + Models *models = cmd->models; + String name = make_string_slowly(null_terminated_name); + General_Memory *general = &models->mem.general; + switch (type){ + case LifetimeType_View: + { + Dynamic_Variable_Layout *layout = &models->view_variable_layout; + return(dynamic_variables_lookup_or_create(general, layout, name, default_value)); + }break; + case LifetimeType_Buffer: + { + Dynamic_Variable_Layout *layout = &models->buffer_variable_layout; + return(dynamic_variables_lookup_or_create(general, layout, name, default_value)); + }break; + } + return(CoreVariableIndex_ERROR); +} + +internal bool32 +get_dynamic_variable(Command_Data *cmd, Lifetime_Handle handle, + int32_t location, uint64_t **ptr_out){ + Models *models = cmd->models; + General_Memory *general = &models->mem.general; + Dynamic_Variable_Layout *layout = 0; + Dynamic_Variable_Block *block = 0; + + switch (handle.type){ + case LifetimeType_View: + { + View *vptr = imp_get_view(cmd, handle.view_id); + if (vptr != 0){ + layout = &models->view_variable_layout; + block = &vptr->transient.dynamic_vars; + } + }break; + + case LifetimeType_Buffer: + { + Editing_File *file = imp_get_file(cmd, handle.buffer_id); + if (file != 0){ + layout = &models->buffer_variable_layout; + block = &file->dynamic_vars; + } + }break; + } + + bool32 result = false; + if (layout != 0 && block != 0){ + if (dynamic_variables_get_ptr(general, layout, block, location, ptr_out)){ + result = true; + } + } + return(result); +} + +API_EXPORT bool32 +Core_Variable_Set(Application_Links *app, Lifetime_Handle handle, int32_t location, uint64_t value) +{ + Command_Data *cmd = (Command_Data*)app->cmd_context; + u64 *ptr = 0; + if (get_dynamic_variable(cmd, handle, location, &ptr)){ + *ptr = value; + return(true); + } + return(false); +} + +API_EXPORT bool32 +Core_Variable_Get(Application_Links *app, Lifetime_Handle handle, int32_t location, uint64_t *value_out) +{ + Command_Data *cmd = (Command_Data*)app->cmd_context; + u64 *ptr = 0; + if (get_dynamic_variable(cmd, handle, location, &ptr)){ + *value_out = *ptr; + return(true); + } + return(false); +} + API_EXPORT User_Input Get_User_Input(Application_Links *app, Input_Type_Flag get_type, Input_Type_Flag abort_type) /* @@ -2439,23 +2499,6 @@ DOC_SEE(Mouse_State) return(mouse); } -/* -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); -} -*/ - API_EXPORT bool32 Start_Query_Bar(Application_Links *app, Query_Bar *bar, uint32_t flags) /* @@ -2516,7 +2559,8 @@ Get_Theme_Count(Application_Links *app) } API_EXPORT String -Get_Theme_Name(Application_Links *app, Partition *arena, int32_t index){ +Get_Theme_Name(Application_Links *app, Partition *arena, int32_t index) +{ Command_Data *cmd = (Command_Data*)app->cmd_context; Style_Library *library = &cmd->models->styles; diff --git a/4ed_app_models.h b/4ed_app_models.h index ceade1f6..1771c725 100644 --- a/4ed_app_models.h +++ b/4ed_app_models.h @@ -67,6 +67,7 @@ struct Models{ Live_Views live_set; Parse_Context_Memory parse_context_memory; + Dynamic_Variable_Layout buffer_variable_layout; Dynamic_Variable_Layout view_variable_layout; Editing_File *message_buffer; diff --git a/4ed_app_target.cpp b/4ed_app_target.cpp index 23067148..a1462bfb 100644 --- a/4ed_app_target.cpp +++ b/4ed_app_target.cpp @@ -43,6 +43,7 @@ #include "4ed_linked_node_macros.h" #include "4ed_log.h" +#include "4ed_dynamic_variables.h" #include "4ed_buffer_model.h" #include "4ed_translation.h" @@ -59,10 +60,10 @@ #include "4ed_cli.h" #include "4ed_gui.h" #include "4ed_layout.h" -#include "4ed_dynamic_variables.h" #include "4ed_view.h" #include "4ed_app_models.h" +#include "4ed_dynamic_variables.cpp" #include "4ed_parse_context.cpp" #include "4ed_font.cpp" #include "4ed_translation.cpp" @@ -79,7 +80,6 @@ #include "4ed_hot_directory.cpp" #include "4ed_cli.cpp" #include "4ed_gui.cpp" -#include "4ed_dynamic_variables.cpp" #include "4ed_layout.cpp" #include "4coder_buffer_seek_constructors.cpp" #include "4ed_view.cpp" diff --git a/4ed_file.h b/4ed_file.h index 600b6a4b..ceb2e3c7 100644 --- a/4ed_file.h +++ b/4ed_file.h @@ -131,6 +131,7 @@ struct Editing_File{ b32 is_loading; b32 is_dummy; Editing_File_State state; + Dynamic_Variable_Block dynamic_vars; Editing_File_Markers markers; Editing_File_Name base_name; Editing_File_Name unique_name; diff --git a/4ed_view.h b/4ed_view.h index 2f8a3693..9c377809 100644 --- a/4ed_view.h +++ b/4ed_view.h @@ -15,7 +15,6 @@ struct View_Persistent{ i32 id; Coroutine_Head *coroutine; - Event_Message message_passing_slot; }; struct File_Viewing_Data{ diff --git a/4ed_working_set.cpp b/4ed_working_set.cpp index b8ffb63f..17e97841 100644 --- a/4ed_working_set.cpp +++ b/4ed_working_set.cpp @@ -66,7 +66,7 @@ working_set_extend_memory(Working_Set *working_set, Editing_File *new_space, i16 } internal Editing_File* -working_set_alloc(Working_Set *working_set){ +working_set_alloc(Working_Set *working_set, General_Memory *general){ Editing_File *result = 0; if (working_set->file_count < working_set->file_max){ @@ -83,6 +83,7 @@ working_set_alloc(Working_Set *working_set){ result->settings.minimum_base_display_width = working_set->default_minimum_base_display_width; result->settings.wrap_indicator = WrapIndicator_Show_At_Wrap_Edge; init_file_markers_state(&result->markers); + dynamic_variables_block_init(general, &result->dynamic_vars); ++working_set->file_count; } @@ -97,7 +98,7 @@ working_set_alloc_always(Working_Set *working_set, General_Memory *general){ Editing_File *new_chunk = gen_array(general, Editing_File, new_count); working_set_extend_memory(working_set, new_chunk, new_count); } - result = working_set_alloc(working_set); + result = working_set_alloc(working_set, general); return(result); } diff --git a/themes/theme-sunlight.4coder b/themes/theme-sunlight.4coder index 83907010..0172ee94 100644 --- a/themes/theme-sunlight.4coder +++ b/themes/theme-sunlight.4coder @@ -1,6 +1,6 @@ name = "sunlight"; -Back = 0xFFDFDFDF; +Back = 0xFFDFD5D0; Margin = 0xFFC7C7C7; Margin_Hover = 0xFFBFBFBF; Margin_Active = 0xFFB7B7B7; @@ -22,7 +22,7 @@ Float_Constant = Str_Constant; Bool_Constant = Str_Constant; Include = Str_Constant; Preproc = 0xFF000000; -Special_Character = 0xFF00FFFF; +Special_Character = 0xFFFF00FF; Ghost_Character = 0xFF929292; Paste = 0xFFFF0000;