set up get changed files
parent
7ada40c1bc
commit
a6033b8418
34
4ed.cpp
34
4ed.cpp
|
@ -390,7 +390,7 @@ COMMAND_DECL(save){
|
||||||
USE_VIEW(view);
|
USE_VIEW(view);
|
||||||
REQ_FILE(file, view);
|
REQ_FILE(file, view);
|
||||||
|
|
||||||
if (!file->is_dummy && file_is_ready(file) && buffer_needs_save(file)){
|
if (!file->is_dummy && file_is_ready(file) && buffer_can_save(file)){
|
||||||
save_file(system, &models->mem, file);
|
save_file(system, &models->mem, file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1680,6 +1680,38 @@ App_Step_Sig(app_step){
|
||||||
dest->size = eol_convert_in(dest->str, clipboard.str, clipboard.size);
|
dest->size = eol_convert_in(dest->str, clipboard.str, clipboard.size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NOTE(allen): check files are up to date
|
||||||
|
{
|
||||||
|
b32 mem_too_small = 0;
|
||||||
|
i32 size = 0;
|
||||||
|
i32 buffer_size = (32 << 10);
|
||||||
|
|
||||||
|
Partition *part = &models->mem.part;
|
||||||
|
Temp_Memory temp = begin_temp_memory(part);
|
||||||
|
char *buffer = push_array(part, char, buffer_size);
|
||||||
|
|
||||||
|
Working_Set *working_set = &models->working_set;
|
||||||
|
|
||||||
|
for (;system->get_file_change(buffer, buffer_size, &mem_too_small, &size);){
|
||||||
|
Assert(!mem_too_small);
|
||||||
|
|
||||||
|
Editing_File_Canon_Name canon;
|
||||||
|
if (get_canon_name(system, &canon, make_string(buffer, size))){
|
||||||
|
Editing_File *file = working_set_canon_contains(working_set, canon.name);
|
||||||
|
if (file){
|
||||||
|
if (file->state.ignore_behind_os == 0){
|
||||||
|
file_mark_behind_os(file);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
file->state.ignore_behind_os = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
end_temp_memory(temp);
|
||||||
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
// NOTE(allen): check files are up to date
|
// NOTE(allen): check files are up to date
|
||||||
if (!input->first_step){
|
if (!input->first_step){
|
||||||
|
|
|
@ -1031,7 +1031,7 @@ DOC_SEE(Buffer_Create_Flag)
|
||||||
if (system->load_file(handle, buffer, size)){
|
if (system->load_file(handle, buffer, size)){
|
||||||
file = working_set_alloc_always(working_set, general);
|
file = working_set_alloc_always(working_set, general);
|
||||||
if (file){
|
if (file){
|
||||||
buffer_bind_file(general, working_set, file, canon.name);
|
buffer_bind_file(system, general, working_set, file, canon.name);
|
||||||
buffer_bind_name(general, working_set, file, fname);
|
buffer_bind_name(general, working_set, file, fname);
|
||||||
init_normal_file(system, models, file, buffer, size);
|
init_normal_file(system, models, file, buffer, size);
|
||||||
fill_buffer_summary(&result, file, cmd);
|
fill_buffer_summary(&result, file, cmd);
|
||||||
|
|
19
4ed_file.cpp
19
4ed_file.cpp
|
@ -144,6 +144,7 @@ struct Editing_File_State{
|
||||||
Text_Effect paste_effect;
|
Text_Effect paste_effect;
|
||||||
|
|
||||||
File_Sync_State sync;
|
File_Sync_State sync;
|
||||||
|
u32 ignore_behind_os;
|
||||||
|
|
||||||
File_Edit_Positions edit_pos_space[16];
|
File_Edit_Positions edit_pos_space[16];
|
||||||
File_Edit_Positions *edit_poss[16];
|
File_Edit_Positions *edit_poss[16];
|
||||||
|
@ -769,6 +770,18 @@ buffer_needs_save(Editing_File *file){
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline b32
|
||||||
|
buffer_can_save(Editing_File *file){
|
||||||
|
b32 result = 0;
|
||||||
|
if (!file->settings.unimportant){
|
||||||
|
if (file->state.sync == SYNC_UNSAVED ||
|
||||||
|
file->state.sync == SYNC_BEHIND_OS){
|
||||||
|
result = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
inline b32
|
inline b32
|
||||||
file_is_ready(Editing_File *file){
|
file_is_ready(Editing_File *file){
|
||||||
b32 result = 0;
|
b32 result = 0;
|
||||||
|
@ -892,7 +905,7 @@ buffer_get_new_name(Working_Set *working_set, Editing_File_Name *name, char *fil
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
buffer_bind_file(General_Memory *general, Working_Set *working_set,
|
buffer_bind_file(System_Functions *system, General_Memory *general, Working_Set *working_set,
|
||||||
Editing_File *file, String canon_filename){
|
Editing_File *file, String canon_filename){
|
||||||
Assert(file->name.live_name.size == 0 &&
|
Assert(file->name.live_name.size == 0 &&
|
||||||
file->name.source_path.size == 0 &&
|
file->name.source_path.size == 0 &&
|
||||||
|
@ -901,17 +914,19 @@ buffer_bind_file(General_Memory *general, Working_Set *working_set,
|
||||||
|
|
||||||
file->canon.name = make_fixed_width_string(file->canon.name_);
|
file->canon.name = make_fixed_width_string(file->canon.name_);
|
||||||
copy(&file->canon.name, canon_filename);
|
copy(&file->canon.name, canon_filename);
|
||||||
|
system->add_listener(file->canon.name_);
|
||||||
b32 result = working_set_canon_add(general, working_set, file, file->canon.name);
|
b32 result = working_set_canon_add(general, working_set, file, file->canon.name);
|
||||||
Assert(result); AllowLocal(result);
|
Assert(result); AllowLocal(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
buffer_unbind_file(Working_Set *working_set, Editing_File *file){
|
buffer_unbind_file(System_Functions *system, Working_Set *working_set, Editing_File *file){
|
||||||
Assert(file->name.live_name.size == 0 &&
|
Assert(file->name.live_name.size == 0 &&
|
||||||
file->name.source_path.size == 0 &&
|
file->name.source_path.size == 0 &&
|
||||||
file->name.extension.size == 0);
|
file->name.extension.size == 0);
|
||||||
Assert(file->canon.name.size != 0);
|
Assert(file->canon.name.size != 0);
|
||||||
|
|
||||||
|
system->remove_listener(file->canon.name_);
|
||||||
working_set_canon_remove(working_set, file->canon.name);
|
working_set_canon_remove(working_set, file->canon.name);
|
||||||
file->canon.name.size = 0;
|
file->canon.name.size = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -788,10 +788,12 @@ file_synchronize_times(System_Functions *system, Editing_File *file){
|
||||||
internal b32
|
internal b32
|
||||||
save_file_to_name(System_Functions *system, Mem_Options *mem, Editing_File *file, char *filename){
|
save_file_to_name(System_Functions *system, Mem_Options *mem, Editing_File *file, char *filename){
|
||||||
b32 result = 0;
|
b32 result = 0;
|
||||||
|
b32 using_actual_filename = 0;
|
||||||
|
|
||||||
if (!filename){
|
if (!filename){
|
||||||
terminate_with_null(&file->canon.name);
|
terminate_with_null(&file->canon.name);
|
||||||
filename = file->canon.name.str;
|
filename = file->canon.name.str;
|
||||||
|
using_actual_filename = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filename){
|
if (filename){
|
||||||
|
@ -832,6 +834,9 @@ save_file_to_name(System_Functions *system, Mem_Options *mem, Editing_File *file
|
||||||
}
|
}
|
||||||
|
|
||||||
result = system->save_file(filename, data, size);
|
result = system->save_file(filename, data, size);
|
||||||
|
if (result && using_actual_filename){
|
||||||
|
file->state.ignore_behind_os = 1;
|
||||||
|
}
|
||||||
|
|
||||||
file_mark_clean(file);
|
file_mark_clean(file);
|
||||||
|
|
||||||
|
@ -861,9 +866,9 @@ buffer_link_to_new_file(System_Functions *system, General_Memory *general, Worki
|
||||||
if (get_canon_name(system, &canon_name, filename)){
|
if (get_canon_name(system, &canon_name, filename)){
|
||||||
buffer_unbind_name(working_set, file);
|
buffer_unbind_name(working_set, file);
|
||||||
if (file->canon.name.size != 0){
|
if (file->canon.name.size != 0){
|
||||||
buffer_unbind_file(working_set, file);
|
buffer_unbind_file(system, working_set, file);
|
||||||
}
|
}
|
||||||
buffer_bind_file(general, working_set, file, canon_name.name);
|
buffer_bind_file(system, general, working_set, file, canon_name.name);
|
||||||
buffer_bind_name(general, working_set, file, filename);
|
buffer_bind_name(general, working_set, file, filename);
|
||||||
result = 1;
|
result = 1;
|
||||||
}
|
}
|
||||||
|
@ -3228,7 +3233,7 @@ view_open_file(System_Functions *system, Models *models, View *view, String file
|
||||||
|
|
||||||
file = working_set_alloc_always(working_set, general);
|
file = working_set_alloc_always(working_set, general);
|
||||||
|
|
||||||
buffer_bind_file(general, working_set, file, canon_name.name);
|
buffer_bind_file(system, general, working_set, file, canon_name.name);
|
||||||
buffer_bind_name(general, working_set, file, filename);
|
buffer_bind_name(general, working_set, file, filename);
|
||||||
|
|
||||||
i32 size = system->load_size(handle);
|
i32 size = system->load_size(handle);
|
||||||
|
@ -3294,7 +3299,7 @@ view_interactive_new_file(System_Functions *system, Models *models, View *view,
|
||||||
|
|
||||||
file = working_set_alloc_always(working_set, general);
|
file = working_set_alloc_always(working_set, general);
|
||||||
|
|
||||||
buffer_bind_file(general, working_set, file, canon_name.name);
|
buffer_bind_file(system, general, working_set, file, canon_name.name);
|
||||||
buffer_bind_name(general, working_set, file, filename);
|
buffer_bind_name(general, working_set, file, filename);
|
||||||
|
|
||||||
init_normal_file(system, models, file, 0, 0);
|
init_normal_file(system, models, file, 0, 0);
|
||||||
|
@ -3313,7 +3318,7 @@ kill_file(System_Functions *system, Models *models, Editing_File *file){
|
||||||
|
|
||||||
if (file && !file->settings.never_kill){
|
if (file && !file->settings.never_kill){
|
||||||
buffer_unbind_name(working_set, file);
|
buffer_unbind_name(working_set, file);
|
||||||
buffer_unbind_file(working_set, file);
|
buffer_unbind_file(system, working_set, file);
|
||||||
file_close(system, &models->mem.general, file);
|
file_close(system, &models->mem.general, file);
|
||||||
working_set_free_file(working_set, file);
|
working_set_free_file(working_set, file);
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,9 @@ typedef Sys_Add_Listener_Sig(System_Add_Listener);
|
||||||
#define Sys_Remove_Listener_Sig(name) b32 name(char *filename)
|
#define Sys_Remove_Listener_Sig(name) b32 name(char *filename)
|
||||||
typedef Sys_Remove_Listener_Sig(System_Remove_Listener);
|
typedef Sys_Remove_Listener_Sig(System_Remove_Listener);
|
||||||
|
|
||||||
|
#define Sys_Get_File_Change_Sig(name) i32 name(char *buffer, i32 max, b32 *mem_too_small, i32 *required_size)
|
||||||
|
typedef Sys_Get_File_Change_Sig(System_Get_File_Change);
|
||||||
|
|
||||||
#define Sys_Load_Handle_Sig(name) b32 name(char *filename, Plat_Handle *handle_out)
|
#define Sys_Load_Handle_Sig(name) b32 name(char *filename, Plat_Handle *handle_out)
|
||||||
typedef Sys_Load_Handle_Sig(System_Load_Handle);
|
typedef Sys_Load_Handle_Sig(System_Load_Handle);
|
||||||
|
|
||||||
|
@ -209,11 +212,12 @@ typedef INTERNAL_Sys_Debug_Message_Sig(INTERNAL_System_Debug_Message);
|
||||||
|
|
||||||
struct System_Functions{
|
struct System_Functions{
|
||||||
|
|
||||||
// files (tracked api): 9
|
// files (tracked api): 10
|
||||||
System_Set_File_List *set_file_list;
|
System_Set_File_List *set_file_list;
|
||||||
System_Get_Canonical *get_canonical;
|
System_Get_Canonical *get_canonical;
|
||||||
System_Add_Listener *add_listener;
|
System_Add_Listener *add_listener;
|
||||||
System_Remove_Listener *remove_listener;
|
System_Remove_Listener *remove_listener;
|
||||||
|
System_Get_File_Change *get_file_change;
|
||||||
System_Load_Handle *load_handle;
|
System_Load_Handle *load_handle;
|
||||||
System_Load_Size *load_size;
|
System_Load_Size *load_size;
|
||||||
System_Load_File *load_file;
|
System_Load_File *load_file;
|
||||||
|
|
|
@ -26,7 +26,7 @@ popd
|
||||||
pushd ..\build
|
pushd ..\build
|
||||||
|
|
||||||
REM call "%CODE_DIR%\buildsuper.bat" ..\code\4coder_default_bindings.cpp
|
REM call "%CODE_DIR%\buildsuper.bat" ..\code\4coder_default_bindings.cpp
|
||||||
REM call "%CODE_DIR%\buildsuper.bat" ..\code\internal_4coder_tests.cpp
|
call "%CODE_DIR%\buildsuper.bat" ..\code\internal_4coder_tests.cpp
|
||||||
REM call "%CODE_DIR%\buildsuper.bat" ..\code\power\4coder_casey.cpp
|
REM call "%CODE_DIR%\buildsuper.bat" ..\code\power\4coder_casey.cpp
|
||||||
REM call "%CODE_DIR%\buildsuper.bat" ..\4vim\4coder_chronal.cpp
|
REM call "%CODE_DIR%\buildsuper.bat" ..\4vim\4coder_chronal.cpp
|
||||||
if %ERRORLEVEL% neq 0 (set FirstError=1)
|
if %ERRORLEVEL% neq 0 (set FirstError=1)
|
||||||
|
|
|
@ -684,7 +684,7 @@ expand_track_system_listeners(File_Track_System *system, void *mem, int32_t size
|
||||||
}
|
}
|
||||||
|
|
||||||
File_Track_Result
|
File_Track_Result
|
||||||
get_change_event(File_Track_System *system, char *buffer, int32_t max){
|
get_change_event(File_Track_System *system, char *buffer, int32_t max, int32_t *size){
|
||||||
File_Track_Result result = FileTrack_NoMoreEvents;
|
File_Track_Result result = FileTrack_NoMoreEvents;
|
||||||
File_Track_Vars *vars = to_vars_(system);
|
File_Track_Vars *vars = to_vars_(system);
|
||||||
|
|
||||||
|
@ -722,7 +722,9 @@ get_change_event(File_Track_System *system, char *buffer, int32_t max){
|
||||||
info = (FILE_NOTIFY_INFORMATION*)(listener_buffer + offset);
|
info = (FILE_NOTIFY_INFORMATION*)(listener_buffer + offset);
|
||||||
|
|
||||||
int32_t len = info->FileNameLength / 2;
|
int32_t len = info->FileNameLength / 2;
|
||||||
if (listener.dir_name_len + 1 + len < max){
|
int32_t req_size = listener.dir_name_len + 1 + len;
|
||||||
|
*size = req_size;
|
||||||
|
if (req_size < max){
|
||||||
int32_t pos = 0;
|
int32_t pos = 0;
|
||||||
char *src = listener.dir_name;
|
char *src = listener.dir_name;
|
||||||
for (int32_t i = 0; src[i]; ++i, ++pos){
|
for (int32_t i = 0; src[i]; ++i, ++pos){
|
||||||
|
@ -734,7 +736,6 @@ get_change_event(File_Track_System *system, char *buffer, int32_t max){
|
||||||
for (int32_t i = 0; i < len; ++i, ++pos){
|
for (int32_t i = 0; i < len; ++i, ++pos){
|
||||||
buffer[pos] = (char)info->FileName[i];
|
buffer[pos] = (char)info->FileName[i];
|
||||||
}
|
}
|
||||||
buffer[pos] = 0;
|
|
||||||
|
|
||||||
result = FileTrack_Good;
|
result = FileTrack_Good;
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,6 @@ Allen Webster
|
||||||
// These tests do not verify the correctness of the output.
|
// These tests do not verify the correctness of the output.
|
||||||
|
|
||||||
CUSTOM_COMMAND_SIG(load_lots_of_files){
|
CUSTOM_COMMAND_SIG(load_lots_of_files){
|
||||||
|
|
||||||
// NOTE(allen): This timing restriction is based on 4GHz and 60fps
|
// NOTE(allen): This timing restriction is based on 4GHz and 60fps
|
||||||
// 4G / 60 ~= 70M Reserving most of that time for rendering and hopefully idling
|
// 4G / 60 ~= 70M Reserving most of that time for rendering and hopefully idling
|
||||||
// I set the goal of 10M for all tests.
|
// I set the goal of 10M for all tests.
|
||||||
|
|
|
@ -1210,6 +1210,26 @@ Sys_Remove_Listener_Sig(system_remove_listener){
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal
|
||||||
|
Sys_Get_File_Change_Sig(system_get_file_change){
|
||||||
|
i32 result = 0;
|
||||||
|
|
||||||
|
i32 size = 0;
|
||||||
|
i32 get_result = get_change_event(&win32vars.track, buffer, max, &size);
|
||||||
|
|
||||||
|
*required_size = size;
|
||||||
|
*mem_too_small = 0;
|
||||||
|
if (get_result == FileTrack_Good){
|
||||||
|
result = 1;
|
||||||
|
}
|
||||||
|
else if (get_result == FileTrack_MemoryTooSmall){
|
||||||
|
*mem_too_small = 1;
|
||||||
|
result = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
internal
|
internal
|
||||||
Sys_Load_Handle_Sig(system_load_handle){
|
Sys_Load_Handle_Sig(system_load_handle){
|
||||||
b32 result = 0;
|
b32 result = 0;
|
||||||
|
@ -1664,6 +1684,7 @@ Win32LoadSystemCode(){
|
||||||
win32vars.system.get_canonical = system_get_canonical;
|
win32vars.system.get_canonical = system_get_canonical;
|
||||||
win32vars.system.add_listener = system_add_listener;
|
win32vars.system.add_listener = system_add_listener;
|
||||||
win32vars.system.remove_listener = system_remove_listener;
|
win32vars.system.remove_listener = system_remove_listener;
|
||||||
|
win32vars.system.get_file_change = system_get_file_change;
|
||||||
win32vars.system.load_handle = system_load_handle;
|
win32vars.system.load_handle = system_load_handle;
|
||||||
win32vars.system.load_size = system_load_size;
|
win32vars.system.load_size = system_load_size;
|
||||||
win32vars.system.load_file = system_load_file;
|
win32vars.system.load_file = system_load_file;
|
||||||
|
|
Loading…
Reference in New Issue