fixes to new save system
parent
fc76531ca1
commit
7ada40c1bc
|
@ -985,17 +985,26 @@ DOC_SEE(Buffer_Create_Flag)
|
||||||
String fname = make_string(filename, filename_len);
|
String fname = make_string(filename, filename_len);
|
||||||
|
|
||||||
Temp_Memory temp = begin_temp_memory(part);
|
Temp_Memory temp = begin_temp_memory(part);
|
||||||
|
|
||||||
if (filename != 0){
|
if (filename != 0){
|
||||||
Editing_File_Canon_Name canon;
|
Editing_File *file = 0;
|
||||||
|
b32 do_new_file = false;
|
||||||
|
Plat_Handle handle = {0};
|
||||||
|
|
||||||
|
Editing_File_Canon_Name canon = {0};
|
||||||
if (get_canon_name(system, &canon, fname)){
|
if (get_canon_name(system, &canon, fname)){
|
||||||
Editing_File *file = working_set_canon_contains(working_set, canon.name);
|
file = working_set_canon_contains(working_set, canon.name);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
do_new_file = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (file == 0){
|
if (!file){
|
||||||
b32 do_new_file = false;
|
file = working_set_name_contains(working_set, fname);
|
||||||
|
}
|
||||||
Plat_Handle handle = {0};
|
|
||||||
|
|
||||||
|
if (!file){
|
||||||
|
if (!do_new_file){
|
||||||
if (flags & BufferCreate_AlwaysNew){
|
if (flags & BufferCreate_AlwaysNew){
|
||||||
do_new_file = true;
|
do_new_file = true;
|
||||||
}
|
}
|
||||||
|
@ -1004,49 +1013,49 @@ DOC_SEE(Buffer_Create_Flag)
|
||||||
do_new_file = true;
|
do_new_file = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!do_new_file){
|
if (!do_new_file){
|
||||||
Assert(!handle_equal(handle, handle_zero()));
|
Assert(!handle_equal(handle, handle_zero()));
|
||||||
|
|
||||||
i32 size = system->load_size(handle);
|
i32 size = system->load_size(handle);
|
||||||
b32 in_general_mem = false;
|
b32 in_general_mem = false;
|
||||||
char *buffer = push_array(part, char, size);
|
char *buffer = push_array(part, char, size);
|
||||||
|
|
||||||
if (buffer == 0){
|
if (buffer == 0){
|
||||||
buffer = (char*)general_memory_allocate(general, size);
|
buffer = (char*)general_memory_allocate(general, size);
|
||||||
Assert(buffer != 0);
|
Assert(buffer != 0);
|
||||||
in_general_mem = true;
|
in_general_mem = true;
|
||||||
}
|
|
||||||
|
|
||||||
if (system->load_file(handle, buffer, size)){
|
|
||||||
file = working_set_alloc_always(working_set, general);
|
|
||||||
if (file){
|
|
||||||
buffer_bind_file(general, working_set, file, canon.name);
|
|
||||||
buffer_bind_name(general, working_set, file, fname);
|
|
||||||
init_normal_file(system, models, file, buffer, size);
|
|
||||||
fill_buffer_summary(&result, file, cmd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (in_general_mem){
|
|
||||||
general_memory_free(general, buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
system->load_close(handle);
|
|
||||||
}
|
}
|
||||||
else{
|
|
||||||
|
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_name(general, working_set, file, fname);
|
buffer_bind_name(general, working_set, file, fname);
|
||||||
init_normal_file(system, models, file, 0, 0);
|
init_normal_file(system, models, file, buffer, size);
|
||||||
fill_buffer_summary(&result, file, cmd);
|
fill_buffer_summary(&result, file, cmd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (in_general_mem){
|
||||||
|
general_memory_free(general, buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
system->load_close(handle);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
fill_buffer_summary(&result, file, cmd);
|
file = working_set_alloc_always(working_set, general);
|
||||||
|
if (file){
|
||||||
|
buffer_bind_name(general, working_set, file, fname);
|
||||||
|
init_normal_file(system, models, file, 0, 0);
|
||||||
|
fill_buffer_summary(&result, file, cmd);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
fill_buffer_summary(&result, file, cmd);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
end_temp_memory(temp);
|
end_temp_memory(temp);
|
||||||
|
|
||||||
|
|
|
@ -1022,14 +1022,12 @@ file_create_from_string(System_Functions *system, Models *models,
|
||||||
|
|
||||||
i32 scratch_size = partition_remaining(part);
|
i32 scratch_size = partition_remaining(part);
|
||||||
Assert(scratch_size > 0);
|
Assert(scratch_size > 0);
|
||||||
|
|
||||||
b32 init_success = buffer_end_init(&init, part->base + part->pos, scratch_size);
|
b32 init_success = buffer_end_init(&init, part->base + part->pos, scratch_size);
|
||||||
AllowLocal(init_success); Assert(init_success);
|
AllowLocal(init_success); Assert(init_success);
|
||||||
|
|
||||||
if (buffer_size(&file->state.buffer) < val.size){
|
if (buffer_size(&file->state.buffer) < val.size){
|
||||||
file->settings.dos_write_mode = 1;
|
file->settings.dos_write_mode = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
file_synchronize_times(system, file);
|
file_synchronize_times(system, file);
|
||||||
|
|
||||||
i16 font_id = models->global_font.font_id;
|
i16 font_id = models->global_font.font_id;
|
||||||
|
@ -1037,6 +1035,7 @@ file_create_from_string(System_Functions *system, Models *models,
|
||||||
Render_Font *font = get_font_info(font_set, font_id)->font;
|
Render_Font *font = get_font_info(font_set, font_id)->font;
|
||||||
float *advance_data = 0;
|
float *advance_data = 0;
|
||||||
if (font) advance_data = font->advance_data;
|
if (font) advance_data = font->advance_data;
|
||||||
|
|
||||||
file_measure_starts_widths(system, general, &file->state.buffer, advance_data);
|
file_measure_starts_widths(system, general, &file->state.buffer, advance_data);
|
||||||
|
|
||||||
file->settings.read_only = read_only;
|
file->settings.read_only = read_only;
|
||||||
|
|
|
@ -1281,7 +1281,7 @@ Sys_Save_File_Sig(system_save_file){
|
||||||
GENERIC_WRITE,
|
GENERIC_WRITE,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
CREATE_NEW,
|
CREATE_ALWAYS,
|
||||||
FILE_ATTRIBUTE_NORMAL,
|
FILE_ATTRIBUTE_NORMAL,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
|
@ -1298,6 +1298,8 @@ Sys_Save_File_Sig(system_save_file){
|
||||||
}
|
}
|
||||||
written_total += written_size;
|
written_total += written_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CloseHandle(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(result);
|
return(result);
|
||||||
|
|
Loading…
Reference in New Issue