Logo  

Home - Old Man Programmer

Displaying webapps/vt100/script//conv.js

#!/usr/local/bin/node

const fs = require('fs');
const term = require('./vt100-fb');

if (process.argv.length < 5) {
  console.log("Usage: conv.js <width>x<height> <script file> <timing file> [<audio file>]");
  process.exit(0);
}
var size = process.argv[2];
var script = process.argv[3];
var timing = process.argv[4];
var audio = (process.argv[5] != undefined)? process.argv[5] : null;

var dim = size.split("x");
var sz = [ parseInt(dim[0]), parseInt(dim[1]) ];

var sdata = fs.readFileSync(script, "ascii");
var tdata = fs.readFileSync(timing, "ascii");

for(var i=0; sdata[i] != '\n'; i++);

sdata = sdata.substr(i);

tdata = tdata.split("\n");

var td = [];
for(var i = 0; i < tdata.length; i++) {
  if (tdata[i].length == 0) break;
  var l = tdata[i].split(" ");
  td[i] = [parseFloat(l[0]), parseInt(l[1])];
}

term.terminal.init(sz[0], sz[1]);
var sp = 0, kf = [];
var lastkf = 0, ttime = 0;

kf.push({ts: 0, td: 0, sp: 0, ms: td[0][0] * 1000, frame: term.terminal.dumpstate()});

for(var i = 0; i < td.length; i++) {
  var ms = 1000 * td[i][0];
  var nc = td[i][1];
  ttime += ms;
  while((ttime - lastkf) >= 1000) {
    lastkf += 1000;
    kf.push({ts: lastkf, td: i, sp: sp, ms: parseInt(ttime - lastkf), frame: term.terminal.dumpstate()});
  }
  term.terminal.addstr(sdata.substr(sp, nc));
  sp += nc;
}

ttime = ttime / 1000;

var head = { ttime: ttime, size: sz, script: sdata, timing: td, kf: kf };
if (audio) head['audio'] = audio;

console.log(JSON.stringify(head));