diff --git a/js/top/jamsh.js b/js/top/jamsh.js new file mode 100644 index 0000000..8bed100 --- /dev/null +++ b/js/top/jamsh.js @@ -0,0 +1,194 @@ +/** + ** ============================== + ** 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-2025 bLAB + ** $CREATED: 1-3-18 by sbosse. + ** $VERSION: 1.3.1 + ** + ** $INFO: + ** + ** JAM Shell Interpreter (Front end) + ** + ** $ENDOFINFO + */ +/* Soem hacks */ +process.noDeprecation = true + +var Comp = Require('com/compat'); +var Io = Require('com/io'); +var doc = Require('doc/doc'); +var table = Require('doc/table'); +var readline = Require('com/readline'); +var readlineSync = Require('term/readlineSync'); +var renderer = doc.Renderer({lazy:true}); +var http = Require('http'); +var httpserv = Require('http/https'); // a file server! +try { var https = require('https'); } catch (e) {}; if (!https.request) https=undefined; +var geoip = Require('geoip/geoip'); // a geo location database server +var util = Require('util') +var sip = Require('top/rendezvous'); +var db = Require('db/db'); +// JAM Shell Interpreter (Back end) +var JamShell = Require('shell/shell'); + +var nlp = Require('nlp/nlp'); + +var ml = Require('ml/ml') +var nn = Require('nn/nn') +var csp = Require('csp/csp') +var sat = Require('logic/sat') +var logic = Require('logic/prolog') +var csv = Require('parser/papaparse'); +var ampCOM = Require('jam/ampCOM'); +var numerics = Require('numerics/numerics') +var osutils = Require('os/osutils'); +var UI = Require('ui/app/app'); +var Des48 = Require('dos/des48'); + +var p; + +var options= { + args:[], + echo: true, + modules : { + csp : csp, + csv : csv, + db : db, + des48 : Des48, + doc : doc, + geoip : geoip, + http : http, + httpserv : httpserv, + https : https, + logic:logic, + ml:ml, + nlp:nlp, + nn:nn, + numerics:numerics, + os:osutils, + readline : readline, + readlineSync : readlineSync, + sat : sat, + sip : sip, + table : table, + UI: UI, + }, + extensions : { + url2addr: ampCOM.url2addr, + sleep: process.watchdog&&process.watchdog.sleep? + function (milli) { + process.watchdog.sleep(milli) + }:undefined + }, + nameopts : {length:8, memorable:true, lowercase:true}, + Nameopts : {length:8, memorable:true, uppercase:true}, + output : null, + // AMP network ports, JAM interconnect + // |http:|https:|IP:|NORTH:|... + // <=> port(DIR.IP(9901),{proto:'http'}) + links : [], + ports : [], + renderer : renderer, + server : false, + verbose : 0 +} + +process.on('uncaughtException', function (err) { + console.error(err.stack); + console.log("jamsh not exiting..."); +}); + +if ((p=process.argv.indexOf('--'))>0) { + options.args=process.argv.slice(p+1,process.argv.length); + process.argv=process.argv.slice(0,p); +} + +// return {port:DIR.IP(9901),options:{proto:'http'}} +// input. |http:|https:|IP:|NORTH:|... +function parsePort(str) { + var tokens = str.split(':'), + ipproto = 'http', + ipaddr = '', + ampport = 'IP', + ipport = 9999 + for(var i=0;i0) { + print('usage: jamsh [-v(erbose)]') + print(' [-i(nteractive mode)]') + print(' [-s(erver mode)]') + print(' [-p(ort) ]') + print(' [-l(inkto) ]') + print(' [javascript script file]') + print(' [-e(xecute) "shell command"]') + print('JAM network port url scheme:') + print(' (AMP endpoint, defaults are DIR.IP(9999), ipproto:http)') + print(' ://:, =http|https|udp|tcp') + print(' ://:?secure=' ) + print(' |: // localhost') + print(' NORTH|SOUTH|WEST|EAST|...'); + print('Examples:'); + print(' --- HTTP client connection to remote jamsh service endpoint ---'); + print(' jamsh -v -p http://localhost:* -l http://edu-9.de:20101?secure=DD:DD:DD:DD -s'); + return; + } + var skip=0 + process.argv.forEach(function (arg,argi) { + if (argi<2) return; + if (skip) return skip--; + switch (arg) { + case '-v': options.verbose++; break; + case '-s': options.output=console.log; options.server=true; break; + case '-i': options.server=false; break; + case '-e': + options.server=true; + options.output=console.log; + options.exec=process.argv[argi+1]; + skip++; + break; + case '-p': options.ports.push(parsePort(process.argv[argi+1])); skip++; break; + case '-l': options.links.push(process.argv[argi+1]); skip++; break; + default: + if (arg[0]!='-') { + // script + options.script=arg; + options.output=console.log; + options.server=true; + } else throw ("Invalid command line argument "+arg) + } + }) + if (!options.server && options.verbose==0) options.verbose=1; + JamShell(options).init(); +} catch (e) { print(e.toString()) }}