1
/* see copyright notice in squirrel.h */
8
#if defined(_MSC_VER) && defined(_DEBUG)
13
#include <sqstdblob.h>
14
#include <sqstdsystem.h>
16
#include <sqstdmath.h>
17
#include <sqstdstring.h>
21
#define scfprintf fwprintf
22
#define scfopen _wfopen
23
#define scvprintf vwprintf
25
#define scfprintf fprintf
27
#define scvprintf vprintf
31
void PrintVersionInfos();
33
#if defined(_MSC_VER) && defined(_DEBUG)
34
int MemAllocHook( int allocType, void *userData, size_t size, int blockType,
35
long requestNumber, const unsigned char *filename, int lineNumber)
37
// if(requestNumber==585)_asm int 3;
43
SQInteger quit(HSQUIRRELVM v)
46
sq_getuserpointer(v,-1,(SQUserPointer*)&done);
51
void printfunc(HSQUIRRELVM v,const SQChar *s,...)
59
void PrintVersionInfos()
61
scfprintf(stdout,_SC("%s %s (%d bits)\n"),SQUIRREL_VERSION,SQUIRREL_COPYRIGHT,sizeof(SQInteger)*8);
66
scfprintf(stderr,_SC("usage: sq <options> <scriptpath [args]>.\n")
67
_SC("Available options are:\n")
68
_SC(" -c compiles the file to bytecode(default output 'out.cnut')\n")
69
_SC(" -o specifies output file for the -c option\n")
70
_SC(" -c compiles only\n")
71
_SC(" -d generates debug infos\n")
72
_SC(" -v displays version infos\n")
73
_SC(" -h prints help\n"));
76
#define _INTERACTIVE 0
78
//<<FIXME>> this func is a mess
79
int getargs(HSQUIRRELVM v,int argc, char* argv[])
82
int compiles_only = 0;
83
static SQChar temp[500];
84
const SQChar *ret=NULL;
90
while(arg < argc && !exitloop)
97
case 'd': //DEBUG(debug infos)
98
sq_enabledebuginfo(v,1);
119
scprintf(_SC("unknown prameter '-%c'\n"),argv[arg][1]);
130
const SQChar *filename=NULL;
132
mbstowcs(temp,argv[arg],strlen(argv[arg]));
140
sq_pushstring(v,_SC("ARGS"),-1);
142
for(i=arg;i<argc;i++)
146
int alen=(int)strlen(argv[i]);
147
a=sq_getscratchpad(v,(int)(alen*sizeof(SQChar)));
148
mbstowcs(sq_getscratchpad(v,-1),argv[i],alen);
149
sq_getscratchpad(v,-1)[alen] = _SC('\0');
153
sq_pushstring(v,a,-1);
155
sq_arrayappend(v,-2);
160
if(SQ_SUCCEEDED(sqstd_loadfile(v,filename,SQTrue))){
161
SQChar *outfile = _SC("out.cnut");
164
int len = (int)(strlen(output)+1);
165
mbstowcs(sq_getscratchpad(v,len*sizeof(SQChar)),output,len);
166
outfile = sq_getscratchpad(v,-1);
171
if(SQ_SUCCEEDED(sqstd_writeclosuretofile(v,outfile)))
176
if(SQ_SUCCEEDED(sqstd_dofile(v,filename,SQFalse,SQTrue))) {
180
//if this point is reached an error occured
184
if(SQ_SUCCEEDED(sq_getstring(v,-1,&err))) {
185
scprintf(_SC("Error [%s]\n"),err);
196
void Interactive(HSQUIRRELVM v)
199
#define MAXINPUT 1024
200
SQChar buffer[MAXINPUT];
208
sq_pushstring(v,_SC("quit"),-1);
209
sq_pushuserpointer(v,&done);
210
sq_newclosure(v,quit,1);
211
sq_setparamscheck(v,1,NULL);
218
scprintf(_SC("\nsq>"));
223
if (c == _SC('\n')) {
224
if (i>0 && buffer[i-1] == _SC('\\'))
226
buffer[i-1] = _SC('\n');
228
else if(blocks==0)break;
229
buffer[i++] = _SC('\n');
231
else if (c==_SC('}')) {blocks--; buffer[i++] = (SQChar)c;}
232
else if(c==_SC('{') && !string){
234
buffer[i++] = (SQChar)c;
236
else if(c==_SC('"') || c==_SC('\'')){
238
buffer[i++] = (SQChar)c;
240
else if (i >= MAXINPUT-1) {
241
scfprintf(stderr, _SC("sq : input line too long\n"));
245
buffer[i++] = (SQChar)c;
248
buffer[i] = _SC('\0');
250
if(buffer[0]==_SC('=')){
251
scsprintf(sq_getscratchpad(v,MAXINPUT),_SC("return (%s)"),&buffer[1]);
252
memcpy(buffer,sq_getscratchpad(v,-1),(scstrlen(sq_getscratchpad(v,-1))+1)*sizeof(SQChar));
257
SQInteger oldtop=sq_gettop(v);
258
if(SQ_SUCCEEDED(sq_compilebuffer(v,buffer,i,_SC("interactive console"),SQTrue))){
260
if(SQ_SUCCEEDED(sq_call(v,1,retval,SQTrue)) && retval){
263
sq_pushstring(v,_SC("print"),-1);
267
sq_call(v,2,SQFalse,SQTrue);
278
int main(int argc, char* argv[])
282
const SQChar *filename=NULL;
283
#if defined(_MSC_VER) && defined(_DEBUG)
284
_CrtSetAllocHook(MemAllocHook);
288
sq_setprintfunc(v,printfunc);
292
sqstd_register_bloblib(v);
293
sqstd_register_iolib(v);
294
sqstd_register_systemlib(v);
295
sqstd_register_mathlib(v);
296
sqstd_register_stringlib(v);
299
//sets error handlers
300
sqstd_seterrorhandlers(v);
303
switch(getargs(v,argc,argv))
315
#if defined(_MSC_VER) && defined(_DEBUG)
317
_CrtMemDumpAllObjectsSince( NULL );