/*
 * Mr. 4th Dimention - Allen Webster
 *
 * 17.07.2017
 *
 * CLI handling code.
 *
 */

// TOP

inline CLI_List
make_cli_list(Partition *part, u32 max){
    CLI_List list = {0};
    partition_align(part, 8);
    list.procs = push_array(part, CLI_Process, max);
    list.max = max;
    return(list);
}

inline b32
cli_list_call(System_Functions *system, CLI_List *list, char *path, char *command, Editing_File *file, b32 cursor_at_end){
    b32 result = false;
    
    if (list->count < list->max){
        CLI_Process *proc = &list->procs[list->count++];
        proc->out_file = file;
        proc->cursor_at_end = cursor_at_end;
        result = system->cli_call(path, command, &proc->cli);
        if (!result){
            --list->count;
        }
    }
    
    return(result);
}

inline void
cli_list_free_proc(CLI_List *list, CLI_Process *proc){
    Assert(proc >= list->procs);
    Assert(proc < list->procs + list->count);
    *proc = list->procs[--list->count];
}

inline b32
cli_list_has_space(CLI_List *list){
    b32 has_space = (list->count < list->max);
    return(has_space);
}

// BOTTOM