/***********************************************************************
*
*               Projet   : DilibPro
*               Module   : StrSearch
*               Fichier  : StrSearchGet.c
*               Auteur   : J. DUCLOY
*               Date     : Aout 93
*               maj      : Juin 94
*
* $Id: StrSearchGet.c,v 1.2 2005/06/22 15:36:25 parmentf Exp $
*
************************************************************************/

#include "StrSearch.h"
#include "CharSet.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "Buffer.h"

static Buffer* buf=NULL;


StrSearchTable *StrSearchGetTableC(char *stream, int size)
{
  char *buffer;  
  FILE *fichier;
  StrSearchTable *table;
  char *posTab;
  char *key;
  char *value;
  int len;
  

  if(!buf)buf=BufferCreate(100,50);

  table=StrSearchTableCreate(size, size/4);
  if((fichier = fopen(stream, "r")))
    {
      while ((buffer=BufferFgets(buf,fichier)))
	{
	  if((posTab=strchr(buffer,'\t')))
	    {
	      len = posTab-buffer;
	      key=malloc(len+1);
	      strncpy(key, buffer, len); key[len]='\0';
	      len = strlen(buffer);
	      if(buffer[len-1]=='\n')buffer[len-1]='\0';
	      value=malloc(strlen(posTab)+1);
	      CharSetCtoA(posTab+1,value);
	      StrSearchAdd(table,key,value);
	    }
	  else StrSearchAdd(table,BufferSave(buf),"");
	};
      return (table);
    }
  else return NULL;
}
/*******************************************************/


StrSearchTable *StrSearchGetTableFromFile(FILE *fichier, int size)
{
  char *buffer;
  StrSearchTable *table;
  char *posTab;
  char *key;
  char *value;
  int len;


  if(!buf)buf=BufferCreate(100,50);

  table=StrSearchTableCreate(size, size/4);
  while ((buffer=BufferFgets(buf,fichier)))
    {
      if((posTab=strchr(buffer,'\t')))
	{
	  len = posTab-buffer;
	  key=malloc(len+1);
	  strncpy(key, buffer, len); key[len]='\0';
	  len = strlen(buffer);
	  if(buffer[len-1]=='\n')buffer[len-1]='\0';
	  value=malloc(strlen(posTab)+1);
	  strcpy(value,posTab+1);
	  StrSearchAdd(table,key,value);
	}
      else 
	{
	  StrSearchAdd(table,BufferSave(buf),"");
	}
    };
  return (table);
}


StrSearchTable *StrSearchAddTable(char *stream, StrSearchTable *table)
{
  char *buffer;  
  FILE *fichier;
  char *posTab;
  char *key;
  char *value;
  int len;

  if(!buf)buf=BufferCreate(100,50);

  if((fichier = fopen(stream, "r")))
    {
      while ((buffer=BufferFgets(buf,fichier)))
	{
	  if((posTab=strchr(buffer,'\t')))
	    {
	      len = posTab-buffer;
	      key=malloc(len+1);
	      strncpy(key, buffer, len); key[len]='\0';
	      len = strlen(buffer);
	      if(buffer[len-1]=='\n')buffer[len-1]='\0';
	      value=malloc(strlen(posTab)+1);
	      strcpy(value,posTab+1);
	      StrSearchPut(table,key,value);
	    }
	  else 
	    {
	      StrSearchPut(table,BufferSave(buf),"");
	    }
	};
      return (table);
    }
  else return NULL;
}


StrSearchTable *StrSearchGetTable(char *stream, int size)
{
 
  StrSearchTable *table;

  if((table=StrSearchTableCreate(size, size/4)))
    
    return StrSearchAddTable(stream, table);

  else return NULL;

}


