Sort child process pumping above input processing
parent
6733a785dd
commit
b6f918cfb2
106
4ed.cpp
106
4ed.cpp
|
@ -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
|
// NOTE(allen): prepare input information
|
||||||
b32 has_keyboard_event = (input->keys.count > 0);
|
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
|
// NOTE(allen): prepare to start executing commands
|
||||||
Command_Data *cmd = &models->command_data;
|
Command_Data *cmd = &models->command_data;
|
||||||
cmd->models = models;
|
cmd->models = models;
|
||||||
|
|
Loading…
Reference in New Issue