
/**
* ===================================================================================================
 *
 *       @file  header.h 
 *      @brief  Funcoes gerais 
 *
 * ===================================================================================================
 */

#include "header.h"

/**
 * @brief  Função para criar a ShareMemory
 * @param  char* NameKey
 * @return ShmMsg* shm_out, int* shm_id_out
 */
ShmMsg* GetSharedMem(char* NameKey, int* shm_id_out)
{	
	ShmMsg *shm_out;
	int shm_id;
	
	key_t key;		/*it's a long int */
	/* generate a random key based on a file name and char */
	key = ftok(NameKey, 'X');
	if(key == -1)
	{
		perror("ftok");
		exit(0);
	}
	
	/* now connect to (or possibly create) the shared memory segment with permission 644 */
	shm_id = shmget(key, sizeof(ShmMsg), 0644 | IPC_CREAT);
	if(shm_id == -1)
	{
		perror("shmget");
		printf("Nao foi possivel criar a ShareMemory de recepcao\n");
		exit(0);
	}
	
	//Localizacao da memoria partilhada de recepcao
	shm_out = shmat(shm_id, (void *) 0, 0);
	if(shm_out == (ShmMsg *) (-1))
	{
		printf("Erro na localizacao da sharememory - Filho"); 
		exit(1);
	}
	
	*shm_id_out=shm_id;
	return shm_out;
}


/**
* @brief  Função para calcular o módulo de um valor
*
* @param  Widget and user data
* @return void
*/
int AbsValue(int valor_in)
{  
    int valor_out;

    if(valor_in>=0)
	valor_out=valor_in;
    else
	valor_out=-valor_in;

    return valor_out;
}