static void systemCommands(S s, O env) { call(env, "postSystemMessage", systemCommands_impl(s, env)); } static S systemCommands_impl(S s, O env) { new Matches m; // SYSTEM COMMANDS if (matchOneOf(s, m, "start program *", "start *") && isSnippetID(m.unq(0))) { S progID = m.fsi(0); S title = getSnippetTitle(progID); // TODO: Show author! S msg = "Run program " + progID + " - " + title + "?"; if (confirmOKCancel((JFrame) getOpt(env, "frame"), msg)) { call(env, "postSystemMessage", "Starting program " + progID + " - " + quote(title)); nohupJavax(progID); } else call(env, "postSystemMessage", "Program start cancelled by user (was: " + progID + ")"); } if (matchOneOf(s, m, "hotwire *", "hotwire * with argument *")) { S progID = m.fsi(0), arg = unnull(m.unq(1)); S title = getSnippetTitle(progID); S msg = "Hotwire & run program " + progID + " - " + quote(title) + (empty(arg) ? "" : " with argument " + quote(arg)) + "?"; if (confirmOKCancel((JFrame) getOpt(env, "frame"), msg)) { call(env, "postSystemMessage", "Hotwiring & running program " + progID + " - " + quote(title) + (empty(arg) ? "" : " with argument " + quote(arg))); run(progID, arg); } else call(env, "postSystemMessage", "Program start cancelled by user (was: " + progID + ")"); } if (matchOneOf(s, "jfresh", "fresh")) { ret veryQuickJava_refresh() ? "OK, refreshed." : "Nothing to do"; } if (startsWithOneOf(s, "awt ")) { S code = onlyAfter(s, ' '); code = tok_addReturn(trim(code)); bool x = !containsReturnWithArgument(code); S keyword = x ? "r" : "func"; ret systemCommands_evalJava("swingAndWait(" + keyword + " {\n" + code + "\n})" + (x ? ";" : "")); } if (startsWithOneOf(s, "java ", "j ")) { S code = onlyAfter(s, ' '); ret systemCommands_evalJava(code); } if (startsWith(s, "phone ")) { S code = onlyAfter(s, ' '); ret systemCommands_onPhone(code); } if (startsWithOneOf(s, "jfresh ", "fresh ")) { veryQuickJava_refresh(); S code = afterSpace(s); ret systemCommands_evalJava(code); } if "restart" { call(env, "postSystemMessage", "Restarting..."); restart(); } if "pop" { // pop up last chat line in a window S text = nextToLast((L) get(env, "log")); if (empty(text)) ret "Nothing to show"; else showText(text); } if (jmatch("addll *-*", s, m)) { // add to "Logic List" int mm = m.psi(0), nn = m.psi(1); // account for the command itself in the log int i = l(gLog())-1; S part = fromLines(subList(gLog(), i-nn, i-mm+1)); systemCommands_ll(env, part); } if (jmatch("addll *", s, m)) { // add to "Logic List" S part; if (isInteger(m.get(0))) { int mm = m.psi(0); // account for the command itself in the log int i = l(gLog())-1; part = get(gLog(), i-mm); } else part = m.unq(0); systemCommands_ll(env, part); } if (swic(s, "care ")) systemCommands_ll(env, "!care " + afterSpace(s)); null; } static void systemCommands_ll(O env, S text) { addToLogicList(text); call(env, "postSystemMessage", "Added to Logic List: " + text); } static O systemCommands_lastResult; static S systemCommands_evalJava(S code) { S main = "!include #1003911\n" + // functions for quick eval + evalJava_prep(code, "calc"); O obj = veryQuickJava(main); setOpt(obj, "getProgramName_cache", "User Code"); long time = now(); O result = callCalc(obj); systemCommands_lastResult = result; time = now()-time; ret time + " ms\n" + systemCommands_prettyPrint(result); } static S systemCommands_prettyPrint(O o) { if (o instanceof L) ret fromLines(map(func(O o) { systemCommands_prettyPrint(o) }, (L) o)); if (eq(getClassName(o), "main$Snippet")) ret formatSnippetID(getString(o, "id")) + " - " + getString(o, "title"); if (eq(getClassName(o), "java.awt.image.BufferedImage")) showImage("User Image", (BufferedImage) o); ret structureOrText(o); } static S systemCommands_onPhone(S code) { long time = now(); O result = onPhone(code); systemCommands_lastResult = result; time = now()-time; ret time + " ms\n" + systemCommands_prettyPrint(result); }