diff --git a/custom/4coder_config.cpp b/custom/4coder_config.cpp index f09c3abf..47642f54 100644 --- a/custom/4coder_config.cpp +++ b/custom/4coder_config.cpp @@ -4,6 +4,28 @@ // TOP +//////////////////////////////// +// NOTE(allen): Config Search List + +function void +def_search_normal_load_list(Arena *arena, List_String_Const_u8 *list){ + Variable_Handle prj_var = vars_read_key(vars_get_root(), vars_save_string_lit("prj_config")); + String_Const_u8 prj_dir = prj_path_from_project(arena, prj_var); + if (prj_dir.size > 0){ + string_list_push(arena, list, prj_dir); + } + def_search_list_add_system_path(arena, list, SystemPath_Binary); +} + +function FILE* +def_search_normal_fopen(Arena *arena, char *file_name, char *opt){ + Temp_Memory_Block block(arena); + List_String_Const_u8 list = {}; + def_search_normal_load_list(arena, &list); + FILE *file = def_search_fopen(arena, &list, file_name, opt); + return(file); +} + //////////////////////////////// // NOTE(allen): Extension List diff --git a/custom/4coder_config.h b/custom/4coder_config.h index dd74a4b6..f3e23511 100644 --- a/custom/4coder_config.h +++ b/custom/4coder_config.h @@ -7,8 +7,6 @@ #if !defined(FCODER_CONFIG_H) #define FCODER_CONFIG_H -#include - //////////////////////////////// // NOTE(allen): Config Parser Types @@ -174,6 +172,12 @@ struct Config_Get_Result_List{ i32 count; }; +//////////////////////////////// +// NOTE(allen): Config Search List + +function String_Const_u8 def_search_get_full_path(Arena *arena, List_String_Const_u8 *list, String_Const_u8 file_name); +function FILE *def_search_normal_fopen(Arena *arena, char *file_name, char *opt); + //////////////////////////////// // NOTE(allen): Config Parser Functions diff --git a/custom/4coder_project_commands.cpp b/custom/4coder_project_commands.cpp index 1ef1ed48..a904489f 100644 --- a/custom/4coder_project_commands.cpp +++ b/custom/4coder_project_commands.cpp @@ -4,13 +4,6 @@ // TOP -#if 1 -global Project current_project = {}; -global Arena current_project_arena = {}; -#endif - -/////////////////////////////// - function Match_Pattern_List prj_pattern_list_from_extension_array(Arena *arena, String_Const_u8_Array list){ Match_Pattern_List result = {}; @@ -41,10 +34,31 @@ prj_pattern_list_from_var(Arena *arena, Variable_Handle var){ return(result); } -/////////////////////////////// +function Match_Pattern_List +prj_get_standard_blacklist(Arena *arena){ + String_Const_u8 dot = string_u8_litexpr(".*"); + String_Const_u8_Array black_array = {}; + black_array.strings = ˙ + black_array.count = 1; + return(prj_pattern_list_from_extension_array(arena, black_array)); +} + +function b32 +prj_match_in_pattern_list(String_Const_u8 string, Match_Pattern_List list){ + b32 found_match = false; + for (Match_Pattern_Node *node = list.first; + node != 0; + node = node->next){ + if (string_wildcard_match(node->pattern.absolutes, string, StringMatch_Exact)){ + found_match = true; + break; + } + } + return(found_match); +} function void -close_all_files_with_extension(Application_Links *app, String_Const_u8_Array extension_array){ +prj_close_files_with_ext(Application_Links *app, String_Const_u8_Array extension_array){ Scratch_Block scratch(app); i32 buffers_to_close_max = Thousand(100); @@ -91,23 +105,17 @@ close_all_files_with_extension(Application_Links *app, String_Const_u8_Array ext }while(do_repeat); } -function b32 -match_in_pattern_list(String_Const_u8 string, Match_Pattern_List list){ - b32 found_match = false; - for (Match_Pattern_Node *node = list.first; - node != 0; - node = node->next){ - if (string_wildcard_match(node->pattern.absolutes, string, StringMatch_Exact)){ - found_match = true; - break; - } - } - return(found_match); +function void +prj_open_files_with_ext(Application_Links *app, String_Const_u8 dir, String_Const_u8_Array array, u32 flags){ + Scratch_Block scratch(app); + Match_Pattern_List whitelist = prj_pattern_list_from_extension_array(scratch, array); + Match_Pattern_List blacklist = prj_get_standard_blacklist(scratch); + prj_open_files_pattern_filter(app, dir, whitelist, blacklist, flags); } function void -open_files_pattern_match__recursive(Application_Links *app, String_Const_u8 path, - Match_Pattern_List whitelist, Match_Pattern_List blacklist, u32 flags){ +prj_open_files_pattern_filter__rec(Application_Links *app, String_Const_u8 path, + Match_Pattern_List whitelist, Match_Pattern_List blacklist, u32 flags){ Scratch_Block scratch(app); ProfileScopeNamed(app, "get file list", profile_get_file_list); @@ -121,17 +129,17 @@ open_files_pattern_match__recursive(Application_Links *app, String_Const_u8 path if ((flags & OpenAllFilesFlag_Recursive) == 0){ continue; } - if (match_in_pattern_list(file_name, blacklist)){ + if (prj_match_in_pattern_list(file_name, blacklist)){ continue; } String_Const_u8 new_path = push_u8_stringf(scratch, "%.*s%.*s/", string_expand(path), string_expand(file_name)); - open_files_pattern_match__recursive(app, new_path, whitelist, blacklist, flags); + prj_open_files_pattern_filter__rec(app, new_path, whitelist, blacklist, flags); } else{ - if (!match_in_pattern_list(file_name, whitelist)){ + if (!prj_match_in_pattern_list(file_name, whitelist)){ continue; } - if (match_in_pattern_list(file_name, blacklist)){ + if (prj_match_in_pattern_list(file_name, blacklist)){ continue; } String_Const_u8 full_path = push_u8_stringf(scratch, "%.*s%.*s", string_expand(path), string_expand(file_name)); @@ -140,51 +148,32 @@ open_files_pattern_match__recursive(Application_Links *app, String_Const_u8 path } } -// TODO(allen): dumb name -function Match_Pattern_List -get_standard_blacklist(Arena *arena){ - String_Const_u8 dot = string_u8_litexpr(".*"); - String_Const_u8_Array black_array = {}; - black_array.strings = ˙ - black_array.count = 1; - return(prj_pattern_list_from_extension_array(arena, black_array)); -} - function void -open_files_pattern_match(Application_Links *app, String_Const_u8 dir, - Match_Pattern_List whitelist, Match_Pattern_List blacklist, u32 flags){ +prj_open_files_pattern_filter(Application_Links *app, String_Const_u8 dir, Match_Pattern_List whitelist, Match_Pattern_List blacklist, u32 flags){ ProfileScope(app, "open all files in directory pattern"); Scratch_Block scratch(app); String_Const_u8 directory = dir; if (!character_is_slash(string_get_character(directory, directory.size - 1))){ directory = push_u8_stringf(scratch, "%.*s/", string_expand(dir)); } - open_files_pattern_match__recursive(app, directory, whitelist, blacklist, flags); + prj_open_files_pattern_filter__rec(app, directory, whitelist, blacklist, flags); } function void -open_files_with_extension(Application_Links *app, String_Const_u8 dir, String_Const_u8_Array array, u32 flags){ - Scratch_Block scratch(app); - Match_Pattern_List whitelist = prj_pattern_list_from_extension_array(scratch, array); - Match_Pattern_List blacklist = get_standard_blacklist(scratch); - open_files_pattern_match(app, dir, whitelist, blacklist, flags); -} - -function void -open_all_files_in_hot_with_extension(Application_Links *app, String_Const_u8_Array array, u32 flags){ +prj_open_all_files_with_ext_in_hot(Application_Links *app, String_Const_u8_Array array, u32 flags){ Scratch_Block scratch(app); String_Const_u8 hot = push_hot_directory(app, scratch); String_Const_u8 directory = hot; if (!character_is_slash(string_get_character(hot, hot.size - 1))){ directory = push_u8_stringf(scratch, "%.*s/", string_expand(hot)); } - open_files_with_extension(app, hot, array, flags); + prj_open_files_with_ext(app, hot, array, flags); } /////////////////////////////// function void -parse_project__extract_pattern_list(Arena *arena, Config *parsed, char *root_variable_name, Match_Pattern_List *list_out){ +prj_parse_pattern_list(Arena *arena, Config *parsed, char *root_variable_name, Match_Pattern_List *list_out){ Config_Compound *compound = 0; if (config_compound_var(parsed, root_variable_name, 0, &compound)){ Config_Get_Result_List list = typed_string_array_reference_list(arena, parsed, compound); @@ -201,21 +190,22 @@ parse_project__extract_pattern_list(Arena *arena, Config *parsed, char *root_var } function Project_OS_Match_Level -parse_project__version_1__os_match(String_Const_u8 str, String_Const_u8 this_os_str){ +prj_parse_v1_os_match(String_Const_u8 str, String_Const_u8 this_os_str){ + Project_OS_Match_Level result = ProjectOSMatchLevel_NoMatch; if (string_match(str, this_os_str)){ - return(ProjectOSMatchLevel_ActiveMatch); + result = ProjectOSMatchLevel_ActiveMatch; } else if (string_match(str, string_u8_litexpr("all"))){ - return(ProjectOSMatchLevel_ActiveMatch); + result = ProjectOSMatchLevel_ActiveMatch; } else if (string_match(str, string_u8_litexpr("default"))){ - return(ProjectOSMatchLevel_PassiveMatch); + result = ProjectOSMatchLevel_PassiveMatch; } - return(ProjectOSMatchLevel_NoMatch); + return(result); } function Project* -parse_project__config_data__version_1(Application_Links *app, Arena *arena, String_Const_u8 root_dir, Config *parsed){ +prj_parse_from_v1_config_data(Application_Links *app, Arena *arena, String_Const_u8 root_dir, Config *parsed){ Project *project = push_array_zero(arena, Project, 1); // Set new project directory @@ -233,10 +223,10 @@ parse_project__config_data__version_1(Application_Links *app, Arena *arena, Stri } // patterns - parse_project__extract_pattern_list(arena, parsed, "patterns", &project->pattern_list); + prj_parse_pattern_list(arena, parsed, "patterns", &project->pattern_list); // blacklist_patterns - parse_project__extract_pattern_list(arena, parsed, "blacklist_patterns", &project->blacklist_pattern_list); + prj_parse_pattern_list(arena, parsed, "blacklist_patterns", &project->blacklist_pattern_list); // load_paths { @@ -259,7 +249,7 @@ parse_project__config_data__version_1(Application_Links *app, Arena *arena, Stri if (config_compound_compound_member(parsed, paths_option, "paths", 0, &paths)){ String_Const_u8 str = {}; if (config_compound_string_member(parsed, paths_option, "os", 1, &str)){ - Project_OS_Match_Level r = parse_project__version_1__os_match(str, string_u8_litexpr(OS_NAME)); + Project_OS_Match_Level r = prj_parse_v1_os_match(str, string_u8_litexpr(OS_NAME)); if (r == ProjectOSMatchLevel_ActiveMatch){ found_match = true; best_paths = paths; @@ -363,7 +353,7 @@ parse_project__config_data__version_1(Application_Links *app, Arena *arena, Stri if (config_compound_string_member(parsed, cmd_option, "cmd", 0, &cmd)){ String_Const_u8 str = {}; if (config_compound_string_member(parsed, cmd_option, "os", 1, &str)){ - Project_OS_Match_Level r = parse_project__version_1__os_match(str, string_u8_litexpr(OS_NAME)); + Project_OS_Match_Level r = prj_parse_v1_os_match(str, string_u8_litexpr(OS_NAME)); if (r == ProjectOSMatchLevel_ActiveMatch){ can_emit_command = true; cmd_str = cmd; @@ -785,7 +775,7 @@ CUSTOM_DOC("Closes any buffer with a filename ending with an extension configure Scratch_Block scratch(app); String_Const_u8 treat_as_code = def_get_config_string(scratch, vars_save_string_lit("treat_as_code")); String_Const_u8_Array extensions = parse_extension_line_to_extension_list(app, scratch, treat_as_code); - close_all_files_with_extension(app, extensions); + prj_close_files_with_ext(app, extensions); } CUSTOM_COMMAND_SIG(open_all_code) @@ -794,7 +784,7 @@ CUSTOM_DOC("Open all code in the current directory. File types are determined by Scratch_Block scratch(app); String_Const_u8 treat_as_code = def_get_config_string(scratch, vars_save_string_lit("treat_as_code")); String_Const_u8_Array extensions = parse_extension_line_to_extension_list(app, scratch, treat_as_code); - open_all_files_in_hot_with_extension(app, extensions, 0); + prj_open_all_files_with_ext_in_hot(app, extensions, 0); } CUSTOM_COMMAND_SIG(open_all_code_recursive) @@ -803,7 +793,7 @@ CUSTOM_DOC("Works as open_all_code but also runs in all subdirectories.") Scratch_Block scratch(app); String_Const_u8 treat_as_code = def_get_config_string(scratch, vars_save_string_lit("treat_as_code")); String_Const_u8_Array extensions = parse_extension_line_to_extension_list(app, scratch, treat_as_code); - open_all_files_in_hot_with_extension(app, extensions, OpenAllFilesFlag_Recursive); + prj_open_all_files_with_ext_in_hot(app, extensions, OpenAllFilesFlag_Recursive); } /////////////////////////////// @@ -841,7 +831,7 @@ CUSTOM_DOC("Looks for a project.4coder file in the current directory and tries t case 0: case 1: { - Project *project = parse_project__config_data__version_1(app, scratch, project_root, config_parse); + Project *project = prj_parse_from_v1_config_data(app, scratch, project_root, config_parse); proj_var = prj_version_1_to_version_2(app, config_parse, project); }break; default: @@ -870,16 +860,6 @@ CUSTOM_DOC("Looks for a project.4coder file in the current directory and tries t } } - // TODO(allen): this is dummy dumb dumb and don't need to be like this. - // NOTE(allen): Set the normal search list's project slot - String_Const_u8 project_dir = prj_path_from_project(scratch, proj_var); - - if (current_project_arena.base_allocator == 0){ - current_project_arena = make_arena_system(); - } - linalloc_clear(¤t_project_arena); - def_search_project_path = push_string_copy(¤t_project_arena, project_dir); - // NOTE(allen): Open All Project Files Variable_Handle load_paths_var = vars_read_key(proj_var, vars_save_string_lit("load_paths")); Variable_Handle load_paths_os_var = vars_read_key(load_paths_var, vars_save_string_lit(OS_NAME)); @@ -913,14 +893,16 @@ CUSTOM_DOC("Looks for a project.4coder file in the current directory and tries t String_Const_u8 file_dir = path; if (relative){ + String_Const_u8 prj_dir = prj_path_from_project(scratch, proj_var); + List_String_Const_u8 file_dir_list = {}; - string_list_push(scratch, &file_dir_list, project_dir); + string_list_push(scratch, &file_dir_list, prj_dir); string_list_push_overlap(scratch, &file_dir_list, '/', path); string_list_push_overlap(scratch, &file_dir_list, '/', SCu8()); file_dir = string_list_flatten(scratch, file_dir_list, StringFill_NullTerminate); } - open_files_pattern_match(app, file_dir, whitelist, blacklist, flags); + prj_open_files_pattern_filter(app, file_dir, whitelist, blacklist, flags); } // NOTE(allen): Set Window Title diff --git a/custom/4coder_project_commands.h b/custom/4coder_project_commands.h index 31fc8846..7f86b0a3 100644 --- a/custom/4coder_project_commands.h +++ b/custom/4coder_project_commands.h @@ -7,6 +7,11 @@ #if !defined(FCODER_PROJECT_COMMANDS_H) #define FCODER_PROJECT_COMMANDS_H +// TODO(allen): finish sorting + +//////////////////////////////// +// NOTE(allen): * Type + enum{ OpenAllFilesFlag_Recursive = 1, }; @@ -64,7 +69,6 @@ struct Project{ Project_File_Load_Path_Array load_path_array; Project_Command_Array command_array; - // NOTE(allen): Only used for conversion from 1 -> 2 i32 fkey_commands[16]; }; @@ -92,6 +96,47 @@ struct Project_Key_Strings{ String_Const_u8 binary_file; }; +//////////////////////////////// +// NOTE(allen): * Functions + +function Match_Pattern_List prj_pattern_list_from_extension_array(Arena *arena, String_Const_u8_Array list); +function Match_Pattern_List prj_pattern_list_from_var(Arena *arena, Variable_Handle var); +function Match_Pattern_List prj_get_standard_blacklist(Arena *arena); + +function b32 prj_match_in_pattern_list(String_Const_u8 string, Match_Pattern_List list); + +function void prj_close_files_with_ext(Application_Links *app, String_Const_u8_Array extension_array); +function void prj_open_files_with_ext(Application_Links *app, String_Const_u8 dir, String_Const_u8_Array array, u32 flags); +function void prj_open_files_pattern_filter(Application_Links *app, String_Const_u8 dir, Match_Pattern_List whitelist, Match_Pattern_List blacklist, u32 flags); +function void prj_open_all_files_with_ext_in_hot(Application_Links *app, String_Const_u8_Array array, u32 flags); + +//////////////////////////////// +// NOTE(allen): Project Parse + +function void prj_parse_pattern_list(Arena *arena, Config * parsed, char* root_variable_name, Match_Pattern_List *list_out); +function Project_OS_Match_Level prj_parse_v1_os_match(String_Const_u8 str, String_Const_u8 this_os_str); +function Project *prj_parse_from_v1_config_data(Application_Links *app, Arena *arena, String_Const_u8 root_dir, Config * parsed); + +function String_Const_u8 prj_join_pattern_string(Arena *arena, List_String_Const_u8 list); +function String_Const_u8 prj_sanitize_string(Arena *arena, String_Const_u8 string); +function Variable_Handle prj_version_1_to_version_2(Application_Links *app, Config * parsed, Project *project); +function String_Const_u8 prj_path_from_project(Arena *arena, Variable_Handle project); +function void prj_exec_command(Application_Links *app, Variable_Handle cmd_var); +function Variable_Handle prj_command_from_name(Application_Links *app, String_Const_u8 cmd_name); +function void prj_exec_command_name(Application_Links *app, String_Const_u8 cmd_name); +function void prj_exec_command_fkey_index(Application_Links *app, i32 fkey_index); + +function Project_Setup_Status project_is_setup(Application_Links *app, String_Const_u8 script_path, String_Const_u8 script_file); +function Project_Key_Strings project_key_strings_query_user(Application_Links *app, b32 get_script_file, b32 get_code_file, u8* script_file_space, i32 script_file_cap, u8* code_file_space, i32 code_file_cap, u8* output_dir_space, i32 output_dir_cap, u8* binary_file_space, i32 binary_file_cap); +function b32 project_generate_bat_script(Arena *scratch, String_Const_u8 opts, String_Const_u8 compiler, String_Const_u8 script_path, String_Const_u8 script_file, String_Const_u8 code_file, String_Const_u8 output_dir, String_Const_u8 binary_file); +function b32 project_generate_sh_script(Arena *scratch, String_Const_u8 opts, String_Const_u8 compiler, String_Const_u8 script_path, String_Const_u8 script_file, String_Const_u8 code_file, String_Const_u8 output_dir, String_Const_u8 binary_file); +function b32 project_generate_project_4coder_file(Arena *scratch, String_Const_u8 script_path, String_Const_u8 script_file, String_Const_u8 output_dir, String_Const_u8 binary_file); +function void project_setup_scripts__generic(Application_Links *app, b32 do_project_file, b32 do_bat_script, b32 do_sh_script); + +function Variable_Handle prj_cmd_from_user(Application_Links *app, Variable_Handle prj_var, String_Const_u8 query); + +function Variable_Handle get_project_command_from_user(Application_Links *app, Project *project, String_Const_u8 query); + #endif // BOTTOM diff --git a/custom/4coder_search_list.cpp b/custom/4coder_search_list.cpp index 63989c11..5b198923 100644 --- a/custom/4coder_search_list.cpp +++ b/custom/4coder_search_list.cpp @@ -24,19 +24,11 @@ def_search_list_add_system_path(Arena *arena, List_String_Const_u8 *list, System string_list_push(arena, list, path_string); } -function void -def_search_normal_load_list(Arena *arena, List_String_Const_u8 *list){ - if (def_search_project_path.size > 0){ - def_search_list_add_path(arena, list, def_search_project_path); - } - def_search_list_add_system_path(arena, list, SystemPath_Binary); -} - //////////////////////////////// // NOTE(allen): Search List Functions function String_Const_u8 -def_get_full_path(Arena *arena, List_String_Const_u8 *list, String_Const_u8 relative){ +def_search_get_full_path(Arena *arena, List_String_Const_u8 *list, String_Const_u8 relative){ String_Const_u8 result = {}; Temp_Memory temp = begin_temp(arena); @@ -69,7 +61,7 @@ def_get_full_path(Arena *arena, List_String_Const_u8 *list, String_Const_u8 rela function FILE* def_search_fopen(Arena *arena, List_String_Const_u8 *list, char *file_name, char *opt){ Temp_Memory_Block block(arena); - String_Const_u8 full_path = def_get_full_path(arena, list, SCu8(file_name)); + String_Const_u8 full_path = def_search_get_full_path(arena, list, SCu8(file_name)); FILE *file = 0; if (full_path.size > 0){ file = fopen((char*)full_path.str, opt); @@ -77,14 +69,5 @@ def_search_fopen(Arena *arena, List_String_Const_u8 *list, char *file_name, char return(file); } -function FILE* -def_search_normal_fopen(Arena *arena, char *file_name, char *opt){ - Temp_Memory_Block block(arena); - List_String_Const_u8 list = {}; - def_search_normal_load_list(arena, &list); - FILE *file = def_search_fopen(arena, &list, file_name, opt); - return(file); -} - // BOTTOM diff --git a/custom/4coder_search_list.h b/custom/4coder_search_list.h index 307726c5..5a08ebcf 100644 --- a/custom/4coder_search_list.h +++ b/custom/4coder_search_list.h @@ -16,23 +16,13 @@ // NOTE(allen): Search List Builders function void def_search_add_path(Arena *arena, List_String_Const_u8 *list, String_Const_u8 path); -function void def_search_add_system_path(Arena *arena, List_String_Const_u8 *list, System_Path_Code path); - -global String_Const_u8 def_search_project_path = {}; - +function void def_search_list_add_system_path(Arena *arena, List_String_Const_u8 *list, System_Path_Code path); function void def_search_normal_load_list(Arena *arena, List_String_Const_u8 *list); //////////////////////////////// // NOTE(allen): Search List Functions -function String_Const_u8 def_search_get_full_path(Arena *arena, List_String_Const_u8 *list, String_Const_u8 file_name); - -#if OS_LINUX -#include -#endif - function FILE *def_search_fopen(Arena *arena, List_String_Const_u8 *list, char *file_name, char *opt); -function FILE *def_search_normal_fopen(Arena *arena, char *file_name, char *opt); #endif diff --git a/custom/generated/command_metadata.h b/custom/generated/command_metadata.h index bd0736d1..a5d682a8 100644 --- a/custom/generated/command_metadata.h +++ b/custom/generated/command_metadata.h @@ -295,7 +295,7 @@ static Command_Metadata fcoder_metacmd_table[250] = { { PROC_LINKS(click_set_cursor_if_lbutton, 0), false, "click_set_cursor_if_lbutton", 27, "If the mouse left button is pressed, sets the cursor position to the mouse position.", 84, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 243 }, { PROC_LINKS(click_set_mark, 0), false, "click_set_mark", 14, "Sets the mark position to the mouse position.", 45, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 256 }, { PROC_LINKS(clipboard_record_clip, 0), false, "clipboard_record_clip", 21, "In response to a new clipboard contents events, saves the new clip onto the clipboard history", 93, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 7 }, -{ PROC_LINKS(close_all_code, 0), false, "close_all_code", 14, "Closes any buffer with a filename ending with an extension configured to be recognized as a code file type.", 107, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 782 }, +{ PROC_LINKS(close_all_code, 0), false, "close_all_code", 14, "Closes any buffer with a filename ending with an extension configured to be recognized as a code file type.", 107, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 772 }, { PROC_LINKS(close_build_panel, 0), false, "close_build_panel", 17, "If the special build panel is open, closes it.", 46, "W:\\4ed\\code\\custom\\4coder_build_commands.cpp", 44, 175 }, { PROC_LINKS(close_panel, 0), false, "close_panel", 11, "Closes the currently active panel if it is not the only panel open.", 67, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 674 }, { PROC_LINKS(command_documentation, 0), true, "command_documentation", 21, "Prompts the user to select a command then loads a doc buffer for that item", 74, "W:\\4ed\\code\\custom\\4coder_docs.cpp", 34, 190 }, @@ -371,8 +371,8 @@ static Command_Metadata fcoder_metacmd_table[250] = { { PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), false, "list_all_locations_of_type_definition_of_identifier", 51, "Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.", 125, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 224 }, { PROC_LINKS(list_all_substring_locations, 0), false, "list_all_substring_locations", 28, "Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.", 103, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 174 }, { PROC_LINKS(list_all_substring_locations_case_insensitive, 0), false, "list_all_substring_locations_case_insensitive", 45, "Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.", 105, "W:\\4ed\\code\\custom\\4coder_search.cpp", 36, 186 }, -{ PROC_LINKS(load_project, 0), false, "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 811 }, -{ PROC_LINKS(load_theme_current_buffer, 0), false, "load_theme_current_buffer", 25, "Parse the current buffer as a theme file and add the theme to the theme list. If the buffer has a .4coder postfix in it's name, it is removed when the name is saved.", 165, "W:\\4ed\\code\\custom\\4coder_config.cpp", 36, 1561 }, +{ PROC_LINKS(load_project, 0), false, "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 801 }, +{ PROC_LINKS(load_theme_current_buffer, 0), false, "load_theme_current_buffer", 25, "Parse the current buffer as a theme file and add the theme to the theme list. If the buffer has a .4coder postfix in it's name, it is removed when the name is saved.", 165, "W:\\4ed\\code\\custom\\4coder_config.cpp", 36, 1583 }, { PROC_LINKS(load_themes_default_folder, 0), false, "load_themes_default_folder", 26, "Loads all the theme files in the default theme folder.", 54, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 535 }, { PROC_LINKS(load_themes_hot_directory, 0), false, "load_themes_hot_directory", 25, "Loads all the theme files in the current hot directory.", 55, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 547 }, { PROC_LINKS(make_directory_query, 0), false, "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1495 }, @@ -414,8 +414,8 @@ static Command_Metadata fcoder_metacmd_table[250] = { { PROC_LINKS(multi_paste_interactive_quick, 0), false, "multi_paste_interactive_quick", 29, "Paste multiple lines from the clipboard history, controlled by inputing the number of lines to paste", 100, "W:\\4ed\\code\\custom\\4coder_clipboard.cpp", 39, 380 }, { PROC_LINKS(music_start, 0), false, "music_start", 11, "Starts the music.", 17, "W:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 213 }, { PROC_LINKS(music_stop, 0), false, "music_stop", 10, "Stops the music.", 16, "W:\\4ed\\code\\custom\\4coder_examples.cpp", 38, 232 }, -{ PROC_LINKS(open_all_code, 0), false, "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 791 }, -{ PROC_LINKS(open_all_code_recursive, 0), false, "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 800 }, +{ PROC_LINKS(open_all_code, 0), false, "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 781 }, +{ PROC_LINKS(open_all_code_recursive, 0), false, "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 790 }, { PROC_LINKS(open_file_in_quotes, 0), false, "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1576 }, { PROC_LINKS(open_in_other, 0), false, "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 2059 }, { PROC_LINKS(open_long_braces, 0), false, "open_long_braces", 16, "At the cursor, insert a '{' and '}' separated by a blank line.", 62, "W:\\4ed\\code\\custom\\4coder_combined_write_commands.cpp", 53, 46 }, @@ -436,9 +436,9 @@ static Command_Metadata fcoder_metacmd_table[250] = { { PROC_LINKS(profile_disable, 0), false, "profile_disable", 15, "Prevent 4coder's self profiler from gathering new profiling information.", 72, "W:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 219 }, { PROC_LINKS(profile_enable, 0), false, "profile_enable", 14, "Allow 4coder's self profiler to gather new profiling information.", 65, "W:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 212 }, { PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "W:\\4ed\\code\\custom\\4coder_profile_inspect.cpp", 45, 886 }, -{ PROC_LINKS(project_command_lister, 0), false, "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1387 }, -{ PROC_LINKS(project_fkey_command, 0), false, "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, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 936 }, -{ PROC_LINKS(project_go_to_root_directory, 0), false, "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, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 962 }, +{ PROC_LINKS(project_command_lister, 0), false, "project_command_lister", 22, "Open a lister of all commands in the currently loaded project.", 62, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1369 }, +{ PROC_LINKS(project_fkey_command, 0), false, "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, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 918 }, +{ PROC_LINKS(project_go_to_root_directory, 0), false, "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, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 944 }, { PROC_LINKS(query_replace, 0), false, "query_replace", 13, "Queries the user for two strings, and incrementally replaces every occurence of the first string with the second string.", 120, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1282 }, { PROC_LINKS(query_replace_identifier, 0), false, "query_replace_identifier", 24, "Queries the user for a string, and incrementally replace every occurence of the word or token found at the cursor with the specified string.", 140, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1303 }, { PROC_LINKS(query_replace_selection, 0), false, "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, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1319 }, @@ -477,10 +477,10 @@ static Command_Metadata fcoder_metacmd_table[250] = { { PROC_LINKS(set_mark, 0), false, "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 115 }, { PROC_LINKS(set_mode_to_notepad_like, 0), false, "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 499 }, { PROC_LINKS(set_mode_to_original, 0), false, "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 493 }, -{ PROC_LINKS(setup_build_bat, 0), false, "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1307 }, -{ PROC_LINKS(setup_build_bat_and_sh, 0), false, "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1319 }, -{ PROC_LINKS(setup_build_sh, 0), false, "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1313 }, -{ PROC_LINKS(setup_new_project, 0), false, "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1300 }, +{ PROC_LINKS(setup_build_bat, 0), false, "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1289 }, +{ PROC_LINKS(setup_build_bat_and_sh, 0), false, "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1301 }, +{ PROC_LINKS(setup_build_sh, 0), false, "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1295 }, +{ PROC_LINKS(setup_new_project, 0), false, "setup_new_project", 17, "Queries the user for several configuration options and initializes a new 4coder project with build scripts for every OS.", 120, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 1282 }, { PROC_LINKS(show_filebar, 0), false, "show_filebar", 12, "Sets the current view to show it's filebar.", 43, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 697 }, { PROC_LINKS(show_scrollbar, 0), false, "show_scrollbar", 14, "Sets the current view to show it's scrollbar.", 45, "W:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 683 }, { PROC_LINKS(show_the_log_graph, 0), true, "show_the_log_graph", 18, "Parses *log* and displays the 'log graph' UI", 44, "W:\\4ed\\code\\custom\\4coder_log_parser.cpp", 40, 991 }, diff --git a/platform_linux/linux_4ed.cpp b/platform_linux/linux_4ed.cpp index 50efe1cc..440fa469 100644 --- a/platform_linux/linux_4ed.cpp +++ b/platform_linux/linux_4ed.cpp @@ -10,6 +10,8 @@ // TOP +#include + #define FPS 60 #define frame_useconds (Million(1) / FPS) #define frame_nseconds (Billion(1) / FPS) @@ -191,14 +193,14 @@ struct Linux_Vars { String_Const_u8 clipboard_contents; b32 received_new_clipboard; b32 clipboard_catch_all; - + pthread_mutex_t audio_mutex; pthread_cond_t audio_cond; void* audio_ctx; Audio_Mix_Sources_Function* audio_src_func; Audio_Mix_Destination_Function* audio_dst_func; System_Thread audio_thread; - + Atom atom_TARGETS; Atom atom_CLIPBOARD; Atom atom_UTF8_STRING; @@ -582,25 +584,25 @@ graphics_fill_texture_sig(){ internal Face* font_make_face(Arena* arena, Face_Description* description, f32 scale_factor) { - + Face_Description local_description = *description; String_Const_u8* name = &local_description.font.file_name; - + // if description->font.file_name is a relative path, prepend the font directory. if(string_get_character(*name, 0) != '/') { String_Const_u8 binary = system_get_path(arena, SystemPath_Binary); *name = push_u8_stringf(arena, "%.*sfonts/%.*s", string_expand(binary), string_expand(*name)); } - + Face* result = ft__font_make_face(arena, &local_description, scale_factor); - + if(!result) { // is this fatal? 4ed.cpp:277 (caller) does not check for null. char msg[4096]; snprintf(msg, sizeof(msg), "Unable to load font: %.*s", string_expand(*name)); system_error_box(msg); } - + return(result); } @@ -1740,7 +1742,7 @@ main(int argc, char **argv){ pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init(&linuxvars.memory_tracker_mutex, &attr); - + pthread_mutex_init(&linuxvars.audio_mutex, &attr); pthread_cond_init(&linuxvars.audio_cond, NULL); @@ -1786,7 +1788,7 @@ main(int argc, char **argv){ List_String_Const_u8 search_list = {}; def_search_list_add_system_path(scratch, &search_list, SystemPath_Binary); - String_Const_u8 core_path = def_get_full_path(scratch, &search_list, SCu8("4ed_app.so")); + String_Const_u8 core_path = def_search_get_full_path(scratch, &search_list, SCu8("4ed_app.so")); if (system_load_library(scratch, core_path, &core_library)){ get_funcs = (App_Get_Functions*)system_get_proc(core_library, "app_get_functions"); if (get_funcs != 0){ @@ -1861,7 +1863,7 @@ main(int argc, char **argv){ } String_Const_u8 custom_file_name = {}; for (i32 i = 0; i < custom_file_count; i += 1){ - custom_file_name = def_get_full_path(scratch, &search_list, custom_file_names[i]); + custom_file_name = def_search_get_full_path(scratch, &search_list, custom_file_names[i]); if (custom_file_name.size > 0){ break; } @@ -1892,9 +1894,9 @@ main(int argc, char **argv){ linux_x11_init(argc, argv, &plat_settings); linux_keycode_init(linuxvars.dpy); linux_epoll_init(); - + linuxvars.audio_thread = system_thread_launch(&linux_audio_main, NULL); - + // app init { diff --git a/platform_win32/win32_4ed.cpp b/platform_win32/win32_4ed.cpp index 9a1f18b4..00a26832 100644 --- a/platform_win32/win32_4ed.cpp +++ b/platform_win32/win32_4ed.cpp @@ -1696,7 +1696,7 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdS List_String_Const_u8 search_list = {}; def_search_list_add_system_path(scratch, &search_list, SystemPath_Binary); - String_Const_u8 core_path = def_get_full_path(scratch, &search_list, SCu8("4ed_app.dll")); + String_Const_u8 core_path = def_search_get_full_path(scratch, &search_list, SCu8("4ed_app.dll")); if (system_load_library(scratch, core_path, &core_library)){ get_funcs = (App_Get_Functions*)system_get_proc(core_library, "app_get_functions"); if (get_funcs != 0){ @@ -1768,7 +1768,7 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdS } String_Const_u8 custom_file_name = {}; for (i32 i = 0; i < custom_file_count; i += 1){ - custom_file_name = def_get_full_path(scratch, &search_list, custom_file_names[i]); + custom_file_name = def_search_get_full_path(scratch, &search_list, custom_file_names[i]); if (custom_file_name.size > 0){ break; }