/**********************************************************************
*
*  projet   : DilibPro
*  module   : Dam  (Dilib Acces Method)
*  fichier  : DamFileContent.c
*  Auteur   : J. DUCLOY
*  Date     : Juillet 93
*
************************************************************************
* 
*     Copyrigth (C) 1975 CRIN - CNRS & INRIA Lorraine
*
***********************************************************************/

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

DamFile *DamFileOpenReadCont(file, path)
     DamFile *file;
     char *path;
{
  if (DamFileOpen(file, path))
    {
      file->isContOpen=1;
      return file;
    }
  return NULL;
}

void DamFileSetRecordTag(file,t1)
     DamFile *file;
     char *t1;
{
  file->record->tag=t1;
}

char *DamRecordSeekContent(record)
     DamRecord *record;
{
  char *str;
  if(record)
    {
      if ((str=SgmlStrGetLeaf(BufferString(record->bufferInput), record->tag)))
	{
	  BufferStrcpy(record->content,str);
	  return BufferString(record->content);
	}
      else return NULL;
    }
  else return NULL;
}

DamRecord *DamFileGetRecordContForward(file,cont)
     DamFile *file;
     char    *cont;
{
  DamRecord *record;
  char       *tag;
  char       *curCont;
  int         cmpCode;

  file->isContSign=0;
  tag=file->record->tag;
  while ((record=DamFileNextDamRecord(file)))
    {
      if ((curCont=DamRecordSeekContent(file->record)))
	{
	  cmpCode=strcmp(curCont,cont);
	  if(cmpCode==0)
	    {
	      file->isContSign=1;
	      return record;
	    }
	  if(cmpCode>0)return NULL;
	}
    };
  return NULL;
}


DamRecord *DamFileGetRecordCont(file,cont)
     DamFile *file;
     char    *cont;
{
  int cond;

  if(file->isContSign)
    {
      cond=strcmp(cont, BufferString(file->record->content));
      if (cond==0) return file->record;
      if (cond>0) return DamFileGetRecordContForward(file, cont);
      rewind (file->stream);
      return DamFileGetRecordContForward(file, cont);
    }
  else
    {
      rewind (file->stream);
      return DamFileGetRecordContForward(file, cont);
    }
}

SgmlNode *DamFileGetSgmlRecordCont(file,cont)
     DamFile *file;
     char    *cont;
{
  DamRecord *r1;
  if((r1=DamFileGetRecordCont(file,cont)))
    {
      return DamRecordToSgml(r1);
    }
  else return NULL;
}

SgmlNode *DamFileGetSgmlCont(file,cont)
     DamFile *file;
     char    *cont;
{
  SgmlNode *n1;
  if((n1=DamFileGetSgmlRecordCont(file,cont)))
    {
      return SgmlLast(n1);
    }
  else return NULL;
}


