/*  SLU for Rocio XML  */
/*  FRED 0215  */

#include "librocio_slu.h"

#define TailleLigne     80000
#define MAX_FIELD	60000

int main(int argc, char **argv)
{
    int nb,prevn;
    char ch[TailleLigne],*chfileword,*chfileaction,*chfilemodel,*chfileclean,*prevword;

    prevn=0; prevword=NULL;
    chfileword=chfileaction=chfilemodel=chfileclean=NULL;
    if (argc>1)
        for(nb=1;nb<argc;nb++)
            if (!strcmp(argv[nb],"-word")) { if (nb+1==argc) ERREUR("must have a value after argument;",argv[nb]); chfileword=argv[++nb]; }
            else
                if (!strcmp(argv[nb],"-action")) { if (nb+1==argc) ERREUR("must have a value after argument;",argv[nb]); chfileaction=argv[++nb]; }
                else
                    if (!strcmp(argv[nb],"-fstmodel")) { if (nb+1==argc) ERREUR("must have a value after argument;",argv[nb]); chfilemodel=argv[++nb]; }
                    else
                        if (!strcmp(argv[nb],"-fstclean")) { if (nb+1==argc) ERREUR("must have a value after argument;",argv[nb]); chfileclean=argv[++nb]; }
                        else
                            if (!strcmp(argv[nb],"-prevn")) { if (nb+1==argc) ERREUR("must have a value after argument;",argv[nb]); if (sscanf(argv[++nb],"%d",&prevn)!=1) ERREUR("bad value:",argv[nb]); }
                            else
                                if (!strcmp(argv[nb],"-prevword")) { if (nb+1==argc) ERREUR("must have a value after argument;",argv[nb]); prevword=argv[++nb]; }
                                else
                                    if (!strcmp(argv[nb],"-h"))
                                      {
                                      fprintf(stderr,"Syntax: %s [-h] -word <file> -action <file> -fstmodel <file> -fstclean <file> [-prevn <int>][-prevword <string>]\n",argv[0]);
                                      exit(0);
                                      }
                                    else ERREUR("unknown option:",argv[nb]);
    if ((!chfileword)||(!chfileaction)||(!chfilemodel)||(!chfileclean)) ERREUR("bad syntax, check '-h'","");

    // init
    slu_t* slu = init_slu(chfileword, chfileaction, chfilemodel, chfileclean);

    // read words from stdin
    char* words[MAX_FIELD];
    int num_words = 0;

    while (fgets(ch,TailleLigne,stdin))
    {
        for (words[num_words++]=strtok(ch," \t\n\r");(num_words<MAX_FIELD)&& NULL != (words[num_words]=strtok(NULL," \t\n\r")); num_words++) ;
        if (num_words==MAX_FIELD) ERREUR("cste MAX_FIELD too small","");
    }

    fprintf(stderr, "%d words read from stdin\n", num_words);

    // run them through system
    run_slu(slu, words, num_words, prevn, prevword);
    free_slu(slu);
    exit(0);
}