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();

