#ifndef PROGRAM_H
#define PROGRAM_H

/* Return 0 if you want to continue reading. @data is null-terminated */
typedef int (*ProgramOutputCallback)(char *data, int size, void *userdata);

int program_buffer_write_callback(char *data, int size, void *userdata);

/*
    @args need to have at least 2 arguments. The first which is the program name
    and the last which is NULL, which indicates end of args.
*/
int program_exec(const char **args, ProgramOutputCallback output_callback, void *userdata);
int program_exec_async(const char **args, int *process_id, int *stdin_file, int *stdout_file);
/* If stdin_file is -1 or stdout_file is -1 then they are not used */
int program_wait_until_exit(int process_id, int stdin_file, int stdout_file, ProgramOutputCallback output_callback, void *userdata);

#endif