Removing shared scratch, passing in scratch on all system calls
							parent
							
								
									98da59b05c
								
							
						
					
					
						commit
						6d7deff11e
					
				| 
						 | 
				
			
			@ -849,9 +849,11 @@ default_render_view(Application_Links *app, Frame_Info frame_info, View_ID view,
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else{
 | 
			
		||||
            // TODO(allen): this doesn't actually work we aren't supposed to
 | 
			
		||||
            // assume that a function pointer is 64-bits I don't think.  How
 | 
			
		||||
            // should we attach a user named hook to a scope easily?
 | 
			
		||||
            // TODO(allen): This doesn't actually work.
 | 
			
		||||
            // We aren't supposed to assume that a function
 | 
			
		||||
            // pointer is 64-bits I don't think.  How
 | 
			
		||||
            // should we attach a user named hook to a scope
 | 
			
		||||
            // easily?
 | 
			
		||||
            View_Render_Hook *hook = (View_Render_Hook*)render_hook_value;
 | 
			
		||||
            hook(app, view, frame_info, inner);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -399,9 +399,9 @@ CUSTOM_DOC("Tests the log parser")
 | 
			
		|||
                
 | 
			
		||||
                case LogTagKind_String:
 | 
			
		||||
                {
 | 
			
		||||
                    String_Const_u8 value = log_parse__get_string(&parse, node->value.value);
 | 
			
		||||
                    String_Const_u8 string_value = log_parse__get_string(&parse, node->value.value);
 | 
			
		||||
                    string_list_pushf(scratch, &line, " [%.*s:%.*s]",
 | 
			
		||||
                                      string_expand(tag_name), string_expand(value));
 | 
			
		||||
                                      string_expand(tag_name), string_expand(string_value));
 | 
			
		||||
                }break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -413,5 +413,6 @@ CUSTOM_DOC("Tests the log parser")
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// BOTTOM
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1091,15 +1091,15 @@ Buffer_Reopen(Application_Links *app, Buffer_ID buffer_id, Buffer_Reopen_Flag fl
 | 
			
		|||
{
 | 
			
		||||
    Models *models = (Models*)app->cmd_context;
 | 
			
		||||
    System_Functions *system = models->system;
 | 
			
		||||
    Arena *arena = &models->mem.arena;
 | 
			
		||||
    Editing_File *file = imp_get_file(models, buffer_id);
 | 
			
		||||
    Buffer_Reopen_Result result = BufferReopenResult_Failed;
 | 
			
		||||
    if (api_check_buffer(file)){
 | 
			
		||||
        if (file->canon.name_size > 0){
 | 
			
		||||
            Plat_Handle handle = {};
 | 
			
		||||
            if (system->load_handle((char*)file->canon.name_space, &handle)){
 | 
			
		||||
            if (system->load_handle(arena, (char*)file->canon.name_space, &handle)){
 | 
			
		||||
                File_Attributes attributes = system->load_attributes(handle);
 | 
			
		||||
                
 | 
			
		||||
                Arena *arena = &models->mem.arena;
 | 
			
		||||
                Temp_Memory temp = begin_temp(arena);
 | 
			
		||||
                char *file_memory = push_array(arena, char, (i32)attributes.size);
 | 
			
		||||
                
 | 
			
		||||
| 
						 | 
				
			
			@ -1176,8 +1176,8 @@ API_EXPORT File_Attributes
 | 
			
		|||
Get_File_Attributes(Application_Links *app, String_Const_u8 file_name)
 | 
			
		||||
{
 | 
			
		||||
    Models *models = (Models*)app->cmd_context;
 | 
			
		||||
    File_Attributes attributes = models->system->quick_file_attributes(file_name);
 | 
			
		||||
    return(attributes);
 | 
			
		||||
    Arena *arena = &models->mem.arena;
 | 
			
		||||
    return(models->system->quick_file_attributes(arena, file_name));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
internal View*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -98,7 +98,7 @@ child_process_call(Models *models, System_Functions *system, String_Const_u8 pat
 | 
			
		|||
    String_Const_u8 path_n = push_string_copy(scratch, path);
 | 
			
		||||
    String_Const_u8 command_n = push_string_copy(scratch, command);
 | 
			
		||||
    CLI_Handles cli_handles = {};
 | 
			
		||||
    if (system->cli_call((char*)path_n.str, (char*)command_n.str, &cli_handles)){
 | 
			
		||||
    if (system->cli_call(scratch, (char*)path_n.str, (char*)command_n.str, &cli_handles)){
 | 
			
		||||
        Child_Process_And_ID new_process = child_process_alloc_new(models, &models->child_processes);
 | 
			
		||||
        *id_out = new_process.id;
 | 
			
		||||
        new_process.process->cli = cli_handles;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -549,7 +549,7 @@ create_file(Models *models, String_Const_u8 file_name, Buffer_Create_Flag flags)
 | 
			
		|||
                    do_empty_buffer = true;
 | 
			
		||||
                }
 | 
			
		||||
                else{
 | 
			
		||||
                    if (!system->load_handle((char*)canon.name_space, &handle)){
 | 
			
		||||
                    if (!system->load_handle(scratch, (char*)canon.name_space, &handle)){
 | 
			
		||||
                        do_empty_buffer = true;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -189,7 +189,7 @@ save_file_to_name(System_Functions *system, Models *models, Editing_File *file,
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        File_Attributes new_attributes = system->save_file((char*)file_name, data, size);
 | 
			
		||||
        File_Attributes new_attributes = system->save_file(scratch, (char*)file_name, data, size);
 | 
			
		||||
        if (new_attributes.last_write_time > 0){
 | 
			
		||||
            if (using_actual_file_name){
 | 
			
		||||
                file->state.ignore_behind_os = 1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										10
									
								
								4ed_system.h
								
								
								
								
							
							
						
						
									
										10
									
								
								4ed_system.h
								
								
								
								
							| 
						 | 
				
			
			@ -27,10 +27,10 @@ typedef Sys_Get_Canonical_Sig(System_Get_Canonical);
 | 
			
		|||
typedef Sys_Get_File_List_Sig(System_Get_File_List);
 | 
			
		||||
 | 
			
		||||
// file load/save
 | 
			
		||||
#define Sys_Quick_File_Attributes_Sig(name) File_Attributes name(String_Const_u8 file_name)
 | 
			
		||||
#define Sys_Quick_File_Attributes_Sig(name) File_Attributes name(Arena *scratch, String_Const_u8 file_name)
 | 
			
		||||
typedef Sys_Quick_File_Attributes_Sig(System_Quick_File_Attributes);
 | 
			
		||||
 | 
			
		||||
#define Sys_Load_Handle_Sig(name) b32 name(char *filename, Plat_Handle *handle_out)
 | 
			
		||||
#define Sys_Load_Handle_Sig(name) b32 name(Arena *scratch, char *filename, Plat_Handle *handle_out)
 | 
			
		||||
typedef Sys_Load_Handle_Sig(System_Load_Handle);
 | 
			
		||||
 | 
			
		||||
#define Sys_Load_Attributes_Sig(name) File_Attributes name(Plat_Handle handle)
 | 
			
		||||
| 
						 | 
				
			
			@ -42,7 +42,7 @@ typedef Sys_Load_File_Sig(System_Load_File);
 | 
			
		|||
#define Sys_Load_Close_Sig(name) b32 name(Plat_Handle handle)
 | 
			
		||||
typedef Sys_Load_Close_Sig(System_Load_Close);
 | 
			
		||||
 | 
			
		||||
#define Sys_Save_File_Sig(name) File_Attributes name(char *filename, char *buffer, u32 size)
 | 
			
		||||
#define Sys_Save_File_Sig(name) File_Attributes name(Arena *scratch, char *filename, char *buffer, u32 size)
 | 
			
		||||
typedef Sys_Save_File_Sig(System_Save_File);
 | 
			
		||||
 | 
			
		||||
// time
 | 
			
		||||
| 
						 | 
				
			
			@ -82,8 +82,8 @@ struct CLI_Handles{
 | 
			
		|||
    i32 exit;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define Sys_CLI_Call_Sig(n, path, script, cli_out) b32 n(char *path, char *script, CLI_Handles *cli_out)
 | 
			
		||||
typedef Sys_CLI_Call_Sig(System_CLI_Call, path, script, cli_out);
 | 
			
		||||
#define Sys_CLI_Call_Sig(n, scratch, path, script, cli_out) b32 n(Arena *scratch, char *path, char *script, CLI_Handles *cli_out)
 | 
			
		||||
typedef Sys_CLI_Call_Sig(System_CLI_Call, scratch, path, script, cli_out);
 | 
			
		||||
 | 
			
		||||
#define Sys_CLI_Begin_Update_Sig(name) void name(CLI_Handles *cli)
 | 
			
		||||
typedef Sys_CLI_Begin_Update_Sig(System_CLI_Begin_Update);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,10 +20,10 @@ working_set_file_default_settings(Working_Set *working_set, Editing_File *file){
 | 
			
		|||
////////////////////////////////
 | 
			
		||||
 | 
			
		||||
internal void
 | 
			
		||||
file_change_notification_check(System_Functions *system, Working_Set *working_set, Editing_File *file){
 | 
			
		||||
file_change_notification_check(System_Functions *system, Arena *scratch, Working_Set *working_set, Editing_File *file){
 | 
			
		||||
    if (file->canon.name_size > 0 && !file->settings.unimportant){
 | 
			
		||||
        String_Const_u8 name = SCu8(file->canon.name_space, file->canon.name_size);
 | 
			
		||||
        File_Attributes attributes = system->quick_file_attributes(name);
 | 
			
		||||
        File_Attributes attributes = system->quick_file_attributes(scratch, name);
 | 
			
		||||
        if (attributes.last_write_time > file->attributes.last_write_time){
 | 
			
		||||
            file_add_dirty_flag(file, DirtyState_UnloadedChanges);
 | 
			
		||||
            if (file->external_mod_node.next == 0){
 | 
			
		||||
| 
						 | 
				
			
			@ -41,6 +41,7 @@ internal void
 | 
			
		|||
file_change_notification_thread_main(void *ptr){
 | 
			
		||||
    Models *models = (Models*)ptr;
 | 
			
		||||
    System_Functions *system = models->system;
 | 
			
		||||
    Arena arena = make_arena_system(system);
 | 
			
		||||
    Working_Set *working_set = &models->working_set;
 | 
			
		||||
    for (;;){
 | 
			
		||||
        system->sleep(Thousand(250));
 | 
			
		||||
| 
						 | 
				
			
			@ -59,7 +60,7 @@ file_change_notification_thread_main(void *ptr){
 | 
			
		|||
                if (node == used){
 | 
			
		||||
                    node = node->next;
 | 
			
		||||
                }
 | 
			
		||||
                file_change_notification_check(system, working_set, file);
 | 
			
		||||
                file_change_notification_check(system, &arena, working_set, file);
 | 
			
		||||
            }
 | 
			
		||||
            working_set->sync_check_iterator = node;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,7 @@
 | 
			
		|||
// TOP
 | 
			
		||||
 | 
			
		||||
internal void
 | 
			
		||||
memory_init(){
 | 
			
		||||
memory_init(Arena *scratch){
 | 
			
		||||
#if defined(FRED_INTERNAL)
 | 
			
		||||
# if ARCH_64BIT
 | 
			
		||||
    void *bases[] = { (void*)TB(1), (void*)TB(2), };
 | 
			
		||||
| 
						 | 
				
			
			@ -40,22 +40,20 @@ memory_init(){
 | 
			
		|||
    
 | 
			
		||||
    if (!alloc_success){
 | 
			
		||||
        char msg[] = "Could not allocate sufficient memory. Please make sure you have atleast 512Mb of RAM free. (This requirement will be relaxed in the future).";
 | 
			
		||||
        system_error_box(msg);
 | 
			
		||||
        system_error_box(scratch, msg);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
internal void
 | 
			
		||||
load_app_code(void){
 | 
			
		||||
    //LOG("Loading 4coder core...");
 | 
			
		||||
    
 | 
			
		||||
load_app_code(Arena *scratch){
 | 
			
		||||
    App_Get_Functions *get_funcs = 0;
 | 
			
		||||
    
 | 
			
		||||
    if (system_load_library(&shared_vars.scratch, &libraries.app_code, "4ed_app", LoadLibrary_BinaryDirectory)){
 | 
			
		||||
    if (system_load_library(scratch, &libraries.app_code, "4ed_app", LoadLibrary_BinaryDirectory)){
 | 
			
		||||
        get_funcs = (App_Get_Functions*)system_get_proc(&libraries.app_code, "app_get_functions");
 | 
			
		||||
    }
 | 
			
		||||
    else{
 | 
			
		||||
        char msg[] = "Could not load '4ed_app." DLL "'. This file should be in the same directory as the main '4ed' executable.";
 | 
			
		||||
        system_error_box(msg);
 | 
			
		||||
        system_error_box(scratch, msg);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    if (get_funcs != 0){
 | 
			
		||||
| 
						 | 
				
			
			@ -63,7 +61,7 @@ load_app_code(void){
 | 
			
		|||
    }
 | 
			
		||||
    else{
 | 
			
		||||
        char msg[] = "Failed to get application code from '4ed_app." DLL "'.";
 | 
			
		||||
        system_error_box(msg);
 | 
			
		||||
        system_error_box(scratch, msg);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -72,7 +70,7 @@ global char custom_fail_version_msg[] = "Failed to load custom code due to missi
 | 
			
		|||
global char custom_fail_missing_get_bindings_msg[] = "Failed to load custom code due to missing 'get_bindings' symbol.  Try rebuilding with buildsuper.";
 | 
			
		||||
 | 
			
		||||
internal void
 | 
			
		||||
load_custom_code(){
 | 
			
		||||
load_custom_code(Arena *scratch){
 | 
			
		||||
    local_persist char *default_file = "custom_4coder";
 | 
			
		||||
    local_persist Load_Library_Location locations[] = {
 | 
			
		||||
        LoadLibrary_CurrentDirectory,
 | 
			
		||||
| 
						 | 
				
			
			@ -95,7 +93,7 @@ load_custom_code(){
 | 
			
		|||
    for (u32 i = 0; custom_files[i] != 0 && !has_library; ++i){
 | 
			
		||||
        char *file = custom_files[i];
 | 
			
		||||
        for (u32 j = 0; j < ArrayCount(locations) && !has_library; ++j){
 | 
			
		||||
            if (system_load_library(&shared_vars.scratch, &libraries.custom, file, locations[j], success_file, sizeof(success_file))){
 | 
			
		||||
            if (system_load_library(scratch, &libraries.custom, file, locations[j], success_file, sizeof(success_file))){
 | 
			
		||||
                has_library = true;
 | 
			
		||||
                success_file[sizeof(success_file) - 1] = 0;
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -103,21 +101,21 @@ load_custom_code(){
 | 
			
		|||
    }
 | 
			
		||||
    
 | 
			
		||||
    if (!has_library){
 | 
			
		||||
        system_error_box("Did not find a library for the custom layer.");
 | 
			
		||||
        system_error_box(scratch, "Did not find a library for the custom layer.");
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    custom_api.get_alpha_4coder_version = (_Get_Version_Function*)
 | 
			
		||||
        system_get_proc(&libraries.custom, "get_alpha_4coder_version");
 | 
			
		||||
    
 | 
			
		||||
    if (custom_api.get_alpha_4coder_version == 0 || custom_api.get_alpha_4coder_version(MAJOR, MINOR, PATCH) == 0){
 | 
			
		||||
        system_error_box(custom_fail_version_msg);
 | 
			
		||||
        system_error_box(scratch, custom_fail_version_msg);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    custom_api.get_bindings = (Get_Binding_Data_Function*)
 | 
			
		||||
        system_get_proc(&libraries.custom, "get_bindings");
 | 
			
		||||
    
 | 
			
		||||
    if (custom_api.get_bindings == 0){
 | 
			
		||||
        system_error_box(custom_fail_missing_get_bindings_msg);
 | 
			
		||||
        system_error_box(scratch, custom_fail_missing_get_bindings_msg);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    //LOGF("Loaded custom file: %s\n", success_file);
 | 
			
		||||
| 
						 | 
				
			
			@ -132,7 +130,7 @@ read_command_line(Arena *scratch, i32 argc, char **argv){
 | 
			
		|||
    char **files = 0;
 | 
			
		||||
    i32 *file_count = 0;
 | 
			
		||||
    app.read_command_line(&sysfunc, &memory_vars, curdir, &plat_settings, &files, &file_count, argc, argv);
 | 
			
		||||
    sysshared_filter_real_files(files, file_count);
 | 
			
		||||
    sysshared_filter_real_files(scratch, files, file_count);
 | 
			
		||||
    end_temp(temp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,7 +16,7 @@
 | 
			
		|||
union Library;
 | 
			
		||||
 | 
			
		||||
internal b32
 | 
			
		||||
system_load_library_direct(Library *library, char *name);
 | 
			
		||||
system_load_library_direct(Arena *scratch, Library *library, char *name);
 | 
			
		||||
 | 
			
		||||
internal void*
 | 
			
		||||
system_get_proc(Library *library, char *name);
 | 
			
		||||
| 
						 | 
				
			
			@ -69,12 +69,12 @@ system_load_library(Arena *scratch, Library *library, char *name_cstr, Load_Libr
 | 
			
		|||
        else{
 | 
			
		||||
            path = push_u8_stringf(scratch, "%.*s%.*s", string_expand(path), string_expand(name));
 | 
			
		||||
        }
 | 
			
		||||
        success = system_load_library_direct(library, (char*)path.str);
 | 
			
		||||
        if (success && full_file_out != 0 && full_file_out > 0){
 | 
			
		||||
            u32 fill_size = clamp_top((u32)(path.size), (u32)(full_file_max - 1));
 | 
			
		||||
            block_copy(full_file_out, path.str, fill_size);
 | 
			
		||||
            full_file_out[fill_size] = 0;
 | 
			
		||||
        }
 | 
			
		||||
        success = system_load_library_direct(scratch, library, (char*)path.str);
 | 
			
		||||
    }
 | 
			
		||||
    if (success && full_file_out != 0 && full_file_out > 0){
 | 
			
		||||
        u32 fill_size = clamp_top((u32)(path.size), (u32)(full_file_max - 1));
 | 
			
		||||
        block_copy(full_file_out, path.str, fill_size);
 | 
			
		||||
        full_file_out[fill_size] = 0;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    end_temp(temp);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,6 @@
 | 
			
		|||
 | 
			
		||||
internal void
 | 
			
		||||
init_shared_vars(){
 | 
			
		||||
    shared_vars.scratch = make_arena_system(&sysfunc);
 | 
			
		||||
    shared_vars.font_scratch = make_arena_system(&sysfunc);
 | 
			
		||||
    shared_vars.pixel_scratch = make_arena_system(&sysfunc);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -28,11 +27,11 @@ init_shared_vars(){
 | 
			
		|||
//
 | 
			
		||||
 | 
			
		||||
internal void
 | 
			
		||||
sysshared_filter_real_files(char **files, i32 *file_count){
 | 
			
		||||
sysshared_filter_real_files(Arena *scratch, char **files, i32 *file_count){
 | 
			
		||||
    i32 end = *file_count;
 | 
			
		||||
    i32 i = 0, j = 0;
 | 
			
		||||
    for (; i < end; ++i){
 | 
			
		||||
        if (system_file_can_be_made((u8*)files[i])){
 | 
			
		||||
        if (system_file_can_be_made(scratch, (u8*)files[i])){
 | 
			
		||||
            files[j] = files[i];
 | 
			
		||||
            ++j;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,11 +24,10 @@ struct File_Data{
 | 
			
		|||
};
 | 
			
		||||
global File_Data null_file_data = {};
 | 
			
		||||
 | 
			
		||||
#define Sys_File_Can_Be_Made_Sig(name) b32 name(u8 *filename)
 | 
			
		||||
#define Sys_File_Can_Be_Made_Sig(name) b32 name(Arena *scratch, u8 *filename)
 | 
			
		||||
internal Sys_File_Can_Be_Made_Sig(system_file_can_be_made);
 | 
			
		||||
 | 
			
		||||
struct Shared_Vars{
 | 
			
		||||
    Arena scratch;
 | 
			
		||||
    Arena font_scratch;
 | 
			
		||||
    Arena pixel_scratch;
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -392,12 +392,5 @@ Sys_File_Exists_Sig(system_file_exists){
 | 
			
		|||
    return(result);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
internal b32
 | 
			
		||||
system_directory_exists(char *path){
 | 
			
		||||
    struct stat st;
 | 
			
		||||
    b32 result = (stat(path, &st) == 0 && S_ISDIR(st.st_mode));
 | 
			
		||||
    return(result);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// BOTTOM
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -63,7 +63,7 @@ enum{
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
internal void
 | 
			
		||||
win32_output_error_string(i32 error_string_type);
 | 
			
		||||
win32_output_error_string(Arena *scratch, i32 error_string_type);
 | 
			
		||||
 | 
			
		||||
//////////////////////////////
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -153,6 +153,8 @@ struct Win32_Object{
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
struct Win32_Vars{
 | 
			
		||||
    Arena arena;
 | 
			
		||||
    
 | 
			
		||||
    Win32_Input_Chunk input_chunk;
 | 
			
		||||
    b8 lctrl_lalt_is_altgr;
 | 
			
		||||
    b8 got_useful_event;
 | 
			
		||||
| 
						 | 
				
			
			@ -212,25 +214,28 @@ global Custom_API custom_api;
 | 
			
		|||
 | 
			
		||||
////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#include "win32_error_box.cpp"
 | 
			
		||||
internal void
 | 
			
		||||
system_error_box(Arena *scratch, char *msg, b32 shutdown = true){
 | 
			
		||||
    //LOGF("error box: %s\n", msg);
 | 
			
		||||
    MessageBox_utf8(scratch, 0, (u8*)msg, (u8*)"Error", 0);
 | 
			
		||||
    if (shutdown){
 | 
			
		||||
        exit(1);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
////////////////////////////////
 | 
			
		||||
 | 
			
		||||
internal void
 | 
			
		||||
win32_output_error_string(b32 use_error_box){
 | 
			
		||||
win32_output_error_string(Arena *scratch, b32 use_error_box){
 | 
			
		||||
    DWORD error = GetLastError();
 | 
			
		||||
    
 | 
			
		||||
    char *str = 0;
 | 
			
		||||
    char *str_ptr = (char*)&str;
 | 
			
		||||
    if (FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 0, error, 0, str_ptr, 0, 0)){
 | 
			
		||||
        //LOGF("win32 error:\n%s\n", str);
 | 
			
		||||
        if (use_error_box){
 | 
			
		||||
            system_error_box(str, false);
 | 
			
		||||
            system_error_box(scratch, str, false);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    else{
 | 
			
		||||
        //LOGF("win32 error raw: %d\n", error);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
////////////////////////////////
 | 
			
		||||
| 
						 | 
				
			
			@ -334,10 +339,10 @@ Sys_Is_Fullscreen_Sig(system_is_fullscreen){
 | 
			
		|||
//
 | 
			
		||||
 | 
			
		||||
internal void
 | 
			
		||||
win32_post_clipboard(char *text, i32 len){
 | 
			
		||||
win32_post_clipboard(Arena *scratch, char *text, i32 len){
 | 
			
		||||
    if (OpenClipboard(win32vars.window_handle)){
 | 
			
		||||
        if (!EmptyClipboard()){
 | 
			
		||||
            win32_output_error_string(ErrorString_UseLog);
 | 
			
		||||
            win32_output_error_string(scratch, ErrorString_UseLog);
 | 
			
		||||
        }
 | 
			
		||||
        HANDLE memory_handle = GlobalAlloc(GMEM_MOVEABLE, len  + 1);
 | 
			
		||||
        if (memory_handle){
 | 
			
		||||
| 
						 | 
				
			
			@ -373,8 +378,7 @@ Sys_Post_Clipboard_Sig(system_post_clipboard){
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
internal b32
 | 
			
		||||
win32_read_clipboard_contents(void){
 | 
			
		||||
    Arena *scratch = &shared_vars.scratch;
 | 
			
		||||
win32_read_clipboard_contents(Arena *scratch){
 | 
			
		||||
    Temp_Memory temp = begin_temp(scratch);
 | 
			
		||||
    
 | 
			
		||||
    b32 result = false;
 | 
			
		||||
| 
						 | 
				
			
			@ -456,14 +460,12 @@ win32_read_clipboard_contents(void){
 | 
			
		|||
//
 | 
			
		||||
 | 
			
		||||
internal
 | 
			
		||||
Sys_CLI_Call_Sig(system_cli_call, path, script_name, cli_out){
 | 
			
		||||
Sys_CLI_Call_Sig(system_cli_call, scratch, path, script_name, cli_out){
 | 
			
		||||
    Assert(sizeof(Plat_Handle) >= sizeof(HANDLE));
 | 
			
		||||
    
 | 
			
		||||
    char cmd[] = "c:\\windows\\system32\\cmd.exe";
 | 
			
		||||
    char *env_variables = 0;
 | 
			
		||||
    
 | 
			
		||||
    Arena *scratch = &shared_vars.scratch;
 | 
			
		||||
    
 | 
			
		||||
    Temp_Memory temp = begin_temp(scratch);
 | 
			
		||||
    String_Const_u8 s = push_u8_stringf(scratch, "/C %s", script_name);
 | 
			
		||||
    
 | 
			
		||||
| 
						 | 
				
			
			@ -495,7 +497,7 @@ Sys_CLI_Call_Sig(system_cli_call, path, script_name, cli_out){
 | 
			
		|||
            startup.wShowWindow = SW_HIDE;
 | 
			
		||||
            
 | 
			
		||||
            PROCESS_INFORMATION info = {};
 | 
			
		||||
            if (CreateProcess_utf8(&shared_vars.scratch, (u8*)cmd, s.str, 0, 0, TRUE, 0, env_variables, (u8*)path, &startup, &info)){
 | 
			
		||||
            if (CreateProcess_utf8(scratch, (u8*)cmd, s.str, 0, 0, TRUE, 0, env_variables, (u8*)path, &startup, &info)){
 | 
			
		||||
                success = true;
 | 
			
		||||
                CloseHandle(info.hThread);
 | 
			
		||||
                *(HANDLE*)&cli_out->proc = info.hProcess;
 | 
			
		||||
| 
						 | 
				
			
			@ -1026,6 +1028,7 @@ Sys_Condition_Variable_Free_Sig(system_condition_variable_free){
 | 
			
		|||
internal LRESULT
 | 
			
		||||
win32_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
 | 
			
		||||
    LRESULT result = 0;
 | 
			
		||||
    Arena *scratch = &win32vars.arena;
 | 
			
		||||
    
 | 
			
		||||
    switch (uMsg){
 | 
			
		||||
        case WM_MENUCHAR:break;
 | 
			
		||||
| 
						 | 
				
			
			@ -1249,7 +1252,7 @@ win32_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
 | 
			
		|||
        case WM_CLIPBOARDUPDATE:
 | 
			
		||||
        {
 | 
			
		||||
            win32vars.got_useful_event = true;
 | 
			
		||||
            LogEventLit(win32vars.log_string(M), &shared_vars.scratch, 0, 0, system_thread_get_id(),
 | 
			
		||||
            LogEventLit(win32vars.log_string(M), scratch, 0, 0, system_thread_get_id(),
 | 
			
		||||
                        "new clipboard contents");
 | 
			
		||||
        }break;
 | 
			
		||||
        
 | 
			
		||||
| 
						 | 
				
			
			@ -1537,6 +1540,8 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdS
 | 
			
		|||
    // Memory init
 | 
			
		||||
    //
 | 
			
		||||
    
 | 
			
		||||
    win32vars.arena = make_arena_system(&sysfunc);
 | 
			
		||||
    
 | 
			
		||||
    memset(&win32vars, 0, sizeof(win32vars));
 | 
			
		||||
    memset(&target, 0, sizeof(target));
 | 
			
		||||
    memset(&memory_vars, 0, sizeof(memory_vars));
 | 
			
		||||
| 
						 | 
				
			
			@ -1546,7 +1551,7 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdS
 | 
			
		|||
    memset(&app, 0, sizeof(app));
 | 
			
		||||
    memset(&custom_api, 0, sizeof(custom_api));
 | 
			
		||||
    
 | 
			
		||||
    memory_init();
 | 
			
		||||
    memory_init(&win32vars.arena);
 | 
			
		||||
    
 | 
			
		||||
    win32vars.cursor_show = MouseCursorShow_Always;
 | 
			
		||||
    win32vars.prev_cursor_show = MouseCursorShow_Always;
 | 
			
		||||
| 
						 | 
				
			
			@ -1564,16 +1569,16 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdS
 | 
			
		|||
    
 | 
			
		||||
    init_shared_vars();
 | 
			
		||||
    
 | 
			
		||||
    load_app_code();
 | 
			
		||||
    load_app_code(&win32vars.arena);
 | 
			
		||||
    win32vars.log_string = app.get_logger(&sysfunc);
 | 
			
		||||
    read_command_line(&shared_vars.scratch, argc, argv);
 | 
			
		||||
    read_command_line(&win32vars.arena, argc, argv);
 | 
			
		||||
    
 | 
			
		||||
    //
 | 
			
		||||
    // Load Custom Code
 | 
			
		||||
    //
 | 
			
		||||
    
 | 
			
		||||
#if defined(FRED_SUPER)
 | 
			
		||||
    load_custom_code();
 | 
			
		||||
    load_custom_code(&win32vars.arena);
 | 
			
		||||
#else
 | 
			
		||||
    custom_api.get_bindings = get_bindings;
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1614,7 +1619,7 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdS
 | 
			
		|||
    //
 | 
			
		||||
    
 | 
			
		||||
    if (!AddClipboardFormatListener(win32vars.window_handle)){
 | 
			
		||||
        win32_output_error_string(ErrorString_UseLog);
 | 
			
		||||
        win32_output_error_string(&win32vars.arena, ErrorString_UseLog);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    win32vars.clip_max = KB(16);
 | 
			
		||||
| 
						 | 
				
			
			@ -1622,7 +1627,7 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdS
 | 
			
		|||
    
 | 
			
		||||
    win32vars.clipboard_sequence = GetClipboardSequenceNumber();
 | 
			
		||||
    if (win32vars.clipboard_sequence == 0){
 | 
			
		||||
        win32_post_clipboard("", 0);
 | 
			
		||||
        win32_post_clipboard(&win32vars.arena, "", 0);
 | 
			
		||||
        
 | 
			
		||||
        win32vars.clipboard_sequence = GetClipboardSequenceNumber();
 | 
			
		||||
        win32vars.next_clipboard_is_self = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -1632,7 +1637,7 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdS
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
    else{
 | 
			
		||||
        win32_read_clipboard_contents();
 | 
			
		||||
        win32_read_clipboard_contents(&win32vars.arena);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    win32_keycode_init();
 | 
			
		||||
| 
						 | 
				
			
			@ -1657,8 +1662,8 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdS
 | 
			
		|||
    //
 | 
			
		||||
    
 | 
			
		||||
    {
 | 
			
		||||
        Temp_Memory temp = begin_temp(&shared_vars.scratch);
 | 
			
		||||
        String_Const_u8 curdir = sysfunc.get_current_path(&shared_vars.scratch);
 | 
			
		||||
        Temp_Memory temp = begin_temp(&win32vars.arena);
 | 
			
		||||
        String_Const_u8 curdir = sysfunc.get_current_path(&win32vars.arena);
 | 
			
		||||
        curdir = string_mod_replace_character(curdir, '\\', '/');
 | 
			
		||||
        app.init(&sysfunc, &target, &memory_vars, win32vars.clipboard_contents, curdir, custom_api);
 | 
			
		||||
        end_temp(temp);
 | 
			
		||||
| 
						 | 
				
			
			@ -1837,7 +1842,7 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdS
 | 
			
		|||
        }
 | 
			
		||||
        
 | 
			
		||||
        // NOTE(allen): Frame Clipboard Input
 | 
			
		||||
        memset(&win32vars.clipboard_contents, 0, sizeof(win32vars.clipboard_contents));
 | 
			
		||||
        block_zero_struct(&win32vars.clipboard_contents);
 | 
			
		||||
        input.clipboard_changed = false;
 | 
			
		||||
        if (win32vars.clipboard_sequence != 0){
 | 
			
		||||
            DWORD new_number = GetClipboardSequenceNumber();
 | 
			
		||||
| 
						 | 
				
			
			@ -1847,7 +1852,7 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdS
 | 
			
		|||
                }
 | 
			
		||||
                else{
 | 
			
		||||
                    for (i32 R = 0; R < 4; ++R){
 | 
			
		||||
                        if (win32_read_clipboard_contents()){
 | 
			
		||||
                        if (win32_read_clipboard_contents(&win32vars.arena)){
 | 
			
		||||
                            input.clipboard_changed = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1877,12 +1882,12 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdS
 | 
			
		|||
        
 | 
			
		||||
        // NOTE(allen): Post New Clipboard Content
 | 
			
		||||
        if (win32vars.clip_post.size > 0){
 | 
			
		||||
            win32_post_clipboard((char*)win32vars.clip_post.str, (i32)win32vars.clip_post.size);
 | 
			
		||||
            win32_post_clipboard(&win32vars.arena, (char*)win32vars.clip_post.str, (i32)win32vars.clip_post.size);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // NOTE(allen): Switch to New Title
 | 
			
		||||
        if (result.has_new_title){
 | 
			
		||||
            SetWindowText_utf8(&shared_vars.scratch, win32vars.window_handle, (u8*)result.title_string);
 | 
			
		||||
            SetWindowText_utf8(&win32vars.arena, win32vars.window_handle, (u8*)result.title_string);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // NOTE(allen): Switch to New Cursor
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,7 +15,7 @@
 | 
			
		|||
 | 
			
		||||
internal
 | 
			
		||||
Sys_File_Can_Be_Made_Sig(system_file_can_be_made){
 | 
			
		||||
    HANDLE file = CreateFile_utf8(&shared_vars.scratch, filename, FILE_APPEND_DATA, 0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
 | 
			
		||||
    HANDLE file = CreateFile_utf8(scratch, filename, FILE_APPEND_DATA, 0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
 | 
			
		||||
    b32 result = false;
 | 
			
		||||
    if (file != INVALID_HANDLE_VALUE){
 | 
			
		||||
        CloseHandle(file);
 | 
			
		||||
| 
						 | 
				
			
			@ -71,9 +71,9 @@ Sys_Memory_Free_Sig(system_memory_free){
 | 
			
		|||
 | 
			
		||||
internal
 | 
			
		||||
Sys_Get_Current_Path_Sig(system_get_current_path){
 | 
			
		||||
    DWORD size = GetCurrentDirectory_utf8(&shared_vars.scratch, 0, 0);
 | 
			
		||||
    DWORD size = GetCurrentDirectory_utf8(arena, 0, 0);
 | 
			
		||||
    u8 *out = push_array(arena, u8, size);
 | 
			
		||||
    GetCurrentDirectory_utf8(&shared_vars.scratch, size, out);
 | 
			
		||||
    GetCurrentDirectory_utf8(arena, size, out);
 | 
			
		||||
    return(SCu8(out, size - 1));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ Sys_Get_4ed_Path_Sig(system_get_4ed_path){
 | 
			
		|||
        has_stashed_4ed_path = true;
 | 
			
		||||
        local_const i32 binary_path_capacity = KB(32);
 | 
			
		||||
        u8 *memory = (u8*)system_memory_allocate(binary_path_capacity);
 | 
			
		||||
        i32 size = GetModuleFileName_utf8(&shared_vars.scratch, 0, memory, binary_path_capacity);
 | 
			
		||||
        i32 size = GetModuleFileName_utf8(arena, 0, memory, binary_path_capacity);
 | 
			
		||||
        Assert(size <= binary_path_capacity - 1);
 | 
			
		||||
        win32vars.binary_path = SCu8(memory, size);
 | 
			
		||||
        win32vars.binary_path = string_remove_last_folder(win32vars.binary_path);
 | 
			
		||||
| 
						 | 
				
			
			@ -121,22 +121,20 @@ win32_remove_unc_prefix_characters(String_Const_u8 path){
 | 
			
		|||
internal
 | 
			
		||||
Sys_Get_Canonical_Sig(system_get_canonical){
 | 
			
		||||
    String_Const_u8 result = {};
 | 
			
		||||
    Arena *scratch = &shared_vars.scratch;
 | 
			
		||||
    Temp_Memory temp = begin_temp(scratch);
 | 
			
		||||
    if ((character_is_alpha(string_get_character(name, 0)) &&
 | 
			
		||||
         string_get_character(name, 1) == ':') ||
 | 
			
		||||
        string_match(string_prefix(name, 2), string_u8_litexpr("\\\\"))){
 | 
			
		||||
        
 | 
			
		||||
        u8 *c_name = push_array(scratch, u8, name.size + 1);
 | 
			
		||||
        u8 *c_name = push_array(arena, u8, name.size + 1);
 | 
			
		||||
        block_copy(c_name, name.str, name.size);
 | 
			
		||||
        c_name[name.size] = 0;
 | 
			
		||||
        HANDLE file = CreateFile_utf8(scratch, c_name, GENERIC_READ, 0, 0, OPEN_EXISTING,
 | 
			
		||||
        HANDLE file = CreateFile_utf8(arena, c_name, GENERIC_READ, 0, 0, OPEN_EXISTING,
 | 
			
		||||
                                      FILE_ATTRIBUTE_NORMAL, 0);
 | 
			
		||||
        
 | 
			
		||||
        if (file != INVALID_HANDLE_VALUE){
 | 
			
		||||
            DWORD capacity = GetFinalPathNameByHandle_utf8(scratch, file, 0, 0, 0);
 | 
			
		||||
            DWORD capacity = GetFinalPathNameByHandle_utf8(arena, file, 0, 0, 0);
 | 
			
		||||
            u8 *buffer = push_array(arena, u8, capacity);
 | 
			
		||||
            DWORD length = GetFinalPathNameByHandle_utf8(scratch, file, buffer, capacity, 0);
 | 
			
		||||
            DWORD length = GetFinalPathNameByHandle_utf8(arena, file, buffer, capacity, 0);
 | 
			
		||||
            if (length > 0 && buffer[length - 1] == 0){
 | 
			
		||||
                length -= 1;
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -148,19 +146,19 @@ Sys_Get_Canonical_Sig(system_get_canonical){
 | 
			
		|||
            String_Const_u8 path = string_remove_front_of_path(name);
 | 
			
		||||
            String_Const_u8 front = string_front_of_path(name);
 | 
			
		||||
            
 | 
			
		||||
            u8 *c_path = push_array(scratch, u8, path.size + 1);
 | 
			
		||||
            u8 *c_path = push_array(arena, u8, path.size + 1);
 | 
			
		||||
            block_copy(c_path, path.str, path.size);
 | 
			
		||||
            c_path[path.size] = 0;
 | 
			
		||||
            
 | 
			
		||||
            HANDLE dir = CreateFile_utf8(scratch, c_path, FILE_LIST_DIRECTORY,
 | 
			
		||||
            HANDLE dir = CreateFile_utf8(arena, c_path, FILE_LIST_DIRECTORY,
 | 
			
		||||
                                         FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 0,
 | 
			
		||||
                                         OPEN_EXISTING,
 | 
			
		||||
                                         FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, 0);
 | 
			
		||||
            
 | 
			
		||||
            if (dir != INVALID_HANDLE_VALUE){
 | 
			
		||||
                DWORD capacity = GetFinalPathNameByHandle_utf8(scratch, dir, 0, 0, 0);
 | 
			
		||||
                DWORD capacity = GetFinalPathNameByHandle_utf8(arena, dir, 0, 0, 0);
 | 
			
		||||
                u8 *buffer = push_array(arena, u8, capacity + front.size + 1);
 | 
			
		||||
                DWORD length = GetFinalPathNameByHandle_utf8(scratch, dir, buffer, capacity, 0);
 | 
			
		||||
                DWORD length = GetFinalPathNameByHandle_utf8(arena, dir, buffer, capacity, 0);
 | 
			
		||||
                if (length > 0 && buffer[length - 1] == 0){
 | 
			
		||||
                    length -= 1;
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -174,7 +172,6 @@ Sys_Get_Canonical_Sig(system_get_canonical){
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    end_temp(temp);
 | 
			
		||||
    return(result);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -209,18 +206,16 @@ win32_file_attributes_from_HANDLE(HANDLE file){
 | 
			
		|||
internal
 | 
			
		||||
Sys_Get_File_List_Sig(system_get_file_list){
 | 
			
		||||
    File_List result = {};
 | 
			
		||||
    Arena *scratch = &shared_vars.scratch;
 | 
			
		||||
    Temp_Memory temp = begin_temp(scratch);
 | 
			
		||||
    String_Const_u8 search_pattern = {};
 | 
			
		||||
    if (character_is_slash(string_get_character(directory, directory.size - 1))){
 | 
			
		||||
        search_pattern = push_u8_stringf(scratch, "%.*s*", string_expand(directory));
 | 
			
		||||
        search_pattern = push_u8_stringf(arena, "%.*s*", string_expand(directory));
 | 
			
		||||
    }
 | 
			
		||||
    else{
 | 
			
		||||
        search_pattern = push_u8_stringf(scratch, "%.*s\\*", string_expand(directory));
 | 
			
		||||
        search_pattern = push_u8_stringf(arena, "%.*s\\*", string_expand(directory));
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    WIN32_FIND_DATA find_data = {};
 | 
			
		||||
    HANDLE search = FindFirstFile_utf8(&shared_vars.scratch, search_pattern.str, &find_data);
 | 
			
		||||
    HANDLE search = FindFirstFile_utf8(arena, search_pattern.str, &find_data);
 | 
			
		||||
    if (search != INVALID_HANDLE_VALUE){
 | 
			
		||||
        File_Info *first = 0;
 | 
			
		||||
        File_Info *last = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -260,7 +255,6 @@ Sys_Get_File_List_Sig(system_get_file_list){
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    end_temp(temp);
 | 
			
		||||
    return(result);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -268,7 +262,7 @@ internal
 | 
			
		|||
Sys_Quick_File_Attributes_Sig(system_quick_file_attributes){
 | 
			
		||||
    WIN32_FILE_ATTRIBUTE_DATA info = {};
 | 
			
		||||
    File_Attributes result = {};
 | 
			
		||||
    if (GetFileAttributesEx_utf8String(&shared_vars.scratch, file_name, GetFileExInfoStandard, &info)){
 | 
			
		||||
    if (GetFileAttributesEx_utf8String(scratch, file_name, GetFileExInfoStandard, &info)){
 | 
			
		||||
        result.size = ((u64)info.nFileSizeHigh << 32LL) | ((u64)info.nFileSizeLow);
 | 
			
		||||
        result.last_write_time = ((u64)info.ftLastWriteTime.dwHighDateTime << 32LL) | ((u64)info.ftLastWriteTime.dwLowDateTime);
 | 
			
		||||
        result.flags = win32_convert_file_attribute_flags(info.dwFileAttributes);
 | 
			
		||||
| 
						 | 
				
			
			@ -279,7 +273,7 @@ Sys_Quick_File_Attributes_Sig(system_quick_file_attributes){
 | 
			
		|||
internal
 | 
			
		||||
Sys_Load_Handle_Sig(system_load_handle){
 | 
			
		||||
    b32 result = false;
 | 
			
		||||
    HANDLE file = CreateFile_utf8(&shared_vars.scratch, (u8*)filename, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
 | 
			
		||||
    HANDLE file = CreateFile_utf8(scratch, (u8*)filename, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
 | 
			
		||||
    if (file != INVALID_HANDLE_VALUE){
 | 
			
		||||
        *(HANDLE*)handle_out = file;
 | 
			
		||||
        result = true;
 | 
			
		||||
| 
						 | 
				
			
			@ -319,7 +313,8 @@ Sys_Load_Close_Sig(system_load_close){
 | 
			
		|||
internal
 | 
			
		||||
Sys_Save_File_Sig(system_save_file){
 | 
			
		||||
    File_Attributes result = {};
 | 
			
		||||
    HANDLE file = CreateFile_utf8(&shared_vars.scratch, (u8*)filename, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
 | 
			
		||||
    
 | 
			
		||||
    HANDLE file = CreateFile_utf8(scratch, (u8*)filename, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
 | 
			
		||||
    
 | 
			
		||||
    if (file != INVALID_HANDLE_VALUE){
 | 
			
		||||
        DWORD written_total = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -344,16 +339,6 @@ Sys_Save_File_Sig(system_save_file){
 | 
			
		|||
    return(result);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// File System
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
internal b32
 | 
			
		||||
system_directory_exists(char *path){
 | 
			
		||||
    DWORD attrib = GetFileAttributes_utf8(&shared_vars.scratch, (u8*)path);
 | 
			
		||||
    return(attrib != INVALID_FILE_ATTRIBUTES && (attrib & FILE_ATTRIBUTE_DIRECTORY));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Color picker
 | 
			
		||||
//
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,22 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Mr. 4th Dimention - Allen Webster
 | 
			
		||||
 *
 | 
			
		||||
 * 18.07.2017
 | 
			
		||||
 *
 | 
			
		||||
 * Windows fatal error message box.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
// TOP
 | 
			
		||||
 | 
			
		||||
internal void
 | 
			
		||||
system_error_box(char *msg, b32 shutdown = true){
 | 
			
		||||
    //LOGF("error box: %s\n", msg);
 | 
			
		||||
    MessageBox_utf8(&shared_vars.scratch, 0, (u8*)msg, (u8*)"Error", 0);
 | 
			
		||||
    if (shutdown){
 | 
			
		||||
        exit(1);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// BOTTOM
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -15,20 +15,19 @@ union Library{
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
internal b32
 | 
			
		||||
system_load_library_direct(Library *library, char *name){
 | 
			
		||||
system_load_library_direct(Arena *scratch, Library *library, char *name){
 | 
			
		||||
    AssertLibrarySizes();
 | 
			
		||||
    library->lib = LoadLibraryA(name);
 | 
			
		||||
    b32 success = (library->lib != 0);
 | 
			
		||||
    if (!success){
 | 
			
		||||
        win32_output_error_string(ErrorString_UseLog);
 | 
			
		||||
        win32_output_error_string(scratch, ErrorString_UseLog);
 | 
			
		||||
    }
 | 
			
		||||
    return(success);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
internal void*
 | 
			
		||||
system_get_proc(Library *library, char *name){
 | 
			
		||||
    void *result = GetProcAddress(library->lib, name);
 | 
			
		||||
    return(result);
 | 
			
		||||
    return(GetProcAddress(library->lib, name));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
internal void
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue