123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- R"(
- // This TS code provides some built-in utilities for writing Lua-addons
- // It is eval'd automatically once BLLua3 has loaded the Lua API and environment
- // Read an entire file as text and return its contents as a string
- function _bllua3_ReadEntireFile(%fn) {
- %text = "";
-
- %file = new FileObject();
- %file.openForRead(%fn);
- while (!%file.isEOF()) { %text = %text @ %file.readLine() @ "\r\n"; }
- %file.close();
- %file.delete();
-
- return %text;
- }
- // luaexec and luaeval
- function luaexec(%fn) {
- return luacall("dofile", %fn);
- }
- function luaeval(%code) {
- return luacall("eval", %code);
- }
- // Hack to get and set arbitrary global variables
- // Much cleaner than implementing this in DLL
- function _bllua_get_var(%name) {
- %first = strLwr(getSubStr(%name, 0, 1));
- %rest = getSubStr(%name, 1, strLen(%name));
- switch$(%first) {
- case "a": return $a[%rest];
- case "b": return $b[%rest];
- case "c": return $c[%rest];
- case "d": return $d[%rest];
- case "e": return $e[%rest];
- case "f": return $f[%rest];
- case "g": return $g[%rest];
- case "h": return $h[%rest];
- case "i": return $i[%rest];
- case "j": return $j[%rest];
- case "k": return $k[%rest];
- case "l": return $l[%rest];
- case "m": return $m[%rest];
- case "n": return $n[%rest];
- case "o": return $o[%rest];
- case "p": return $p[%rest];
- case "q": return $q[%rest];
- case "r": return $r[%rest];
- case "s": return $s[%rest];
- case "t": return $t[%rest];
- case "u": return $u[%rest];
- case "v": return $v[%rest];
- case "w": return $w[%rest];
- case "x": return $x[%rest];
- case "y": return $y[%rest];
- case "z": return $z[%rest];
- case "_": return $_[%rest];
- }
- error("_bllua_get_var: invalid variable name " @ %name);
- return "";
- }
- function _bllua_set_var(%name, %val) {
- %first = strLwr(getSubStr(%name, 0, 1));
- %rest = getSubStr(%name, 1, strLen(%name));
- switch$(%first) {
- case "a": $a[%rest] = %val; return;
- case "b": $b[%rest] = %val; return;
- case "c": $c[%rest] = %val; return;
- case "d": $d[%rest] = %val; return;
- case "e": $e[%rest] = %val; return;
- case "f": $f[%rest] = %val; return;
- case "g": $g[%rest] = %val; return;
- case "h": $h[%rest] = %val; return;
- case "i": $i[%rest] = %val; return;
- case "j": $j[%rest] = %val; return;
- case "k": $k[%rest] = %val; return;
- case "l": $l[%rest] = %val; return;
- case "m": $m[%rest] = %val; return;
- case "n": $n[%rest] = %val; return;
- case "o": $o[%rest] = %val; return;
- case "p": $p[%rest] = %val; return;
- case "q": $q[%rest] = %val; return;
- case "r": $r[%rest] = %val; return;
- case "s": $s[%rest] = %val; return;
- case "t": $t[%rest] = %val; return;
- case "u": $u[%rest] = %val; return;
- case "v": $v[%rest] = %val; return;
- case "w": $w[%rest] = %val; return;
- case "x": $x[%rest] = %val; return;
- case "y": $y[%rest] = %val; return;
- case "z": $z[%rest] = %val; return;
- case "_": $_[%rest] = %val; return;
- }
- error("_bllua_set_var: invalid variable name " @ %name);
- return "";
- }
- function _bllua_get_var_obj(%obj, %name) {
- if(!isObject(%obj)) {
- error("_bllua_set_var_obj: object " @ %obj @ " does not exist");
- return;
- }
- %first = strLwr(getSubStr(%name, 0, 1));
- %rest = getSubStr(%name, 1, strLen(%name));
- switch$(%first) {
- case "a": return %obj.a[%rest];
- case "b": return %obj.b[%rest];
- case "c": return %obj.c[%rest];
- case "d": return %obj.d[%rest];
- case "e": return %obj.e[%rest];
- case "f": return %obj.f[%rest];
- case "g": return %obj.g[%rest];
- case "h": return %obj.h[%rest];
- case "i": return %obj.i[%rest];
- case "j": return %obj.j[%rest];
- case "k": return %obj.k[%rest];
- case "l": return %obj.l[%rest];
- case "m": return %obj.m[%rest];
- case "n": return %obj.n[%rest];
- case "o": return %obj.o[%rest];
- case "p": return %obj.p[%rest];
- case "q": return %obj.q[%rest];
- case "r": return %obj.r[%rest];
- case "s": return %obj.s[%rest];
- case "t": return %obj.t[%rest];
- case "u": return %obj.u[%rest];
- case "v": return %obj.v[%rest];
- case "w": return %obj.w[%rest];
- case "x": return %obj.x[%rest];
- case "y": return %obj.y[%rest];
- case "z": return %obj.z[%rest];
- case "_": return %obj._[%rest];
- }
- error("_bllua_get_var_obj: invalid variable name " @ %name);
- return "";
- }
- function _bllua_set_var_obj(%obj, %name, %val) {
- if(!isObject(%obj)) {
- error("_bllua_set_var_obj: object " @ %obj @ " does not exist");
- return;
- }
- %first = strLwr(getSubStr(%name, 0, 1));
- %rest = getSubStr(%name, 1, strLen(%name));
- switch$(%first) {
- case "a": %obj.a[%rest] = %val; return;
- case "b": %obj.b[%rest] = %val; return;
- case "c": %obj.c[%rest] = %val; return;
- case "d": %obj.d[%rest] = %val; return;
- case "e": %obj.e[%rest] = %val; return;
- case "f": %obj.f[%rest] = %val; return;
- case "g": %obj.g[%rest] = %val; return;
- case "h": %obj.h[%rest] = %val; return;
- case "i": %obj.i[%rest] = %val; return;
- case "j": %obj.j[%rest] = %val; return;
- case "k": %obj.k[%rest] = %val; return;
- case "l": %obj.l[%rest] = %val; return;
- case "m": %obj.m[%rest] = %val; return;
- case "n": %obj.n[%rest] = %val; return;
- case "o": %obj.o[%rest] = %val; return;
- case "p": %obj.p[%rest] = %val; return;
- case "q": %obj.q[%rest] = %val; return;
- case "r": %obj.r[%rest] = %val; return;
- case "s": %obj.s[%rest] = %val; return;
- case "t": %obj.t[%rest] = %val; return;
- case "u": %obj.u[%rest] = %val; return;
- case "v": %obj.v[%rest] = %val; return;
- case "w": %obj.w[%rest] = %val; return;
- case "x": %obj.x[%rest] = %val; return;
- case "y": %obj.y[%rest] = %val; return;
- case "z": %obj.z[%rest] = %val; return;
- case "_": %obj._[%rest] = %val; return;
- }
- error("_bllua_set_var_obj: invalid variable name " @ %name);
- return "";
- }
- function luaget(%name) { return luacall("_bllua_get_var", %name); }
- function luaset(%name, %val) { luacall("_bllua_set_var", %name, %val); }
- // Allow prepending ' to console commands to eval in lua instead of TS
- package _bllua_console {
- function ConsoleEntry::eval() {
- %text = ConsoleEntry.getValue();
- if(getSubStr(%text, 0, 1)$="\'") { // lua eval
- %text = getSubStr(%text, 1, strLen(%text));
- echo("Lua ==> " @ %text);
- luaeval(%text);
- ConsoleEntry.setValue("");
- } else {
- parent::eval();
- }
- }
- };
- activatePackage(_bllua_console);
- echo(" TS util loaded");
- )"
|