mirror of
https://codeberg.org/TicklishHoneyBee/CLIte.git
synced 2026-03-11 09:04:37 +00:00
improve program/library loading
This commit is contained in:
parent
d0a2029b87
commit
f63b61ee48
1 changed files with 93 additions and 74 deletions
167
clite/core.js
167
clite/core.js
|
|
@ -1,9 +1,15 @@
|
|||
var clite = {
|
||||
state:{
|
||||
version:'0.3-3',
|
||||
version:'0.3-4',
|
||||
isinit:false,
|
||||
runlevel:1
|
||||
},
|
||||
includes:{
|
||||
// a list of program/command files to load
|
||||
prog:['commands.js','shell.js'],
|
||||
// a list of library files to load
|
||||
libs:['libclite.js','libcurses.js','libstd.js','libstdio.js','libterm.js']
|
||||
},
|
||||
core:{
|
||||
execSafe:function(f) {
|
||||
try{
|
||||
|
|
@ -288,6 +294,86 @@ cat /etc/greeting
|
|||
n.perms = '-rwxr-xr-x';
|
||||
}
|
||||
|
||||
function loadCommands(nextfn) {
|
||||
clite.commands = {
|
||||
data:null,
|
||||
load:function(name,fn) {
|
||||
vfsapi.mkFile(0,'/bin/'+name);
|
||||
var f = vfsapi.getNode(0,'/bin/'+name);
|
||||
if (!f)
|
||||
return;
|
||||
f.perms = '-rwxr-xr-x';
|
||||
f.data.content = fn;
|
||||
vfsapi.mkFile(0,'/usr/src/'+name+'.js');
|
||||
f = vfsapi.getNode(0,'/usr/src/'+name+'.js');
|
||||
if (!f)
|
||||
return;
|
||||
f.perms = '-rw-rw-r--';
|
||||
f.data.content = 'function main'+fn.toString().substring(8);
|
||||
}
|
||||
}
|
||||
|
||||
var index = 0;
|
||||
|
||||
function cb() {
|
||||
if (clite.commands.data)
|
||||
clite.core.execSafe(clite.commands.data);
|
||||
clite.commands.data = null;
|
||||
|
||||
if (index >= clite.includes.prog.length) {
|
||||
clite.commands = null;
|
||||
clite.core.execSafeAsync(nextfn);
|
||||
return;
|
||||
}
|
||||
|
||||
var f = clite.includes.prog[index];
|
||||
index++;
|
||||
clite.core.load.script('clite/'+f,cb);
|
||||
}
|
||||
cb();
|
||||
}
|
||||
|
||||
function loadLibs(nextfn) {
|
||||
clite.libs = {
|
||||
index:[],
|
||||
data:null,
|
||||
load:function(name,header,fn) {
|
||||
vfsapi.mkFile(0,'/lib/'+name+'.so');
|
||||
var f = vfsapi.getNode(0,'/lib/'+name+'.so');
|
||||
if (!f)
|
||||
return;
|
||||
f.perms = '-rw-r--r--';
|
||||
f.data.content = fn;
|
||||
vfsapi.mkFile(0,'/usr/src/libs/'+name+'.js');
|
||||
f = vfsapi.getNode(0,'/usr/src/libs/'+name+'.js');
|
||||
if (!f)
|
||||
return;
|
||||
f.perms = '-rw-rw-r--';
|
||||
f.data.content = 'function init'+fn.toString().substring(8);
|
||||
clite.libs.index.push({header:header,file:name});
|
||||
}
|
||||
}
|
||||
|
||||
var index = 0;
|
||||
|
||||
function cb() {
|
||||
if (clite.libs.data)
|
||||
clite.core.execSafe(clite.libs.data);
|
||||
clite.libs.data = null;
|
||||
|
||||
if (index >= clite.includes.libs.length) {
|
||||
clite.libs.load = null;
|
||||
clite.core.execSafeAsync(nextfn);
|
||||
return;
|
||||
}
|
||||
|
||||
var f = clite.includes.libs[index];
|
||||
index++;
|
||||
clite.core.load.script('clite/'+f,cb);
|
||||
}
|
||||
cb();
|
||||
}
|
||||
|
||||
function init1() {
|
||||
clite.log.write('CLIte Version '+clite.state.version);
|
||||
// setup vfs
|
||||
|
|
@ -367,80 +453,13 @@ readme.txt:/usr/clite/readme:0:0:-rw-r--r--`;
|
|||
defaultDevices();
|
||||
// populate /bin
|
||||
clite.log.write('Populating /bin');
|
||||
// create a temporary function to load in commands
|
||||
clite.commands = {
|
||||
data:null,
|
||||
load:function(name,fn) {
|
||||
vfsapi.mkFile(0,'/bin/'+name);
|
||||
var f = vfsapi.getNode(0,'/bin/'+name);
|
||||
if (!f)
|
||||
return;
|
||||
f.perms = '-rwxr-xr-x';
|
||||
f.data.content = fn;
|
||||
vfsapi.mkFile(0,'/usr/src/'+name+'.js');
|
||||
f = vfsapi.getNode(0,'/usr/src/'+name+'.js');
|
||||
if (!f)
|
||||
return;
|
||||
f.perms = '-rw-rw-r--';
|
||||
f.data.content = 'function main'+fn.toString().substring(8);
|
||||
}
|
||||
}
|
||||
clite.core.load.script('clite/commands.js',init3);
|
||||
loadCommands(init3);
|
||||
}
|
||||
function init3(data) {
|
||||
clite.core.execSafe(clite.commands.data);
|
||||
clite.core.load.script('clite/shell.js',init4);
|
||||
}
|
||||
function init4(data) {
|
||||
clite.core.execSafe(clite.commands.data);
|
||||
clite.commands = null;
|
||||
function init3() {
|
||||
clite.log.write('Populating /lib');
|
||||
clite.libs = {
|
||||
index:[],
|
||||
data:null,
|
||||
load:function(name,header,fn) {
|
||||
vfsapi.mkFile(0,'/lib/'+name+'.so');
|
||||
var f = vfsapi.getNode(0,'/lib/'+name+'.so');
|
||||
if (!f)
|
||||
return;
|
||||
f.perms = '-rw-r--r--';
|
||||
f.data.content = fn;
|
||||
vfsapi.mkFile(0,'/usr/src/libs/'+name+'.js');
|
||||
f = vfsapi.getNode(0,'/usr/src/libs/'+name+'.js');
|
||||
if (!f)
|
||||
return;
|
||||
f.perms = '-rw-rw-r--';
|
||||
f.data.content = 'function init'+fn.toString().substring(8);
|
||||
clite.libs.index.push({header:header,file:name});
|
||||
}
|
||||
}
|
||||
clite.core.load.script('clite/libstd.js',init5);
|
||||
loadLibs(init4);
|
||||
}
|
||||
|
||||
function init5(data) {
|
||||
clite.core.execSafe(clite.libs.data);
|
||||
clite.core.load.script('clite/libclite.js',init6);
|
||||
}
|
||||
|
||||
function init6(data) {
|
||||
clite.core.execSafe(clite.libs.data);
|
||||
clite.core.load.script('clite/libstdio.js',init7);
|
||||
}
|
||||
|
||||
function init7(data) {
|
||||
clite.core.execSafe(clite.libs.data);
|
||||
clite.core.load.script('clite/libterm.js',init8);
|
||||
}
|
||||
|
||||
function init8(data) {
|
||||
clite.core.execSafe(clite.libs.data);
|
||||
clite.core.load.script('clite/libcurses.js',init9);
|
||||
}
|
||||
|
||||
function init9(data) {
|
||||
clite.core.execSafe(clite.libs.data);
|
||||
clite.libs.data = null;
|
||||
clite.libs.load = null;
|
||||
function init4() {
|
||||
clite.log.write('Bringing up the process manager');
|
||||
if (!clite.proc.init(vfsapi)) {
|
||||
clite.log.write('failed');
|
||||
|
|
@ -471,10 +490,10 @@ readme.txt:/usr/clite/readme:0:0:-rw-r--r--`;
|
|||
exit:null, // filled in by fork()
|
||||
include:null, // filled in by fork()
|
||||
};
|
||||
var pid = clite.lib.fork(env,io,init10);
|
||||
var pid = clite.lib.fork(env,io,init5);
|
||||
}
|
||||
}
|
||||
function init10(env,io) {
|
||||
function init5(env,io) {
|
||||
clite.proc.setLogin(io.pid,1);
|
||||
clite.lib.exec('/bin/sh',['sh'],env,io);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue