/******************************************************************************
*
* Projet    : DilibDam
* Module    : DamRecord
* Fichier   : DamRecordToSgml.c
* Auteur    : Ducloy
*
****************************************************************************
*
* Copyright (c) 1996 CNRS/CRIN & INRIA Lorraine
* 
****************************************************************************/

#include "DamRecord.h"
#include <string.h>

SgmlNode* DamRecordToSgml(rec)
     DamRecord *rec;
{
  DamRecordField *field;
  char *str;
  char memchar;
  int l;
  if(rec->recordNode)SgmlFree(rec->recordNode);
  rec->recordNode=SgmlCreateMark("");
  SgmlSubType(rec->recordNode)='R';

  if(!(field=rec->first))return rec->recordNode;
  do
    {
      switch (field->type)
	{
	case 'D':
	  l=field->effectiveEndField-field->effectiveBeginField;
	  str=malloc (l+1);
          strncpy(str, field->effectiveBeginField,l);
	  str[l]='\0';
	  SgmlAddData(rec->recordNode,str);
          free(str);
	  break;

	case 'C':
	  memchar=field->effectiveEndField[0];
	  field->effectiveEndField[0]='\0';
	  SgmlAddSon
	    (rec->recordNode
	     ,SgmlCommentCreate( field->effectiveBeginField));
          field->effectiveEndField[0]=memchar;
	  break;

	case 'S':
	  memchar=field->effectiveEndField[0];
	  field->effectiveEndField[0]='\0';
	  SgmlAddSon
	    (rec->recordNode
	     ,SgmlFromString( field->effectiveBeginField));
          field->effectiveEndField[0]=memchar;
	  break;
	}
    }
  while ((field=field->next));
  return rec->recordNode;
}
