diff --git a/js/dos/dios.js b/js/dos/dios.js new file mode 100644 index 0000000..e005174 --- /dev/null +++ b/js/dos/dios.js @@ -0,0 +1,132 @@ +/** + ** ============================== + ** OOOO O O OOOO + ** O O 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-2017 B-LAB + ** $CREATED: 23/06/16 by sbosse. + ** $VERSION: 1.1.4 + ** + ** $INFO: + ** + ** DIOS: Simplified DOS I/O System Wrapper Layer + ** + ** + ** $ENDOFINFO + */ +"use strict"; +var Io = Require('com/io'); +var Comp = Require('com/compat'); + +var Net = Require('dos/network'); +var Sch = Require('dos/scheduler'); +var Buf = Require('dos/buf'); +var Rpc = Require('dos/rpc'); +var Std = Require('dos/std'); +var Router = Require('dos/router'); +var Fs = Require('fs'); +var Dns = Require('dos/dns'); +var Afs = Require('dos/afs'); +var Cs = Require('dos/capset'); +var Status = Net.Status; + +/** + * + */ + +// type dios : function ('rpc:rpcint,'env) : dios +// with 'env:{rootdir:capset} +var dios = function(rpc,env) { + this.rpc = rpc; + this.env = env; + this.env.workdir = env.rootdir; + this.std = Std.StdInt(rpc,env); + this.dns = Dns.DnsInt(rpc,env); + this.afs = Afs.AfsInt(rpc,env); + this.cs = Cs.CsInt(rpc,env); + this.stat = Status.STD_OK; +}; + + +// with cb:function((name:string,time:number,cap:capability,stat:status) [],status,boolean?) +dios.prototype.dir = function (path,cb,nocap) { + var self=this; + this.dns.dns_lookup(undefined,path,function (stat,cs,remain) { + self.stat=stat; + if (stat==Status.STD_OK) { + self.dns.dns_list(cs,function (stat,dir) { + var rows=[],index=0,stat; + self.stat=stat; + if (stat==Status.STD_OK) { + // TODO: lookup all row entries .. + rows=Comp.array.map(dir.di_rows,function (row) { + return { + name:row.de_name, + time:row.de_time, + cap:undefined, + stat:Status.STD_OK + } + }); + + if (!nocap) L( + function () {return index