#include <stdio.h>
#include <stdlib.h>


//dadas as cores vizinhas de uma transição de faixa em slides consecutivos (4 cores)
//essa é a função que devolve a linha e a coluna da tabela a ser consultada
//para obter a posição da transição de faixa na codificação
void VerificaCodigo(int base, int coresq1, int cordir1, int coresq2, int cordir2, int *linha, int *coluna)
{
	int aux1, aux2;
	
	*linha = (coresq2 * base) + coresq1;

	aux1 = (cordir1 - coresq1);
	aux2 = (cordir2 - coresq2);

	if (aux1>0)
		aux1 = aux1 - 1;
	else
		aux1 = ((base-1) + aux1);
	
	if (aux2>0)
		aux2 = aux2 - 1;
	else
		aux2 = ((base-1) + aux2);


	*coluna = ((aux2) * (base-1)) + (aux1);
}


//aqui a tabela de decodificação é construída
int ConstroiTabelaDecode(unsigned char *vetcod, int maxfaixas, int base, int **matrix)
{
    int i;
    int coresq1_t, cordir1_t, coresq2_t, cordir2_t;
    int *linha, *coluna;

    linha = (int *)malloc(sizeof(int));
    coluna = (int *)malloc(sizeof(int));

    for (i=0; i<(maxfaixas-1); i++) 
    {
		coresq2_t = ((int) vetcod[i]) - 1;
		cordir2_t = ((int) vetcod[i+1]) - 1;
		coresq1_t = ((int) vetcod[i+maxfaixas]) - 1;
		cordir1_t = ((int) vetcod[i+maxfaixas+1]) - 1;

		VerificaCodigo(base, coresq1_t, cordir1_t, coresq2_t, cordir2_t, linha, coluna);

		matrix[*linha][*coluna] = i+1;
    }

    
    return 0;
    
}
    
//int main()
//{
//    int i,j;
//    int **matrix;
//    int base = 6;
//    
//    matrix = (int **)malloc(SQR(base)*sizeof(int *));
//	    
//    for(i=0;i<SQR(base);i++)
//	  matrix[i] = (int *)malloc(SQR(base-1)*sizeof(int));
//    
//    ConstroiTabelaDecode(slides62, MAX_FAIXAS62, base, matrix);
//    
//    for(i=0;i<SQR(base);i++){
//		for(j=0;j<SQR(base-1);j++)
//	      printf("%2d ", matrix[i][j]);
//      printf("\n");
//    }
//    
//    for(i=0;i<SQR(base);i++) free(matrix[i]);
//    free(matrix);
//
//    return 0;
//}
