executables: fix help message.
[?]
May 12, 2020, 6:04 PM
ZVQK2652XNKQ4QBNOFSROAP4QRJQCBYH2DQW7RCWZVRBRLUZ46SACDependencies
- [2]
SXEJJKPIexecutables: add `--help` flag. hacker.js: change scheduling logic. refactor. kill.js: allow handling more than one server or script at a time. cyclic_weaken.js: add. README.md: update. - [3]
2BKHJI2Sinit - [4]
RWMZ7DVLsplit and refactor various logics. update "README.md". - [5]
HSNSECD5all: refactor. main.js: fix call to `void_kill_script_named_server_named`. - [6]
2WOLGB42README.md: update. kill.js: fix argument parser. lshw.js: add `-p` option. increase information given. main.js: fix error message. set saner defaults. hacker.js: split some functions into "lib_time.js" and "lib_score.js". ram.js: fix. - [7]
SLSWBNYTadded ram utilisation logic to `ram.js` and `servers.js`. split and refactored redundant code into separate library files. - [8]
AXGQ7FMLsplit and refactor hacking logic to "hacker.js" and argument parsing and script execution logic to "main.js". update "README.md". - [9]
Y5OWMCQRall: remove unecessary uses of `exec`. refactor. main.js: add RAM reservation logic. lib_ram.js: renamed to lib_ram_server.js. README.js: update. - [*]
DJDWBCCQadd missing "nop.js". killall.js: rename to kill.js. add `--script` and `--server` options.
Change contents
- file deletion: lib_minimist.js
// lib_minimist.js - 1.6GB - adapted from https://github.com/substack/minimist/blob/38a4d1caead72ef99e824bb420a2528eec03d9ab/index.js// This software is released under the MIT license:// Permission is hereby granted, free of charge, to any person obtaining a copy of// this software and associated documentation files (the "Software"), to deal in// the Software without restriction, including without limitation the rights to// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of// the Software, and to permit persons to whom the Software is furnished to do so,// subject to the following conditions:// The above copyright notice and this permission notice shall be included in all// copies or substantial portions of the Software.// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.if (!opts) opts = {};var flags = { bools : {}, strings : {}, unknownFn: null };if (typeof opts['unknown'] === 'function') {flags.unknownFn = opts['unknown'];}if (typeof opts['boolean'] === 'boolean' && opts['boolean']) {flags.allBools = true;} else {[].concat(opts['boolean']).filter(Boolean).forEach(function (key) {flags.bools[key] = true;});}var aliases = {};Object.keys(opts.alias || {}).forEach(function (key) {aliases[key] = [].concat(opts.alias[key]);aliases[key].forEach(function (x) {aliases[x] = [key].concat(aliases[key].filter(function (y) {return x !== y;}));});});[].concat(opts.string).filter(Boolean).forEach(function (key) {flags.strings[key] = true;if (aliases[key]) {flags.strings[aliases[key]] = true;}});var defaults = opts['default'] || {};var argv = { _ : [] };Object.keys(flags.bools).forEach(function (key) {setArg(key, defaults[key] === undefined ? false : defaults[key]);});var notFlags = [];if (args.indexOf('--') !== -1) {notFlags = args.slice(args.indexOf('--')+1);args = args.slice(0, args.indexOf('--'));}function argDefined(key, arg) {return (flags.allBools && /^--[^=]+$/.test(arg)) ||flags.strings[key] || flags.bools[key] || aliases[key];}function setArg (key, val, arg) {if (arg && flags.unknownFn && !argDefined(key, arg)) {if (flags.unknownFn(arg) === false) return;}var value = !flags.strings[key] && isNumber(val)? Number(val) : val;setKey(argv, key.split('.'), value);(aliases[key] || []).forEach(function (x) {setKey(argv, x.split('.'), value);});}function setKey (obj, keys, value) {var o = obj;for (var i = 0; i < keys.length-1; i++) {var key = keys[i];if (key === '__proto__') return;if (o[key] === undefined) o[key] = {};if (o[key] === Object.prototype || o[key] === Number.prototype|| o[key] === String.prototype) o[key] = {};if (o[key] === Array.prototype) o[key] = [];o = o[key];}var key = keys[keys.length - 1];if (key === '__proto__') return;if (o === Object.prototype || o === Number.prototype|| o === String.prototype) o = {};if (o === Array.prototype) o = [];if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') {o[key] = value;}else if (Array.isArray(o[key])) {o[key].push(value);}else {o[key] = [ o[key], value ];}}function aliasIsBoolean(key) {return aliases[key].some(function (x) {return flags.bools[x];});}for (var i = 0; i < args.length; i++) {var arg = args[i];if (/^--.+=/.test(arg)) {// Using [\s\S] instead of . because js doesn't support the// 'dotall' regex modifier. See:// http://stackoverflow.com/a/1068308/13216var m = arg.match(/^--([^=]+)=([\s\S]*)$/);var key = m[1];var value = m[2];if (flags.bools[key]) {value = value !== 'false';}setArg(key, value, arg);}else if (/^--no-.+/.test(arg)) {var key = arg.match(/^--no-(.+)/)[1];setArg(key, false, arg);}else if (/^--.+/.test(arg)) {var key = arg.match(/^--(.+)/)[1];var next = args[i + 1];if (next !== undefined && !/^-/.test(next)&& !flags.bools[key]&& !flags.allBools&& (aliases[key] ? !aliasIsBoolean(key) : true)) {setArg(key, next, arg);i++;}else if (/^(true|false)$/.test(next)) {setArg(key, next === 'true', arg);i++;}else {setArg(key, flags.strings[key] ? '' : true, arg);}}else if (/^-[^-]+/.test(arg)) {var letters = arg.slice(1,-1).split('');var broken = false;for (var j = 0; j < letters.length; j++) {var next = arg.slice(j+2);if (next === '-') {setArg(letters[j], next, arg)continue;}if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) {setArg(letters[j], next.split('=')[1], arg);broken = true;break;}if (/[A-Za-z]/.test(letters[j])&& /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) {setArg(letters[j], next, arg);broken = true;break;}if (letters[j+1] && letters[j+1].match(/\W/)) {setArg(letters[j], arg.slice(j+2), arg);broken = true;break;}else {setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg);}}var key = arg.slice(-1)[0];if (!broken && key !== '-') {if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1])&& !flags.bools[key]&& (aliases[key] ? !aliasIsBoolean(key) : true)) {setArg(key, args[i+1], arg);i++;}else if (args[i+1] && /^(true|false)$/.test(args[i+1])) {setArg(key, args[i+1] === 'true', arg);i++;}else {setArg(key, flags.strings[key] ? '' : true, arg);}}}else {if (!flags.unknownFn || flags.unknownFn(arg) !== false) {argv._.push(flags.strings['_'] || !isNumber(arg) ? arg : Number(arg));}if (opts.stopEarly) {argv._.push.apply(argv._, args.slice(i + 1));break;}}}Object.keys(defaults).forEach(function (key) {if (!hasKey(argv, key.split('.'))) {setKey(argv, key.split('.'), defaults[key]);(aliases[key] || []).forEach(function (x) {setKey(argv, x.split('.'), defaults[key]);});}});if (opts['--']) {argv['--'] = new Array();notFlags.forEach(function(key) {argv['--'].push(key);});}else {notFlags.forEach(function(key) {argv._.push(key);});}return argv;};function hasKey (obj, keys) {var o = obj;keys.slice(0,-1).forEach(function (key) {o = (o[key] || {});});var key = keys[keys.length - 1];return key in o;}function isNumber (x) {if (typeof x === 'number') return true;if (/^0x[0-9a-f]+$/i.test(x)) return true;return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x);}export const object_parse_arguments = function (args, opts) { - file addition: lib_no_ns.js[3.3711246]
// lib_no_ns.js - 1.6GB - functions that don't use NetScript// https://stackoverflow.com/a/30376762export const string_sanitise = function (string) {const object_map = {"&": "&","<": "<",">": ">",'"': ""","'": "&apos",};return string.replace(/[&<>"']/g, (string_match) => object_map[string_match]);};// minimist - adapted from https://github.com/substack/minimist/blob/38a4d1caead72ef99e824bb420a2528eec03d9ab/index.js// This software is released under the MIT license:// Permission is hereby granted, free of charge, to any person obtaining a copy of// this software and associated documentation files (the "Software"), to deal in// the Software without restriction, including without limitation the rights to// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of// the Software, and to permit persons to whom the Software is furnished to do so,// subject to the following conditions:// The above copyright notice and this permission notice shall be included in all// copies or substantial portions of the Software.// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.export const object_parse_arguments = function (args, opts) {if (!opts) opts = {};var flags = { bools : {}, strings : {}, unknownFn: null };if (typeof opts['unknown'] === 'function') {flags.unknownFn = opts['unknown'];}if (typeof opts['boolean'] === 'boolean' && opts['boolean']) {flags.allBools = true;} else {[].concat(opts['boolean']).filter(Boolean).forEach(function (key) {flags.bools[key] = true;});}var aliases = {};Object.keys(opts.alias || {}).forEach(function (key) {aliases[key] = [].concat(opts.alias[key]);aliases[key].forEach(function (x) {aliases[x] = [key].concat(aliases[key].filter(function (y) {return x !== y;}));});});[].concat(opts.string).filter(Boolean).forEach(function (key) {flags.strings[key] = true;if (aliases[key]) {flags.strings[aliases[key]] = true;}});var defaults = opts['default'] || {};var argv = { _ : [] };Object.keys(flags.bools).forEach(function (key) {setArg(key, defaults[key] === undefined ? false : defaults[key]);});var notFlags = [];if (args.indexOf('--') !== -1) {notFlags = args.slice(args.indexOf('--')+1);args = args.slice(0, args.indexOf('--'));}function argDefined(key, arg) {return (flags.allBools && /^--[^=]+$/.test(arg)) ||flags.strings[key] || flags.bools[key] || aliases[key];}function setArg (key, val, arg) {if (arg && flags.unknownFn && !argDefined(key, arg)) {if (flags.unknownFn(arg) === false) return;}var value = !flags.strings[key] && isNumber(val)? Number(val) : val;setKey(argv, key.split('.'), value);(aliases[key] || []).forEach(function (x) {setKey(argv, x.split('.'), value);});}function setKey (obj, keys, value) {var o = obj;for (var i = 0; i < keys.length-1; i++) {var key = keys[i];if (key === '__proto__') return;if (o[key] === undefined) o[key] = {};if (o[key] === Object.prototype || o[key] === Number.prototype|| o[key] === String.prototype) o[key] = {};if (o[key] === Array.prototype) o[key] = [];o = o[key];}var key = keys[keys.length - 1];if (key === '__proto__') return;if (o === Object.prototype || o === Number.prototype|| o === String.prototype) o = {};if (o === Array.prototype) o = [];if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') {o[key] = value;}else if (Array.isArray(o[key])) {o[key].push(value);}else {o[key] = [ o[key], value ];}}function aliasIsBoolean(key) {return aliases[key].some(function (x) {return flags.bools[x];});}for (var i = 0; i < args.length; i++) {var arg = args[i];if (/^--.+=/.test(arg)) {// Using [\s\S] instead of . because js doesn't support the// 'dotall' regex modifier. See:// http://stackoverflow.com/a/1068308/13216var m = arg.match(/^--([^=]+)=([\s\S]*)$/);var key = m[1];var value = m[2];if (flags.bools[key]) {value = value !== 'false';}setArg(key, value, arg);}else if (/^--no-.+/.test(arg)) {var key = arg.match(/^--no-(.+)/)[1];setArg(key, false, arg);}else if (/^--.+/.test(arg)) {var key = arg.match(/^--(.+)/)[1];var next = args[i + 1];if (next !== undefined && !/^-/.test(next)&& !flags.bools[key]&& !flags.allBools&& (aliases[key] ? !aliasIsBoolean(key) : true)) {setArg(key, next, arg);i++;}else if (/^(true|false)$/.test(next)) {setArg(key, next === 'true', arg);i++;}else {setArg(key, flags.strings[key] ? '' : true, arg);}}else if (/^-[^-]+/.test(arg)) {var letters = arg.slice(1,-1).split('');var broken = false;for (var j = 0; j < letters.length; j++) {var next = arg.slice(j+2);if (next === '-') {setArg(letters[j], next, arg)continue;}if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) {setArg(letters[j], next.split('=')[1], arg);broken = true;break;}if (/[A-Za-z]/.test(letters[j])&& /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) {setArg(letters[j], next, arg);broken = true;break;}if (letters[j+1] && letters[j+1].match(/\W/)) {setArg(letters[j], arg.slice(j+2), arg);broken = true;break;}else {setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg);}}var key = arg.slice(-1)[0];if (!broken && key !== '-') {if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1])&& !flags.bools[key]&& (aliases[key] ? !aliasIsBoolean(key) : true)) {setArg(key, args[i+1], arg);i++;}else if (args[i+1] && /^(true|false)$/.test(args[i+1])) {setArg(key, args[i+1] === 'true', arg);i++;}else {setArg(key, flags.strings[key] ? '' : true, arg);}}}else {if (!flags.unknownFn || flags.unknownFn(arg) !== false) {argv._.push(flags.strings['_'] || !isNumber(arg) ? arg : Number(arg));}if (opts.stopEarly) {argv._.push.apply(argv._, args.slice(i + 1));break;}}}Object.keys(defaults).forEach(function (key) {if (!hasKey(argv, key.split('.'))) {setKey(argv, key.split('.'), defaults[key]);(aliases[key] || []).forEach(function (x) {setKey(argv, x.split('.'), defaults[key]);});}});if (opts['--']) {argv['--'] = new Array();notFlags.forEach(function(key) {argv['--'].push(key);});}else {notFlags.forEach(function(key) {argv._.push(key);});}return argv;};function hasKey (obj, keys) {var o = obj;keys.slice(0,-1).forEach(function (key) {o = (o[key] || {});});var key = keys[keys.length - 1];return key in o;}function isNumber (x) {if (typeof x === 'number') return true;if (/^0x[0-9a-f]+$/i.test(x)) return true;return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x);} - edit in bin/main.js at line 9[11.1656][3.9672]
import {string_sanitise,object_parse_arguments} from "lib_no_ns.js"; - replacement in bin/lshw.js at line 3
import { object_parse_arguments } from "lib_minimist.js";import {string_sanitise,object_parse_arguments} from "lib_no_ns.js"; - replacement in bin/lshw.js at line 79
`string_sanitise(` - edit in bin/lshw.js at line 99
) - edit in bin/kill.js at line 5
import {string_sanitise,object_parse_arguments} from "lib_no_ns.js"; - edit in bin/kill.js at line 11
import { object_parse_arguments } from "lib_minimist.js"; - replacement in bin/kill.js at line 69
`string_sanitise(` - edit in bin/kill.js at line 89
) - replacement in bin/cp.js at line 2
import { object_parse_arguments } from "lib_minimist.js";import {string_sanitise,object_parse_arguments} from "lib_no_ns.js"; - replacement in bin/cp.js at line 50
`string_sanitise(` - edit in bin/cp.js at line 62
)