#include "mtstream.h"
#include "arithmetic.h"
#include "sufftree.h"
#include "trivial.h"
#include "rijndael.h"

#include <stdlib.h>


int main(int argc,char **argv)
    FILE *statfile=0;

    ByteFileSource ifsource;
    if (!ifsource.Open(argv[0]))
      -> Err
    FILE *fout=fopen(argv[1],"wb");
    if (!fout)
      -> Err
    
    SuffixTreeModel model(1<<20,statfile);
    ByteStream outbytes;

    if (decomp)
      {
      XOR55ByteSource *cmpbytes=new XOR55ByteSource(&ifsource);
      IOByteSource *fo=new TrivialFOEncoder(cmpbytes,true);
      ArithmeticDecoder *bytes=new ArithmeticDecoder(&model,fo,true);
      outbytes.SetSource(bytes,true);
      }
    else
      {
      IOByteSource *fo=new ArithmeticEncoder(&model,&ifsource);
      TrivialFODecoder *bytes=new TrivialFODecoder(fo,true);
      XOR55ByteSource *bytes55=new XOR55ByteSource(bytes,true);
      outbytes.SetSource(bytes55,true);
      }
    while (!outbytes.AtEnd())
      putc(outbytes.Get(),fout);

    fclose(fout);
    }
