/*************************************************************************
 
   Project  : Inist
   Module   : Pascal
   Command  : PascalToMiniBib
   Fichier  : PascalToMiniBib.c
   Author   : DUCLOY J. (INIST & LORIA) 
              NEDELCOT A. (INRS)
              HOUDRY Ph. (INIST)
   Date     : 20/01/1997           - 20/07/2000 - 13/04/2001
   $Id: PascalToMiniBibStruct.c,v 1.2 2005/06/22 15:57:02 parmentf Exp $

**************************************************************************
*
* Copyright (c) 1997 CNRS/CRIN & INRIA Lorraine
* 
**************************************************************************/
#include <stdlib.h>
#include "Sgml.h"
#include "RegExp.h"
#include <string.h>

extern char *optarg;   
extern int   optind;
int getopt();

static SgmlNode *minibibDoc;
static SgmlNode *pascalDoc;
static SgmlNode *partA;
static SgmlNode *listFT;
static SgmlNode *listET;
static SgmlNode *listST;
static SgmlNode *listOT;
static SgmlNode *listAU;
static SgmlNode *listAF;
static SgmlNode *listOR;
static SgmlNode *listSO;
static SgmlNode *listCONG;
static SgmlNode *listTHES;
static SgmlNode *listBREV;
static SgmlNode *listMAP;
static SgmlNode *listPU;
static SgmlNode *listDA;
static SgmlNode *listTD;
static SgmlNode *listPY;
static SgmlNode *listLA;
static SgmlNode *listLR;
static SgmlNode *listISSN;
static SgmlNode *listCODN;
static SgmlNode *listISBN;
static SgmlNode *listNT;
static SgmlNode *listABFR;
static SgmlNode *listABEN;
static SgmlNode *listCC;
static SgmlNode *listFD;
static SgmlNode *listED;
static SgmlNode *listSD;
static SgmlNode *listFG;
static SgmlNode *listEG;
static SgmlNode *listSG;
static SgmlNode *listLO;
static SgmlNode *listTIC;
static SgmlNode *listSOC;
static SgmlNode *listCONGC;
static SgmlNode *listTHESC;
static SgmlNode *listBREVC;
static SgmlNode *listPUC;
static SgmlNode *listDAC;

void pascalFT()
{

  SgmlNode *ft;
  SgmlNode *sz1;
  char *s1;

  s1=NULL;

  {
    static SgmlPathIterator *iterFT=NULL;
    static SgmlPathProg *pathProgFT=NULL;
    
    if(!pathProgFT)
      {
	pathProgFT=SgmlPathCompile("pA/fA08 l=FRE");
	iterFT=SgmlPathIteratorCreate(pathProgFT);
      }
    
    SgmlPathIteratorInit(iterFT,pascalDoc);
    
    while ((ft=SgmlPathNext(iterFT)))
      {
	if (!listFT) SgmlAddSon(minibibDoc,listFT=SgmlCreateMark("FT"));
	sz1=SgmlCopy(SgmlGetSonTag(ft,"s1"));
	SgmlSetTag(sz1,"e");
	SgmlAddSon(listFT,sz1);
      }
  }

  {
    static SgmlPathIterator *iterFT=NULL;
    static SgmlPathProg *pathProgFT=NULL;
    
    if(!pathProgFT)
      {
	pathProgFT=SgmlPathCompile("pA/fA09 l=FRE");
	iterFT=SgmlPathIteratorCreate(pathProgFT);
      }

    SgmlPathIteratorInit(iterFT,pascalDoc);
    
    while ((ft=SgmlPathNext(iterFT)))
      {
	if (!listFT) SgmlAddSon(minibibDoc,listFT=SgmlCreateMark("FT"));
	
	sz1=SgmlCopy(SgmlGetSonTag(ft,"s1"));
	SgmlSetTag(sz1,"e");
	SgmlAddSon(listFT,sz1);
      }
  }
  {
    static SgmlPathIterator *iterFT=NULL;
    static SgmlPathProg *pathProgFT=NULL;
    
    if(!pathProgFT)
      {
	pathProgFT=SgmlPathCompile("pA/fA10 l=FRE");
	iterFT=SgmlPathIteratorCreate(pathProgFT);
      }
    
    SgmlPathIteratorInit(iterFT,pascalDoc);
    
    while ((ft=SgmlPathNext(iterFT)))
      {
	if (!listFT) SgmlAddSon(minibibDoc,listFT=SgmlCreateMark("FT"));
	
	sz1=SgmlCopy(SgmlGetSonTag(ft,"s1"));
	SgmlSetTag(sz1,"e");
	SgmlAddSon(listFT,sz1);
      }
  }
  {
    static SgmlPathIterator *iterFT=NULL;
    static SgmlPathProg *pathProgFT=NULL;
    if(!pathProgFT)
      {
	pathProgFT=SgmlPathCompile("pA/fA68 l=FRE");
	iterFT=SgmlPathIteratorCreate(pathProgFT);
      }
    
    SgmlPathIteratorInit(iterFT,pascalDoc);
    
    while ((ft=SgmlPathNext(iterFT)))
      {
	if (!listFT) SgmlAddSon(minibibDoc,listFT=SgmlCreateMark("FT"));
	
	sz1=SgmlCopy(SgmlGetSonTag(ft,"s1"));
	SgmlSetTag(sz1,"e");
	SgmlAddSon(listFT,sz1);
      }

  }
  {
    static SgmlPathIterator *iterFT=NULL;
    static SgmlPathProg *pathProgFT=NULL;
    
    if(!pathProgFT)
      {
	pathProgFT=SgmlPathCompile("pA/fA69 l=FRE");
	iterFT=SgmlPathIteratorCreate(pathProgFT);
      }
    
    SgmlPathIteratorInit(iterFT,pascalDoc);
    
    while ((ft=SgmlPathNext(iterFT)))
      {
	if (!listFT) SgmlAddSon(minibibDoc,listFT=SgmlCreateMark("FT"));
	
	sz1=SgmlCopy(SgmlGetSonTag(ft,"s1"));
	SgmlSetTag(sz1,"e");
	SgmlAddSon(listFT,sz1);
      }
  }

  {
    static SgmlPathIterator *iterFT=NULL;
    static SgmlPathProg *pathProgFT=NULL;
    
    if(!pathProgFT)
      {
	pathProgFT=SgmlPathCompile("pA/fA70 l=FRE");
	iterFT=SgmlPathIteratorCreate(pathProgFT);
      }

    SgmlPathIteratorInit(iterFT,pascalDoc);
    
    while ((ft=SgmlPathNext(iterFT)))
      {
	if (!listFT) SgmlAddSon(minibibDoc,listFT=SgmlCreateMark("FT"));
	
	sz1=SgmlCopy(SgmlGetSonTag(ft,"s1"));
	SgmlSetTag(sz1,"e");
	SgmlAddSon(listFT,sz1);
      }
  }
}

void pascalET()
{
  static SgmlPathIterator *iterET=NULL;
  static SgmlPathProg *pathProgET=NULL;
  SgmlNode *et;
  SgmlNode *sz1;
  char *s1;

  s1=NULL;

  pathProgET=SgmlPathCompile("pA/fA08 l=ENG");
  iterET=SgmlPathIteratorCreate(pathProgET);

  SgmlPathIteratorInit(iterET,pascalDoc);

  while ((et=SgmlPathNext(iterET)))
    {
      if (!listET) SgmlAddSon(minibibDoc,listET=SgmlCreateMark("ET"));

      sz1=SgmlCopy(SgmlGetSonTag(et,"s1"));
      SgmlSetTag(sz1,"e");
      SgmlAddSon(listET,sz1);
    }

  pathProgET=SgmlPathCompile("pA/fA09 l=ENG");
  iterET=SgmlPathIteratorCreate(pathProgET);

  SgmlPathIteratorInit(iterET,pascalDoc);

  while ((et=SgmlPathNext(iterET)))
    {
      if (!listET) SgmlAddSon(minibibDoc,listET=SgmlCreateMark("ET"));

      sz1=SgmlCopy(SgmlGetSonTag(et,"s1"));
      SgmlSetTag(sz1,"e");
      SgmlAddSon(listET,sz1);
    }

  pathProgET=SgmlPathCompile("pA/fA10 l=ENG");
  iterET=SgmlPathIteratorCreate(pathProgET);

  SgmlPathIteratorInit(iterET,pascalDoc);

  while ((et=SgmlPathNext(iterET)))
    {
      if (!listET) SgmlAddSon(minibibDoc,listET=SgmlCreateMark("ET"));

      sz1=SgmlCopy(SgmlGetSonTag(et,"s1"));
      SgmlSetTag(sz1,"e");
      SgmlAddSon(listET,sz1);
    }

  pathProgET=SgmlPathCompile("pA/fA68 l=ENG");
  iterET=SgmlPathIteratorCreate(pathProgET);

  SgmlPathIteratorInit(iterET,pascalDoc);

  while ((et=SgmlPathNext(iterET)))
    {
      if (!listET) SgmlAddSon(minibibDoc,listET=SgmlCreateMark("ET"));

      sz1=SgmlCopy(SgmlGetSonTag(et,"s1"));
      SgmlSetTag(sz1,"e");
      SgmlAddSon(listET,sz1);
    }

  pathProgET=SgmlPathCompile("pA/fA69 l=ENG");
  iterET=SgmlPathIteratorCreate(pathProgET);

  SgmlPathIteratorInit(iterET,pascalDoc);

  while ((et=SgmlPathNext(iterET)))
    {
      if (!listET) SgmlAddSon(minibibDoc,listET=SgmlCreateMark("ET"));

      sz1=SgmlCopy(SgmlGetSonTag(et,"s1"));
      SgmlSetTag(sz1,"e");
      SgmlAddSon(listET,sz1);
    }

  pathProgET=SgmlPathCompile("pA/fA70 l=ENG");
  iterET=SgmlPathIteratorCreate(pathProgET);

  SgmlPathIteratorInit(iterET,pascalDoc);

  while ((et=SgmlPathNext(iterET)))
    {
      if (!listET) SgmlAddSon(minibibDoc,listET=SgmlCreateMark("ET"));

      sz1=SgmlCopy(SgmlGetSonTag(et,"s1"));
      SgmlSetTag(sz1,"e");
      SgmlAddSon(listET,sz1);
    }
}

void pascalST()
{
  static SgmlPathIterator *iterST=NULL;
  static SgmlPathProg *pathProgST=NULL;
  SgmlNode *st;
  SgmlNode *sz1;
  char *s1;

  s1=NULL;

  pathProgST=SgmlPathCompile("pA/fA08 l=SPA");
  iterST=SgmlPathIteratorCreate(pathProgST);

  SgmlPathIteratorInit(iterST,pascalDoc);

  while ((st=SgmlPathNext(iterST)))
    {
      if (!listST) SgmlAddSon(minibibDoc,listST=SgmlCreateMark("ST"));

      sz1=SgmlCopy(SgmlGetSonTag(st,"s1"));
      SgmlSetTag(sz1,"e");
      SgmlAddSon(listST,sz1);
    }

  pathProgST=SgmlPathCompile("pA/fA09 l=SPA");
  iterST=SgmlPathIteratorCreate(pathProgST);

  SgmlPathIteratorInit(iterST,pascalDoc);

  while ((st=SgmlPathNext(iterST)))
    {
      if (!listST) SgmlAddSon(minibibDoc,listST=SgmlCreateMark("ST"));

      sz1=SgmlCopy(SgmlGetSonTag(st,"s1"));
      SgmlSetTag(sz1,"e");
      SgmlAddSon(listST,sz1);
    }

  pathProgST=SgmlPathCompile("pA/fA10 l=SPA");
  iterST=SgmlPathIteratorCreate(pathProgST);

  SgmlPathIteratorInit(iterST,pascalDoc);

  while ((st=SgmlPathNext(iterST)))
    {
      if (!listST) SgmlAddSon(minibibDoc,listST=SgmlCreateMark("ST"));

      sz1=SgmlCopy(SgmlGetSonTag(st,"s1"));
      SgmlSetTag(sz1,"e");
      SgmlAddSon(listST,sz1);
    }

  pathProgST=SgmlPathCompile("pA/fA68 l=SPA");
  iterST=SgmlPathIteratorCreate(pathProgST);

  SgmlPathIteratorInit(iterST,pascalDoc);

  while ((st=SgmlPathNext(iterST)))
    {
      if (!listST) SgmlAddSon(minibibDoc,listST=SgmlCreateMark("ST"));

      sz1=SgmlCopy(SgmlGetSonTag(st,"s1"));
      SgmlSetTag(sz1,"e");
      SgmlAddSon(listST,sz1);
    }

  pathProgST=SgmlPathCompile("pA/fA69 l=SPA");
  iterST=SgmlPathIteratorCreate(pathProgST);

  SgmlPathIteratorInit(iterST,pascalDoc);

  while ((st=SgmlPathNext(iterST)))
    {
      if (!listST) SgmlAddSon(minibibDoc,listST=SgmlCreateMark("ST"));

      sz1=SgmlCopy(SgmlGetSonTag(st,"s1"));
      SgmlSetTag(sz1,"e");
      SgmlAddSon(listST,sz1);
    }

  pathProgST=SgmlPathCompile("pA/fA70 l=SPA");
  iterST=SgmlPathIteratorCreate(pathProgST);

  SgmlPathIteratorInit(iterST,pascalDoc);

  while ((st=SgmlPathNext(iterST)))
    {
      if (!listST) SgmlAddSon(minibibDoc,listST=SgmlCreateMark("ST"));

      sz1=SgmlCopy(SgmlGetSonTag(st,"s1"));
      SgmlSetTag(sz1,"e");
      SgmlAddSon(listST,sz1);
    }
}

void pascalOT()
{
  static SgmlPathIterator *iterOT=NULL;
  static SgmlPathProg *pathProgOT=NULL;
  SgmlNode *ot;
  SgmlNode *sz1;

  pathProgOT=SgmlPathCompile("pA/fA08");
  iterOT=SgmlPathIteratorCreate(pathProgOT);

  SgmlPathIteratorInit(iterOT,pascalDoc);

  while ((ot=SgmlPathNext(iterOT)))
    {
      char *attLang;
      attLang=SgmlGetAttValById(ot,"l");

      if (strcmp(attLang,"FRE")==0) continue;
      else
	{
	  if (strcmp(attLang,"ENG")==0) continue;
	        else
		  {
		    if (strcmp(attLang,"SPA")==0) continue;
		    else
		      {
			if (!listOT) SgmlAddSon(minibibDoc,listOT=SgmlCreateMark("OT"));

			sz1=SgmlCopy(SgmlGetSonTag(ot,"s1"));
			SgmlSetTag(sz1,"e");
			SgmlAddSon(listOT,sz1);
		      }
		  }
	}
    }

  pathProgOT=SgmlPathCompile("pA/fA09");
  iterOT=SgmlPathIteratorCreate(pathProgOT);

  SgmlPathIteratorInit(iterOT,pascalDoc);

  while ((ot=SgmlPathNext(iterOT)))
    {
      char *attLang;
      attLang=SgmlGetAttValById(ot,"l");

      if (strcmp(attLang,"FRE")==0) continue;
      else
	{
	  if (strcmp(attLang,"ENG")==0) continue;
	        else
		  {
		    if (strcmp(attLang,"SPA")==0) continue;
		    else
		      {
			if (!listOT) SgmlAddSon(minibibDoc,listOT=SgmlCreateMark("OT"));

			sz1=SgmlCopy(SgmlGetSonTag(ot,"s1"));
			SgmlSetTag(sz1,"e");
			SgmlAddSon(listOT,sz1);
		      }
		  }
	}
    }

  pathProgOT=SgmlPathCompile("pA/fA10");
  iterOT=SgmlPathIteratorCreate(pathProgOT);

  SgmlPathIteratorInit(iterOT,pascalDoc);

  while ((ot=SgmlPathNext(iterOT)))
    {
      char *attLang;
      attLang=SgmlGetAttValById(ot,"l");

      if (strcmp(attLang,"FRE")==0) continue;
      else
	{
	  if (strcmp(attLang,"ENG")==0) continue;
	        else
		  {
		    if (strcmp(attLang,"SPA")==0) continue;
		    else
		      {
			if (!listOT) SgmlAddSon(minibibDoc,listOT=SgmlCreateMark("OT"));

			sz1=SgmlCopy(SgmlGetSonTag(ot,"s1"));
			SgmlSetTag(sz1,"e");
			SgmlAddSon(listOT,sz1);
		      }
		  }
	}
    }
  pathProgOT=SgmlPathCompile("pA/fA68");
  iterOT=SgmlPathIteratorCreate(pathProgOT);

  SgmlPathIteratorInit(iterOT,pascalDoc);

  while ((ot=SgmlPathNext(iterOT)))
    {
      char *attLang;
      attLang=SgmlGetAttValById(ot,"l");

      if (strcmp(attLang,"FRE")==0) continue;
      else
	{
	  if (strcmp(attLang,"ENG")==0) continue;
	        else
		  {
		    if (strcmp(attLang,"SPA")==0) continue;
		    else
		      {
			if (!listOT) SgmlAddSon(minibibDoc,listOT=SgmlCreateMark("OT"));

			sz1=SgmlCopy(SgmlGetSonTag(ot,"s1"));
			SgmlSetTag(sz1,"e");
			SgmlAddSon(listOT,sz1);
		      }
		  }
	}
    }
  pathProgOT=SgmlPathCompile("pA/fA69");
  iterOT=SgmlPathIteratorCreate(pathProgOT);

  SgmlPathIteratorInit(iterOT,pascalDoc);

  while ((ot=SgmlPathNext(iterOT)))
    {
      char *attLang;
      attLang=SgmlGetAttValById(ot,"l");

      if (strcmp(attLang,"FRE")==0) continue;
      else
	{
	  if (strcmp(attLang,"ENG")==0) continue;
	        else
		  {
		    if (strcmp(attLang,"SPA")==0) continue;
		    else
		      {
			if (!listOT) SgmlAddSon(minibibDoc,listOT=SgmlCreateMark("OT"));

			sz1=SgmlCopy(SgmlGetSonTag(ot,"s1"));
			SgmlSetTag(sz1,"e");
			SgmlAddSon(listOT,sz1);
		      }
		  }
	}
    }
  pathProgOT=SgmlPathCompile("pA/fA70");
  iterOT=SgmlPathIteratorCreate(pathProgOT);

  SgmlPathIteratorInit(iterOT,pascalDoc);

  while ((ot=SgmlPathNext(iterOT)))
    {
      char *attLang;
      attLang=SgmlGetAttValById(ot,"l");

      if (strcmp(attLang,"FRE")==0) continue;
      else
	{
	  if (strcmp(attLang,"ENG")==0) continue;
	        else
		  {
		    if (strcmp(attLang,"SPA")==0) continue;
		    else
		      {
			if (!listOT) SgmlAddSon(minibibDoc,listOT=SgmlCreateMark("OT"));

			sz1=SgmlCopy(SgmlGetSonTag(ot,"s1"));
			SgmlSetTag(sz1,"e");
			SgmlAddSon(listOT,sz1);
		      }
		  }
	}
    }
}

void pascalAU()
{
  static SgmlPathIterator *iterAU=NULL;
  static SgmlPathProg *pathProgAU=NULL;
  static SgmlPathProg *pathProgAU12=NULL;
  static SgmlPathIterator *iterAU12=NULL;
  static SgmlPathProg *pathProgAU13=NULL;
  static SgmlPathIterator *iterAU13=NULL;
  static SgmlPathProg *pathProgAU34=NULL;
  static SgmlPathIterator *iterAU34=NULL;

  SgmlNode *au;
  char *c1;

  c1=NULL;

  if (!pathProgAU)
    {
      pathProgAU=SgmlPathCompile("pA/fA11");
      iterAU=SgmlPathIteratorCreate(pathProgAU);
    }

  SgmlPathIteratorInit(iterAU,pascalDoc);

  while ((au=SgmlPathNext(iterAU)))
    {
      Buffer *bufau;
      char *s1;
      char *s9;
      bufau=BufferCreate(10,10);

      if ((s1=SgmlLeafGetData(SgmlGetSonTag(au,"s1"))))
	{
	  if (!listAU) SgmlAddSon(minibibDoc,listAU=SgmlCreateMark("AU"));

	  bufau=BufferFromString(s1);

	  if ((s9=SgmlLeafGetData(SgmlGetSonTag(au,"s9"))))
	    {
	      BufferStrcat(bufau,", ");
	      BufferStrcat(bufau,s9);
	    }

	  SgmlAddSon(listAU, SgmlCreateLeaf("e",BufferString(bufau)));
	 
        }
      BufferFree(bufau);
    }
  
  if(!pathProgAU12)
    {
      pathProgAU12=SgmlPathCompile("pA/fA12");
      iterAU12=SgmlPathIteratorCreate(pathProgAU12);
    }

  SgmlPathIteratorInit(iterAU12,pascalDoc);

  while ((au=SgmlPathNext(iterAU12)))
    {
      Buffer *bufau;
      char *s1;
      char *s9;
      bufau=BufferCreate(10,10);

      if ((s1=SgmlLeafGetData(SgmlGetSonTag(au,"s1"))))
	{
	  if (!listAU) SgmlAddSon(minibibDoc,listAU=SgmlCreateMark("AU"));

	  bufau=BufferFromString(s1);

	  if ((s9=SgmlLeafGetData(SgmlGetSonTag(au,"s9"))))
	    {
	      BufferStrcat(bufau,", ");
	      BufferStrcat(bufau,s9);
	    }

	  SgmlAddSon(listAU, SgmlCreateLeaf("e",BufferString(bufau)));
	  BufferFree(bufau);
        }
    }

  if (!pathProgAU13)
    {
      pathProgAU13=SgmlPathCompile("pA/fA13");
      iterAU13=SgmlPathIteratorCreate(pathProgAU13);
    }

  SgmlPathIteratorInit(iterAU13,pascalDoc);

  while ((au=SgmlPathNext(iterAU13)))
    {
      Buffer *bufau;
      char *s1;
      char *s9;
      bufau=BufferCreate(10,10);

      if ((s1=SgmlLeafGetData(SgmlGetSonTag(au,"s1"))))
	{
	  if (!listAU) SgmlAddSon(minibibDoc,listAU=SgmlCreateMark("AU"));

	  bufau=BufferFromString(s1);

	  if ((s9=SgmlLeafGetData(SgmlGetSonTag(au,"s9"))))
	    {
	      BufferStrcat(bufau,", ");
	      BufferStrcat(bufau,s9);
	    }

	  SgmlAddSon(listAU, SgmlCreateLeaf("e",BufferString(bufau)));
	  BufferFree(bufau);
        }
    }

  if(!pathProgAU34)
    {
      pathProgAU34=SgmlPathCompile("pA/fA34");
      iterAU34=SgmlPathIteratorCreate(pathProgAU34);
    }

  SgmlPathIteratorInit(iterAU34,pascalDoc);

  while ((au=SgmlPathNext(iterAU34)))
    {
      Buffer *bufau;
      char *s1;
      bufau=BufferCreate(10,10);

      if ((s1=SgmlLeafGetData(SgmlGetSonTag(au,"s1"))))
	{
	  if (!listAU) SgmlAddSon(minibibDoc,listAU=SgmlCreateMark("AU"));

	  bufau=BufferFromString(s1);
	  BufferStrcat(bufau,", dep.brev.");

	  SgmlAddSon(listAU, SgmlCreateLeaf("e",BufferString(bufau)));
	  BufferFree(bufau);
        }
    }
}

void pascalAF()
{
  static SgmlPathIterator *iterAF=NULL;
  static SgmlPathProg *pathProgAF=NULL;
  static SgmlPathIterator *iterAF15=NULL;
  static SgmlPathProg *pathProgAF15=NULL;
  static SgmlPathIterator *iterAF16=NULL;
  static SgmlPathProg *pathProgAF16=NULL;
  SgmlNode *af;
  
  if(!pathProgAF)
    {
      pathProgAF=SgmlPathCompile("pA/fA14");
      iterAF=SgmlPathIteratorCreate(pathProgAF);
    }

  SgmlPathIteratorInit(iterAF,pascalDoc);

  while ((af=SgmlPathNext(iterAF)))
    {
      Buffer *bufaf;
      char *s1;
      char *s2;
      char *s3;
      bufaf=BufferCreate(10,10);

      if ((s1=SgmlLeafGetData(SgmlGetSonTag(af,"s1"))))
	{
	  if (!listAF) SgmlAddSon(minibibDoc,listAF=SgmlCreateMark("AF"));

	  bufaf=BufferFromString(s1);

/*
Les notices venant de l'AIP ont dans leur s1 les contenus normalement ventiles dans s1+s2+s3
*/

	  if ((s2=SgmlLeafGetData(SgmlGetSonTag(af,"s2"))))
	    {
	      BufferStrcat(bufaf," - ");
	      BufferStrcat(bufaf,s2);
	    }

	  if ((s3=SgmlLeafGetData(SgmlGetSonTag(af,"s3"))))
	    {
	      BufferStrcat(bufaf," (");
	      BufferStrcat(bufaf,s3);
	      BufferStrcat(bufaf,")");
	    }

	  SgmlAddSon(listAF, SgmlCreateLeaf("e",BufferString(bufaf)));
	  BufferFree(bufaf);
        }
    }

  if(!pathProgAF15)
    {
      pathProgAF15=SgmlPathCompile("pA/fA15");
      iterAF15=SgmlPathIteratorCreate(pathProgAF15);
    }

  SgmlPathIteratorInit(iterAF15,pascalDoc);

  while ((af=SgmlPathNext(iterAF15)))
    {
      Buffer *bufaf;
      char *s1;
      char *s2;
      char *s3;
      bufaf=BufferCreate(10,10);

      if ((s1=SgmlLeafGetData(SgmlGetSonTag(af,"s1"))))
	{
	  if (!listAF) SgmlAddSon(minibibDoc,listAF=SgmlCreateMark("AF"));

	  bufaf=BufferFromString(s1);

	  if ((s2=SgmlLeafGetData(SgmlGetSonTag(af,"s2"))))
	    {
	      BufferStrcat(bufaf," - ");
	      BufferStrcat(bufaf,s2);
	    }

	  if ((s3=SgmlLeafGetData(SgmlGetSonTag(af,"s3"))))
	    {
	      BufferStrcat(bufaf," (");
	      BufferStrcat(bufaf,s3);
	      BufferStrcat(bufaf,")");
	    }

	  SgmlAddSon(listAF, SgmlCreateLeaf("e",BufferString(bufaf)));
	  BufferFree(bufaf);
        }
    }
  if(!pathProgAF16)
    {
      pathProgAF16=SgmlPathCompile("pA/fA16");
      iterAF16=SgmlPathIteratorCreate(pathProgAF16);
    }

  SgmlPathIteratorInit(iterAF16,pascalDoc);

  while ((af=SgmlPathNext(iterAF16)))
    {
      Buffer *bufaf;
      char *s1;
      char *s2;
      char *s3;
      bufaf=BufferCreate(10,10);

      if ((s1=SgmlLeafGetData(SgmlGetSonTag(af,"s1"))))
	{
	  if (!listAF) SgmlAddSon(minibibDoc,listAF=SgmlCreateMark("AF"));

	  bufaf=BufferFromString(s1);

	  if ((s2=SgmlLeafGetData(SgmlGetSonTag(af,"s2"))))
	    {
	      BufferStrcat(bufaf," - ");
	      BufferStrcat(bufaf,s2);
	    }

	  if ((s3=SgmlLeafGetData(SgmlGetSonTag(af,"s3"))))
	    {
	      BufferStrcat(bufaf," (");
	      BufferStrcat(bufaf,s3);
	      BufferStrcat(bufaf,")");
	    }

	  SgmlAddSon(listAF, SgmlCreateLeaf("e",BufferString(bufaf)));
	  BufferFree(bufaf);
        }
    }
}

void pascalOR()
{
  static SgmlPathIterator *iterOR=NULL;
  static SgmlPathProg *pathProgOR=NULL;
  SgmlNode *or;

  pathProgOR=SgmlPathCompile("pA/fA17");
  iterOR=SgmlPathIteratorCreate(pathProgOR);

  SgmlPathIteratorInit(iterOR,pascalDoc);

  while ((or=SgmlPathNext(iterOR)))
    {
      Buffer *bufor;
      char *s1;
      char *s2;
      char *s3;
      char *s9;
      bufor=BufferCreate(10,10);

      if ((s1=SgmlLeafGetData(SgmlGetSonTag(or,"s1"))))
	{
	  if (!listOR) SgmlAddSon(minibibDoc,listOR=SgmlCreateMark("OR"));

	  bufor=BufferFromString(s1);

	  if ((s2=SgmlLeafGetData(SgmlGetSonTag(or,"s2"))))
	    {
	      BufferStrcat(bufor," - ");
	      BufferStrcat(bufor,s2);
	    }

	  if ((s3=SgmlLeafGetData(SgmlGetSonTag(or,"s3"))))
	    {
	      BufferStrcat(bufor," (");
	      BufferStrcat(bufor,s3);
	      BufferStrcat(bufor,")");
	    }

	  if ((s9=SgmlLeafGetData(SgmlGetSonTag(or,"s9"))))
	    {
	      BufferStrcat(bufor," - ");
	      BufferStrcat(bufor,s9);
	    }
	  SgmlAddSon(listOR, SgmlCreateLeaf("e",BufferString(bufor)));
	  BufferFree(bufor);
        }
    }

  pathProgOR=SgmlPathCompile("pA/fA18");
  iterOR=SgmlPathIteratorCreate(pathProgOR);

  SgmlPathIteratorInit(iterOR,pascalDoc);

  while ((or=SgmlPathNext(iterOR)))
    {
      Buffer *bufor;
      char *s1;
      char *s2;
      char *s3;
      char *s9;
      bufor=BufferCreate(10,10);

      if ((s1=SgmlLeafGetData(SgmlGetSonTag(or,"s1"))))
	{
	  if (!listOR) SgmlAddSon(minibibDoc,listOR=SgmlCreateMark("OR"));

	  bufor=BufferFromString(s1);

	  if ((s2=SgmlLeafGetData(SgmlGetSonTag(or,"s2"))))
	    {
	      BufferStrcat(bufor," - ");
	      BufferStrcat(bufor,s2);
	    }

	  if ((s3=SgmlLeafGetData(SgmlGetSonTag(or,"s3"))))
	    {
	      BufferStrcat(bufor," (");
	      BufferStrcat(bufor,s3);
	      BufferStrcat(bufor,")");
	    }

	  if ((s9=SgmlLeafGetData(SgmlGetSonTag(or,"s9"))))
	    {
	      BufferStrcat(bufor," - ");
	      BufferStrcat(bufor,s9);
	    }
	  SgmlAddSon(listOR, SgmlCreateLeaf("e",BufferString(bufor)));
	  BufferFree(bufor);
        }
    }

  pathProgOR=SgmlPathCompile("pA/fA19");
  iterOR=SgmlPathIteratorCreate(pathProgOR);

  SgmlPathIteratorInit(iterOR,pascalDoc);

  while ((or=SgmlPathNext(iterOR)))
    {
      Buffer *bufor;
      char *s1;
      char *s2;
      char *s3;
      char *s9;
      bufor=BufferCreate(10,10);

      if ((s1=SgmlLeafGetData(SgmlGetSonTag(or,"s1"))))
	{
	  if (!listOR) SgmlAddSon(minibibDoc,listOR=SgmlCreateMark("OR"));

	  bufor=BufferFromString(s1);

	  if ((s2=SgmlLeafGetData(SgmlGetSonTag(or,"s2"))))
	    {
	      BufferStrcat(bufor," - ");
	      BufferStrcat(bufor,s2);
	    }

	  if ((s3=SgmlLeafGetData(SgmlGetSonTag(or,"s3"))))
	    {
	      BufferStrcat(bufor," (");
	      BufferStrcat(bufor,s3);
	      BufferStrcat(bufor,")");
	    }

	  if ((s9=SgmlLeafGetData(SgmlGetSonTag(or,"s9"))))
	    {
	      BufferStrcat(bufor," - ");
	      BufferStrcat(bufor,s9);
	    }
	  SgmlAddSon(listOR, SgmlCreateLeaf("e",BufferString(bufor)));
	  BufferFree(bufor);
        }
    }

  pathProgOR=SgmlPathCompile("pA/fA35");
  iterOR=SgmlPathIteratorCreate(pathProgOR);

  SgmlPathIteratorInit(iterOR,pascalDoc);

  while ((or=SgmlPathNext(iterOR)))
    {
      Buffer *bufor;
      char *s1;
      bufor=BufferCreate(10,10);

      if ((s1=SgmlLeafGetData(SgmlGetSonTag(or,"s1"))))
	{
	  if (!listOR) SgmlAddSon(minibibDoc,listOR=SgmlCreateMark("OR"));

	  bufor=BufferFromString(s1);
	  BufferStrcat(bufor,", dep.brev.");
        }
      SgmlAddSon(listOR, SgmlCreateLeaf("e",BufferString(bufor)));
      BufferFree(bufor);
    }
}

void pascalSO()
{
  	 Buffer *bufso;
 	 char *c1;
         char *c2;
         char *c3;
         char *c4;
         char *c5;
         char *c6;
         char *c7;
         char *c8;         
         char *c9;
         char *c10;
         char *c11;
         char *c12;
         char *c13;
         char *c14;
         char *c15;
         char *c16;
         char *c17;
         char *c18;
         char *c19;
         char *c20;
         char *c21;
         char *c22;
         char *c23;
         char *c24;
         char *c25;
         char *c26;
         char *c27;
         char *c28;
         char *c29;
	 int i=0;
         c1=NULL;
         c2=NULL;

SgmlPathStrSearchFirstData(pascalDoc, "pA/fA64/s0", c1);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA03/s0", c2);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA05/s2", c3);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA06/s2", c4);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA06/s3", c5);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA27/s0", c6);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA20/s1", c7);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA20/s2", c8);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA29/s1", c9);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA20/s3", c10);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA29/s2", c11);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA29/s3", c12);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA20/s4", c13);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA29/s4", c14);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA20/s5", c15);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA29/s5", c16);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA20/s6", c17);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA29/s6", c18);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA20/s7", c19);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA29/s7", c20);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA20/s8", c21);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA29/s8", c22);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA07/s0", c23);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA07/s1", c24);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA07/s2", c25);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA39/s1", c26);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA39/s2", c27);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA48/s0", c28);
SgmlPathStrSearchFirstData(pascalDoc, "pA/fA45/s0", c29);

	  bufso=BufferCreate(10,10);
	  
	  if (c1) 
	  	{
		  i++;
	  	  BufferStrcpy(bufso, c1);
	  	}
	  else { if (c2)
	  	  {
		        i++;
	  		BufferStrcpy(bufso,c2);
	  	  }
	  	}
	  
	  if (c3)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, "vol. ");
	      BufferStrcat(bufso, c3);
	    }
	    
	   if (c4)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, "n&deg;. ");
	      BufferStrcat(bufso, c4);
	    }
	    
	   if (c5)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, c5);
	    }

	    if (c6)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, "ed. ");
	      BufferStrcat(bufso, c6);
	    }
	    
	    if (c7)
	    {
	      static RegExp *pp=NULL;
	      char *nbpp;

	      if (i!=0) BufferStrcat(bufso, "; ");
	      BufferStrcat(bufso, "pp. ");
	      i++;

	      if (!pp) pp=RegExpCreate("[ ]p");
	      if ((nbpp=RegExpBefore(pp,c7))) BufferStrcat(bufso, nbpp);
	      else BufferStrcat(bufso, c7);

	      free(nbpp);
	    }
	    
	   if (c8)
	    {
	      static RegExp *pp=NULL;
	      char *nbpp;

	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;

	      if (!pp) pp=RegExpCreate("[ ]pp");
	      if ((nbpp=RegExpBefore(pp,c8)))
		{
		  BufferStrcat(bufso, "pp. ");
		  BufferStrcat(bufso, nbpp);
		}
	      else BufferStrcat(bufso, c8);

	      free(nbpp);
	    }

	   if (c9)
	    {
	      static RegExp *pp1=NULL;
	      static RegExp *pp2=NULL;
	      char *nbpp;

	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;

	      if (!pp1) pp1=RegExpCreate("p.[ ]");
	      if (!pp2) pp2=RegExpCreate("[ ]p");
	      if ((nbpp=RegExpAfter(pp1,c9)))
		{
		  BufferStrcat(bufso, nbpp);
		  BufferStrcat(bufso, " p.");
		}
	      else if ((nbpp=RegExpBefore(pp2,c9)))
		     {
		       BufferStrcat(bufso, nbpp);
		       BufferStrcat(bufso, " p.");

		       free(nbpp);
		     }
	           else BufferStrcat(bufso, c9);
	    }

	   if (c10)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, c10);
	    }

	   if (c11)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, c11);
	    }

	   if (c12)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, c12);
	    }

	    if (c13)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, c13);
	      BufferStrcat(bufso, " ill.");
	    }
	    
	    if (c14)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, c14);
	      BufferStrcat(bufso, " ill.");
	    }
	    
	    if (c15)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, c15);
	      BufferStrcat(bufso, " cart.");
	    }
	    
	    if (c16)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, c16);
	      BufferStrcat(bufso, " cart.");
	    }
	    
	    if (c17)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, c17);
	      BufferStrcat(bufso, " anal.");
	    }
	    
	    if (c18)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, c18);
	      BufferStrcat(bufso, " anal.");
	    }
	    
	    if (c19)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, c19);
	      BufferStrcat(bufso, " tabl.");
	    }
	    
	    if (c20)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, c20);
	      BufferStrcat(bufso, " tabl.");
	    }
	    
	    if (c21)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, c21);
	      BufferStrcat(bufso, " pl.");
	    }
	    
	    if (c22)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, c22);
	      BufferStrcat(bufso, " pl.");
	    }
	    
	    if (c23)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, "n&deg;.off. ");
	      BufferStrcat(bufso, c23);
	    }
	   
	   if (c24)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, "USBC ");
	      BufferStrcat(bufso, c24);
	    }
	   
	   if (c25)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, "n&deg;.bibl. ");
	      BufferStrcat(bufso, c25);
	    }
	    
	   if (c26)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, "n&deg;.rapp. ");
	      BufferStrcat(bufso, c26);
	    }
	    
	   if (c27)
	    {
/*
En regle tres generale, c27 suit toujours c26 (deux parties d'un numero de rapport)
*/
	      if (i!=0) BufferStrcat(bufso, " ");
	      i++;
	      BufferStrcat(bufso, c27);
	    }
	    
	   if (c28)
	    {
	      if (i!=0) BufferStrcat(bufso, "; ");
	      i++;
	      BufferStrcat(bufso, "n&deg;.proj. ");
	      BufferStrcat(bufso, c28);
	    }
	    
	    if (c29)
	    {
	      static RegExp *ref1=NULL;
	      char *nbref;

	      if (i!=0) BufferStrcat(bufso, "; ");
	      BufferStrcat(bufso, "ref. ");
	      i++;

	      if (!ref1) ref1=RegExpCreate("[ ][Rr]");

	      if ((nbref=RegExpBefore(ref1,c29))) BufferStrcat(bufso, nbref);
	      else BufferStrcat(bufso, c29);

	      free(nbref);
	    }

	  if (i!=0)
	    {
	      SgmlAddSon(minibibDoc, listSO=SgmlCreateLeaf("SO",BufferString(bufso)));
	    }
	  BufferFree(bufso);
}

void pascalCONG()
{
  static SgmlPathIterator *iterCONG=NULL;
  static SgmlPathProg *pathProgCONG=NULL;
  SgmlNode *cong;

  if (!iterCONG)
    {
      pathProgCONG=SgmlPathCompile("pA/fA30");
      iterCONG=SgmlPathIteratorCreate(pathProgCONG);
    }

  SgmlPathIteratorInit(iterCONG,pascalDoc);
  while ((cong=SgmlPathNext(iterCONG)))
    {
      Buffer *bufcong;
      char *s1;
      char *sX;
      char *c1;
      char *c2;
      bufcong=BufferCreate(10,10);

      if (!listCONG) SgmlAddSon(minibibDoc,listCONG=SgmlCreateMark("CONG"));

      if ((s1=SgmlLeafGetData(SgmlGetSonTag(cong,"s1"))))
	{
	  bufcong=BufferFromString(s1);

	  if ((sX=SgmlLeafGetData(SgmlGetSonTag(cong,"s2"))))
	    {
	      BufferStrcat(bufcong,"; ");
	      BufferStrcat(bufcong,sX);
	    }

	  if ((sX=SgmlLeafGetData(SgmlGetSonTag(cong,"s3"))))
	    {
	      BufferStrcat(bufcong,"; ");
	      BufferStrcat(bufcong,sX);
	    }

	  if ((sX=SgmlLeafGetData(SgmlGetSonTag(cong,"s4"))))
	    {
	      BufferStrcat(bufcong,"; ");
	      BufferStrcat(bufcong,sX);
	    }

/*
Avant 1992 inclus, A30-1/-2 non repetitif, suivie eventuellement de A31-1 et A32-1
A partir de 1993, A31-1 et A32-1 n'existent plus mais A30-1 a -4 devient repetitive
*/

	  SgmlPathStrSearchFirstData(pascalDoc, "pA/fA31/s1", c1);
	  SgmlPathStrSearchFirstData(pascalDoc, "pA/fA32/s1", c2);

	  if (c1)
	  	  {
	  	  	BufferStrcat(bufcong, "; ");
	  	  	BufferStrcat(bufcong, c1);
	  	  }
	  	
	  if (c2)
	  	  {
	  	  	BufferStrcat(bufcong, "; ");
	  		BufferStrcat(bufcong, c2);
	  	  }
        }
	SgmlAddSon(listCONG, SgmlCreateLeaf("e",BufferString(bufcong)));
	BufferFree(bufcong);
    }
}

void pascalTHES()
{
  Buffer *bufthes;
  char *c1;
  char *c2;
  c1=NULL;
  c2=NULL;
  
  SgmlPathStrSearchFirstData(pascalDoc, "pA/fA42/s0", c1);
  SgmlPathStrSearchFirstData(pascalDoc, "pA/fA41/s1", c2);

  if (!c1 && !c2) return;

  bufthes=BufferCreate(10,10);
  
	if (c1)
	  	  {
	  	  	BufferStrcat(bufthes, c1);

			if (c2)
			  {
			    BufferStrcat(bufthes, " - ");
			  }
	  	  }
	  	
	if (c2)
	  	  {
	  	  	BufferStrcat(bufthes, c2);
	  	  }
	  		  		
	SgmlAddSon(minibibDoc, listTHES=SgmlCreateLeaf("THES",BufferString(bufthes)));
	BufferFree(bufthes);
}

void pascalBREV()
{
  Buffer *bufbrev;
  char *c1;
  char *c2;
  char *c3;
  char *c4;
  char *c5;
  char *c6;
  char *c7;
  char *c8;
  char *c9;
  int i=0;
  int j=0;
  int k=0;
  c1=NULL;
  c2=NULL;
  c3=NULL;
  c4=NULL;
  c5=NULL;
  c6=NULL;
  c7=NULL;
  c8=NULL;
  c9=NULL;
  
  SgmlPathStrSearchFirstData(pascalDoc, "pA/fA33/s5", c1);
  SgmlPathStrSearchFirstData(pascalDoc, "pA/fA33/s2", c2);
  SgmlPathStrSearchFirstData(pascalDoc, "pA/fA33/s1", c3);
  SgmlPathStrSearchFirstData(pascalDoc, "pA/fA36/s1", c4);
  SgmlPathStrSearchFirstData(pascalDoc, "pA/fA36/s2", c5);
  SgmlPathStrSearchFirstData(pascalDoc, "pA/fA37/s2", c6);
  SgmlPathStrSearchFirstData(pascalDoc, "pA/fA37/s3", c7);
  SgmlPathStrSearchFirstData(pascalDoc, "pA/fA37/s1", c8);
  SgmlPathStrSearchFirstData(pascalDoc, "pA/fA67/s0", c9);

  bufbrev=BufferCreate(10,10);
  
	if (c1)
	  	  {
		    i++;
	  	    BufferStrcat(bufbrev, "n&deg;. ");
	  	    BufferStrcat(bufbrev, c1);
	  	  }
	  	
	if (c2)
	  	  {
		    if (i!=0) BufferStrcat(bufbrev, ", ");
		    else BufferStrcat(bufbrev, "n&deg;. ");
		    i++;
	  	    BufferStrcat(bufbrev, c2);
	  	  }
	  	
	if (c3)
	  	  {
		    if (i!=0) BufferStrcat(bufbrev, " ");
		    else BufferStrcat(bufbrev, "n&deg;. ");
		    i++;
	  	    BufferStrcat(bufbrev, "(");
	  	    BufferStrcat(bufbrev, c3);
	  	    BufferStrcat(bufbrev, ")");
	  	  }
	  	
	if (c4)
	          {
		    if (i!=0) BufferStrcat(bufbrev, "; ");
		    i++;
		    j++;
	  	    BufferStrcat(bufbrev, "dep. ");
	  	    BufferStrcat(bufbrev, c4);
	  	  }
	  	
	if (c5)
	  	  {
		    if (j!=0) BufferStrcat(bufbrev, ", ");
		    else
		      {
			if (i!=0) BufferStrcat(bufbrev, "; ");
			BufferStrcat(bufbrev, "dep. ");
		      }
		    i++;
		    j++;
	  	    BufferStrcat(bufbrev, c5);
	  	  }
	  	
	if (c6)
	  	  {
		    if (i!=0) BufferStrcat(bufbrev, "; ");
		    i++;
		    j++;
		    k++;
	  	    BufferStrcat(bufbrev, "pr. ");
	  	    BufferStrcat(bufbrev, c6);
	  	  }
	  	
	if (c7)
	  	  {
		    if (k!=0) BufferStrcat(bufbrev, ", ");
		    else
		      {
			if (i!=0) BufferStrcat(bufbrev, "; ");
			BufferStrcat(bufbrev, "pr. ");
		      }
		    i++;
		    j++;
		    k++;
	  	    BufferStrcat(bufbrev, c7);
	  	  }
	  	
	if (c8)
	  	  {
		    if (k!=0) BufferStrcat(bufbrev, " ");
		    else
		      {
			if (i!=0) BufferStrcat(bufbrev, "; ");
			BufferStrcat(bufbrev, "pr. ");
		      }
		    i++;
		    j++;
		    k++;
	  	  	BufferStrcat(bufbrev, "(");
	  	  	BufferStrcat(bufbrev, c8);
	  	  	BufferStrcat(bufbrev, ")");
	  	  }
	  	
	if (c9)
	  	  {
		    if (i!=0) BufferStrcat(bufbrev, "; ");
		    i++;
	  	    BufferStrcat(bufbrev, "IPC ");
	  	    BufferStrcat(bufbrev, c9);
	  	  }
	
	if (i!=0)
	  {
	    SgmlAddSon(minibibDoc,listBREV=SgmlCreateLeaf("BREV",BufferString(bufbrev)));
	    BufferFree(bufbrev);
	  }
}

void pascalMAP()
{
  static SgmlPathIterator *iterMAP=NULL;
  static SgmlPathProg *pathProgMAP=NULL;
  SgmlNode *map;

  if (!iterMAP)
    {
      pathProgMAP=SgmlPathCompile("pA/fC05");
      iterMAP=SgmlPathIteratorCreate(pathProgMAP);
    }

  SgmlPathIteratorInit(iterMAP,pascalDoc);
  while ((map=SgmlPathNext(iterMAP)))
    {
      Buffer *bufmap;
      char *s1;
      char *sX;
      if ((s1=SgmlLeafGetData(SgmlGetSonTag(map,"s1"))))
	{
	  bufmap=BufferCreate(10,10);
	  if (!listMAP)SgmlAddSon(minibibDoc,listMAP=SgmlCreateMark("MAP"));

	  bufmap=BufferFromString(s1);

	  if ((sX=SgmlLeafGetData(SgmlGetSonTag(map,"s2"))))
	    {
	      BufferStrcat(bufmap, " : ");
	      BufferStrcat(bufmap, sX);
	    }

	  if ((sX=SgmlLeafGetData(SgmlGetSonTag(map,"s3"))))
	    {
	      BufferStrcat(bufmap, ", ");
	      BufferStrcat(bufmap, sX);
	    }

	  if ((sX=SgmlLeafGetData(SgmlGetSonTag(map,"s4"))))
	    {
	      BufferStrcat(bufmap, " - ");
	      BufferStrcat(bufmap, sX);
	    }

	  SgmlAddSon(listMAP, SgmlCreateLeaf("e",BufferString(bufmap)));
	  BufferFree(bufmap);	 
	}
    }
}

void pascalPU()
{
  static SgmlPathIterator *iterPU=NULL;
  static SgmlPathProg *pathProgPU=NULL;
  static SgmlNode *iterS2=NULL;

  SgmlNode *pu1;
  SgmlNode *pu2;
  char *s1;
  s1=NULL;

  if (!iterPU)
    {
      pathProgPU=SgmlPathCompile("pA/fA25");
      iterPU=SgmlPathIteratorCreate(pathProgPU);
    }

  SgmlPathIteratorInit(iterPU,pascalDoc);
  while ((pu1=SgmlPathNext(iterPU)))
    {
      int i=0;
      Buffer *bufpu;
      bufpu=BufferCreate(10,10);

      if (!listPU) SgmlAddSon(minibibDoc,listPU=SgmlCreateMark("PU"));

      s1=SgmlLeafGetData(SgmlGetSonTag(pu1,"s1"));

      if (s1) BufferStrcat(bufpu, s1);
      else BufferStrcat(bufpu,"s.n.");

      if (iterS2) SgmlIterTagInit(iterS2,pu1,"s2");
      else iterS2=SgmlIterTagCreate(pu1,"s2");

      while ((pu2=SgmlIterTagNext(iterS2)))
	  {
	    i++;

	    if (i==1) BufferStrcat(bufpu, " : ");
	    else BufferStrcat(bufpu, ", ");

	    BufferStrcat(bufpu, SgmlLeafGetData(pu2));
	  }

      if (i==0) BufferStrcat(bufpu, " : s.l.");

      SgmlAddSon(listPU,SgmlCreateLeaf("e",BufferString(bufpu)));
      BufferFree(bufpu);
    }
}

void pascalDA()
{
  char *s1;
  char *s2;
  char *s3;
  s1=NULL;
  s2=NULL;
  s3=NULL;
  
  SgmlPathStrSearchFirstData(pascalDoc, "pA/fA21/s1", s1);
  SgmlPathStrSearchFirstData(pascalDoc, "pA/fA21/s4", s2);
  SgmlPathStrSearchFirstData(pascalDoc, "pA/fA22/s1", s3);

/*
fA21-1 existe souvent seule, fA21-4 n'existe normalement pas seule
fA21-1 et -4 sont generalement presentes ensemble, avec preference a la -4 (these)
fA22-1 peut coexister avec les 2 autres, sans preseance de recuperation sur les autres
fA22-1 peut exister seule, a prendre dans ce cas
*/

	if (s1)
	  	 {
		    Buffer *bufda;
		    bufda=BufferCreate(10,10);
	  	    BufferStrcat(bufda, s1);

		    if (s2)
		      {
			BufferFree(bufda);
			bufda=BufferCreate(10,10);
			BufferStrcat(bufda, s2);
		      }
		    SgmlAddSon(minibibDoc,listDA=SgmlCreateLeaf("DA",BufferString(bufda)));
		    BufferFree(bufda);
		  }
	   else
	          {
		    if (s3)
		      {
			Buffer *bufda;
			bufda=BufferCreate(10,10);
			BufferStrcat(bufda, s3);

			if (s2)
			  {
			    BufferFree(bufda);
			    bufda=BufferCreate(10,10);
			    BufferStrcat(bufda, s2);
			  }
			SgmlAddSon(minibibDoc,listDA=SgmlCreateLeaf("DA",BufferString(bufda)));
			BufferFree(bufda);
		      }
		  }
}

void pascalTD()
{
  static SgmlPathIterator *iterMode=NULL;
  static SgmlPathProg *pathProgMode=NULL;
  SgmlNode *mode;

  Buffer *buftd;
  char *s1;
  char *s2;
  s1=NULL;
  s2=NULL;
  
  if (!iterMode)
    {
      pathProgMode=SgmlPathCompile("pA/fA60/s3");
      iterMode=SgmlPathIteratorCreate(pathProgMode);
    }

  SgmlPathStrSearchFirstData(pascalDoc, "pA/fA60/s1", s1);
  SgmlPathStrSearchFirstData(pascalDoc, "pA/fA60/s2", s2);

  if (!s1) return;
  if (!listTD) SgmlAddSon(minibibDoc,listTD=SgmlCreateMark("TD"));
  
	if (s1)
	  	  {
		        buftd=BufferCreate(10,10);
	  	  	BufferStrcat(buftd, "pr. ");
	  	  	BufferStrcat(buftd, s1);
			SgmlAddSon(listTD,SgmlCreateLeaf("e",BufferString(buftd)));
			BufferFree(buftd);
	  	  }
	  	
	if (s2)
	  	  {
		        buftd=BufferCreate(10,10);
	  	  	BufferStrcat(buftd, "sec. ");
	  	  	BufferStrcat(buftd, s2);
			SgmlAddSon(listTD,SgmlCreateLeaf("e",BufferString(buftd)));
			BufferFree(buftd);
	  	  }

	SgmlPathIteratorInit(iterMode,pascalDoc);
	while ((mode=SgmlPathNext(iterMode)))
	  {
	    buftd=BufferCreate(10,10);
      	    BufferStrcat(buftd, "mod. ");
	    BufferStrcat(buftd, SgmlLeafGetData(mode));
	    SgmlAddSon(listTD,SgmlCreateLeaf("e",BufferString(buftd)));
	    BufferFree(buftd);
	  }
}

void pascalPY()
{
  static SgmlPathIterator *iterPY=NULL;
  static SgmlPathProg *pathProgPY=NULL;
  SgmlNode *py;
  char *dataElement;

  if (!iterPY)
    {
      pathProgPY=SgmlPathCompile("pA/fA66/s0");
      iterPY=SgmlPathIteratorCreate(pathProgPY);
    }

  SgmlPathIteratorInit(iterPY,pascalDoc);

  while ((py=SgmlPathNext(iterPY)))
    {
      if (!listPY)
	{
	listPY=SgmlCreateMark("PY");
	SgmlAddSon(minibibDoc,listPY);
	}
      dataElement=SgmlLeafGetData(py);
      SgmlAddSon(listPY, SgmlCreateLeaf("e",dataElement));
    }
}

void pascalLA()
{
  static SgmlPathIterator *iterLA=NULL;
  static SgmlPathProg *pathProgLA=NULL;
  SgmlNode *la;
  char *dataElement;

  if (!iterLA)
    {
      pathProgLA=SgmlPathCompile("pA/fA23/s0");
      iterLA=SgmlPathIteratorCreate(pathProgLA);
    }

  SgmlPathIteratorInit(iterLA,pascalDoc);

  while ((la=SgmlPathNext(iterLA)))
    {
      if (!listLA)
	{
	listLA=SgmlCreateMark("LA");
	SgmlAddSon(minibibDoc,listLA);
	}
      dataElement=SgmlLeafGetData(la);
      SgmlAddSon(listLA, SgmlCreateLeaf("e",dataElement));
    }
}

void pascalLR()
{
  static SgmlPathIterator *iterLR=NULL;
  static SgmlPathProg *pathProgLR=NULL;
  SgmlNode *lr;
  char *dataElement;

  if (!iterLR)
    {
      pathProgLR=SgmlPathCompile("pA/fA24/s0");
      iterLR=SgmlPathIteratorCreate(pathProgLR);
    }

  SgmlPathIteratorInit(iterLR,pascalDoc);

  while ((lr=SgmlPathNext(iterLR)))
    {
      if (!listLR)
	{
	listLR=SgmlCreateMark("LR");
	SgmlAddSon(minibibDoc,listLR);
	}
      dataElement=SgmlLeafGetData(lr);
      SgmlAddSon(listLR, SgmlCreateLeaf("e",dataElement));
    }
}

void pascalISSN()
{
  static SgmlPathIterator *iterISSN=NULL;
  static SgmlPathProg *pathProgISSN=NULL;
  SgmlNode *issn;
  char *dataElement;

  if (!iterISSN)
    {
      pathProgISSN=SgmlPathCompile("pA/fA01/s0");
      iterISSN=SgmlPathIteratorCreate(pathProgISSN);
    }

  SgmlPathIteratorInit(iterISSN,pascalDoc);

  while ((issn=SgmlPathNext(iterISSN)))
    {
      if (!listISSN)
	{
	listISSN=SgmlCreateMark("ISSN");
	SgmlAddSon(minibibDoc,listISSN);
	}
      dataElement=SgmlLeafGetData(issn);
      SgmlAddSon(listISSN, SgmlCreateLeaf("e",dataElement));
    }
}

void pascalCODN()
{
  static SgmlPathIterator *iterCODN=NULL;
  static SgmlPathProg *pathProgCODN=NULL;
  SgmlNode *codn;
  char *dataElement;

  if (!iterCODN)
    {
      pathProgCODN=SgmlPathCompile("pA/fA02/s0");
      iterCODN=SgmlPathIteratorCreate(pathProgCODN);
    }

  SgmlPathIteratorInit(iterCODN,pascalDoc);

  while ((codn=SgmlPathNext(iterCODN)))
    {
      if (!listCODN)
	{
	listCODN=SgmlCreateMark("CODN");
	SgmlAddSon(minibibDoc,listCODN);
	}
      dataElement=SgmlLeafGetData(codn);
      SgmlAddSon(listCODN, SgmlCreateLeaf("e",dataElement));
    }
}

void pascalISBN()
{
  static SgmlPathIterator *iterISBN=NULL;
  static SgmlPathProg *pathProgISBN=NULL;
  SgmlNode *isbn;
  char *dataElement;

  if (!iterISBN)
    {
      pathProgISBN=SgmlPathCompile("pA/fA26/s0");
      iterISBN=SgmlPathIteratorCreate(pathProgISBN);
    }

  SgmlPathIteratorInit(iterISBN,pascalDoc);

  while ((isbn=SgmlPathNext(iterISBN)))
    {
      if (!listISBN)
	{
	listISBN=SgmlCreateMark("ISBN");
	SgmlAddSon(minibibDoc,listISBN);
	}
      dataElement=SgmlLeafGetData(isbn);
      SgmlAddSon(listISBN, SgmlCreateLeaf("e",dataElement));
    }
}

void pascalNT()
{
  static SgmlPathIterator *iterNT=NULL;
  static SgmlPathProg *pathProgNT=NULL;
  SgmlNode *note;
  char *c1;
  char *c2;

  if (!iterNT)
    {
      pathProgNT=SgmlPathCompile("pA/fC06/s0");
      iterNT=SgmlPathIteratorCreate(pathProgNT);
    }

  SgmlPathStrSearchFirstData(pascalDoc, "pA/fA99/s0", c1);
  SgmlPathStrSearchFirstData(pascalDoc, "pA/fA65/s0", c2);

      if (c1)
	{
          if (!listNT) SgmlAddSon(minibibDoc,listNT=SgmlCreateMark("NT"));
	  SgmlAddSon(listNT,SgmlCreateLeaf("e",c1));
	}

      if (c2)
	{
          if (!listNT) SgmlAddSon(minibibDoc,listNT=SgmlCreateMark("NT"));
	  SgmlAddSon(listNT,SgmlCreateLeaf("e",c2));
	}

      SgmlPathIteratorInit(iterNT,pascalDoc);
      while ((note=SgmlPathNext(iterNT)))
	{
	  if (!listNT) SgmlAddSon(minibibDoc,listNT=SgmlCreateMark("NT"));
	  SgmlAddSon(listNT,SgmlCreateLeaf("e",SgmlLeafGetData(note)));
	}
}

/*
void pascalAB()
{
  static SgmlPathIterator *iterAB=NULL;
  static SgmlPathProg *pathProgAB=NULL;
  SgmlNode *ab;
  SgmlNode *sz0;

  if (!iterAB)
    {
      pathProgAB=SgmlPathCompile("pA/fC01");
      iterAB=SgmlPathIteratorCreate(pathProgAB);
    }

  SgmlPathIteratorInit(iterAB,pascalDoc);

  while (ab=SgmlPathNext(iterAB))
    {
      if (!listAB) SgmlAddSon(minibibDoc,listAB=SgmlCreateMark("AB"));

      sz0=SgmlCopy(SgmlGetSonTag(ab, "s0"));
      SgmlSetTag(sz0, "e");
      SgmlAddSon(listAB,sz0);
    }
}
*/

void pascalAB()
{
  char *s0fre;
  char *s0eng;

  s0fre=NULL;
  s0eng=NULL;

  SgmlPathStrSearchFirstData(pascalDoc, "pA/fC01 l=FRE/s0", s0fre);
  SgmlPathStrSearchFirstData(pascalDoc, "pA/fC01 l=ENG/s0", s0eng);

  if (s0fre) SgmlAddSon(minibibDoc,listABFR=SgmlCreateLeaf("ABFR",s0fre));
  if (s0eng) SgmlAddSon(minibibDoc,listABEN=SgmlCreateLeaf("ABEN",s0eng));
}

void pascalCC()
{
  static SgmlPathIterator *iterCC=NULL;
  static SgmlPathProg *pathProgCC=NULL;
  SgmlNode *cc;

  if (!iterCC)
    {
      pathProgCC=SgmlPathCompile("pA/fC02");
      iterCC=SgmlPathIteratorCreate(pathProgCC);
    }

  SgmlPathIteratorInit(iterCC,pascalDoc);

  while ((cc=SgmlPathNext(iterCC)))
    {
      Buffer *bufcc;
      char *c0;
      char *c1;
      char *c2;
      c0=NULL;
      c1=NULL;
      c2=NULL;

      if (!listCC) SgmlAddSon(minibibDoc,listCC=SgmlCreateMark("CC"));

      if ((c0=SgmlLeafGetData(SgmlGetSonTag(cc,"s0"))))
	{
	  bufcc=BufferCreate(10,10);
	  SgmlAddSon(listCC,SgmlCreateLeaf("e",c0));
	  BufferFree(bufcc);
	}

      if ((c1=SgmlLeafGetData(SgmlGetSonTag(cc,"s1"))))
	{
	  bufcc=BufferCreate(10,10);
	  BufferStrcat(bufcc, c1);

          if ((c2=SgmlLeafGetData(SgmlGetSonTag(cc,"s2"))))
  	    {
	      BufferStrcat(bufcc, ".");
	      BufferStrcat(bufcc, c2);
	    }

          SgmlAddSon(listCC,SgmlCreateLeaf("e",BufferString(bufcc)));
          BufferFree(bufcc);  
	}
    }
}

void pascalFD()
{
  static SgmlPathIterator *iterFD=NULL;
  static SgmlPathProg *pathProgFD=NULL;
  static SgmlNode *iters1=NULL;
  static SgmlNode *iters2=NULL;
  SgmlNode *fd;
  SgmlNode *sz1;
  SgmlNode *sz2;

  if (!iterFD)
    {
      pathProgFD=SgmlPathCompile("pA/fC03 l=FRE");
      iterFD=SgmlPathIteratorCreate(pathProgFD);
    }

  SgmlPathIteratorInit(iterFD,pascalDoc);
  while ((fd=SgmlPathNext(iterFD)))
    {
      char *c0;
      int i=0;
      Buffer *buffd;

      if (!listFD) SgmlAddSon(minibibDoc,listFD=SgmlCreateMark("FD"));
      c0=SgmlLeafGetData(SgmlGetSonTag(fd,"s0"));

/*
Dans un tel noeud fd :
apres un descripteur en s0 (sous-zone non rep.), on peut avoir :
soit une ou plusieurs s1 (indic de role) - ex: ANA, ENT, SOL...
soit une ou plusieurs s2 (attributs descr.) - mais on ne retient que PAC (codes PACS) ou COG (coord. geo.)
Dans ces situations retenues, les presences de s1 et s2 sont exclusives
*/

      if (iters1) SgmlIterTagInit(iters1,fd,"s1");
      else iters1=SgmlIterTagCreate(fd,"s1");

      while ((sz1=SgmlIterTagNext(iters1)))
	{
	  buffd=BufferCreate(10,10);
	  i++;

	  BufferStrcat(buffd,c0);
	  BufferStrcat(buffd,":");
	  BufferStrcat(buffd,SgmlLeafGetData(sz1));

	  SgmlAddSon(listFD, SgmlCreateLeaf("e",BufferString(buffd)));
	  BufferFree(buffd);
	}

      if (iters2) SgmlIterTagInit(iters2,fd,"s2");
      else iters2=SgmlIterTagCreate(fd,"s2");

      while ((sz2=SgmlIterTagNext(iters2)))
	{
	  char *c2;
	  int j=0;
	  c2=NULL;
	  buffd=BufferCreate(10,10);

	  c2=SgmlLeafGetData(sz2);
	  if (strcmp(c2,"PAC")==0)
	    {
	      i++;
	      j++;
	      BufferStrcat(buffd,"PACS:");
	      BufferStrcat(buffd,c0);
            }

	  if (strcmp(c2,"COG")==0)
	    {
	      i++;
              j++;
	      BufferStrcat(buffd,"COORGEO:");
	      BufferStrcat(buffd,c0);
            }

	  if (j!=0) SgmlAddSon(listFD, SgmlCreateLeaf("e",BufferString(buffd)));
	  BufferFree(buffd);
	}

      if (i==0) SgmlAddSon(listFD, SgmlCreateLeaf("e",c0));
    }
}

void pascalED()
{
  static SgmlPathIterator *iterED=NULL;
  static SgmlPathProg *pathProgED=NULL;
  static SgmlNode *iters1=NULL;
  static SgmlNode *iters2=NULL;
  SgmlNode *ed;
  SgmlNode *sz1;
  SgmlNode *sz2;

  if (!iterED)
    {
      pathProgED=SgmlPathCompile("pA/fC03 l=ENG");
      iterED=SgmlPathIteratorCreate(pathProgED);
    }

  SgmlPathIteratorInit(iterED,pascalDoc);
  while ((ed=SgmlPathNext(iterED)))
    {
      char *c0;
      int i=0;
      Buffer *bufed;

      if (!listED) SgmlAddSon(minibibDoc,listED=SgmlCreateMark("ED"));
      c0=SgmlLeafGetData(SgmlGetSonTag(ed,"s0"));

      if (iters1) SgmlIterTagInit(iters1,ed,"s1");
      else iters1=SgmlIterTagCreate(ed,"s1");

      while ((sz1=SgmlIterTagNext(iters1)))
	{
	  bufed=BufferCreate(10,10);
	  i++;

	  BufferStrcat(bufed,c0);
	  BufferStrcat(bufed,":");
	  BufferStrcat(bufed,SgmlLeafGetData(sz1));

	  SgmlAddSon(listED, SgmlCreateLeaf("e",BufferString(bufed)));
	  BufferFree(bufed);
	}

      if (iters2) SgmlIterTagInit(iters2,ed,"s2");
      else iters2=SgmlIterTagCreate(ed,"s2");

      while ((sz2=SgmlIterTagNext(iters2)))
	{
	  char *c2;
	  int j=0;
	  c2=NULL;
	  bufed=BufferCreate(10,10);

	  c2=SgmlLeafGetData(sz2);
	  if (strcmp(c2,"PAC")==0)
	    {
	      i++;
	      j++;
	      BufferStrcat(bufed,"PACS:");
	      BufferStrcat(bufed,c0);
            }

	  if (strcmp(c2,"COG")==0)
	    {
	      i++;
              j++;
	      BufferStrcat(bufed,"COORGEO:");
	      BufferStrcat(bufed,c0);
            }

	  if (j!=0) SgmlAddSon(listED, SgmlCreateLeaf("e",BufferString(bufed)));
	  BufferFree(bufed);
	}

      if (i==0) SgmlAddSon(listED, SgmlCreateLeaf("e",c0));
    }
}

void pascalSD()
{
  static SgmlPathIterator *iterSD=NULL;
  static SgmlPathProg *pathProgSD=NULL;
  static SgmlNode *iters1=NULL;
  static SgmlNode *iters2=NULL;
  SgmlNode *sd;
  SgmlNode *sz1;
  SgmlNode *sz2;

  if (!iterSD)
    {
      pathProgSD=SgmlPathCompile("pA/fC03 l=SPA");
      iterSD=SgmlPathIteratorCreate(pathProgSD);
    }

  SgmlPathIteratorInit(iterSD,pascalDoc);
  while ((sd=SgmlPathNext(iterSD)))
    {
      char *c0;
      int i=0;
      Buffer *bufsd;

      if (!listSD) SgmlAddSon(minibibDoc,listSD=SgmlCreateMark("SD"));
      c0=SgmlLeafGetData(SgmlGetSonTag(sd,"s0"));

      if (iters1) SgmlIterTagInit(iters1,sd,"s1");
      else iters1=SgmlIterTagCreate(sd,"s1");

      while ((sz1=SgmlIterTagNext(iters1)))
	{
	  bufsd=BufferCreate(10,10);
	  i++;

	  BufferStrcat(bufsd,c0);
	  BufferStrcat(bufsd,":");
	  BufferStrcat(bufsd,SgmlLeafGetData(sz1));

	  SgmlAddSon(listSD, SgmlCreateLeaf("e",BufferString(bufsd)));
	  BufferFree(bufsd);
	}

      if (iters2) SgmlIterTagInit(iters2,sd,"s2");
      else iters2=SgmlIterTagCreate(sd,"s2");

      while ((sz2=SgmlIterTagNext(iters2)))
	{
	  char *c2;
	  int j=0;
	  c2=NULL;
	  bufsd=BufferCreate(10,10);

	  c2=SgmlLeafGetData(sz2);
	  if (strcmp(c2,"PAC")==0)
	    {
	      i++;
	      j++;
	      BufferStrcat(bufsd,"PACS:");
	      BufferStrcat(bufsd,c0);
            }

	  if (strcmp(c2,"COG")==0)
	    {
	      i++;
              j++;
	      BufferStrcat(bufsd,"COORGEO:");
	      BufferStrcat(bufsd,c0);
            }

	  if (j!=0) SgmlAddSon(listSD, SgmlCreateLeaf("e",BufferString(bufsd)));
	  BufferFree(bufsd);
	}

      if (i==0) SgmlAddSon(listSD, SgmlCreateLeaf("e",c0));
    }
}

void pascalFG()
{
  static SgmlPathIterator *iterFG=NULL;
  static SgmlPathProg *pathProgFG=NULL;
  static SgmlNode *iters1=NULL;
  static SgmlNode *iters2=NULL;
  SgmlNode *fg;
  SgmlNode *sz1;
  SgmlNode *sz2;

  if (!iterFG)
    {
      pathProgFG=SgmlPathCompile("pA/fC07 l=FRE");
      iterFG=SgmlPathIteratorCreate(pathProgFG);
    }

  SgmlPathIteratorInit(iterFG,pascalDoc);
  while ((fg=SgmlPathNext(iterFG)))
    {
      char *c0;
      int i=0;
      Buffer *buffg;

      if (!listFG) SgmlAddSon(minibibDoc,listFG=SgmlCreateMark("FG"));
      c0=SgmlLeafGetData(SgmlGetSonTag(fg,"s0"));

      if (iters1) SgmlIterTagInit(iters1,fg,"s1");
      else iters1=SgmlIterTagCreate(fg,"s1");

      while ((sz1=SgmlIterTagNext(iters1)))
	{
	  buffg=BufferCreate(10,10);
	  i++;

	  BufferStrcat(buffg,c0);
	  BufferStrcat(buffg,":");
	  BufferStrcat(buffg,SgmlLeafGetData(sz1));

	  SgmlAddSon(listFG, SgmlCreateLeaf("e",BufferString(buffg)));
	  BufferFree(buffg);
	}

      if (iters2) SgmlIterTagInit(iters2,fg,"s2");
      else iters2=SgmlIterTagCreate(fg,"s2");

      while ((sz2=SgmlIterTagNext(iters2)))
	{
	  char *c2;
	  int j=0;
	  c2=NULL;
	  buffg=BufferCreate(10,10);

	  c2=SgmlLeafGetData(sz2);
	  if (strcmp(c2,"PAC")==0)
	    {
	      i++;
	      j++;
	      BufferStrcat(buffg,"PACS:");
	      BufferStrcat(buffg,c0);
            }

	  if (strcmp(c2,"COG")==0)
	    {
	      i++;
              j++;
	      BufferStrcat(buffg,"COORGEO:");
	      BufferStrcat(buffg,c0);
            }

	  if (j!=0) SgmlAddSon(listFG, SgmlCreateLeaf("e",BufferString(buffg)));
	  BufferFree(buffg);
	}

      if (i==0) SgmlAddSon(listFG, SgmlCreateLeaf("e",c0));
    }
}

void pascalEG()
{
  static SgmlPathIterator *iterEG=NULL;
  static SgmlPathProg *pathProgEG=NULL;
  static SgmlNode *iters1=NULL;
  static SgmlNode *iters2=NULL;
  SgmlNode *eg;
  SgmlNode *sz1;
  SgmlNode *sz2;

  if (!iterEG)
    {
      pathProgEG=SgmlPathCompile("pA/fC07 l=ENG");
      iterEG=SgmlPathIteratorCreate(pathProgEG);
    }

  SgmlPathIteratorInit(iterEG,pascalDoc);
  while ((eg=SgmlPathNext(iterEG)))
    {
      char *c0;
      int i=0;
      Buffer *bufeg;

      if (!listEG) SgmlAddSon(minibibDoc,listEG=SgmlCreateMark("EG"));
      c0=SgmlLeafGetData(SgmlGetSonTag(eg,"s0"));

      if (iters1) SgmlIterTagInit(iters1,eg,"s1");
      else iters1=SgmlIterTagCreate(eg,"s1");

      while ((sz1=SgmlIterTagNext(iters1)))
	{
	  bufeg=BufferCreate(10,10);
	  i++;

	  BufferStrcat(bufeg,c0);
	  BufferStrcat(bufeg,":");
	  BufferStrcat(bufeg,SgmlLeafGetData(sz1));

	  SgmlAddSon(listEG, SgmlCreateLeaf("e",BufferString(bufeg)));
	  BufferFree(bufeg);
	}

      if (iters2) SgmlIterTagInit(iters2,eg,"s2");
      else iters2=SgmlIterTagCreate(eg,"s2");

      while ((sz2=SgmlIterTagNext(iters2)))
	{
	  char *c2;
	  int j=0;
	  c2=NULL;
	  bufeg=BufferCreate(10,10);

	  c2=SgmlLeafGetData(sz2);
	  if (strcmp(c2,"PAC")==0)
	    {
	      i++;
	      j++;
	      BufferStrcat(bufeg,"PACS:");
	      BufferStrcat(bufeg,c0);
            }

	  if (strcmp(c2,"COG")==0)
	    {
	      i++;
              j++;
	      BufferStrcat(bufeg,"COORGEO:");
	      BufferStrcat(bufeg,c0);
            }

	  if (j!=0) SgmlAddSon(listEG, SgmlCreateLeaf("e",BufferString(bufeg)));
	  BufferFree(bufeg);
	}

      if (i==0) SgmlAddSon(listEG, SgmlCreateLeaf("e",c0));
    }
}

void pascalSG()
{
  static SgmlPathIterator *iterSG=NULL;
  static SgmlPathProg *pathProgSG=NULL;
  static SgmlNode *iters1=NULL;
  static SgmlNode *iters2=NULL;
  SgmlNode *sg;
  SgmlNode *sz1;
  SgmlNode *sz2;

  if (!iterSG)
    {
      pathProgSG=SgmlPathCompile("pA/fC07 l=SPA");
      iterSG=SgmlPathIteratorCreate(pathProgSG);
    }

  SgmlPathIteratorInit(iterSG,pascalDoc);
  while ((sg=SgmlPathNext(iterSG)))
    {
      char *c0;
      int i=0;
      Buffer *bufsg;

      if (!listSG) SgmlAddSon(minibibDoc,listSG=SgmlCreateMark("SG"));
      c0=SgmlLeafGetData(SgmlGetSonTag(sg,"s0"));

      if (iters1) SgmlIterTagInit(iters1,sg,"s1");
      else iters1=SgmlIterTagCreate(sg,"s1");

      while ((sz1=SgmlIterTagNext(iters1)))
	{
	  bufsg=BufferCreate(10,10);
	  i++;

	  BufferStrcat(bufsg,c0);
	  BufferStrcat(bufsg,":");
	  BufferStrcat(bufsg,SgmlLeafGetData(sz1));

	  SgmlAddSon(listSG, SgmlCreateLeaf("e",BufferString(bufsg)));
	  BufferFree(bufsg);
	}

      if (iters2) SgmlIterTagInit(iters2,sg,"s2");
      else iters2=SgmlIterTagCreate(sg,"s2");

      while ((sz2=SgmlIterTagNext(iters2)))
	{
	  char *c2;
	  int j=0;
	  c2=NULL;
	  bufsg=BufferCreate(10,10);

	  c2=SgmlLeafGetData(sz2);
	  if (strcmp(c2,"PAC")==0)
	    {
	      i++;
	      j++;
	      BufferStrcat(bufsg,"PACS:");
	      BufferStrcat(bufsg,c0);
            }

	  if (strcmp(c2,"COG")==0)
	    {
	      i++;
              j++;
	      BufferStrcat(bufsg,"COORGEO:");
	      BufferStrcat(bufsg,c0);
            }

	  if (j!=0) SgmlAddSon(listSG, SgmlCreateLeaf("e",BufferString(bufsg)));
	  BufferFree(bufsg);
	}

      if (i==0) SgmlAddSon(listSG, SgmlCreateLeaf("e",c0));
    }
}

void pascalLO()
{
  static SgmlPathIterator *iterLO=NULL;
  static SgmlPathProg *pathProgLO=NULL;
  SgmlNode *lo;

  if (!iterLO)
    {
      pathProgLO=SgmlPathCompile("pA/fA43");
      iterLO=SgmlPathIteratorCreate(pathProgLO);
    }

  SgmlPathIteratorInit(iterLO,pascalDoc);
  while ((lo=SgmlPathNext(iterLO)))
    {
      Buffer *buflo;
      char *s1;
      char *sX;
      if ((s1=SgmlLeafGetData(SgmlGetSonTag(lo,"s1"))))
	{
	  if (!listLO)SgmlAddSon(minibibDoc,listLO=SgmlCreateMark("LO"));
	  buflo=BufferFromString(s1);
	  if ((sX=SgmlLeafGetData(SgmlGetSonTag(lo,"s2"))))
	    {
	      BufferStrcat(buflo, "-");
	      BufferStrcat(buflo, sX);
	    }
	  if ((sX=SgmlLeafGetData(SgmlGetSonTag(lo,"s3"))))
	    {
	      BufferStrcat(buflo, ".");
	      BufferStrcat(buflo, sX);
	    }
	  if ((sX=SgmlLeafGetData(SgmlGetSonTag(lo,"s4"))))
	    {
	      BufferStrcat(buflo, ".");
	      BufferStrcat(buflo, sX);
	    }
	  if ((sX=SgmlLeafGetData(SgmlGetSonTag(lo,"s5"))))
	    {
	      BufferStrcat(buflo, ".");
	      BufferStrcat(buflo, sX);
	    }
	  SgmlAddSon(listLO, SgmlCreateLeaf("e",BufferString(buflo)));
	  BufferFree(buflo);
	}
    }
}

void pascalTIC()
{
  char *fre;
  char *eng;
  char *spa;
  char *oth;

  fre=NULL;
  eng=NULL;
  spa=NULL;
  oth=NULL;

  SgmlPathStrSearchFirstData(pascalDoc, "pR/fA09/s1", oth);
  SgmlPathStrSearchFirstData(pascalDoc, "pR/fA09 l=FRE/s1", fre);
  SgmlPathStrSearchFirstData(pascalDoc, "pR/fA09 l=ENG/s1", eng);
  SgmlPathStrSearchFirstData(pascalDoc, "pR/fA09 l=SPA/s1", spa);

  if (!oth) return;
  else
    {
      if (fre) SgmlAddSon(minibibDoc, listTIC=SgmlCreateLeaf("FTC",fre));
      else
	{
	  if (eng) SgmlAddSon(minibibDoc, listTIC=SgmlCreateLeaf("ETC",eng));
	  else
	    {
	      if (spa) SgmlAddSon(minibibDoc, listTIC=SgmlCreateLeaf("STC",spa));
	      else SgmlAddSon(minibibDoc, listTIC=SgmlCreateLeaf("OTC",oth));
	    }
	}
    }
}

void pascalSOC()
{
  	 Buffer *bufsoc;
 	 char *c1;
         char *c2;
         char *c3;
         char *c4;
         char *c5;
         char *c6;
         char *c7;
         char *c8;
         char *c9;
         char *c10;
	 int i=0;
         c1=NULL;
         c2=NULL;
         c3=NULL;
         c4=NULL;
         c5=NULL;
         c6=NULL;
         c7=NULL;
         c8=NULL;
         c9=NULL;
         c10=NULL;

SgmlPathStrSearchFirstData(pascalDoc, "pR/fA64/s0", c1);
SgmlPathStrSearchFirstData(pascalDoc, "pR/fA03/s0", c2);
SgmlPathStrSearchFirstData(pascalDoc, "pR/fA05/s2", c3);
SgmlPathStrSearchFirstData(pascalDoc, "pR/fA06/s2", c4);
SgmlPathStrSearchFirstData(pascalDoc, "pR/fA06/s3", c5);
SgmlPathStrSearchFirstData(pascalDoc, "pR/fA07/s0", c6);
SgmlPathStrSearchFirstData(pascalDoc, "pR/fA07/s1", c7);
SgmlPathStrSearchFirstData(pascalDoc, "pR/fA07/s2", c8);
SgmlPathStrSearchFirstData(pascalDoc, "pR/fA39/s1", c9);
SgmlPathStrSearchFirstData(pascalDoc, "pR/fA39/s2", c10);

	  bufsoc=BufferCreate(10,10);
	  
	  if (c1) 
	  	{
		  i++;
	  	  BufferStrcpy(bufsoc, c1);
	  	}
	  else { if (c2)
	  	  {
		        i++;
	  		BufferStrcpy(bufsoc,c2);
	  	  }
	  	}
	  
	  if (c3)
	    {
	      if (i!=0) BufferStrcat(bufsoc, "; ");
	      i++;
	      BufferStrcat(bufsoc, "vol. ");
	      BufferStrcat(bufsoc, c3);
	    }
	    
	   if (c4)
	    {
	      if (i!=0) BufferStrcat(bufsoc, "; ");
	      i++;
	      BufferStrcat(bufsoc, "n&deg;. ");
	      BufferStrcat(bufsoc, c4);
	    }
	    
	   if (c5)
	    {
	      if (i!=0) BufferStrcat(bufsoc, "; ");
	      i++;
	      BufferStrcat(bufsoc, c5);
	    }
	    
	   if (c6)
	    {
	      if (i!=0) BufferStrcat(bufsoc, "; ");
	      i++;
	      BufferStrcat(bufsoc, "n&deg;.off. ");
	      BufferStrcat(bufsoc, c6);
	    }
	   
	   if (c7)
	    {
	      if (i!=0) BufferStrcat(bufsoc, "; ");
	      i++;
	      BufferStrcat(bufsoc, "USBC ");
	      BufferStrcat(bufsoc, c7);
	    }
	   
	   if (c8)
	    {
	      if (i!=0) BufferStrcat(bufsoc, "; ");
	      i++;
	      BufferStrcat(bufsoc, "n&deg;.bibl. ");
	      BufferStrcat(bufsoc, c8);
	    }
	    
	   if (c9)
	    {
	      if (i!=0) BufferStrcat(bufsoc, "; ");
	      i++;
	      BufferStrcat(bufsoc, "n&deg;.rapp. ");
	      BufferStrcat(bufsoc, c9);
	    }
	    
	   if (c10)
	    {
	      if (i!=0) BufferStrcat(bufsoc, " ");
	      i++;
	      BufferStrcat(bufsoc, c10);
	    }
	    
	  if (i!=0)
	    {
	      SgmlAddSon(minibibDoc, listSOC=SgmlCreateLeaf("SOC",BufferString(bufsoc)));
	    }
	  BufferFree(bufsoc);
}

void pascalCONGC()
{
  static SgmlPathIterator *iterCONGC=NULL;
  static SgmlPathProg *pathProgCONGC=NULL;
  SgmlNode *congc;

  if (!iterCONGC)
    {
      pathProgCONGC=SgmlPathCompile("pR/fA30");
      iterCONGC=SgmlPathIteratorCreate(pathProgCONGC);
    }

  SgmlPathIteratorInit(iterCONGC,pascalDoc);

  while ((congc=SgmlPathNext(iterCONGC)))
    {
      Buffer *bufcongc;
      char *s1;
      char *sX;
      char *c1;
      char *c2;
      bufcongc=BufferCreate(10,10);

      if (!listCONGC) SgmlAddSon(minibibDoc,listCONGC=SgmlCreateMark("CONGC"));

      if ((s1=SgmlLeafGetData(SgmlGetSonTag(congc,"s1"))))
	{
	  bufcongc=BufferFromString(s1);

	  if ((sX=SgmlLeafGetData(SgmlGetSonTag(congc,"s2"))))
	    {
	      BufferStrcat(bufcongc,"; ");
	      BufferStrcat(bufcongc,sX);
	    }

	  if ((sX=SgmlLeafGetData(SgmlGetSonTag(congc,"s3"))))
	    {
	      BufferStrcat(bufcongc,"; ");
	      BufferStrcat(bufcongc,sX);
	    }

	  if ((sX=SgmlLeafGetData(SgmlGetSonTag(congc,"s4"))))
	    {
	      BufferStrcat(bufcongc,"; ");
	      BufferStrcat(bufcongc,sX);
	    }

/*
Avant 1992 inclus, A30-1/-2 non repetitif, suivie eventuellement de A31-1 et A32-1
A partir de 1993, A31-1 et A32-1 n'existent plus mais A30-1 a -4 devient repetitive
*/

	  SgmlPathStrSearchFirstData(pascalDoc, "pR/fA31/s1", c1);
	  SgmlPathStrSearchFirstData(pascalDoc, "pR/fA32/s1", c2);

	  if (c1)
	  	  {
	  	  	BufferStrcat(bufcongc, "; ");
	  	  	BufferStrcat(bufcongc, c1);
	  	  }
	  	
	  if (c2)
	  	  {
	  	  	BufferStrcat(bufcongc, "; ");
	  		BufferStrcat(bufcongc, c2);
	  	  }
        }
	SgmlAddSon(listCONGC, SgmlCreateLeaf("e",BufferString(bufcongc)));
	BufferFree(bufcongc);
    }
}

void pascalTHESC()
{
  Buffer *bufthesc;
  char *c1;
  char *c2;
  c1=NULL;
  c2=NULL;
  
  SgmlPathStrSearchFirstData(pascalDoc, "pR/fA42/s0", c1);
  SgmlPathStrSearchFirstData(pascalDoc, "pR/fA41/s1", c2);

  if (!c1 && !c2) return;

  bufthesc=BufferCreate(10,10);
  
	if (c1)
	  	  {
	  	  	BufferStrcat(bufthesc, c1);

			if (c2)
			  {
			    BufferStrcat(bufthesc, " - ");
			  }
	  	  }
	  	
	if (c2)
	  	  {
	  	  	BufferStrcat(bufthesc, c2);
	  	  }
	  		  		
	SgmlAddSon(minibibDoc, listTHESC=SgmlCreateLeaf("THESC",BufferString(bufthesc)));
	BufferFree(bufthesc);
}

void pascalBREVC()
{
  Buffer *bufbrevc;
  char *c1;
  char *c2;
  char *c3;
  char *c4;
  char *c5;
  char *c6;
  char *c7;
  char *c8;
  int i=0;
  int j=0;
  int k=0;
  c1=NULL;
  c2=NULL;
  c3=NULL;
  c4=NULL;
  c5=NULL;
  c6=NULL;
  c7=NULL;
  c8=NULL;
  
  SgmlPathStrSearchFirstData(pascalDoc, "pR/fA33/s5", c1);
  SgmlPathStrSearchFirstData(pascalDoc, "pR/fA33/s2", c2);
  SgmlPathStrSearchFirstData(pascalDoc, "pR/fA33/s1", c3);
  SgmlPathStrSearchFirstData(pascalDoc, "pR/fA36/s1", c4);
  SgmlPathStrSearchFirstData(pascalDoc, "pR/fA36/s2", c5);
  SgmlPathStrSearchFirstData(pascalDoc, "pR/fA37/s2", c6);
  SgmlPathStrSearchFirstData(pascalDoc, "pR/fA37/s3", c7);
  SgmlPathStrSearchFirstData(pascalDoc, "pR/fA37/s1", c8);

  bufbrevc=BufferCreate(10,10);
  
	if (c1)
	  	  {
		    i++;
	  	    BufferStrcat(bufbrevc, "n&deg;. ");
	  	    BufferStrcat(bufbrevc, c1);
	  	  }
	  	
	if (c2)
	  	  {
		    if (i!=0) BufferStrcat(bufbrevc, ", ");
		    else BufferStrcat(bufbrevc, "n&deg;. ");
		    i++;
	  	    BufferStrcat(bufbrevc, c2);
	  	  }
	  	
	if (c3)
	  	  {
		    if (i!=0) BufferStrcat(bufbrevc, " ");
		    else BufferStrcat(bufbrevc, "n&deg;. ");
		    i++;
	  	    BufferStrcat(bufbrevc, "(");
	  	    BufferStrcat(bufbrevc, c3);
	  	    BufferStrcat(bufbrevc, ")");
	  	  }
	  	
	if (c4)
	          {
		    if (i!=0) BufferStrcat(bufbrevc, "; ");
		    i++;
		    j++;
	  	    BufferStrcat(bufbrevc, "dep. ");
	  	    BufferStrcat(bufbrevc, c4);
	  	  }
	  	
	if (c5)
	  	  {
		    if (j!=0) BufferStrcat(bufbrevc, ", ");
		    else
		      {
			if (i!=0) BufferStrcat(bufbrevc, "; ");
			BufferStrcat(bufbrevc, "dep. ");
		      }
		    i++;
		    j++;
	  	    BufferStrcat(bufbrevc, c5);
	  	  }
	  	
	if (c6)
	  	  {
		    if (i!=0) BufferStrcat(bufbrevc, "; ");
		    i++;
		    j++;
		    k++;
	  	    BufferStrcat(bufbrevc, "pr. ");
	  	    BufferStrcat(bufbrevc, c6);
	  	  }
	  	
	if (c7)
	  	  {
		    if (k!=0) BufferStrcat(bufbrevc, ", ");
		    else
		      {
			if (i!=0) BufferStrcat(bufbrevc, "; ");
			BufferStrcat(bufbrevc, "pr. ");
		      }
		    i++;
		    j++;
		    k++;
	  	    BufferStrcat(bufbrevc, c7);
	  	  }
	  	
	if (c8)
	  	  {
		    if (k!=0) BufferStrcat(bufbrevc, " ");
		    else
		      {
			if (i!=0) BufferStrcat(bufbrevc, "; ");
			BufferStrcat(bufbrevc, "pr. ");
		      }
		    i++;
		    j++;
		    k++;
	  	  	BufferStrcat(bufbrevc, "(");
	  	  	BufferStrcat(bufbrevc, c8);
	  	  	BufferStrcat(bufbrevc, ")");
	  	  }
	  	
	if (i!=0)
	  {
	    SgmlAddSon(minibibDoc,listBREVC=SgmlCreateLeaf("BREVC",BufferString(bufbrevc)));
	    BufferFree(bufbrevc);
	  }
}

void pascalPUC()
{
  static SgmlPathIterator *iterPUC=NULL;
  static SgmlPathProg *pathProgPUC=NULL;
  static SgmlNode *iterS2=NULL;

  SgmlNode *puc;
  SgmlNode *pu2;
  char *s1;
  s1=NULL;

  if (!iterPUC)
    {
      pathProgPUC=SgmlPathCompile("pR/fA25");
      iterPUC=SgmlPathIteratorCreate(pathProgPUC);
    }

  SgmlPathIteratorInit(iterPUC,pascalDoc);
  while ((puc=SgmlPathNext(iterPUC)))
    {
      int i=0;
      Buffer *bufpu;
      bufpu=BufferCreate(10,10);

      if (!listPUC) SgmlAddSon(minibibDoc,listPUC=SgmlCreateMark("PUC"));

      s1=SgmlLeafGetData(SgmlGetSonTag(puc,"s1"));

      if (s1) BufferStrcat(bufpu, s1);
      else BufferStrcat(bufpu,"s.n.");

      if (iterS2) SgmlIterTagInit(iterS2,puc,"s2");
      else iterS2=SgmlIterTagCreate(puc,"s2");

      while ((pu2=SgmlIterTagNext(iterS2)))
	  {
	    i++;

	    if (i==1) BufferStrcat(bufpu, " : ");
	    else BufferStrcat(bufpu, ", ");

	    BufferStrcat(bufpu, SgmlLeafGetData(pu2));
	  }

      if (i==0) BufferStrcat(bufpu, " : s.l.");

      SgmlAddSon(listPUC,SgmlCreateLeaf("e",BufferString(bufpu)));
      BufferFree(bufpu);
    }
}

void pascalDAC()
{
  char *s1;
  char *s2;
  char *s3;
  s1=NULL;
  s2=NULL;
  s3=NULL;
  
  SgmlPathStrSearchFirstData(pascalDoc, "pR/fA21/s1", s1);
  SgmlPathStrSearchFirstData(pascalDoc, "pR/fA21/s4", s2);
  SgmlPathStrSearchFirstData(pascalDoc, "pR/fA22/s1", s3);

/*
fA21-1 existe souvent seule, fA21-4 n'existe normalement pas seule
fA21-1 et -4 sont generalement presentes ensemble, avec preference a la -4 (these)
fA22-1 peut coexister avec les 2 autres, sans preseance de recuperation sur les autres
fA22-1 peut exister seule, a prendre dans ce cas
*/

	if (s1)
	  	 {
		    Buffer *bufdac;
		    bufdac=BufferCreate(10,10);
	  	    BufferStrcat(bufdac, s1);

		    if (s2)
		      {
			BufferFree(bufdac);
			bufdac=BufferCreate(10,10);
			BufferStrcat(bufdac, s2);
		      }
		    SgmlAddSon(minibibDoc,listDA=SgmlCreateLeaf("DAC",BufferString(bufdac)));
		    BufferFree(bufdac);
		  }
	   else
	          {
		    if (s3)
		      {
			Buffer *bufdac;
			bufdac=BufferCreate(10,10);
			BufferStrcat(bufdac, s3);

			if (s2)
			  {
			    BufferFree(bufdac);
			    bufdac=BufferCreate(10,10);
			    BufferStrcat(bufdac, s2);
			  }
			SgmlAddSon(minibibDoc,listDA=SgmlCreateLeaf("DAC",BufferString(bufdac)));
			BufferFree(bufdac);
		      }
		  }
}


int main (int argc, char **argv)
{
  int recordMode;
  int echoMode;
  int cod_arg;

  recordMode=0;
  echoMode=0;
  while ((cod_arg = getopt(argc,argv,"re"))!=EOF)
    {
      switch(cod_arg) 
	{
	case 'r':
	  recordMode=1;
	  break;
	case 'e':
	  echoMode=1;
	  break;
	}
    }
  while((pascalDoc= SgmlInputNextDocument()))
    {
      char *dataElement;
      
      partA=SgmlGetSonTag(pascalDoc, "pA");
      
      listFT=NULL;
      listET=NULL;
      listST=NULL;
      listOT=NULL;
      listAU=NULL;
      listAF=NULL;
      listOR=NULL;
      listSO=NULL;
      listCONG=NULL;
      listTHES=NULL;
      listBREV=NULL;
      listMAP=NULL;
      listPU=NULL;
      listDA=NULL;
      listTD=NULL;
      listPY=NULL;
      listLA=NULL;
      listLR=NULL;
      listISSN=NULL;
      listCODN=NULL;
      listISBN=NULL;
      listNT=NULL;
      listCC=NULL;
      listFD=NULL;
      listED=NULL;
      listSD=NULL;
      listFG=NULL;
      listEG=NULL;
      listSG=NULL;
      listLO=NULL;
      listTIC=NULL;
      listSOC=NULL;
      listCONGC=NULL;	
      listTHESC=NULL;
      listBREVC=NULL;
      listPUC=NULL;
      listDAC=NULL;
      
      minibibDoc=SgmlCreateMark("doc");
      
      SgmlPathStrSearchFirstData(pascalDoc, "pA/fA47/s0", dataElement);
      if (dataElement) SgmlAddSon(minibibDoc,SgmlCreateLeaf("NO",dataElement));
      
      pascalFT();
      
      pascalET();
      
      pascalST();
      
      pascalOT();
      
      SgmlPathStrSearchFirstData(pascalDoc, "pA/fA63/s0", dataElement);
      if (dataElement) SgmlAddSon(minibibDoc,SgmlCreateLeaf("TC",dataElement));
      
      pascalAU();
      
      pascalAF();
      
      pascalOR();
      
      pascalSO();
      
      pascalCONG();
      
      pascalTHES();
      
      pascalBREV();
      
      pascalMAP();
      
      pascalPU();
      
      pascalDA();
      
      pascalTD();
      
      SgmlPathStrSearchFirstData(pascalDoc, "pA/fA61/s0", dataElement);
      if (dataElement) SgmlAddSon(minibibDoc,SgmlCreateLeaf("BL",dataElement));
      
      pascalPY();
      
      pascalLA();
      
      pascalLR();
      
      pascalISSN();
      
      pascalCODN();
      
      pascalISBN();
      
      pascalNT();
      
      pascalAB();
      
      pascalCC();
      
      pascalFD();
      
      pascalED();
      
      pascalSD();
      
      pascalFG();
      
      pascalEG();

      pascalSG();
      
      pascalLO();
      
      SgmlPathStrSearchFirstData(pascalDoc, "pA/fA44/s0", dataElement);
      if(dataElement)SgmlAddSon(minibibDoc,SgmlCreateLeaf("PROV",dataElement));
      
      SgmlPathStrSearchFirstData(pascalDoc, "pA/fA44/s1", dataElement);
      if(dataElement)SgmlAddSon(minibibDoc,SgmlCreateLeaf("CP",dataElement));
      
      pascalTIC();
      
      pascalSOC();
      
      pascalCONGC();
      
      pascalTHESC();
      
      pascalBREVC();
      
      pascalPUC();
      
      pascalDAC();
      
      SgmlPathStrSearchFirstData(pascalDoc, "pR/fA01/s0", dataElement);
      if(dataElement)SgmlAddSon(minibibDoc,SgmlCreateLeaf("ISSNC",dataElement));
      
      SgmlPathStrSearchFirstData(pascalDoc, "pR/fA02/s0", dataElement);
      if(dataElement)SgmlAddSon(minibibDoc,SgmlCreateLeaf("CODNC",dataElement));
      
      SgmlPathStrSearchFirstData(pascalDoc, "pR/fA26/s0", dataElement);
      if(dataElement)SgmlAddSon(minibibDoc,SgmlCreateLeaf("ISBNC",dataElement));
      if (recordMode)
	{
	  SgmlFree(SgmlLast(SgmlInputRecord));
	  SgmlAddLast(SgmlInputRecord, minibibDoc);
	  SgmlPrint(SgmlInputRecord);
	}
      else if (echoMode)
	{
	  SgmlPrint(minibibDoc);
	  putchar ('\t');
	  SgmlPrint(SgmlInputRecord);
	  SgmlFree(minibibDoc);
	}
      else
	{
	  SgmlPrint(minibibDoc);
	  putchar('\n');
	  SgmlFree(minibibDoc);
	}
    }
  
    return 0;
}
