/********************************************************************************
*********************************************************************************
*Projeto:	server
*Arquivo:	language.c
*Descrição:	Programa responsável por ler o arquivo de idiomas e montar a estrutura com os textos
*Data da Criação:	01/06/2006

*Revisão:	1.0
*Data:		01/06/2006
*Modificações:

**********************************************************************************
**********************************************************************************

Funções e procedimentos utilizados no arquivo

void TiraCRLF(char *str_aux)
int SeekCfgString(char *my_str,FILE *fp)
int SeekFieldCfgString(char *field, char *my_str, FILE *fp)
void ReadCfgString(char *field, char *scr, char *dest, char *padrao, FILE *fp)
void ReadCfgInteger(char *field, char *scr, int *dest, int padrao, FILE *fp)
int SetLanguage(char *filename,TEXT *texto)

********************************************************************************/

/*-------------------------------------------------------------------------------
			INCLUDES
-------------------------------------------------------------------------------*/

#include <string.h>
#include <stdio.h>
#include "language.h"

/********************************************************************************
>>>> TiraCRLF(char *str_aux) <<<<
---------------------------------------------------------------------------------
*Função:	void TiraCRLF(char *str_aux)
*Descrição:	Retira a terminação da string

*Entrada:	string
*Saída:		Nenhuma

*Data da Criação:	01/06/2006
*Modificações:

*Obs:

********************************************************************************/

void TiraCRLF(char *str_aux)
{
	if (str_aux[0] == 0)
		return;
	while ((str_aux[strlen(str_aux)-1] == '\n') || (str_aux[strlen(str_aux)-1] == '\r'))
	{
		str_aux[strlen(str_aux)-1]=0;
		if (str_aux[0] == 0)
			return;
	}
}

/********************************************************************************
>>>> SeekCfgString(char *my_str,FILE *fp)) <<<<
---------------------------------------------------------------------------------
*Função:	int SeekCfgString(char *my_str,FILE *fp)
*Descrição:	Verifica se a string é a procurada

*Entrada:	string procurada
		fp: descritor do arquivo
*Saída:		1 - se encontrada
		0 - se não encontrada

*Data da Criação:	01/06/2006
*Modificações:

*Obs:

********************************************************************************/

int SeekCfgString(char *my_str,FILE *fp)
{
	char str_aux[255];
	fseek(fp,0,SEEK_SET);
	
	while (fgets(str_aux,255,fp) !=NULL)
	{
		TiraCRLF(str_aux);
		if (strcmp(my_str,str_aux) == 0)
			return 1;
	}
	return 0;
}

/********************************************************************************
>>>> SeekFieldCfgString(char *field, char *my_str, FILE *fp) <<<<
---------------------------------------------------------------------------------
*Função:	int SeekFieldCfgString(char *field, char *my_str, FILE *fp)
*Descrição:	Captura a string que segue o campo

*Entrada:	String com o nome do campo
		fp: descritor do arquivo
*Saída:		my_str: string capturada no arquivo
		retorno:
			0 se não encontrou o campo
			1 se encontrou o campo

*Data da Criação:	01/06/2006
*Modificações:

*Obs:

********************************************************************************/

int SeekFieldCfgString(char *field, char *my_str, FILE *fp)
{
	char str_aux[255];
	
	if (!(SeekCfgString(field,fp)))
		return 0;
	while ((fgets(str_aux,255,fp) != 0) && (str_aux[0] != '['))
	{
		TiraCRLF(str_aux);
		if (strcmp(my_str,str_aux) == 0)
			return 1;
	}
	return 0;
}

/********************************************************************************
>>>> void ReadCfgString(char *field, char *scr, char *dest, char *padrao, FILE *fp) <<<<
---------------------------------------------------------------------------------
*Função:	void ReadCfgString(char *field, char *scr, char *dest, char *padrao, FILE *fp)
*Descrição:	Procura no arquivo uma string com o campo

*Entrada:	field: campo
		scr: local da string
		padrao: string padrão, caso nao encontre a procurada
		fp: descritor do arquivo
*Saída:		dest: string final (caso não encontrar e copiada a padrão)

*Data da Criação:	01/06/2006
*Modificações:

*Obs:

********************************************************************************/

void ReadCfgString(char *field, char *scr, char *dest, char *padrao, FILE *fp)
{
	char str_aux[255];
	char *p_str;
	int achou;
	
	if (!(SeekCfgString(field,fp)))
	{
		strcpy(dest,padrao);
		return;
	}
	achou = 0;
	while ((fgets(str_aux,255,fp) != NULL) && (str_aux[0] != '['))
	{
		TiraCRLF(str_aux);
		p_str = strchr(str_aux,'=');
		if (p_str != NULL)
			*p_str = 0;
		if (strcmp(scr,str_aux) == 0){
			achou = 1;
			break;
		}
	}
	if (!(achou))
		strcpy(dest,padrao);
	else
		strcpy(dest,++p_str);
	return;
}

/********************************************************************************
>>>> ReadCfgInteger(char *field, char *scr, int *dest, int padrao, FILE *fp) <<<<
---------------------------------------------------------------------------------
*Função:	void ReadCfgInteger(char *field, char *scr, int *dest, int padrao, FILE *fp)
*Descrição:	igual a anterior só que com o retorno é um  numero inteiro

*Entrada:	field: campo
		scr: local da string
		padrao: numero padrão, caso nao encontre a procurada
		fp: descritor do arquivo
*Saída:		dest: número final (caso não encontrar e copiada a padrão)

*Data da Criação:	01/06/2006
*Modificações:

*Obs:

********************************************************************************/

void ReadCfgInteger(char *field, char *scr, int *dest, int padrao, FILE *fp)
{
	char str_aux[255];
	char str_padrao[255];
	
	sprintf(str_padrao,"%d",padrao);
	
	ReadCfgString(field,scr,str_aux,str_padrao,fp);
	
	*dest = atoi(str_aux);
}

/********************************************************************************
>>>> SetLanguage(char *filename,TEXT *texto) <<<<
---------------------------------------------------------------------------------
*Função:	int SetLanguage(char *filename,TEXT *texto)
*Descrição:	Estrutura que receberá o texto no idioma escolhido

*Entrada:	filename: Nome do arquivo idioma
*Saída:		texto: estrutura com os textos do arquivo
		retorno:
			0 - se encontrou erros
			1- se o arquivo foi copiado.

*Data da Criação:	01/06/2006
*Modificações:

*Obs:

********************************************************************************/

int SetLanguage(char *filename,TEXT *texto)
{
	FILE *Idioma;
	
	if ( (Idioma=fopen(filename,"r")) == NULL )
		return 0;
	else
	{
		ReadCfgString("[GERAL]","Nterm",texto->Nterm," ",Idioma);
		ReadCfgString("[GERAL]","Tab",texto->Tab," ",Idioma);
		ReadCfgString("[GERAL]","Tempo",texto->Tempo," ",Idioma);
		ReadCfgString("[GERAL]","qtd",texto->qtd," ",Idioma);
		ReadCfgString("[GERAL]","outroArq",texto->outroArq," ",Idioma);
		
		ReadCfgString("[CONFIG]","NImage",texto->NImage," ",Idioma);
		ReadCfgString("[CONFIG]","Enviar",texto->Enviar," ",Idioma);
		ReadCfgString("[CONFIG]","Addr",texto->Addr," ",Idioma);
		ReadCfgString("[CONFIG]","Serv",texto->Serv," ",Idioma);
		ReadCfgString("[CONFIG]","NetM",texto->NetM," ",Idioma);
		ReadCfgString("[CONFIG]","TCname",texto->TCname," ",Idioma);
		ReadCfgString("[CONFIG]","Gateway",texto->Gateway," ",Idioma);
		ReadCfgString("[CONFIG]","UPDServ",texto->UPDServ," ",Idioma);
		ReadCfgString("[CONFIG]","User",texto->User," ",Idioma);
		ReadCfgString("[CONFIG]","Pass",texto->Pass," ",Idioma);
		ReadCfgString("[CONFIG]","Dinamico",texto->Dinamico," ",Idioma);
		ReadCfgString("[CONFIG]","BuscaServ",texto->BuscaServ," ",Idioma);
		ReadCfgString("[CONFIG]","L1",texto->LN1," ",Idioma);
		ReadCfgString("[CONFIG]","L2",texto->LN2," ",Idioma);
		ReadCfgString("[CONFIG]","L3",texto->LN3," ",Idioma);
		ReadCfgString("[CONFIG]","L4",texto->LN4," ",Idioma);
		ReadCfgString("[CONFIG]","Time",texto->Time," ",Idioma);
		ReadCfgString("[CONFIG]","ServName",texto->ServName," ",Idioma);
		ReadCfgString("[CONFIG]","Port",texto->Port," ",Idioma);
		ReadCfgString("[CONFIG]","SFTP",texto->SFTP," ",Idioma);
		ReadCfgString("[CONFIG]","UFTP",texto->UFTP," ",Idioma);
		ReadCfgString("[CONFIG]","PFTP",texto->PFTP," ",Idioma);
	
		ReadCfgString("[ERROS]","TermNExiste",texto->TermNExiste," ",Idioma);
		ReadCfgString("[ERROS]","TermNComp",texto->TermNComp," ",Idioma);
		ReadCfgString("[ERROS]","ArqNExiste",texto->ArqNExiste," ",Idioma);
		ReadCfgString("[ERROS]","erroIdioma",texto->erroIdioma," ",Idioma);
		ReadCfgString("[ERROS]","Invalido",texto->Invalido," ",Idioma);
	
		ReadCfgString("[TEXTOS]","L1",texto->L1," ",Idioma);
		ReadCfgString("[TEXTOS]","L2",texto->L2," ",Idioma);
		ReadCfgString("[TEXTOS]","X",texto->X," ",Idioma);
		ReadCfgString("[TEXTOS]","Y",texto->Y," ",Idioma);
		ReadCfgString("[TEXTOS]","Color",texto->Color," ",Idioma);
		ReadCfgString("[TEXTOS]","Background",texto->Background," ",Idioma);
		ReadCfgString("[TEXTOS]","Size",texto->Size," ",Idioma);
		ReadCfgString("[TEXTOS]","Texto",texto->Texto," ",Idioma);
	
		ReadCfgString("[IMAGEM_FILE]","Narquivo",texto->Narq," ",Idioma);
		ReadCfgString("[IMAGEM_FILE]","Dest",texto->Dest," ",Idioma);
	
		ReadCfgString("[LEC_KEY]","Hab",texto->Hab," ",Idioma);
		ReadCfgString("[LEC_KEY]","Des",texto->Des," ",Idioma);
		
		ReadCfgString("[DISP]","Cor",texto->Cor," ",Idioma);
	
		ReadCfgString("[SIM_NAO]","Sim",texto->Sim," ",Idioma);
		ReadCfgString("[SIM_NAO]","Nao",texto->Nao," ",Idioma);
		
		ReadCfgString("[IDIOMAS]","escolha",texto->escolha," ",Idioma);
		ReadCfgString("[IDIOMAS]","alterado",texto->alterado," ",Idioma);
		ReadCfgString("[IDIOMAS]","padrao",texto->padrao," ",Idioma);
		
		fclose(Idioma);
	}
	return 1;
}
