/***********************************************************************
 
   Projet   : Inist
   Module   : Pascal
   Commande : PascalFromIlib
   Fichier  : PascalFromIlib.c
   Auteur   : DUCLOY
   Date     : 20/1/97
   $Id: PascalFromIlib.c,v 1.3 2005/06/22 15:50:53 parmentf Exp $
 
************************************************************************/

#include "SgmlPath.h"
#include "SgmlInput.h"
#include "Buffer.h"
#include <string.h>
#include <stdlib.h>

char buf2c[2];
char buf3c[3];
char buf4c[4];

int main (int argc, char **argv)
{
  SgmlNode *resul;
  SgmlNode *pascal;
  SgmlNode *partA;  
  SgmlNode *partR;
  SgmlNode *partS;
  SgmlNode *partT;
  SgmlNode *partU;
  SgmlNode *partV;
  SgmlNode *partW;
  
  SgmlNode *field;
  SgmlNode *nextField;
  SgmlNode *attDir;
  char *header;
  char *dirVal;

  Buffer *bufPascal;

  buf2c[1]=0;
  buf3c[2]=0;
  buf4c[3]=0;

  bufPascal=BufferCreate(1000,500);

  while ((BufferGets(bufPascal)))
    {
      if (strcmp(BufferString(bufPascal),"\015")==0)continue;
      if (BufferTailCmp(bufPascal,"\015")==0)BufferTailCut(bufPascal,1);
      pascal=SgmlFromString(BufferString(bufPascal));
      resul =SgmlCreateMark("inist");
      header =SgmlGetAttValById(pascal, "label");

      buf2c[0]=header[6];
      SgmlAddAtt(resul,"h6",buf2c);

      SgmlAddSon(resul,partA=SgmlCreateMark("pA"));
      partR=NULL;
      partS=NULL;
      partT=NULL;
      partU=NULL;
      partV=NULL;
      partW=NULL;


      field=SgmlFirst(pascal);
      while(field)
	{
	  nextField=SgmlNext(field);
	  field=SgmlCut(field);
	  attDir=SgmlGetAttById(field,"dir");
	  SgmlCut(attDir);

	  dirVal=SgmlAttVal(attDir);
	  buf3c[0]=dirVal[0];
	  buf3c[1]=dirVal[1];
	  buf2c[0]=dirVal[2];
	  buf4c[0]=dirVal[3];
	  buf4c[1]=dirVal[4];
	  buf4c[2]=dirVal[5];

	  if(strcmp(buf3c,"00") !=0)SgmlAddAtt(field,"i1",buf3c);
	  if(strcmp(buf2c,"0")  !=0)SgmlAddAtt(field,"i2",buf2c);
	  if(strcmp(buf4c,"000")!=0)SgmlAddAtt(field,"l" ,buf4c);
	    
	  switch((SgmlTag(field))[1])
	    {
	    case 'A':
	    case 'C':
	    case 'N':
	      SgmlAddSon (partA,field);
	      break;
	    case 'R':
	      if(!partR)SgmlAddSon(resul,partR=SgmlCreateMark("pR"));
	      SgmlAddSon (partR,field);
	      (SgmlTag(field))[1]='A';
	      break;
	    case 'S':
	      if(!partS)SgmlAddSon(resul,partS=SgmlCreateMark("pS"));
	      SgmlAddSon (partR,field);
	      (SgmlTag(field))[1]='A';
	      break;
	    case 'T':
	      if(!partT)SgmlAddSon(resul,partT=SgmlCreateMark("pS"));
	      SgmlAddSon (partT,field);
	      (SgmlTag(field))[1]='A';
	      break;
	    case 'U':
	      if(!partU)SgmlAddSon(resul,partU=SgmlCreateMark("pS"));
	      SgmlAddSon (partU,field);
	      (SgmlTag(field))[1]='A';
	      break;
	    case 'V':
	      if(!partV)SgmlAddSon(resul,partV=SgmlCreateMark("pS"));
	      SgmlAddSon (partV,field);
	      (SgmlTag(field))[1]='A';
	      break;
	    case 'W':
	      if(!partW)SgmlAddSon(resul,partW=SgmlCreateMark("pS"));
	      SgmlAddSon (partW,field);
	      (SgmlTag(field))[1]='A';
	      break;
	    }
	  SgmlFree(attDir);
	  field=nextField;
	}

      SgmlPrint (resul);
      putchar('\n');
      SgmlFree(resul);
      SgmlFree(pascal);
    }

  return 0;
}

