2024-09-17 18:59:38 +02:00
|
|
|
|
ISOTerminal.addEventListener('ready', function(e){
|
|
|
|
|
setTimeout( () => this.boot(), 50 ) // because of autorestore.js
|
2024-09-03 18:33:35 +02:00
|
|
|
|
})
|
|
|
|
|
|
2025-01-27 12:00:16 +01:00
|
|
|
|
ISOTerminal.prototype.bootMenu = function(e){
|
|
|
|
|
this.boot.menu.selected = false // reset
|
2025-02-21 15:59:29 +01:00
|
|
|
|
const autobootURL = e.detail.bootMenuURL && document.location.hash.length > 1
|
|
|
|
|
const autoboot = e.detail.bootMenu || autobootURL
|
|
|
|
|
if( !autoboot ){
|
|
|
|
|
|
|
|
|
|
let msg = '\n\r'
|
|
|
|
|
this.boot.menu.map( (m) => {
|
|
|
|
|
msg += `\r[36m${m.key})[0m ${m.title(this.opts)}\n`
|
|
|
|
|
})
|
|
|
|
|
msg += `\n\r[36menter choice>[0m `
|
|
|
|
|
this.send(msg)
|
|
|
|
|
|
|
|
|
|
}else{ // autoboot
|
|
|
|
|
if( this.term ){
|
|
|
|
|
this.term.handler( e.detail.bootMenu || e.detail.bootMenuURL )
|
|
|
|
|
this.term.handler("\n")
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-01-27 12:00:16 +01:00
|
|
|
|
}
|
|
|
|
|
|
2025-02-21 15:59:29 +01:00
|
|
|
|
ISOTerminal.addEventListener('bootMenu', function(e){ this.bootMenu(e) } )
|
2025-01-24 17:21:26 +01:00
|
|
|
|
|
2024-09-17 18:59:38 +02:00
|
|
|
|
ISOTerminal.prototype.boot = async function(e){
|
2024-09-03 18:33:35 +02:00
|
|
|
|
// set environment
|
2024-10-23 18:50:07 +02:00
|
|
|
|
let env = [
|
|
|
|
|
`export LINES=${this.opts.rows}`,
|
|
|
|
|
`export COLUMNS=${this.opts.cols}`,
|
|
|
|
|
'export BROWSER=1',
|
|
|
|
|
]
|
2024-09-03 18:33:35 +02:00
|
|
|
|
for ( let i in document.location ){
|
2024-10-01 19:07:03 +02:00
|
|
|
|
if( typeof document.location[i] == 'string' ){
|
2024-09-23 18:01:40 +02:00
|
|
|
|
env.push( 'export '+String(i).toUpperCase()+'="'+decodeURIComponent( document.location[i]+'"') )
|
2024-10-01 19:07:03 +02:00
|
|
|
|
}
|
2024-09-03 18:33:35 +02:00
|
|
|
|
}
|
2025-01-15 18:02:30 +01:00
|
|
|
|
await this.worker.create_file("profile.browser", this.convert.toUint8Array( env.join('\n') ) )
|
2024-09-17 18:59:38 +02:00
|
|
|
|
|
2024-09-16 13:28:28 +02:00
|
|
|
|
if( this.serial_input == 0 ){
|
2024-09-17 18:59:38 +02:00
|
|
|
|
if( !this.noboot ){
|
2024-10-04 17:49:15 +02:00
|
|
|
|
this.send("source /etc/profile # \\o/ FOSS powa!\n")
|
2024-09-17 18:59:38 +02:00
|
|
|
|
}
|
2024-09-16 13:28:28 +02:00
|
|
|
|
}
|
|
|
|
|
|
2024-09-03 18:33:35 +02:00
|
|
|
|
}
|
2025-01-24 17:21:26 +01:00
|
|
|
|
|
2025-01-27 12:00:16 +01:00
|
|
|
|
// here REPL's can be defined
|
|
|
|
|
ISOTerminal.prototype.boot.menu = []
|
|
|
|
|
|
|
|
|
|
// REPL: iso
|
2025-01-27 16:03:37 +01:00
|
|
|
|
if( typeof window.PromiseWorker != 'undefined' ){ // if xrsh v86 is able to run in in worker
|
|
|
|
|
ISOTerminal.prototype.boot.menu.push(
|
|
|
|
|
{
|
|
|
|
|
key: "1",
|
|
|
|
|
title: (opts) => `boot [31m${String(opts.iso || "").replace(/.*\//,'')}[0m Linux ❤️ `,
|
2025-02-14 17:18:33 +01:00
|
|
|
|
init: function(){
|
|
|
|
|
|
|
|
|
|
// hack to notify href clicks
|
|
|
|
|
Term.prototype.href = (a) => {
|
|
|
|
|
if( a.href ){
|
|
|
|
|
this.exec(`source /etc/profile.sh; hook href "${a.href}"`)
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.bootISO()
|
|
|
|
|
},
|
2025-01-27 16:03:37 +01:00
|
|
|
|
keyHandler: function(ch){ this.send(ch) } // send to v86 webworker
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
}
|
2024-09-03 18:33:35 +02:00
|
|
|
|
|