mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-06-09 14:44:05 +09:00
wip implementing 'STOP' button as an interrupt
This commit is contained in:
1
assets/disk0/inttest.js
Normal file
1
assets/disk0/inttest.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
throw new InterruptedException("lol");
|
||||||
@@ -128,7 +128,18 @@ var GL = eval(filesystem.readAll("A"));
|
|||||||
// @param args arguments for the program, must be Array, and args[0] is always the name of the program, e.g.
|
// @param args arguments for the program, must be Array, and args[0] is always the name of the program, e.g.
|
||||||
// for command line 'echo foo bar', args[0] must be 'echo'
|
// for command line 'echo foo bar', args[0] must be 'echo'
|
||||||
var execApp = (cmdsrc, args) => {
|
var execApp = (cmdsrc, args) => {
|
||||||
var execAppPrg = eval("var _appStub=function(exec_args){\n"+cmdsrc+"\n};_appStub;"); // making 'exec_args' a app-level global
|
var execAppPrg = eval(
|
||||||
|
`function InterruptedException(m){this.message=m;this.stack=(new Error()).stack;};` +
|
||||||
|
`InterruptedException.prototype=Object.create(Error.prototype);` +
|
||||||
|
`InterruptedException.prototype.name='InterruptedException';` +
|
||||||
|
`InterruptedException.prototype.constructor=InterruptedException;` +
|
||||||
|
`var _appStub=function(exec_args){${cmdsrc}
|
||||||
|
};try {_appStub;}
|
||||||
|
catch (e){
|
||||||
|
if (e instanceof InterruptedException) 'SIGTERM';
|
||||||
|
else 1;
|
||||||
|
}`); // making 'exec_args' a app-level global
|
||||||
|
|
||||||
return execAppPrg(args);
|
return execAppPrg(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -380,13 +380,13 @@ shell.execute = function(line) {
|
|||||||
sendLcdMsg(_G.shellProgramTitles[_G.shellProgramTitles.length - 1]);
|
sendLcdMsg(_G.shellProgramTitles[_G.shellProgramTitles.length - 1]);
|
||||||
//serial.println(_G.shellProgramTitles);
|
//serial.println(_G.shellProgramTitles);
|
||||||
|
|
||||||
let ret = execApp(programCode, tokens)|0; // return value of undefined will cast into 0
|
let ret = execApp(programCode, tokens); // return value of undefined will cast into 0
|
||||||
|
|
||||||
_G.shellProgramTitles.pop();
|
_G.shellProgramTitles.pop();
|
||||||
sendLcdMsg(_G.shellProgramTitles[_G.shellProgramTitles.length - 1]);
|
sendLcdMsg(_G.shellProgramTitles[_G.shellProgramTitles.length - 1]);
|
||||||
//serial.println(_G.shellProgramTitles);
|
//serial.println(_G.shellProgramTitles);
|
||||||
|
|
||||||
return ret;
|
return (ret == undefined) ? 0 : ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -457,13 +457,14 @@ if (goInteractive) {
|
|||||||
try {
|
try {
|
||||||
errorlevel = 0; // reset the number
|
errorlevel = 0; // reset the number
|
||||||
errorlevel = shell.execute(cmdbuf);
|
errorlevel = shell.execute(cmdbuf);
|
||||||
if (isNaN(errorlevel)) errorlevel = 2;
|
//if (isNaN(errorlevel)) errorlevel = 2;
|
||||||
|
serial.printerr(`errorlevel: ${errorlevel}`);
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
printerrln("\n"+(e.stack || e));
|
printerrln("\n"+(e.stack || e));
|
||||||
if (errorlevel === 0 || isNaN(errorlevel)) {
|
//if (errorlevel === 0 || isNaN(errorlevel)) {
|
||||||
errorlevel = 1; // generic failure
|
// errorlevel = 1; // generic failure
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
if (cmdbuf.trim().length > 0)
|
if (cmdbuf.trim().length > 0)
|
||||||
|
|||||||
Reference in New Issue
Block a user