/*   -*- coding: utf-8 -*-  */
/**********************************************************************
*
*  module   : StrDict
*  fichier  : StrDictFromStream.c
* Auteur   : Jacques DUCLOY
*  Date     : Juillet 97
*
***********************************************************************/

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

void usage()
{
  fprintf(stderr,"usage: StrDictFromStream -a -T tabChar \n");
  exit(EXIT_FAILURE);
}

int getopt();
extern char *optarg;

static  char   *line;
static  Buffer *bufLine;
static  Buffer *bufField;
static  char    tabChar;
static  char   *beginField;
static  int     allMode;

int main(int argc, char **argv)
{
  char cOption;

  bufField=NewBuffer();
  bufLine=NewBuffer();

  tabChar=';';
  allMode=0;

  while((cOption=getopt(argc,argv,"aT:"))!=EOF)
    {
      switch(cOption)
	{
	case 'T':
	  tabChar=*optarg;
	  break;

	case 'a':
	  allMode=1;
	  break;
	  
	default:
	  usage();
	}
    }

  while ((line=BufferGets(bufLine))) 
    {
      char *posTabulation;
      posTabulation=strchr(line, tabChar);
      if (!posTabulation)
	{
	  printf("%s\t\n",line);
	  continue;
	}
      BufferStrncpy(bufField, line, posTabulation-line);
      beginField=BufferString(bufField);
      while (*beginField==' ')beginField++;
      while (BufferTailCmp(bufField," ")==0)BufferTailCut(bufField,1);
      printf("%s\t", beginField);
      if (allMode)
	{
	  char *newTab;
	  newTab=strchr(posTabulation+1, tabChar);
	  while (newTab)
	    {
	      BufferStrncpy(bufField, posTabulation+1, newTab-posTabulation-1);
	      beginField=BufferString(bufField);
	      while (*beginField==' ')beginField++;
	      while (BufferTailCmp(bufField," ")==0)BufferTailCut(bufField,1);
	      printf("%s\t", beginField);
	      posTabulation=newTab;
	      newTab=strchr(posTabulation+1, tabChar);
	    }
	}
      beginField=posTabulation+1;
      while (*beginField==' ')beginField++;
      while (BufferTailCmp(bufLine," ")==0)BufferTailCut(bufLine,1);
      printf("%s\n", beginField);
    }
  exit (EXIT_SUCCESS);
}
