Explorar el Código

Change to preload a script using command line parameter instead by default "squilu.nut"

mingodad hace 10 años
padre
commit
063cfdf5f3
Se han modificado 1 ficheros con 30 adiciones y 21 borrados
  1. 30 21
      SquiLu/sq/sq.c

+ 30 - 21
SquiLu/sq/sq.c

@@ -27,6 +27,8 @@
 #define scvprintf vfprintf
 #define scvprintf vfprintf
 #endif
 #endif
 
 
+#define MAXINPUT 1024
+
 int sq_main_argc = 0;
 int sq_main_argc = 0;
 char** sq_main_argv = 0;
 char** sq_main_argv = 0;
 
 
@@ -100,9 +102,27 @@ void PrintUsage()
 		_SC("   -c              compiles only\n")
 		_SC("   -c              compiles only\n")
 		_SC("   -d              generates debug infos\n")
 		_SC("   -d              generates debug infos\n")
 		_SC("   -v              displays version infos\n")
 		_SC("   -v              displays version infos\n")
+		_SC("   -p              preload given script file\n")
 		_SC("   -h              prints help\n"));
 		_SC("   -h              prints help\n"));
 }
 }
 
 
+void loadDefaultScript(HSQUIRRELVM v, const char *script)
+{
+    FILE *fb = fopen(script, "rb");
+    if (!fb) return;
+    fclose(fb);
+
+    SQChar srcBoot[256];
+    scsnprintf(srcBoot, sizeof(srcBoot), _SC("dofile(\"%s\", false);"), script);
+
+    if(SQ_SUCCEEDED(sq_compilebuffer(v,srcBoot, strlen(srcBoot), _SC("defaultScript"), SQTrue, SQTrue))) {
+        int callargs = 1;
+        sq_pushroottable(v);
+        callargs += push_program_args(v, 0, sq_main_argc, sq_main_argv);
+        sq_call(v, callargs,SQFalse, SQTrue);
+    }
+}
+
 #define _INTERACTIVE 0
 #define _INTERACTIVE 0
 #define _DONE 2
 #define _DONE 2
 #define _ERROR 3
 #define _ERROR 3
@@ -115,7 +135,8 @@ int getargs(HSQUIRRELVM v,int argc, char* argv[],SQInteger *retval)
 	static SQChar temp[500];
 	static SQChar temp[500];
 	//const SQChar *ret=NULL;
 	//const SQChar *ret=NULL;
 #endif
 #endif
-	char * output = NULL;
+	const char * output = NULL;
+	const char * preload = NULL;
 	//int lineinfo=0;
 	//int lineinfo=0;
 	*retval = 0;
 	*retval = 0;
 	if(argc>1)
 	if(argc>1)
@@ -144,6 +165,13 @@ int getargs(HSQUIRRELVM v,int argc, char* argv[],SQInteger *retval)
 						output = argv[arg];
 						output = argv[arg];
 					}
 					}
 					break;
 					break;
+				case 'p':
+					if(arg < argc) {
+						arg++;
+						preload = argv[arg];
+                        loadDefaultScript(v, preload);
+					}
+					break;
 				case 'v':
 				case 'v':
 					PrintVersionInfos();
 					PrintVersionInfos();
 					return _DONE;
 					return _DONE;
@@ -255,7 +283,6 @@ int getargs(HSQUIRRELVM v,int argc, char* argv[],SQInteger *retval)
 void Interactive(HSQUIRRELVM v)
 void Interactive(HSQUIRRELVM v)
 {
 {
 
 
-#define MAXINPUT 1024
 	SQChar buffer[MAXINPUT];
 	SQChar buffer[MAXINPUT];
 	SQInteger blocks =0;
 	SQInteger blocks =0;
 	SQInteger string=0;
 	SQInteger string=0;
@@ -307,7 +334,7 @@ void Interactive(HSQUIRRELVM v)
 		buffer[i] = _SC('\0');
 		buffer[i] = _SC('\0');
 
 
 		if(buffer[0]==_SC('=')){
 		if(buffer[0]==_SC('=')){
-			scsprintf(sq_getscratchpad(v,MAXINPUT),_SC("return (%s)"),&buffer[1]);
+			scsnprintf(sq_getscratchpad(v,MAXINPUT),MAXINPUT,_SC("return (%s)"),&buffer[1]);
 			memcpy(buffer,sq_getscratchpad(v,-1),(scstrlen(sq_getscratchpad(v,-1))+1)*sizeof(SQChar));
 			memcpy(buffer,sq_getscratchpad(v,-1),(scstrlen(sq_getscratchpad(v,-1))+1)*sizeof(SQChar));
 			retval=1;
 			retval=1;
 		}
 		}
@@ -541,23 +568,6 @@ SQRESULT sqext_register_DNS_SD(HSQUIRRELVM v);
 SQRESULT sqext_register_ffi(HSQUIRRELVM v);
 SQRESULT sqext_register_ffi(HSQUIRRELVM v);
 SQRESULT sqext_register_xjd1(HSQUIRRELVM v);
 SQRESULT sqext_register_xjd1(HSQUIRRELVM v);
 
 
-void loadDefaultScript(HSQUIRRELVM v)
-{
-    #define SQDEFAULT_SCRIPTNAME "squilu.nut"
-    FILE *fb = fopen(SQDEFAULT_SCRIPTNAME, "rb");
-    if (!fb) return;
-    fclose(fb);
-
-    SQChar *srcBoot = _SC("dofile(\"" SQDEFAULT_SCRIPTNAME "\", false);");
-
-    if(SQ_SUCCEEDED(sq_compilebuffer(v,srcBoot, strlen(srcBoot), _SC("defaultScript"), SQTrue, SQTrue))) {
-        int callargs = 1;
-        sq_pushroottable(v);
-        callargs += push_program_args(v, 0, sq_main_argc, sq_main_argv);
-        sq_call(v, callargs,SQFalse, SQTrue);
-    }
-}
-
 int main(int argc, char* argv[])
 int main(int argc, char* argv[])
 {
 {
     sq_main_argc = argc;
     sq_main_argc = argc;
@@ -642,7 +652,6 @@ int main(int argc, char* argv[])
 	//aux library
 	//aux library
 	//sets error handlers
 	//sets error handlers
 	sqstd_seterrorhandlers(v);
 	sqstd_seterrorhandlers(v);
-	loadDefaultScript(v);
 
 
     //frozen script executed ?
     //frozen script executed ?
     if(LoadFrozenScript(v, argv[0], 0) == _DONE) return 0;
     if(LoadFrozenScript(v, argv[0], 0) == _DONE) return 0;