Sort child process pumping above input processing

master
Allen Webster 2018-11-18 10:21:17 -08:00
parent 6733a785dd
commit b6f918cfb2
1 changed files with 53 additions and 53 deletions

106
4ed.cpp
View File

@ -1212,6 +1212,59 @@ App_Step_Sig(app_step){
}
}
// NOTE(allen): update child processes
if (input->dt > 0){
Partition *scratch = &models->mem.part;
CLI_List *list = &vars->cli_processes;
Temp_Memory temp = begin_temp_memory(&models->mem.part);
CLI_Process **procs_to_free = push_array(scratch, CLI_Process*, list->count);
u32 proc_free_count = 0;
u32 max = KB(128);
char *dest = push_array(scratch, char, max);
CLI_Process *proc_ptr = list->procs;
for (u32 i = 0; i < list->count; ++i, ++proc_ptr){
Editing_File *file = proc_ptr->out_file;
CLI_Handles *cli = &proc_ptr->cli;
b32 edited_file = false;
u32 amount = 0;
system->cli_begin_update(cli);
if (system->cli_update_step(cli, dest, max, &amount)){
if (file != 0 && amount > 0){
amount = eol_in_place_convert_in(dest, amount);
output_file_append(system, models, file, make_string(dest, amount));
edited_file = true;
}
}
if (system->cli_end_update(cli)){
if (file != 0){
char str_space[256];
String str = make_fixed_width_string(str_space);
append(&str, make_lit_string("exited with code "));
append_int_to_str(&str, cli->exit);
output_file_append(system, models, file, str);
edited_file = true;
}
procs_to_free[proc_free_count++] = proc_ptr;
}
if (proc_ptr->cursor_at_end && file != 0){
file_cursor_to_end(system, models, file);
}
}
for (i32 i = proc_free_count - 1; i >= 0; --i){
cli_list_free_proc(list, procs_to_free[i]);
}
end_temp_memory(temp);
}
// NOTE(allen): prepare input information
b32 has_keyboard_event = (input->keys.count > 0);
{
@ -1333,59 +1386,6 @@ App_Step_Sig(app_step){
}
}
// NOTE(allen): update child processes
if (input->dt > 0){
Partition *scratch = &models->mem.part;
CLI_List *list = &vars->cli_processes;
Temp_Memory temp = begin_temp_memory(&models->mem.part);
CLI_Process **procs_to_free = push_array(scratch, CLI_Process*, list->count);
u32 proc_free_count = 0;
u32 max = KB(128);
char *dest = push_array(scratch, char, max);
CLI_Process *proc_ptr = list->procs;
for (u32 i = 0; i < list->count; ++i, ++proc_ptr){
Editing_File *file = proc_ptr->out_file;
CLI_Handles *cli = &proc_ptr->cli;
b32 edited_file = false;
u32 amount = 0;
system->cli_begin_update(cli);
if (system->cli_update_step(cli, dest, max, &amount)){
if (file != 0 && amount > 0){
amount = eol_in_place_convert_in(dest, amount);
output_file_append(system, models, file, make_string(dest, amount));
edited_file = true;
}
}
if (system->cli_end_update(cli)){
if (file != 0){
char str_space[256];
String str = make_fixed_width_string(str_space);
append(&str, make_lit_string("exited with code "));
append_int_to_str(&str, cli->exit);
output_file_append(system, models, file, str);
edited_file = true;
}
procs_to_free[proc_free_count++] = proc_ptr;
}
if (proc_ptr->cursor_at_end && file != 0){
file_cursor_to_end(system, models, file);
}
}
for (i32 i = proc_free_count - 1; i >= 0; --i){
cli_list_free_proc(list, procs_to_free[i]);
}
end_temp_memory(temp);
}
// NOTE(allen): prepare to start executing commands
Command_Data *cmd = &models->command_data;
cmd->models = models;