/// <summary> /// The interactive mode gives you a shell-like environment in which /// you can code in Aquila. /// </summary> public static void interactiveMode(List <string> exec_lines = null, bool greeting = true, bool rescue_mode = false) { Global.setSetting("fail on context assertions", false); // disable context checks bool new_line = true; List <string> current_lines = new List <string>(); // exec mode bool exec_mode = exec_lines != null; if (greeting) { if (rescue_mode) { System.Console.WriteLine("interactive mode greeting"); } Global.stdoutWriteLine(" [ - Aquila Interactive Interpreter - ]"); Global.stdoutWriteLine(" [?] Type \"help\" to get a list of all the interactive-mode-only commands"); Global.stdoutWriteLine(" [?] See https://github.com/Nicolas-Reyland/Aquila/blob/main/Aquila_Documentation.pdf for some unfinished documentation about Aquila itself"); if (exec_mode) { Global.stdoutWriteLine(" [!] Exec mode enabled. There are executables lines saved. Use the \"exec\" command to run them"); } } Context.setStatus(Context.StatusEnum.instruction_main_loop); Context.setInfo("Interactive Mode"); while (true) { if (new_line) { Global.stdoutWrite(getInteractivePrefix() + " > "); } else { Global.stdoutWrite(getInteractivePrefix() + " - "); } if (rescue_mode) { System.Console.WriteLine("asking for input..."); } string input = Global.stdinReadLine(); if (rescue_mode) { System.Console.WriteLine("got input: " + input); Global.stdoutWriteLine(input); } if (StringUtils.normalizeWhiteSpaces(input) == "") { continue; } if (StringUtils.normalizeWhiteSpaces(input) == "") { continue; } input = StringUtils.removeComments(input); input = StringUtils.normalizeWhiteSpaces(input); if (input == "exit") { Global.stdoutWriteLine("Exiting."); return; } if (!processInterpreterInput(input)) { continue; // command should not be executed, then continue } if (input == "exec_info") { if (!exec_mode) { Global.stdoutWriteLine(" [X] Exec mode disabled. You have to have pre-defined executable lines to enable this mode"); } else { Global.stdoutWriteLine(" Executable lines:"); foreach (string line in exec_lines) { Global.stdoutWriteLine(" " + line); } } continue; } if (input == "exec") { if (!exec_mode) { Global.stdoutWriteLine(" [X] Exec mode disabled. You have to have pre-defined executable lines to enable this mode"); continue; } executeLines(exec_lines, false); } else { current_lines.Add(input); if (executableLines(current_lines)) { executeLines(current_lines); new_line = true; } else { new_line = false; } } } }