#include <stdio.h>
#include <stdarg.h>
#include <iostream>
#include <string>

#include <squirrel.h>
#include <sqstdio.h>
#include <sqstdaux.h> 

using namespace std;

void executeString(HSQUIRRELVM v, string script)
{
	sq_compilebuffer(v, (SQChar*)script.c_str(), (SQInteger)script.length(), "", SQTrue);
	sq_pushroottable(v);
	sq_call(v, 1, SQFalse, SQTrue);
	sq_pop(v, 1);
}

void printFunc(HSQUIRRELVM v,const SQChar *s,...)
{
	va_list arglist; 
	va_start(arglist, s); 
	vprintf(s, arglist); 
	va_end(arglist);
}

void compilerErrorHandler( HSQUIRRELVM v, const SQChar* err, const SQChar* source, SQInteger line, SQInteger column )
{
	cout<<source<<"("<<line<<", "<<column<<"): "<<err<<endl;
}

int main()
{
	HSQUIRRELVM vm;

	vm = sq_open(1024);
	sq_setprintfunc(vm,printFunc);
	sq_setcompilererrorhandler( vm, compilerErrorHandler );

	executeString(vm, "print(\"test\");");

	sq_close(vm);

	return 0;
}

