lua.html 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <!doctype html>
  2. <title>Lua interpreter</title>
  3. <script src="../build/libv86.js"></script>
  4. <script>
  5. "use strict";
  6. window.onload = function()
  7. {
  8. var emulator = new V86Starter({
  9. wasm_path: "../build/v86.wasm",
  10. memory_size: 32 * 1024 * 1024,
  11. vga_memory_size: 2 * 1024 * 1024,
  12. // Uncomment to see what's going on
  13. //screen_container: document.getElementById("screen_container"),
  14. bios: {
  15. url: "../bios/seabios.bin",
  16. },
  17. vga_bios: {
  18. url: "../bios/vgabios.bin",
  19. },
  20. bzimage: {
  21. url: "../images/buildroot-bzimage.bin",
  22. },
  23. autostart: true,
  24. disable_keyboard: true,
  25. disable_mouse: true,
  26. });
  27. var data = "";
  28. var do_output = false;
  29. emulator.add_listener("serial0-output-char", function(char)
  30. {
  31. if(char !== "\r")
  32. {
  33. data += char;
  34. }
  35. if(do_output)
  36. {
  37. document.getElementById("result").textContent += char;
  38. }
  39. if(data.endsWith("~% "))
  40. {
  41. console.log("Now ready");
  42. document.getElementById("status").textContent = "Ready.\n";
  43. document.getElementById("run").disabled = false;
  44. do_output = false;
  45. }
  46. });
  47. document.getElementById("source").onkeydown = function(e)
  48. {
  49. if(e.which == 13 && e.ctrlKey)
  50. {
  51. document.getElementById("run").onclick();
  52. }
  53. };
  54. document.getElementById("run").onclick = function()
  55. {
  56. var code = document.getElementById("source").value;
  57. emulator.serial0_send("lua -e " + bashEscape(code) + "\n");
  58. document.getElementById("result").textContent = "";
  59. document.getElementById("status").textContent = "Running ...\n";
  60. this.disabled = true;
  61. do_output = true;
  62. };
  63. };
  64. // https://gist.github.com/creationix/2502704
  65. // Implement bash string escaping.
  66. function bashEscape(arg)
  67. {
  68. arg = arg.replace(/\t+/g, "");
  69. return "'" + arg.replace(/'+/g, function (val) {
  70. return "'" + val.replace(/'/g, "\\'") + "'";
  71. }) + "'";
  72. }
  73. </script>
  74. <textarea id=source rows=20 cols=80>
  75. k = 1
  76. x = 0
  77. while k &lt; 1000 do
  78. x = x + 1 / (k * k)
  79. k = k + 2
  80. end
  81. print(math.sqrt(x*8))
  82. function factorial(n)
  83. if n == 0 then
  84. return 1
  85. else
  86. return n * factorial(n - 1)
  87. end
  88. end
  89. print("factorial(10):", factorial(10))
  90. </textarea>
  91. <button disabled id=run>run (ctrl-enter)</button>
  92. <br>
  93. <hr>
  94. <pre id=status>Wait for boot ...</pre>
  95. <pre id=result></pre>
  96. <hr>
  97. <div id="screen_container">
  98. <div style="white-space: pre; font: 14px monospace; line-height: 14px"></div>
  99. <canvas style="display: none"></canvas>
  100. </div>