diff --git a/4coder_default_framework.h b/4coder_default_framework.h index 349da9be..91e4b4c4 100644 --- a/4coder_default_framework.h +++ b/4coder_default_framework.h @@ -208,6 +208,42 @@ static char *default_extensions[] = { "cc" }; +struct Extension_List{ + char extension_space[256]; + char *extensions[94]; + int32_t extension_count; +}; + +static void +set_extensions(Extension_List *extension_list, String src){ + int32_t mode = 0; + int32_t j = 0, k = 0; + for (int32_t i = 0; i < src.size; ++i){ + switch (mode){ + case 0: + { + if (src.str[i] == '.'){ + mode = 1; + extension_list->extensions[k++] = &extension_list->extension_space[j]; + } + }break; + + case 1: + { + if (src.str[i] == '.'){ + extension_list->extension_space[j++] = 0; + extension_list->extensions[k++] = &extension_list->extension_space[j]; + } + else{ + extension_list->extension_space[j++] = src.str[i]; + } + }break; + } + } + extension_list->extension_space[j++] = 0; + extension_list->extension_count = k; +} + struct Fkey_Command{ char command[128]; char out[128]; @@ -220,10 +256,7 @@ struct Project{ char *dir; int32_t dir_len; - char extension_space[256]; - char *extensions[94]; - int32_t extension_count; - + Extension_List extension_list; Fkey_Command fkey_commands[16]; bool32 close_all_code_when_this_project_closes; @@ -232,46 +265,16 @@ struct Project{ bool32 open_recursively; }; -static Project null_project = {}; -static Project current_project = {}; - -static void -set_project_extensions(Project *project, String src){ - int32_t mode = 0; - int32_t j = 0, k = 0; - for (int32_t i = 0; i < src.size; ++i){ - switch (mode){ - case 0: - { - if (src.str[i] == '.'){ - mode = 1; - project->extensions[k++] = &project->extension_space[j]; - } - }break; - - case 1: - { - if (src.str[i] == '.'){ - project->extension_space[j++] = 0; - project->extensions[k++] = &project->extension_space[j]; - } - else{ - project->extension_space[j++] = src.str[i]; - } - }break; - } - } - project->extension_space[j++] = 0; - project->extension_count = k; -} +static Project null_project = {0}; +static Project current_project = {0}; static char** -get_current_code_extensions(int32_t *extension_count_out){ +get_current_project_extensions(int32_t *extension_count_out){ char **extension_list = default_extensions; int32_t extension_count = ArrayCount(default_extensions); if (current_project.dir != 0){ - extension_list = current_project.extensions; - extension_count = current_project.extension_count; + extension_list = current_project.extension_list.extensions; + extension_count = current_project.extension_list.extension_count; } *extension_count_out = extension_count; return(extension_list); @@ -616,6 +619,8 @@ static String default_font_name = make_fixed_width_string(default_font_name_spac static char user_name_space[256] = {0}; static String user_name = make_fixed_width_string(user_name_space); +static Extension_List treat_as_code_exts = {0}; + static bool32 get_current_name(char **name_out, int32_t *len_out){ bool32 result = false; @@ -646,6 +651,18 @@ get_default_font_name(){ return(str); } +static char** +get_current_code_extensions(int32_t *extension_count_out){ + char **extension_list = default_extensions; + int32_t extension_count = ArrayCount(default_extensions); + if (treat_as_code_exts.extensions != 0){ + extension_list = treat_as_code_exts.extensions; + extension_count = treat_as_code_exts.extension_count; + } + *extension_count_out = extension_count; + return(extension_list); +} + // TODO(allen): Stop handling files this way! My own API should be able to do this!!?!?!?!!?!?!!!!? // NOTE(allen): Actually need binary buffers for some stuff to work, but not this parsing thing here. #include @@ -723,6 +740,21 @@ process_config_file(Application_Links *app){ config_string_var(item, "default_theme_name", 0, &default_theme_name); config_string_var(item, "default_font_name", 0, &default_font_name); config_string_var(item, "user_name", 0, &user_name); + + { + char str_space[512]; + String str = make_fixed_width_string(str_space); + if (config_string_var(item, "treat_as_code", 0, &str)){ + if (str.size < sizeof(treat_as_code_exts.extension_space)){ + set_extensions(&treat_as_code_exts, str); + print_message(app, str.str, str.size); + print_message(app, "\n", 1); + } + else{ + print_message(app, literal("STRING TOO LONG!\n")); + } + } + } } } adjust_all_buffer_wrap_widths(app, new_wrap_width, new_min_base_width); diff --git a/4coder_default_hooks.cpp b/4coder_default_hooks.cpp index 7a78cb0f..c26a18ff 100644 --- a/4coder_default_hooks.cpp +++ b/4coder_default_hooks.cpp @@ -77,13 +77,16 @@ OPEN_FILE_HOOK_SIG(default_file_settings){ int32_t treat_as_code = false; int32_t wrap_lines = true; + int32_t extension_count = 0; + char **extension_list = get_current_code_extensions(&extension_count); + if (buffer.file_name != 0 && buffer.size < (16 << 20)){ String ext = file_extension(make_string(buffer.file_name, buffer.file_name_len)); - if (match_ss(ext, make_lit_string("cpp")) || - match_ss(ext, make_lit_string("h")) || - match_ss(ext, make_lit_string("c")) || - match_ss(ext, make_lit_string("hpp"))){ - treat_as_code = true; + for (int32_t i = 0; i < extension_count; ++i){ + if (match(ext, extension_list[i])){ + treat_as_code = true; + break; + } } } @@ -121,6 +124,9 @@ OPEN_FILE_HOOK_SIG(default_new_file){ Buffer_Summary buffer = get_buffer(app, buffer_id, AccessOpen); char str[] = "/*\nNew File\n*/\n\n\n"; buffer_replace_range(app, &buffer, 0, 0, str, sizeof(str)-1); + + // no meaning for return + return(0); } OPEN_FILE_HOOK_SIG(default_file_save){ diff --git a/4coder_project_commands.cpp b/4coder_project_commands.cpp index eeeda5e3..c1d96f7a 100644 --- a/4coder_project_commands.cpp +++ b/4coder_project_commands.cpp @@ -156,19 +156,19 @@ open_all_files_with_extension(Application_Links *app, Partition *scratch_part, c // NOTE(allen|a4.0.14): open_all_code and close_all_code now use the extensions set in the loaded project. If there is no project loaded the extensions ".cpp.hpp.c.h.cc" are used. CUSTOM_COMMAND_SIG(open_all_code){ int32_t extension_count = 0; - char **extension_list = get_current_code_extensions(&extension_count); + char **extension_list = get_current_project_extensions(&extension_count); open_all_files_with_extension(app, &global_part, extension_list, extension_count, false); } CUSTOM_COMMAND_SIG(open_all_code_recursive){ int32_t extension_count = 0; - char **extension_list = get_current_code_extensions(&extension_count); + char **extension_list = get_current_project_extensions(&extension_count); open_all_files_with_extension(app, &global_part, extension_list, extension_count, true); } CUSTOM_COMMAND_SIG(close_all_code){ int32_t extension_count = 0; - char **extension_list = get_current_code_extensions(&extension_count); + char **extension_list = get_current_project_extensions(&extension_count); close_all_files_with_extension(app, &global_part, extension_list, extension_count); } @@ -234,8 +234,8 @@ CUSTOM_COMMAND_SIG(load_project){ char str_space[512]; String str = make_fixed_width_string(str_space); if (config_string_var(item, "extensions", 0, &str)){ - if (str.size < sizeof(current_project.extension_space)){ - set_project_extensions(¤t_project, str); + if (str.size < sizeof(current_project.extension_list.extension_space)){ + set_extensions(¤t_project.extension_list, str); print_message(app, str.str, str.size); print_message(app, "\n", 1); } diff --git a/4ed.cpp b/4ed.cpp index 346f0c4e..954bc805 100644 --- a/4ed.cpp +++ b/4ed.cpp @@ -1693,8 +1693,6 @@ App_Step_Sig(app_step){ if (get_canon_name(system, &canon, make_string(buffer, size))){ Editing_File *file = working_set_canon_contains(working_set, canon.name); if (file){ - Application_Links *app = &models->app_links; - if (file->state.ignore_behind_os == 0){ file_mark_behind_os(file); } diff --git a/4ed_file_view.cpp b/4ed_file_view.cpp index 7f6bd99f..637180a0 100644 --- a/4ed_file_view.cpp +++ b/4ed_file_view.cpp @@ -790,7 +790,7 @@ save_file_to_name(System_Functions *system, Models *models, Editing_File *file, if (!using_actual_filename && file->canon.name.str != 0){ char space[512]; u32 length = str_size(filename); - u32 canon_length = system->get_canonical(filename, length, space, sizeof(space)); + system->get_canonical(filename, length, space, sizeof(space)); char *source_path = file->canon.name.str; if (match(space, source_path)){ diff --git a/meta/build.cpp b/meta/build.cpp index 6f196dd9..687d0f13 100644 --- a/meta/build.cpp +++ b/meta/build.cpp @@ -510,12 +510,15 @@ site_build(char *cdir, u32 flags){ #define PACK_DIR "../distributions" static void -get_4coder_dist_name(String *zip_file, i32 OS_specific, char *tier, char *ext){ +get_4coder_dist_name(String *zip_file, b32 OS_specific, char *folder, char *tier, char *arch, char *ext){ zip_file->size = 0; append_sc(zip_file, PACK_DIR"/"); - append_sc(zip_file, tier); - append_sc(zip_file, "/4coder-"); + if (folder != 0){ + append_sc(zip_file, folder); + append_sc(zip_file, "/"); + } + append_sc(zip_file, "4coder-"); if (OS_specific){ #if defined(IS_WINDOWS) @@ -534,12 +537,16 @@ get_4coder_dist_name(String *zip_file, i32 OS_specific, char *tier, char *ext){ append_int_to_str (zip_file, MINOR); append_sc (zip_file, "-"); append_int_to_str (zip_file, PATCH); - if (!match_cc(tier, "alpha")){ + if (tier != 0){ append_sc (zip_file, "-"); append_sc (zip_file, tier); } - append_sc (zip_file, "."); - append_sc (zip_file, ext); + if (arch != 0){ + append_sc (zip_file, "-"); + append_sc (zip_file, arch); + } + append_sc (zip_file, "."); + append_sc (zip_file, ext); terminate_with_null(zip_file); slash_fix(zip_file->str); @@ -591,6 +598,13 @@ package(char *cdir){ "alpha_x86", }; + char *tier = "alpha"; + + char *archs[] = { + "x64", + "x86", + }; + Assert(ArrayCount(dest_dirs) == ArrayCount(dest_par_dirs)); u32 count = ArrayCount(dest_dirs); @@ -604,6 +618,7 @@ package(char *cdir){ char *dir = dest_dirs[i]; char *par_dir = dest_par_dirs[i]; char *zip_dir = zip_dirs[i]; + char *arch = archs[i]; build_main(cdir, base_flags | flags[i]); @@ -617,7 +632,7 @@ package(char *cdir){ copy_file(0, "TODO.txt", dir, 0, 0); copy_file(data_dir, "release-config.4coder", dir, 0, "config.4coder"); - get_4coder_dist_name(&str, 1, zip_dir, "zip"); + get_4coder_dist_name(&str, true, zip_dir, tier, arch, "zip"); zip(par_dir, "4coder", str.str); } } @@ -649,6 +664,13 @@ package(char *cdir){ "super_x86", }; + char *tier = "super"; + + char *archs[] = { + "x64", + "x86", + }; + Assert(ArrayCount(dest_dirs) == ArrayCount(dest_par_dirs)); u32 count = ArrayCount(dest_dirs); @@ -662,6 +684,7 @@ package(char *cdir){ char *dir = dest_dirs[i]; char *par_dir = dest_par_dirs[i]; char *zip_dir = zip_dirs[i]; + char *arch = archs[i]; build_main(cdir, base_flags | flags[i]); do_buildsuper(cdir, Custom_Default, flags[i]); @@ -712,12 +735,12 @@ package(char *cdir){ copy_all(d, "*", str.str); } - get_4coder_dist_name(&str, 1, zip_dir, "zip"); + get_4coder_dist_name(&str, true, zip_dir, tier, arch, "zip"); zip(par_dir, "4coder", str.str); } make_folder_if_missing(pack_dir, "super-docs"); - get_4coder_dist_name(&str, 0, "API", "html"); + get_4coder_dist_name(&str, false, "super-docs", "API", 0, "html"); str2 = front_of_directory(str); copy_file(site_dir, "custom_docs.html", pack_dir, "super-docs", str2.str); } @@ -733,7 +756,7 @@ package(char *cdir){ make_folder_if_missing(pack_dir, "power"); copy_all("power", "*", pack_power_dir); - get_4coder_dist_name(&str, 0, "power", "zip"); + get_4coder_dist_name(&str, 0, "power", 0, 0, "zip"); zip(pack_power_par_dir, "power", str.str); }