added new file hook; fixed up linux save-to-name bug; fixed up packaging bug
							parent
							
								
									a778d6c8fc
								
							
						
					
					
						commit
						18d19fb9fa
					
				| 
						 | 
					@ -117,6 +117,12 @@ OPEN_FILE_HOOK_SIG(default_file_settings){
 | 
				
			||||||
    return(0);
 | 
					    return(0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
OPEN_FILE_HOOK_SIG(default_file_save){
 | 
					OPEN_FILE_HOOK_SIG(default_file_save){
 | 
				
			||||||
    uint32_t access = AccessAll;
 | 
					    uint32_t access = AccessAll;
 | 
				
			||||||
    Buffer_Summary buffer = get_buffer(app, buffer_id, access);
 | 
					    Buffer_Summary buffer = get_buffer(app, buffer_id, access);
 | 
				
			||||||
| 
						 | 
					@ -242,6 +248,7 @@ set_all_default_hooks(Bind_Helper *context){
 | 
				
			||||||
    set_hook(context, hook_view_size_change, default_view_adjust);
 | 
					    set_hook(context, hook_view_size_change, default_view_adjust);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    set_open_file_hook(context, default_file_settings);
 | 
					    set_open_file_hook(context, default_file_settings);
 | 
				
			||||||
 | 
					    set_new_file_hook(context, default_new_file);
 | 
				
			||||||
    set_save_file_hook(context, default_file_save);
 | 
					    set_save_file_hook(context, default_file_save);
 | 
				
			||||||
    set_command_caller(context, default_command_caller);
 | 
					    set_command_caller(context, default_command_caller);
 | 
				
			||||||
    set_input_filter(context, default_suppress_mouse_filter);
 | 
					    set_input_filter(context, default_suppress_mouse_filter);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										38
									
								
								4ed.cpp
								
								
								
								
							
							
						
						
									
										38
									
								
								4ed.cpp
								
								
								
								
							| 
						 | 
					@ -284,13 +284,12 @@ COMMAND_DECL(null){
 | 
				
			||||||
    AllowLocal(command);
 | 
					    AllowLocal(command);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TODO(allen): FIX THIS SHIT!
 | 
					 | 
				
			||||||
COMMAND_DECL(undo){
 | 
					COMMAND_DECL(undo){
 | 
				
			||||||
    USE_MODELS(models);
 | 
					    USE_MODELS(models);
 | 
				
			||||||
    REQ_OPEN_VIEW(view);
 | 
					    REQ_OPEN_VIEW(view);
 | 
				
			||||||
    REQ_FILE_HISTORY(file, view);
 | 
					    REQ_FILE_HISTORY(file, view);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    view_undo(system, models, view);
 | 
					    view_undo_redo(system, models, view, &file->state.undo.undo, ED_UNDO);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    Assert(file->state.undo.undo.size >= 0);
 | 
					    Assert(file->state.undo.undo.size >= 0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -300,7 +299,7 @@ COMMAND_DECL(redo){
 | 
				
			||||||
    REQ_OPEN_VIEW(view);
 | 
					    REQ_OPEN_VIEW(view);
 | 
				
			||||||
    REQ_FILE_HISTORY(file, view);
 | 
					    REQ_FILE_HISTORY(file, view);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    view_redo(system, models, view);
 | 
					    view_undo_redo(system, models, view, &file->state.undo.redo, ED_REDO);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    Assert(file->state.undo.undo.size >= 0);
 | 
					    Assert(file->state.undo.undo.size >= 0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -308,17 +307,13 @@ COMMAND_DECL(redo){
 | 
				
			||||||
COMMAND_DECL(interactive_new){
 | 
					COMMAND_DECL(interactive_new){
 | 
				
			||||||
    USE_VIEW(view);
 | 
					    USE_VIEW(view);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    view_show_interactive(system, view,
 | 
					    view_show_interactive(system, view, IAct_New, IInt_Sys_File_List, make_lit_string("New: "));
 | 
				
			||||||
                          IAct_New, IInt_Sys_File_List,
 | 
					 | 
				
			||||||
                          make_lit_string("New: "));
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
COMMAND_DECL(interactive_open){
 | 
					COMMAND_DECL(interactive_open){
 | 
				
			||||||
    USE_VIEW(view);
 | 
					    USE_VIEW(view);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    view_show_interactive(system, view,
 | 
					    view_show_interactive(system, view, IAct_Open, IInt_Sys_File_List,make_lit_string("Open: "));
 | 
				
			||||||
                          IAct_Open, IInt_Sys_File_List,
 | 
					 | 
				
			||||||
                          make_lit_string("Open: "));
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TODO(allen): Improvements to reopen
 | 
					// TODO(allen): Improvements to reopen
 | 
				
			||||||
| 
						 | 
					@ -1282,6 +1277,8 @@ App_Init_Sig(app_init){
 | 
				
			||||||
        models->hook_open_file = 0;
 | 
					        models->hook_open_file = 0;
 | 
				
			||||||
        models->hook_new_file = 0;
 | 
					        models->hook_new_file = 0;
 | 
				
			||||||
        models->hook_save_file = 0;
 | 
					        models->hook_save_file = 0;
 | 
				
			||||||
 | 
					        models->command_caller = 0;
 | 
				
			||||||
 | 
					        models->input_filter = 0;
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        setup_command_table();
 | 
					        setup_command_table();
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
| 
						 | 
					@ -1419,28 +1416,34 @@ App_Init_Sig(app_init){
 | 
				
			||||||
                                else{
 | 
					                                else{
 | 
				
			||||||
                                    switch (hook_id){
 | 
					                                    switch (hook_id){
 | 
				
			||||||
                                        case special_hook_open_file:
 | 
					                                        case special_hook_open_file:
 | 
				
			||||||
 | 
					                                        {
 | 
				
			||||||
                                            models->hook_open_file = (Open_File_Hook_Function*)unit->hook.func;
 | 
					                                            models->hook_open_file = (Open_File_Hook_Function*)unit->hook.func;
 | 
				
			||||||
                                        break;
 | 
					                                        }break;
 | 
				
			||||||
                                        
 | 
					                                        
 | 
				
			||||||
                                        case special_hook_new_file:
 | 
					                                        case special_hook_new_file:
 | 
				
			||||||
 | 
					                                        {
 | 
				
			||||||
                                            models->hook_new_file = (Open_File_Hook_Function*)unit->hook.func;
 | 
					                                            models->hook_new_file = (Open_File_Hook_Function*)unit->hook.func;
 | 
				
			||||||
                                        break;
 | 
					                                        }break;
 | 
				
			||||||
                                        
 | 
					                                        
 | 
				
			||||||
                                        case special_hook_save_file:
 | 
					                                        case special_hook_save_file:
 | 
				
			||||||
 | 
					                                        {
 | 
				
			||||||
                                            models->hook_save_file = (Open_File_Hook_Function*)unit->hook.func;
 | 
					                                            models->hook_save_file = (Open_File_Hook_Function*)unit->hook.func;
 | 
				
			||||||
                                        break;
 | 
					                                        }break;
 | 
				
			||||||
                                        
 | 
					                                        
 | 
				
			||||||
                                        case special_hook_command_caller:
 | 
					                                        case special_hook_command_caller:
 | 
				
			||||||
 | 
					                                        {
 | 
				
			||||||
                                            models->command_caller = (Command_Caller_Hook_Function*)unit->hook.func;
 | 
					                                            models->command_caller = (Command_Caller_Hook_Function*)unit->hook.func;
 | 
				
			||||||
                                        break;
 | 
					                                        }break;
 | 
				
			||||||
                                        
 | 
					                                        
 | 
				
			||||||
                                        case special_hook_scroll_rule:
 | 
					                                        case special_hook_scroll_rule:
 | 
				
			||||||
 | 
					                                        {
 | 
				
			||||||
                                            models->scroll_rule = (Scroll_Rule_Function*)unit->hook.func;
 | 
					                                            models->scroll_rule = (Scroll_Rule_Function*)unit->hook.func;
 | 
				
			||||||
                                        break;
 | 
					                                        }break;
 | 
				
			||||||
                                        
 | 
					                                        
 | 
				
			||||||
                                        case special_hook_input_filter:
 | 
					                                        case special_hook_input_filter:
 | 
				
			||||||
 | 
					                                        {
 | 
				
			||||||
                                            models->input_filter = (Input_Filter_Function*)unit->hook.func;
 | 
					                                            models->input_filter = (Input_Filter_Function*)unit->hook.func;
 | 
				
			||||||
                                        break;
 | 
					                                        }break;
 | 
				
			||||||
                                    }
 | 
					                                    }
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
| 
						 | 
					@ -1673,7 +1676,7 @@ App_Step_Sig(app_step){
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        b32 mem_too_small = 0;
 | 
					        b32 mem_too_small = 0;
 | 
				
			||||||
        i32 size = 0;
 | 
					        i32 size = 0;
 | 
				
			||||||
        i32 buffer_size = (32 << 10);
 | 
					        i32 buffer_size = KB(32);
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        Partition *part = &models->mem.part;
 | 
					        Partition *part = &models->mem.part;
 | 
				
			||||||
        Temp_Memory temp = begin_temp_memory(part);
 | 
					        Temp_Memory temp = begin_temp_memory(part);
 | 
				
			||||||
| 
						 | 
					@ -1690,6 +1693,8 @@ App_Step_Sig(app_step){
 | 
				
			||||||
            if (get_canon_name(system, &canon, make_string(buffer, size))){
 | 
					            if (get_canon_name(system, &canon, make_string(buffer, size))){
 | 
				
			||||||
                Editing_File *file = working_set_canon_contains(working_set, canon.name);
 | 
					                Editing_File *file = working_set_canon_contains(working_set, canon.name);
 | 
				
			||||||
                if (file){
 | 
					                if (file){
 | 
				
			||||||
 | 
					                    Application_Links *app = &models->app_links;
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
                    if (file->state.ignore_behind_os == 0){
 | 
					                    if (file->state.ignore_behind_os == 0){
 | 
				
			||||||
                        file_mark_behind_os(file);
 | 
					                        file_mark_behind_os(file);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
| 
						 | 
					@ -2402,6 +2407,7 @@ App_Step_Sig(app_step){
 | 
				
			||||||
                            "Newest features:\n"
 | 
					                            "Newest features:\n"
 | 
				
			||||||
                            "-New support for extended ascii input.\n"
 | 
					                            "-New support for extended ascii input.\n"
 | 
				
			||||||
                            "-Extended ascii encoded in buffers as utf8.\n"
 | 
					                            "-Extended ascii encoded in buffers as utf8.\n"
 | 
				
			||||||
 | 
					                            "-The custom layer now has a 'markers' API for tracking buffer positions across changes.\n"
 | 
				
			||||||
                            "\n"
 | 
					                            "\n"
 | 
				
			||||||
                            "New in alpha 4.0.16:\n"
 | 
					                            "New in alpha 4.0.16:\n"
 | 
				
			||||||
                            "-<alt 2> If the current file is a C++ code file, this opens the matching header.\n""  If the current file is a C++ header, this opens the matching code file.\n"
 | 
					                            "-<alt 2> If the current file is a C++ code file, this opens the matching header.\n""  If the current file is a C++ header, this opens the matching code file.\n"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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){
 | 
					        if (!using_actual_filename && file->canon.name.str != 0){
 | 
				
			||||||
            char space[512];
 | 
					            char space[512];
 | 
				
			||||||
            u32 length = str_size(filename);
 | 
					            u32 length = str_size(filename);
 | 
				
			||||||
            system->get_canonical(filename, length, space, sizeof(space));
 | 
					            u32 canon_length = system->get_canonical(filename, length, space, sizeof(space));
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            char *source_path = file->canon.name.str;
 | 
					            char *source_path = file->canon.name.str;
 | 
				
			||||||
            if (match(space, source_path)){
 | 
					            if (match(space, source_path)){
 | 
				
			||||||
| 
						 | 
					@ -3458,9 +3458,7 @@ apply_history_edit(System_Functions *system, Models *models, Editing_File *file,
 | 
				
			||||||
            view->edit_pos->mark = view->edit_pos->cursor.pos;
 | 
					            view->edit_pos->mark = view->edit_pos->cursor.pos;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Style *style = main_style(models);
 | 
					            Style *style = main_style(models);
 | 
				
			||||||
            view_post_paste_effect(view, 0.333f,
 | 
					            view_post_paste_effect(view, 0.333f, step.edit.start, step.edit.len, style->main.undo_color);
 | 
				
			||||||
                                   step.edit.start, step.edit.len,
 | 
					 | 
				
			||||||
                                   style->main.undo_color);
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else{
 | 
					    else{
 | 
				
			||||||
| 
						 | 
					@ -3469,9 +3467,7 @@ apply_history_edit(System_Functions *system, Models *models, Editing_File *file,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
internal void
 | 
					internal void
 | 
				
			||||||
view_undo_redo(System_Functions *system,
 | 
					view_undo_redo(System_Functions *system, Models *models, View *view, Edit_Stack *stack, Edit_Type expected_type){
 | 
				
			||||||
               Models *models, View *view,
 | 
					 | 
				
			||||||
               Edit_Stack *stack, Edit_Type expected_type){
 | 
					 | 
				
			||||||
    Editing_File *file = view->file_data.file;
 | 
					    Editing_File *file = view->file_data.file;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    Assert(file);
 | 
					    Assert(file);
 | 
				
			||||||
| 
						 | 
					@ -3479,89 +3475,11 @@ view_undo_redo(System_Functions *system,
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    if (stack->edit_count > 0){
 | 
					    if (stack->edit_count > 0){
 | 
				
			||||||
        Edit_Step step = stack->edits[stack->edit_count-1];
 | 
					        Edit_Step step = stack->edits[stack->edit_count-1];
 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        Assert(step.type == expected_type);
 | 
					        Assert(step.type == expected_type);
 | 
				
			||||||
        
 | 
					        apply_history_edit(system, models, file, view, stack, step, hist_normal);
 | 
				
			||||||
        apply_history_edit(system, models,
 | 
					 | 
				
			||||||
                           file, view,
 | 
					 | 
				
			||||||
                           stack, step, hist_normal);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
inline void
 | 
					 | 
				
			||||||
view_undo(System_Functions *system, Models *models, View *view){
 | 
					 | 
				
			||||||
    view_undo_redo(system, models, view, &view->file_data.file->state.undo.undo, ED_UNDO);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
inline void
 | 
					 | 
				
			||||||
view_redo(System_Functions *system, Models *models, View *view){
 | 
					 | 
				
			||||||
    view_undo_redo(system, models, view, &view->file_data.file->state.undo.redo, ED_REDO);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
inline u8*
 | 
					 | 
				
			||||||
write_data(u8 *ptr, void *x, i32 size){
 | 
					 | 
				
			||||||
    memcpy(ptr, x, size);
 | 
					 | 
				
			||||||
    return (ptr + size);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define UseFileHistoryDump 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if UseFileHistoryDump
 | 
					 | 
				
			||||||
internal void
 | 
					 | 
				
			||||||
file_dump_history(System_Functions *system, Mem_Options *mem, Editing_File *file, char *filename){
 | 
					 | 
				
			||||||
    if (!file->state.undo.undo.edits) return;
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    i32 size = 0;
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    size += sizeof(i32);
 | 
					 | 
				
			||||||
    size += file->state.undo.undo.edit_count*sizeof(Edit_Step);
 | 
					 | 
				
			||||||
    size += sizeof(i32);
 | 
					 | 
				
			||||||
    size += file->state.undo.redo.edit_count*sizeof(Edit_Step);
 | 
					 | 
				
			||||||
    size += sizeof(i32);
 | 
					 | 
				
			||||||
    size += file->state.undo.history.edit_count*sizeof(Edit_Step);
 | 
					 | 
				
			||||||
    size += sizeof(i32);
 | 
					 | 
				
			||||||
    size += file->state.undo.children.edit_count*sizeof(Buffer_Edit);
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    size += sizeof(i32);
 | 
					 | 
				
			||||||
    size += file->state.undo.undo.size;
 | 
					 | 
				
			||||||
    size += sizeof(i32);
 | 
					 | 
				
			||||||
    size += file->state.undo.redo.size;
 | 
					 | 
				
			||||||
    size += sizeof(i32);
 | 
					 | 
				
			||||||
    size += file->state.undo.history.size;
 | 
					 | 
				
			||||||
    size += sizeof(i32);
 | 
					 | 
				
			||||||
    size += file->state.undo.children.size;
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    Partition *part = &mem->part;
 | 
					 | 
				
			||||||
    i32 remaining = partition_remaining(part);
 | 
					 | 
				
			||||||
    if (size < remaining){
 | 
					 | 
				
			||||||
        u8 *data, *curs;
 | 
					 | 
				
			||||||
        data = (u8*)part->base + part->pos;
 | 
					 | 
				
			||||||
        curs = data;
 | 
					 | 
				
			||||||
        curs = write_data(curs, &file->state.undo.undo.edit_count, 4);
 | 
					 | 
				
			||||||
        curs = write_data(curs, &file->state.undo.redo.edit_count, 4);
 | 
					 | 
				
			||||||
        curs = write_data(curs, &file->state.undo.history.edit_count, 4);
 | 
					 | 
				
			||||||
        curs = write_data(curs, &file->state.undo.children.edit_count, 4);
 | 
					 | 
				
			||||||
        curs = write_data(curs, &file->state.undo.undo.size, 4);
 | 
					 | 
				
			||||||
        curs = write_data(curs, &file->state.undo.redo.size, 4);
 | 
					 | 
				
			||||||
        curs = write_data(curs, &file->state.undo.history.size, 4);
 | 
					 | 
				
			||||||
        curs = write_data(curs, &file->state.undo.children.size, 4);
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        curs = write_data(curs, file->state.undo.undo.edits, sizeof(Edit_Step)*file->state.undo.undo.edit_count);
 | 
					 | 
				
			||||||
        curs = write_data(curs, file->state.undo.redo.edits, sizeof(Edit_Step)*file->state.undo.redo.edit_count);
 | 
					 | 
				
			||||||
        curs = write_data(curs, file->state.undo.history.edits, sizeof(Edit_Step)*file->state.undo.history.edit_count);
 | 
					 | 
				
			||||||
        curs = write_data(curs, file->state.undo.children.edits, sizeof(Buffer_Edit)*file->state.undo.children.edit_count);
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        curs = write_data(curs, file->state.undo.undo.strings, file->state.undo.undo.size);
 | 
					 | 
				
			||||||
        curs = write_data(curs, file->state.undo.redo.strings, file->state.undo.redo.size);
 | 
					 | 
				
			||||||
        curs = write_data(curs, file->state.undo.history.strings, file->state.undo.history.size);
 | 
					 | 
				
			||||||
        curs = write_data(curs, file->state.undo.children.strings, file->state.undo.children.size);
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        Assert((i32)(curs - data) == size);
 | 
					 | 
				
			||||||
        system->save_file(filename, data, size);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
internal void
 | 
					internal void
 | 
				
			||||||
view_history_step(System_Functions *system, Models *models, View *view, History_Mode history_mode){
 | 
					view_history_step(System_Functions *system, Models *models, View *view, History_Mode history_mode){
 | 
				
			||||||
    Assert(history_mode != hist_normal);
 | 
					    Assert(history_mode != hist_normal);
 | 
				
			||||||
| 
						 | 
					@ -3780,10 +3698,7 @@ view_show_GUI(View *view, View_UI ui){
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
inline void
 | 
					inline void
 | 
				
			||||||
view_show_interactive(System_Functions *system, View *view,
 | 
					view_show_interactive(System_Functions *system, View *view, Interactive_Action action, Interactive_Interaction interaction, String query){
 | 
				
			||||||
                      Interactive_Action action,
 | 
					 | 
				
			||||||
                      Interactive_Interaction interaction,
 | 
					 | 
				
			||||||
                      String query){
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    Models *models = view->persistent.models;
 | 
					    Models *models = view->persistent.models;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
| 
						 | 
					@ -3992,7 +3907,7 @@ kill_file_by_name(System_Functions *system, Models *models, String name){
 | 
				
			||||||
internal void
 | 
					internal void
 | 
				
			||||||
save_file_by_name(System_Functions *system, Models *models, String name){
 | 
					save_file_by_name(System_Functions *system, Models *models, String name){
 | 
				
			||||||
    Editing_File *file = working_set_name_contains(&models->working_set, name);
 | 
					    Editing_File *file = working_set_name_contains(&models->working_set, name);
 | 
				
			||||||
    if (file){
 | 
					    if (file != 0){
 | 
				
			||||||
        save_file(system, models, file);
 | 
					        save_file(system, models, file);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -4069,8 +3984,11 @@ interactive_view_complete(System_Functions *system, View *view, String dest, i32
 | 
				
			||||||
        if (dest.size > 0 && !char_is_slash(dest.str[dest.size-1])){
 | 
					        if (dest.size > 0 && !char_is_slash(dest.str[dest.size-1])){
 | 
				
			||||||
            view_interactive_new_file(system, models, view, dest);
 | 
					            view_interactive_new_file(system, models, view, dest);
 | 
				
			||||||
            view_show_file(view);
 | 
					            view_show_file(view);
 | 
				
			||||||
 | 
					            if (models->hook_new_file != 0){
 | 
				
			||||||
 | 
					                Editing_File *file = view->file_data.file;
 | 
				
			||||||
 | 
					                models->hook_new_file(&models->app_links, file->id.id);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        break;
 | 
					        }break;
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        case IAct_Switch:
 | 
					        case IAct_Switch:
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
| 
						 | 
					@ -4079,14 +3997,12 @@ interactive_view_complete(System_Functions *system, View *view, String dest, i32
 | 
				
			||||||
                view_set_file(view, file, models);
 | 
					                view_set_file(view, file, models);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            view_show_file(view);
 | 
					            view_show_file(view);
 | 
				
			||||||
        }
 | 
					        }break;
 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        case IAct_Kill:
 | 
					        case IAct_Kill:
 | 
				
			||||||
        if (!interactive_try_kill_file_by_name(system, models, view, dest)){
 | 
					        if (!interactive_try_kill_file_by_name(system, models, view, dest)){
 | 
				
			||||||
            view_show_file(view);
 | 
					            view_show_file(view);
 | 
				
			||||||
        }
 | 
					        }break;
 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        case IAct_Sure_To_Close:
 | 
					        case IAct_Sure_To_Close:
 | 
				
			||||||
        switch (user_action){
 | 
					        switch (user_action){
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,8 +10,6 @@ SET FirstError=0
 | 
				
			||||||
SET BUILD_MODE=%1
 | 
					SET BUILD_MODE=%1
 | 
				
			||||||
if "%BUILD_MODE%" == "" (SET BUILD_MODE="/DDEV_BUILD")
 | 
					if "%BUILD_MODE%" == "" (SET BUILD_MODE="/DDEV_BUILD")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
REM if "%BUILD_MODE%" == "/DDEV_BUILD_X86" (call "SETUP_CLX86")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
pushd ..\build
 | 
					pushd ..\build
 | 
				
			||||||
cl %OPTS% ..\code\meta\build.cpp /Zi /Febuild %BUILD_MODE%
 | 
					cl %OPTS% ..\code\meta\build.cpp /Zi /Febuild %BUILD_MODE%
 | 
				
			||||||
if %ERRORLEVEL% neq 0 (set FirstError=1)
 | 
					if %ERRORLEVEL% neq 0 (set FirstError=1)
 | 
				
			||||||
| 
						 | 
					@ -23,6 +21,4 @@ if %ERRORLEVEL% neq 0 (set FirstError=1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:END
 | 
					:END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
REM if "%BUILD_MODE%" == "/DDEV_BUILD" (call "SETUP_CLX64")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
call "ctime" -end 4ed_data.ctm %FirstError%
 | 
					call "ctime" -end 4ed_data.ctm %FirstError%
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										7
									
								
								build.sh
								
								
								
								
							
							
						
						
									
										7
									
								
								build.sh
								
								
								
								
							| 
						 | 
					@ -1,7 +1,12 @@
 | 
				
			||||||
#!/bin/bash
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BUILD_MODE="$1"
 | 
				
			||||||
 | 
					if [ -z "$BUILD_MODE" ]; then
 | 
				
			||||||
 | 
					    BUILD_MODE="-DDEV_BUILD"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
WARNINGS="-Wno-write-strings"
 | 
					WARNINGS="-Wno-write-strings"
 | 
				
			||||||
FLAGS="-D_GNU_SOURCE -fPIC -fpermissive -DDEV_BUILD"
 | 
					FLAGS="-D_GNU_SOURCE -fPIC -fpermissive $BUILD_MODE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
g++ $WARNINGS $FLAGS meta/build.cpp -g -o ../build/build
 | 
					g++ $WARNINGS $FLAGS meta/build.cpp -g -o ../build/build
 | 
				
			||||||
../build/build
 | 
					../build/build
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -443,6 +443,12 @@ Sys_Get_Canonical_Sig(system_get_canonical){
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    if (max == 0){
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    max -= 1;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    while(read_p < filename + len){
 | 
					    while(read_p < filename + len){
 | 
				
			||||||
        if(read_p == filename || read_p[0] == '/'){
 | 
					        if(read_p == filename || read_p[0] == '/'){
 | 
				
			||||||
            if(read_p[1] == '/'){
 | 
					            if(read_p[1] == '/'){
 | 
				
			||||||
| 
						 | 
					@ -477,7 +483,9 @@ Sys_Get_Canonical_Sig(system_get_canonical){
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    return write_p - path;
 | 
					    u32 length = (i32)(write_p - path);
 | 
				
			||||||
 | 
					    buffer[length] = 0;
 | 
				
			||||||
 | 
					    return(length);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
internal
 | 
					internal
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -426,6 +426,7 @@ copy_all(char *source, char *tag, char *folder){
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
zip(char *parent, char *folder, char *file){
 | 
					zip(char *parent, char *folder, char *file){
 | 
				
			||||||
    Temp_Dir temp = pushdir(parent);
 | 
					    Temp_Dir temp = pushdir(parent);
 | 
				
			||||||
 | 
					    printf("PARENT DIR: %s\n", parent);
 | 
				
			||||||
    systemf("zip -r %s %s", file, folder);
 | 
					    systemf("zip -r %s %s", file, folder);
 | 
				
			||||||
    popdir(temp);
 | 
					    popdir(temp);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -239,6 +239,10 @@ build_cl(u32 flags, char *code_path, char *code_file, char *out_path, char *out_
 | 
				
			||||||
"-Wno-write-strings -D_GNU_SOURCE -fPIC "    \
 | 
					"-Wno-write-strings -D_GNU_SOURCE -fPIC "    \
 | 
				
			||||||
"-fno-threadsafe-statics -pthread"
 | 
					"-fno-threadsafe-statics -pthread"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define GCC_X86 "-m32"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define GCC_X64 "-m64"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define GCC_INCLUDES "-I../foreign -I../code"
 | 
					#define GCC_INCLUDES "-I../foreign -I../code"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define GCC_SITE_INCLUDES "-I../../foreign -I../../code"
 | 
					#define GCC_SITE_INCLUDES "-I../../foreign -I../../code"
 | 
				
			||||||
| 
						 | 
					@ -252,6 +256,13 @@ build_gcc(u32 flags, char *code_path, char *code_file, char *out_path, char *out
 | 
				
			||||||
    Build_Line line;
 | 
					    Build_Line line;
 | 
				
			||||||
    init_build_line(&line);
 | 
					    init_build_line(&line);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    if (flags & X86){
 | 
				
			||||||
 | 
					        build_ap(line, GCC_X86);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else{
 | 
				
			||||||
 | 
					        build_ap(line, GCC_X64);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    if (flags & OPTS){
 | 
					    if (flags & OPTS){
 | 
				
			||||||
        build_ap(line, GCC_OPTS);
 | 
					        build_ap(line, GCC_OPTS);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -510,7 +521,7 @@ get_4coder_dist_name(String *zip_file, i32 OS_specific, char *tier, char *ext){
 | 
				
			||||||
#if defined(IS_WINDOWS)
 | 
					#if defined(IS_WINDOWS)
 | 
				
			||||||
        append_sc(zip_file, "win-");
 | 
					        append_sc(zip_file, "win-");
 | 
				
			||||||
#elif defined(IS_LINUX) && defined(IS_64BIT)
 | 
					#elif defined(IS_LINUX) && defined(IS_64BIT)
 | 
				
			||||||
        append_sc(zip_file, "linux-64-");
 | 
					        append_sc(zip_file, "linux-");
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#error No OS string for zips on this OS
 | 
					#error No OS string for zips on this OS
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -571,8 +582,8 @@ package(char *cdir){
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        char *dest_par_dirs[] = {
 | 
					        char *dest_par_dirs[] = {
 | 
				
			||||||
            pack_alpha_dir,
 | 
					            pack_alpha_par_dir,
 | 
				
			||||||
            pack_alpha_x86_dir,
 | 
					            pack_alpha_x86_par_dir,
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        char *zip_dirs[] = {
 | 
					        char *zip_dirs[] = {
 | 
				
			||||||
| 
						 | 
					@ -629,8 +640,8 @@ package(char *cdir){
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        char *dest_par_dirs[] = {
 | 
					        char *dest_par_dirs[] = {
 | 
				
			||||||
            pack_super_dir,
 | 
					            pack_super_par_dir,
 | 
				
			||||||
            pack_super_x86_dir,
 | 
					            pack_super_x86_par_dir,
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        char *zip_dirs[] = {
 | 
					        char *zip_dirs[] = {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1375,6 +1375,7 @@ get_bindings(void *data, int32_t size){
 | 
				
			||||||
    set_hook(context, hook_view_size_change, default_view_adjust);
 | 
					    set_hook(context, hook_view_size_change, default_view_adjust);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    set_open_file_hook(context, default_file_settings);
 | 
					    set_open_file_hook(context, default_file_settings);
 | 
				
			||||||
 | 
					    set_new_file_hook(context, default_new_file);
 | 
				
			||||||
    set_save_file_hook(context, default_file_save);
 | 
					    set_save_file_hook(context, default_file_save);
 | 
				
			||||||
    set_input_filter(context, default_suppress_mouse_filter);
 | 
					    set_input_filter(context, default_suppress_mouse_filter);
 | 
				
			||||||
    set_command_caller(context, default_command_caller);
 | 
					    set_command_caller(context, default_command_caller);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
extensions=".c.cpp.h.hpp.bat.sh";
 | 
					extensions=".c.cpp.h.hpp.bat.sh.4coder";
 | 
				
			||||||
open_recursively=false;
 | 
					open_recursively=true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fkey_command_win[1]  = {"echo build: x64 & build.bat", "*compilation*", true , true };
 | 
					fkey_command_win[1]  = {"echo build: x64 & build.bat", "*compilation*", true , true };
 | 
				
			||||||
fkey_command_win[2]  = {"site\\build.bat", "*compilation*", true , true };
 | 
					fkey_command_win[2]  = {"site\\build.bat", "*compilation*", true , true };
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,8 @@ fkey_command_win[4]  = {"echo build: x86 & build.bat /DDEV_BUILD_X86", "*compila
 | 
				
			||||||
fkey_command_win[5]  = {"..\\misc\\run.bat", "*run*", false, false };
 | 
					fkey_command_win[5]  = {"..\\misc\\run.bat", "*run*", false, false };
 | 
				
			||||||
fkey_command_win[12] = {"package.bat", "*package*", false, true };
 | 
					fkey_command_win[12] = {"package.bat", "*package*", false, true };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fkey_command_linux[1]  = {"./build.sh",    "*compilation*", true , true };
 | 
					fkey_command_linux[1]  = {"echo build: x64 & ./build.sh", "*compilation*", true , true };
 | 
				
			||||||
fkey_command_linux[2]  = {"site/build.sh", "*compilation*", true , true };
 | 
					fkey_command_linux[2]  = {"site/build.sh", "*compilation*", true , true };
 | 
				
			||||||
 | 
					fkey_command_linux[4]  = {"echo build: x86 & ./build.sh -DDEV_BUILD_X86", "*compilation*", true, true };
 | 
				
			||||||
fkey_command_linux[5]  = {"../build/4ed",  "*run*", false, false};
 | 
					fkey_command_linux[5]  = {"../build/4ed",  "*run*", false, false};
 | 
				
			||||||
fkey_command_linux[12] = {"./package.sh",  "*package*", false, true };
 | 
					fkey_command_linux[12] = {"./package.sh",  "*package*", false, true };
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -932,74 +932,9 @@ win32_canonical_ascii_name(char *src, u32 len, char *dst, u32 max){
 | 
				
			||||||
    return(result);
 | 
					    return(result);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if 0
 | 
					 | 
				
			||||||
internal u32
 | 
					 | 
				
			||||||
win32_canonical_ascii_name(char *src, u32 len, char *dst, u32 max){
 | 
					 | 
				
			||||||
    char *wrt = dst;
 | 
					 | 
				
			||||||
    char *wrt_stop = dst + max;
 | 
					 | 
				
			||||||
    char *src_stop = src + len;
 | 
					 | 
				
			||||||
    char c = 0;
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    if (len >= 2 && max > 0){
 | 
					 | 
				
			||||||
        c = src[0];
 | 
					 | 
				
			||||||
        if (c >= 'a' && c <= 'z'){
 | 
					 | 
				
			||||||
            c -= 'a' - 'A';
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        if (c >= 'A' && c <= 'Z' && src[1] == ':'){
 | 
					 | 
				
			||||||
            *(wrt++) = c;
 | 
					 | 
				
			||||||
            if (wrt == wrt_stop) goto fail;
 | 
					 | 
				
			||||||
            *(wrt++) = ':';
 | 
					 | 
				
			||||||
            if (wrt == wrt_stop) goto fail;
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            src += 2;
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            for (; src < src_stop; ++src){
 | 
					 | 
				
			||||||
                c = src[0];
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                if (c >= 'A' && c <= 'Z'){
 | 
					 | 
				
			||||||
                    c += 'a' - 'A';
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                if (c == '/' || c == '\\'){
 | 
					 | 
				
			||||||
                    c = '\\';
 | 
					 | 
				
			||||||
                    if (wrt > dst && wrt[-1] == '\\'){
 | 
					 | 
				
			||||||
                        continue;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    else if (src[1] == '.'){
 | 
					 | 
				
			||||||
                        if (src[2] == '\\' || src[2] == '/'){
 | 
					 | 
				
			||||||
                            src += 1;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        else if (src[2] == '.' && (src[3] == '\\' || src[3] == '/')){
 | 
					 | 
				
			||||||
                            src += 2;
 | 
					 | 
				
			||||||
                            while (wrt > dst && wrt[0] != '\\'){
 | 
					 | 
				
			||||||
                                --wrt;
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                            if (wrt == dst) goto fail;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                *wrt = c;
 | 
					 | 
				
			||||||
                ++wrt;
 | 
					 | 
				
			||||||
                if (wrt == wrt_stop) goto fail;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    if (0){
 | 
					 | 
				
			||||||
        fail:;
 | 
					 | 
				
			||||||
        wrt = dst;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    u32 result = (u32)(wrt - dst);
 | 
					 | 
				
			||||||
    return(result);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
internal
 | 
					internal
 | 
				
			||||||
Sys_Get_Canonical_Sig(system_get_canonical){
 | 
					Sys_Get_Canonical_Sig(system_get_canonical){
 | 
				
			||||||
    i32 result = win32_canonical_ascii_name(filename, len, buffer, max);
 | 
					    u32 result = win32_canonical_ascii_name(filename, len, buffer, max);
 | 
				
			||||||
    return(result);
 | 
					    return(result);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue