#ifndef REG_PROCESOS_H
#define REG_PROCESOS_H

#include <config.h>
#include <sys/types.h>

struct RegProc {
	
	char clave[MAX_CLAVE];
	char ruta[MAX_RUTA];
	char descripcion[MAX_DESC];
	
	int corriendo;
	time_t fecha_ejecucion;
	
	pid_t pid;
	pid_t padre_del_pichon;
	
	char indice_recurso[MAX_RECURSOS_PROCESO][MAX_CLAVE];
	int cant_pedidos;
};

struct _RegProcesos {
	struct RegProc proceso[MAX_PROCESOS];
	int tope;
};

typedef struct _RegProcesos RegProcesos;


////////////// prototipos de funciones /////////////////////////////////////////////
char* ObtenerNomBin	(char *ruta);

void crearTablaProceso(RegProcesos *tabla_procesos);
int crearProceso(char *clave, char *ruta, char *descripcion, RegProcesos *tabla_procesos );
int eliminarProceso(char *clave, RegProcesos *tabla_procesos );

int iniciarProceso(char *clave,pid_t pid,pid_t padre_del_pichon ,RegProcesos *tabla_procesos );
int matarProceso(char *clave, RegProcesos *tabla_procesos );

pid_t getpidProceso(char *clave,RegProcesos *tabla_procesos);
pid_t getpidPadrePichonProceso(char *clave,RegProcesos *tabla_procesos);

int obtener_indice_proceso( char *clave,RegProcesos *tabla_procesos);
int cantidad_recursos_asignados (char *clave,RegProcesos *tabla_procesos);
char* obtenerRutaProceso(char *clave, RegProcesos *tabla_procesos);

void asignar_recurso_a_proceso (char *clave_proc,char* clave_recur, RegProcesos *tabla_procesos);
void desasignar_recurso_a_proceso (char *clave_proc,char* clave_recur, RegProcesos *tabla_procesos);

int corriendoProceso(char *clave, RegProcesos *tabla_procesos);
int existeProceso(char *clave,RegProcesos *tabla_procesos);

int recursoEstaAsignadoAProceso(char *clave_proc, char *clave_recurso, RegProcesos *tabla_procesos);

int consultarProceso(char *clave, RegProcesos *tabla_procesos,char *linea);
int statProcesos(RegProcesos *tabla_procesos);
int imprimirProcesos(RegProcesos *tabla_procesos);

#endif
