diff --git a/exec/nodelist.js b/exec/nodelist.js index 8a38291eefc4f7445428fff11a8bf10b7679a821..5e6d9893cb1da26b26dbc89da54a6ede0a4ce7c2 100644 --- a/exec/nodelist.js +++ b/exec/nodelist.js @@ -8,12 +8,17 @@ // -active Include active users/nodes only // -noself Exclude current/own node from list/output // -noweb Exclude web users from list/output +// -clear Clear the screen (if possible) before list +// -home Home the cursor (if possible) before list +// -loop [n] Loop the list, delaying n seconds (default: 2.0 seconds) // The modopts.ini [nodelist] and [web] settings are only used when executing // from the BBS/terminal server (e.g. not when executed via JSexec) "use strict"; +require("sbbsdefs.js", 'K_NONE'); + if(argv.indexOf("install") >= 0) { var cnflib = load({}, "cnflib.js"); var xtrn_cnf = cnflib.read("xtrn.cnf"); @@ -48,7 +53,7 @@ if(js.global.bbs) { var options = bbs.mods.nodelist_options; if(!options) options = load({}, "nodelist_options.js"); - write(bbs.text(NodeLstHdr)); + js.on_exit("console.status = " + console.status); } else{ // e.g. invoked via JSexec var REVISION = "$Revision$".split(' ')[1]; options = { @@ -62,11 +67,45 @@ if(js.global.bbs) { } var active = argv.indexOf('-active') >= 0; +var clear = argv.indexOf('-clear') >= 0; +var home = argv.indexOf('-home') >= 0; var listself = argv.indexOf('-noself') < 0; +var loop = argv.indexOf('-loop'); +var delay = 2; +if(loop >= 0) { + var tmp = parseFloat(argv[loop + 1]); + if(!isNaN(tmp)) + delay = tmp; + loop = true; +} else + loop = false; var is_sysop = js.global.bbs ? user.is_sysop : true; -var output = presence.nodelist(/* print: */true, active, listself, is_sysop, options); -for(var i in output) - writeln(output[i]); -if(js.global.bbs && active && !output) - write(bbs.text(NoOtherActiveNodes)); +if(clear && js.global.console) + console.clear(); + +do { + if(js.global.console) { + console.line_counter = 0; + if(home) { + console.home(); + console.status |= CON_CR_CLREOL; + } + else if(clear) + console.clear(); + write(bbs.text(NodeLstHdr)); + } + var output = presence.nodelist(/* print: */true, active, listself, is_sysop, options); + for(var i in output) + writeln(output[i]); + if(js.global.bbs && active && !output) + write(bbs.text(NoOtherActiveNodes)); + if(!loop) + break; + if(js.global.console) { + if(console.aborted) + break; + console.inkey(K_NONE, delay * 1000); + } else + mswait(delay * 1000); +} while(!js.terminated && (!js.global.console || !console.aborted));