/** ** ============================== ** 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