From 2efa7444a71b5e6812b6ac58003d19c937120ee8 Mon Sep 17 00:00:00 2001 From: sbosse Date: Mon, 21 Jul 2025 23:14:21 +0200 Subject: [PATCH] Mon 21 Jul 22:43:21 CEST 2025 --- js/com/io.browser.js | 281 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 js/com/io.browser.js diff --git a/js/com/io.browser.js b/js/com/io.browser.js new file mode 100644 index 0000000..f3282ce --- /dev/null +++ b/js/com/io.browser.js @@ -0,0 +1,281 @@ +/** + ** ============================== + ** 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-2020 bLAB + ** $CREATED: sbosse on 28-3-15. + ** $VERSION: 1.11.1 + ** + ** $INFO: + * + * This module encapsulates all IO operations (except networking) supporting + * browser applications. + * + ** $ENDOFINFO + */ +/* +************ +** Browser +************ +*/ +var tracing = true; +var stderr_fun = function (str) { console.log(str); }; +var stdout_fun = function (str) { console.log(str); }; +var args=[]; +var inspect = Require('os/inspect'); + +Require('os/polyfill') + +global.checkOptions = function(options,defaultOptions) { + return Object.assign({}, defaultOptions||{}, options) }; +global.checkOption = function (option,defaultOption) { + return option==undefined? defaultOption:option }; + +var io = { + /* + ************ + ** Browser + ************ + */ + /* + ** FILE IO + * TODO WebStorage + */ + close: function (fd) { + return; + }, + exists: function (path) { + return false; + }, + open: function (path, mode) { + var fd = Fs.openSync(path, mode); + return fd; + }, + + read: function (fd, len, foff) { + // TODO + }, + read_file: function (path) { + return ''; + }, + + read_line: function (fd) { + // TODO + }, + /** + * + * @param fd + * @param buf + * @param boff + * @param len + * @param [foff] + * @returns {*} + */ + read_buf: function (fd, buf, boff, len, foff) { + return -1; + }, + sync: function (fd) { + return; + }, + /** + * + * @param fd + * @param data + * @param [foff] + * @returns {*} + */ + write: function (fd, data, foff) { + return -1; + }, + /** + * + * @param fd + * @param buf + * @param bpos + * @param blen + * @param [foff] + * @returns {*} + */ + write_buf: function (fd, buf, bpos, blen, foff) { + return -1; + }, + + /* + ** CONSOLE IO + */ + debug: function (msg) { + stderr_fun('Debug: ' + msg); + }, + err: function (msg) { + stderr_fun('Error: ' + msg); + throw Error(msg); + }, + fail: function (msg) { + stderr_fun('Fatal Error: ' + msg); + }, + inspect: function (obj) { + return inspect(obj); + }, + stacktrace: function () { + var e = new Error('dummy'); + var stack = e.stack.replace(/^[^\(]+?[\n$]/gm, '') + .replace(/^\s+at\s+/gm, '') + .replace(/^Object.\s*\(/gm, '{anonymous}()@') + .split('\n'); + stderr_fun('Stack Trace'); + stderr_fun('--------------------------------'); + for(var i in stack) { + if (i>0) { + var line = stack[i]; + if(line.indexOf('Module.',0)>=0) break; + stderr_fun(line); + } + } + stderr_fun('--------------------------------'); + }, + /** + * + * @param e + * @param where + */ + printstack: function (e,where) { + if (where==undefined) stderr_fun(e); + else stderr_fun(where+': '+e); + }, + sprintstack: function (e) { + return e?e.toString():'' + }, + /** + * + * @param {boolean|string} condmsg conditional message var log=X; log((log lt. N)||(msg)) + */ + log: function (condmsg) { + if (condmsg != true) console.warn(condmsg); + }, + out: function (msg) { + stdout_fun(msg) + }, + warn: function (msg) { + stderr_fun('Warning: ' + msg); + }, + + + set_stderr: function(fun) { + stderr_fun=fun; + }, + set_stdout: function(fun) { + stdout_fun=fun; + }, + + stderr: function (msg) { + stderr_fun(msg); + }, + stdout: function (msg) { + stdout_fun(msg); + }, + + /** Write a message with a time stamp written to the trace file. + * + * @param {boolean|string} condmsg conditional message var trace=Io.tracing; trace(trace||(msg)) + */ + trace: function (condmsg) { + if (condmsg != true && tracefile != undefined) { + var date = new Date(); + var time = date.getTime(); + this.log('[' + time + '] ' + condmsg + '\n'); + } + }, + tracing: tracing, + /** + * + * @param {string} path + */ + trace_open: function (path) { + return undefined; + }, + + exit: function (n) { + return; + }, + getenv: function (name, def) { + return def; + }, + workdir: function () { + return ''; + }, + /** + * @return {string []} + */ + getargs: function () { + return args; + }, + set_args: function (argv) { + args=argv; + }, + + sleep: function(delay) { + var start = new Date().getTime(); + while (new Date().getTime() < start + delay); + }, + + date: function () { + var date = Date(); + return date.split(' ').slice(1,5).join(' '); + }, + + /** Return system time in milliseconds + */ + time: function () { + var date = new Date(); + return date.getTime(); + }, + + /** + ** Return current time in hour:minute:second format + */ + Time: function () + { + var now = new Date(); + var hour = "0" + now.getHours(); + hour = hour.substring(hour.length-2); + var minute = "0" + now.getMinutes(); + minute = minute.substring(minute.length-2); + var second = "0" + now.getSeconds(); + second = second.substring(second.length-2); + var milli = "0" + now.getMilliseconds(); + var milli = "0" + Math.floor(now.getMilliseconds()/10); + milli = milli.substring(milli.length-2); + return hour + ":" + minute + ":" + second+':'+milli; + }, + /** + ** Return current date in year-month-day format + */ + Date: function () + { + var now = new Date(); + var year = "" + now.getFullYear(); + var month = "0" + (now.getMonth()+1); + month = month.substring(month.length-2); + var date = "0" + now.getDate(); + date = date.substring(date.length-2); + return year + "-" + month + "-" + date; + }, + +}; + +module.exports = io;