Listing 2. Batch Loading of Foreign Data into xpcshell const Cc = Components.classes; const Ci = Components.interfaces; var klass = {}; var psdata = null; // last results from ps(1). klass.file = Cc["@mozilla.org/file/local;1"]; klass.process = Cc["@mozilla.org/process/util;1"]; klass.stream = Cc["@mozilla.org/network/file-input-stream;1"]; klass.jsstream = Cc["@mozilla.org/scriptableinputstream;1"]; function execute_ps() { // freeze until ps(1) is finished. var blocking = true, argv = [], result = {}; var path = "/home/nrm/writing/psviewer/psdata.ksh" var file = klass.file.createInstance(Ci.nsILocalFile); var process = klass.process.createInstance(Ci.nsIProcess); file.initWithPath(path); process.init(file); process.run(blocking, argv,argv.length, result); } function read_raw_data() { const path = "/tmp/psdata"; var mode_mask = 0x01, perm_mask = 0; // open(2) var file = klass.file.createInstance(Ci.nsILocalFile); file.initWithPath(path); var stream = klass.stream.createInstance( Ci.nsIFileInputStream); stream.init(file, mode_mask, perm_mask, 0); var jsstream = klass.jsstream.createInstance( Ci.nsIScriptableInputStream); jsstream.init(stream); var data = jsstream.read(file.fileSize); // got the file content. break it down. data = data.split("\012"); for (var i = 0; i < data.length; i++) { data[i] = data[i].replace(/\s*,\s*/,","); data[i] = data[i].replace(/^\s*/,""); psdata.push(data[i].split(",")); } } execute_ps(); read_raw_data();