CPU 🟢
HDD 🟢
cxReadFunc(str.charCodeAt(i)); } term.onData(readData); function hddCallback(state) { var h = document.getElementById("hddactivity"); if(state == "ready") h.textContent = "\u{1F7E2}"; else h.textContent = "\u{1F7E0}"; } function cpuCallback(state) { var h = document.getElementById("cpuactivity"); if(state == "ready") h.textContent = "\u{1F7E2}"; else h.textContent = "\u{1F7E0}"; } //Actual CheerpX and bash specific logic function runBash() { // cmd, cwd, args and env are replaced by the Github actions workflow. var cmd = ["/bin/bash"]; var args = []; var env = ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","HOME=/home/user","TERM=xterm","USER=user","SHELL=/bin/bash","EDITOR=vim","LANG=en_US.UTF-8","LC_ALL=C"]; var cwd = "/home/user/"; // Reasonable defaults for local deployments // var cmd = "/bin/bash"; // var args = ["--login"]; // var env = ["HOME=/home/user", "TERM=xterm", "USER=user", "SHELL=/bin/bash", "EDITOR=vim", "LANG=en_US.UTF-8", "LC_ALL=C"]; // var cwd = "/home/user"; const structure = { cmd: cmd, args: args, env: env, cwd: cwd } if (typeof SharedArrayBuffer === "undefined") { printOnTerm.printError(printOnTerm.getSharedArrayBufferMissingMessage()); return; } let networkInterface = setupNetworkInterface(); async function runTest(cx) { var processCount = 0; function handleProcessCreated() { processCount++; plausible(`Process started: ${processCount}`); if(processCount == 5) { // Make sure no further event is reported cx.unregisterCallback("processCreated", handleProcessCreated); } } cx.registerCallback("processCreated", handleProcessCreated); cx.registerCallback("cpuActivity", cpuCallback); cx.registerCallback("diskActivity", hddCallback); registerNetworkLogin(cx, networkInterface); term.scrollToBottom(); async function cxLogAndRun(cheerpx, cmd, args, env) { await cheerpx.run(cmd, args, env); printOnTerm.printMessage(" "); } cxReadFunc = cx.setCustomConsole(writeData, term.cols, term.rows); function preventDefaults (e) { e.preventDefault() e.stopPropagation() } consoleDiv.addEventListener("dragover", preventDefaults, false); consoleDiv.addEventListener("dragenter", preventDefaults, false); consoleDiv.addEventListener("dragleave", preventDefaults, false); consoleDiv.addEventListener("drop", preventDefaults, false); var opts = {env:structure.env, cwd:structure.cwd, uid: 1000, gid: 1000}; while (true) { await cxLogAndRun(cx, structure.cmd, structure.args, opts); } } function failCallback(err) { printOnTerm.printError(printOnTerm.getErrorMessage(err)); } // The device url and type are replaced by Github Actions. CheerpXApp.create({devices:[{type:"split",url:"debian_mini_20240718_9991267559.ext2",name:"block1"}],mounts:[{type:"ext2",dev:"block1",path:"/"},{type:"cheerpOS",dev:"/app",path:"/app"},{type:"cheerpOS",dev:"/str",path:"/data"},{type:"devs",dev:"",path:"/dev"}], networkInterface: networkInterface}).then(runTest, failCallback); } function initialMessage() { printOnTerm.printMessage(printOnTerm.getAsciiText()); console.log("Welcome. We appreciate curiosity, but be warned that keeping the DevTools open causes significant performance degradation and crashes."); } initialMessage(); async function loadCX() { // Find the latest build var r = await fetch("https://cheerpxdemos.leaningtech.com/publicdeploy/LATEST.txt"); var url = await r.text(); url = url.trim(); var script = document.createElement('script'); script.type = 'text/javascript'; script.src = url; script.addEventListener("load", runBash, false); document.head.appendChild(script); } loadCX();