From 8ff7774ae45f2f1ba37f2514c1879c6756fd46e6 Mon Sep 17 00:00:00 2001 From: sbosse Date: Mon, 21 Jul 2025 23:18:11 +0200 Subject: [PATCH] Mon 21 Jul 22:43:21 CEST 2025 --- js/top/jamxw.js | 546 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 546 insertions(+) create mode 100644 js/top/jamxw.js diff --git a/js/top/jamxw.js b/js/top/jamxw.js new file mode 100644 index 0000000..1f33fb1 --- /dev/null +++ b/js/top/jamxw.js @@ -0,0 +1,546 @@ +/** + ** ============================== + ** O O O OOOO + ** O O O O O O + ** O O O O O O + ** OOOO OOOO O OOO OOOO + ** O O O O O O O + ** O O O O O O O + ** OOOO OOOO O O OOOO + ** ============================== + ** Dr. Stefan Bosse http://www.bsslab.de + ** + ** COPYRIGHT: THIS SOFTWARE, EXECUTABLE AND SOURCE CODE IS OWNED + ** BY THE AUTHOR(S). + ** THIS SOURCE CODE MAY NOT BE COPIED, EXTRACTED, + ** MODIFIED, OR OTHERWISE USED IN A CONTEXT + ** OUTSIDE OF THE SOFTWARE SYSTEM. + ** + ** $AUTHORS: Stefan Bosse + ** $INITIAL: (C) 2006-2019 bLAB + ** $CREATED: 5-12-18 by sbosse. + ** $VERSION: 1.1.12 + ** + ** $INFO: + ** + ** JAM Shell with X11 GUI + ** + ** $ENDOFINFO + */ +var Io = Require('com/io'); +var Comp = Require('com/compat'); +var JamShell = Require('shell/shell'); +var X11 = Require('x11/core/x11'); +var Win = Require('x11/win/windows'); + +if (process.argv.indexOf('-h')>0) + return print('usage: jamxw [-i(ndex) #num] [-p(airing)] [-po(rtoffset) #num] [-cli] [script] [-e(execute) "shell commands"]'); + +String.prototype.chunk = function(size) { + return [].concat.apply([], + this.split('').map(function(x,i){ return i%size ? [] : this.slice(i,i+size) }, this) + ) +} + +var options = { + version:'1.1.12', + config1:'config', + config2:'setup', + config3:'jam', + log: { + history:20, + columns:69, + lineheight:15, + width:500, + height:400, + }, + number:'', + width: 200, + height: 360, + button: { + height:20, + }, + margin : { left:5, right:5, top:5 }, + shell : { + modules : { + }, + nameopts : {length:8, memorable:true, lowercase:true}, + Nameopts : {length:8, memorable:true, uppercase:true}, + output : console.log, + type:'relay', + server : true, + }, + portoff: 0, + pairing: false, + nowin : false, + verbose:1, +} + + +var stats = { + agents:0, + links:0, + log:[], + msg:[], + ports:[], +} + + + +if (process.argv.indexOf('-nowin')>0) options.nowin=true; +if (process.argv.indexOf('-cli')>0) options.nowin=true; +if (process.argv.indexOf('-p')>0) options.pairing=true; +if (process.argv.indexOf('-i')>0) options.number=Number(process.argv[process.argv.indexOf('-i')+1]); +if (process.argv.indexOf('-po')>0) options.portoff=Number(process.argv[process.argv.indexOf('-po')+1]); +if (!process.env.DISPLAY) options.nowin=true; + +/** GUI + * + */ +function gui () { + function info (msg) { + if (options.verbose) Io.out(msg); + var lines = msg.split('\n'); + lines.forEach(function (line) { + if (line.length > options.log.columns) { + var first=true; + line.chunk(options.log.columns).forEach(function (line2) { stats.log.push(first?line2:" "+line2); first=false; }); + } else stats.log.push(line); + }); + while (stats.log.length > options.log.history) stats.log.shift(); + if (win2 && win2.visible) updateInfo(win2); + } + + function speak(msg) { + if (options.verbose) Io.out(msg); + var lines = msg.split('\n'); + lines.forEach(function (line) { stats.msg.push(line) }); + while (stats.msg.length > options.msg.history) stats.msg.shift(); + } + + function updateInfo(win) { + var x=options.margin.left, y = win._data.y0, linesW=win._data.lines, i=1; + for (i=0;i