// Necklace of the Eye v5.3
// roguelike frontend
// Copyright (C) 2010-2012 Zeno Rogue, see 'noteye.h' for details

#define USELUA

#include "noteye.h"

#ifdef USELUA
extern "C" {
  #include <lua.h>
  #include <lualib.h>
  #include <lauxlib.h>
  }
#endif

#include "util.cpp"
#include "gfx.cpp"
#include "image.cpp"
#include "tiles.cpp"
#include "screen.cpp"
#include "fpp.cpp"
#include "iso.cpp"
#include "font.cpp"
#include "process.cpp"
#include "stream.cpp"
#include "consout.cpp"
#include "sound.cpp"
#include "lua.cpp"

int noteyeStats() {
  fprintf(logfile, "NOTEYE STATS\n");
  fprintf(logfile, "Objects allocated: %d\n", size(objs));
  fprintf(logfile, "Hashtable collisions: %d/%d\n", hashcol, hashok);
  fprintf(logfile, "Compression stats for streams:\n");
  fprintf(logfile, "  write %9d B -> %9d B\n", writeUnc, writeCmp);
  fprintf(logfile, "  read  %9d B -> %9d B\n", readUnc, readCmp);
  
  fprintf(logfile, "Total size of images: %lld pixels\n", totalimagesize);
  fprintf(logfile, "Total size of isocache: %lld pixels\n", totalimagesize);

  return 0;
  }
  
void noteye_init() {
  errfile = stdout;
  objs.push_back(NULL);
  objs.push_back(&gfx); gfx.id = 1;
  initMode();  
  initLua();
  }

void noteye_run(const char *noemain, bool applyenv) {
  
  char *buf;
  
  if(applyenv && getenv("NOTEYEDIR")) {
    buf = (char*) malloc(strlen(getenv("NOTEYEDIR")) + strlen(noemain) + 8);
    sprintf(buf, "%s/%s", getenv("NOTEYEDIR"), noemain);
    }
  else buf = strdup(noemain);
  
  if(luaL_dofile(LS, buf)) {
    fprintf(errfile, "error in dofile: %s\n", lua_tostring(LS, -1));
    lua_pop(LS, 1);
    exit(7);
    }
  
  free(buf);
  }

void noteye_halt() {
  closeLua();  
  logfile && noteyeStats();
  endwin();
  halt();
  }
