]> git.mxchange.org Git - flightgear.git/blobdiff - src/Scripting/NasalSys.cxx
Add an srand() function to nasal (hooked into sg_srandom_time()).
[flightgear.git] / src / Scripting / NasalSys.cxx
index 4c8eddbb1295ddeaadd7412b8ac98feb880966c3..4bbe082958842bf1ce309034ffd3f3a9e9b40f91 100644 (file)
@@ -288,6 +288,12 @@ static naRef f_rand(naContext c, naRef me, int argc, naRef* args)
     return naNum(sg_random());
 }
 
+static naRef f_srand(naContext c, naRef me, int argc, naRef* args)
+{
+    sg_srandom_time();
+    return naNum(0);
+}
+
 // Wrapper function for screenPrint
 static naRef f_screenPrint(naContext c, naRef me, int argc, naRef* args)
 {
@@ -299,6 +305,23 @@ static naRef f_screenPrint(naContext c, naRef me, int argc, naRef* args)
     return naNil();
 }
 
+// Return an array listing of all files in a directory
+static naRef f_directory(naContext c, naRef me, int argc, naRef* args)
+{
+    if(argc != 1 || !naIsString(args[0]))
+        naRuntimeError(c, "bad arguments to directory()");
+    naRef ldir = args[0];
+    ulDir* dir = ulOpenDir(naStr_data(args[0]));
+    if(!dir) return naNil();
+    naRef result = naNewVector(c);
+    ulDirEnt* dent;
+    while((dent = ulReadDir(dir)))
+        naVec_append(result, naStr_fromdata(naNewString(c), dent->d_name,
+                                            strlen(dent->d_name)));
+    ulCloseDir(dir);
+    return result;
+}
+
 // Table of extension functions.  Terminate with zeros.
 static struct { char* name; naCFunction func; } funcs[] = {
     { "getprop",   f_getprop },
@@ -310,7 +333,9 @@ static struct { char* name; naCFunction func; } funcs[] = {
     { "_cmdarg",  f_cmdarg },
     { "_interpolate",  f_interpolate },
     { "rand",  f_rand },
+    { "srand",  f_srand },
     { "screenPrint", f_screenPrint },
+    { "directory", f_directory },
     { 0, 0 }
 };