util.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. R"(
  2. // This TS code provides some built-in utilities for writing Lua-addons
  3. // It is eval'd automatically once BLLua3 has loaded the Lua API and environment
  4. // Read an entire file as text and return its contents as a string
  5. function _bllua3_ReadEntireFile(%fn) {
  6. %text = "";
  7. %file = new FileObject();
  8. %file.openForRead(%fn);
  9. while (!%file.isEOF()) { %text = %text @ %file.readLine() @ "\r\n"; }
  10. %file.close();
  11. %file.delete();
  12. return %text;
  13. }
  14. // luaexec and luaeval
  15. function luaexec(%fn) {
  16. return luacall("dofile", %fn);
  17. }
  18. function luaeval(%code) {
  19. return luacall("eval", %code);
  20. }
  21. // Hack to get and set arbitrary global variables
  22. // Much cleaner than implementing this in DLL
  23. function _bllua_get_var(%name) {
  24. %first = strLwr(getSubStr(%name, 0, 1));
  25. %rest = getSubStr(%name, 1, strLen(%name));
  26. switch$(%first) {
  27. case "a": return $a[%rest];
  28. case "b": return $b[%rest];
  29. case "c": return $c[%rest];
  30. case "d": return $d[%rest];
  31. case "e": return $e[%rest];
  32. case "f": return $f[%rest];
  33. case "g": return $g[%rest];
  34. case "h": return $h[%rest];
  35. case "i": return $i[%rest];
  36. case "j": return $j[%rest];
  37. case "k": return $k[%rest];
  38. case "l": return $l[%rest];
  39. case "m": return $m[%rest];
  40. case "n": return $n[%rest];
  41. case "o": return $o[%rest];
  42. case "p": return $p[%rest];
  43. case "q": return $q[%rest];
  44. case "r": return $r[%rest];
  45. case "s": return $s[%rest];
  46. case "t": return $t[%rest];
  47. case "u": return $u[%rest];
  48. case "v": return $v[%rest];
  49. case "w": return $w[%rest];
  50. case "x": return $x[%rest];
  51. case "y": return $y[%rest];
  52. case "z": return $z[%rest];
  53. case "_": return $_[%rest];
  54. }
  55. error("_bllua_get_var: invalid variable name " @ %name);
  56. return "";
  57. }
  58. function _bllua_set_var(%name, %val) {
  59. %first = strLwr(getSubStr(%name, 0, 1));
  60. %rest = getSubStr(%name, 1, strLen(%name));
  61. switch$(%first) {
  62. case "a": $a[%rest] = %val; return;
  63. case "b": $b[%rest] = %val; return;
  64. case "c": $c[%rest] = %val; return;
  65. case "d": $d[%rest] = %val; return;
  66. case "e": $e[%rest] = %val; return;
  67. case "f": $f[%rest] = %val; return;
  68. case "g": $g[%rest] = %val; return;
  69. case "h": $h[%rest] = %val; return;
  70. case "i": $i[%rest] = %val; return;
  71. case "j": $j[%rest] = %val; return;
  72. case "k": $k[%rest] = %val; return;
  73. case "l": $l[%rest] = %val; return;
  74. case "m": $m[%rest] = %val; return;
  75. case "n": $n[%rest] = %val; return;
  76. case "o": $o[%rest] = %val; return;
  77. case "p": $p[%rest] = %val; return;
  78. case "q": $q[%rest] = %val; return;
  79. case "r": $r[%rest] = %val; return;
  80. case "s": $s[%rest] = %val; return;
  81. case "t": $t[%rest] = %val; return;
  82. case "u": $u[%rest] = %val; return;
  83. case "v": $v[%rest] = %val; return;
  84. case "w": $w[%rest] = %val; return;
  85. case "x": $x[%rest] = %val; return;
  86. case "y": $y[%rest] = %val; return;
  87. case "z": $z[%rest] = %val; return;
  88. case "_": $_[%rest] = %val; return;
  89. }
  90. error("_bllua_set_var: invalid variable name " @ %name);
  91. return "";
  92. }
  93. function _bllua_get_var_obj(%obj, %name) {
  94. if(!isObject(%obj)) {
  95. error("_bllua_set_var_obj: object " @ %obj @ " does not exist");
  96. return;
  97. }
  98. %first = strLwr(getSubStr(%name, 0, 1));
  99. %rest = getSubStr(%name, 1, strLen(%name));
  100. switch$(%first) {
  101. case "a": return %obj.a[%rest];
  102. case "b": return %obj.b[%rest];
  103. case "c": return %obj.c[%rest];
  104. case "d": return %obj.d[%rest];
  105. case "e": return %obj.e[%rest];
  106. case "f": return %obj.f[%rest];
  107. case "g": return %obj.g[%rest];
  108. case "h": return %obj.h[%rest];
  109. case "i": return %obj.i[%rest];
  110. case "j": return %obj.j[%rest];
  111. case "k": return %obj.k[%rest];
  112. case "l": return %obj.l[%rest];
  113. case "m": return %obj.m[%rest];
  114. case "n": return %obj.n[%rest];
  115. case "o": return %obj.o[%rest];
  116. case "p": return %obj.p[%rest];
  117. case "q": return %obj.q[%rest];
  118. case "r": return %obj.r[%rest];
  119. case "s": return %obj.s[%rest];
  120. case "t": return %obj.t[%rest];
  121. case "u": return %obj.u[%rest];
  122. case "v": return %obj.v[%rest];
  123. case "w": return %obj.w[%rest];
  124. case "x": return %obj.x[%rest];
  125. case "y": return %obj.y[%rest];
  126. case "z": return %obj.z[%rest];
  127. case "_": return %obj._[%rest];
  128. }
  129. error("_bllua_get_var_obj: invalid variable name " @ %name);
  130. return "";
  131. }
  132. function _bllua_set_var_obj(%obj, %name, %val) {
  133. if(!isObject(%obj)) {
  134. error("_bllua_set_var_obj: object " @ %obj @ " does not exist");
  135. return;
  136. }
  137. %first = strLwr(getSubStr(%name, 0, 1));
  138. %rest = getSubStr(%name, 1, strLen(%name));
  139. switch$(%first) {
  140. case "a": %obj.a[%rest] = %val; return;
  141. case "b": %obj.b[%rest] = %val; return;
  142. case "c": %obj.c[%rest] = %val; return;
  143. case "d": %obj.d[%rest] = %val; return;
  144. case "e": %obj.e[%rest] = %val; return;
  145. case "f": %obj.f[%rest] = %val; return;
  146. case "g": %obj.g[%rest] = %val; return;
  147. case "h": %obj.h[%rest] = %val; return;
  148. case "i": %obj.i[%rest] = %val; return;
  149. case "j": %obj.j[%rest] = %val; return;
  150. case "k": %obj.k[%rest] = %val; return;
  151. case "l": %obj.l[%rest] = %val; return;
  152. case "m": %obj.m[%rest] = %val; return;
  153. case "n": %obj.n[%rest] = %val; return;
  154. case "o": %obj.o[%rest] = %val; return;
  155. case "p": %obj.p[%rest] = %val; return;
  156. case "q": %obj.q[%rest] = %val; return;
  157. case "r": %obj.r[%rest] = %val; return;
  158. case "s": %obj.s[%rest] = %val; return;
  159. case "t": %obj.t[%rest] = %val; return;
  160. case "u": %obj.u[%rest] = %val; return;
  161. case "v": %obj.v[%rest] = %val; return;
  162. case "w": %obj.w[%rest] = %val; return;
  163. case "x": %obj.x[%rest] = %val; return;
  164. case "y": %obj.y[%rest] = %val; return;
  165. case "z": %obj.z[%rest] = %val; return;
  166. case "_": %obj._[%rest] = %val; return;
  167. }
  168. error("_bllua_set_var_obj: invalid variable name " @ %name);
  169. return "";
  170. }
  171. function luaget(%name) { return luacall("_bllua_get_var", %name); }
  172. function luaset(%name, %val) { luacall("_bllua_set_var", %name, %val); }
  173. // Allow prepending ' to console commands to eval in lua instead of TS
  174. package _bllua_console {
  175. function ConsoleEntry::eval() {
  176. %text = ConsoleEntry.getValue();
  177. if(getSubStr(%text, 0, 1)$="\'") { // lua eval
  178. %text = getSubStr(%text, 1, strLen(%text));
  179. echo("Lua ==> " @ %text);
  180. luaeval(%text);
  181. ConsoleEntry.setValue("");
  182. } else {
  183. parent::eval();
  184. }
  185. }
  186. };
  187. activatePackage(_bllua_console);
  188. echo(" TS util loaded");
  189. )"