#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
 
#include <termios.h> 
#include <unistd.h>  // for STDIN_FILENO
 
#include <pthread.h>

#define PERIOD_STEP 10
#define PERIOD_MAX 2000
#define PERIOD_MIN 10
 
typedef struct {
   // TODO: add shared variables among threads (e.g., period, counter, quit)
} data_t;
 
pthread_mutex_t mtx;
pthread_cond_t convar;
 
void call_termios(int reset);
 
void* input_thread(void*);
void* output_thread(void*);
void* alarm_thread(void*);
 
 
int main(int argc, char *argv[])
{
   data_t data; // TODO: init data structure
 
   // TODO: declare threads
   // TODO: initializa mutex and condvar

   call_termios(0);
 
   // TODO: create threads and add data as a argument
 
   // TODO: terminate threads
 
   call_termios(1); // restore terminal settings
   return EXIT_SUCCESS;
}
 
void call_termios(int reset)
{
   static struct termios tio, tioOld;
   tcgetattr(STDIN_FILENO, &tio);
   if (reset) {
      tcsetattr(STDIN_FILENO, TCSANOW, &tioOld);
   } else {
      tioOld = tio; //backup 
      cfmakeraw(&tio);
      tcsetattr(STDIN_FILENO, TCSANOW, &tio);
   }
}
 
