//-*- Mode: C++ -*-
#include "cof-compile.h"

#ifndef DIACOLLO_COF2BIN_BITS
# define DIACOLLO_COF2BIN_BITS 32
#endif

//======================================================================
// bit-width dispatch
#if DIACOLLO_COF2BIN_BITS == 32
typedef CofCompiler32 MyCofCompiler;
#elif DIACOLLO_COF2BIN_BITS == 64
typedef CofCompiler64 MyCofCompiler;
#else
# error unsupported value for DIACOLLO_COF2BIN_BITS
typedef CofCompiler32 MyCofCompiler;
#endif


#define stringify(x) #x

//======================================================================
// globals
const char *prog = "dcdb-cofgen" stringify(DIACOLLO_COF2BIN_BITS);
const char *infile = NULL;
const char *outbase = NULL;
size_t fmin = 2;

//======================================================================
int main(int argc, const char **argv)
{
    //-- c2b_init
    prog = *argv;
    for (int argi=1; argi < argc; ++argi) {
        string arg(argv[argi]);
        if (arg == "-h" || arg == "-help" || arg == "--help") {
            fprintf(stderr,
                    "\n"
                    "Usage: %s [OPTIONS] [INFILE.dat=- [OUTBASE=cof.d/cof]]\n"
                    "\n"
                    "Options:\n"
                    "  -h, -help       # this help message\n"
                    "  -f, -fmin FMIN  # minimum co-occurrence frequency (default=%zd)\n"
                    "\n",
                    prog, fmin);
            exit(1);
        }
        else if (arg == "-f" || arg == "-cfmin" || arg == "-fmin") {
            fmin = strtoul(argv[argi+1], NULL, 0);
            ++argi;
        }
        else if (arg[0] != '-') {
            if (infile == NULL) {
                infile = argv[argi];
            } else if (outbase == NULL) {
                outbase = argv[argi];
            } else {
                fprintf(stderr, "%s WARNING: unhandled non-option argument '%s'", prog, argv[argi]);
            }
        }
        else {
            fprintf(stderr, "%s WARNING: unknown argument '%s'", prog, argv[argi]);
        }
    }

    //-- guts
    MyCofCompiler::main(prog, infile, outbase, fmin);

    return 0;
}