#include "plot.h"


void * plot(void * arg){
    pid_t pid;
    int pfd[2];
    int i, status;
    FILE * sd;

    // Creacion de pipas
    if (pipe(pfd) < 0) {
        perror("pipe");
        exit(1);
    }

   // Creacion de un proceso hijo 
    if ((pid = fork()) < 0) {
        perror("fork");
        exit(1);
    }

   // Proceso hijo ejecuta matlab u octave. 
    if (pid == 0) {
        int junk;
        
        dup2(pfd[0], 0); /* seteo de la pipa como entrada estandar */
        close(pfd[1]);  /* Se cierra el otro extremo */

        //Se ignora cualquer respuesta o error del programa
        junk = open("/dev/null", O_WRONLY);
        dup2(junk, 1); 
        dup2(junk, 2);  

        //Ejecucion de matlab u octave segun se pueda
        //execlp("octave", "octave","-i",(char *) 0); 
	execlp("matlab", "matlab","-nodesktop",(char *) 0);
        perror("exec");
        exit(-1);
    }
    

    close(pfd[0]); /* Cierra el extremo de la pipa usada por el hijo */ 
    sd = fdopen(pfd[1], "w");  /* Abre las pipas como descriptores de archivo para su lectura/escritura  */ 

	
    while(1){
	pthread_mutex_lock(&ncon_lock); /* Entrada a zona critica (ncon) */ 
	pthread_cond_wait(&plot_again, &ncon_lock); /* Espera por la señal en plot_again enviada por main */ 

	//Comandos enviados para actualizar el grafico
        fprintf(sd, "y= [");
        for ( i= 0; i< MAX_TIME/SCAN_INTERVAL ; i++)
          fprintf(sd, "%d ", ncon[i]);
        fprintf(sd, "]\n");
        fflush(sd);

        fprintf(sd, "x= [");
        for ( i= 0; i< MAX_TIME/SCAN_INTERVAL ; i++)
          fprintf(sd, "%d ", t[i]);
        fprintf(sd, "]\n");
        fflush(sd);
        fprintf(sd, "plot(x,y);axis([min(x) max(x) 0 max(y)*1.1]);\n");
        fflush(sd);

	pthread_mutex_unlock(&ncon_lock); /* Liberacion de la zona critia */ 
    }


    waitpid(pid, &status, 0);
    fclose(sd);
}

