mirror of https://github.com/espruino/BangleApps
80 lines
1.8 KiB
JavaScript
Executable File
80 lines
1.8 KiB
JavaScript
Executable File
#!/usr/bin/nodejs
|
|
|
|
// https://stackoverflow.com/questions/49129643/how-do-i-merge-an-array-of-uint8arrays
|
|
|
|
var pc = 1;
|
|
const hs = require('./heatshrink.js');
|
|
|
|
if (pc) {
|
|
fs = require('fs');
|
|
var print=console.log;
|
|
}
|
|
|
|
function writeDir(json) {
|
|
json_str = JSON.stringify(json, "", " ");
|
|
dirent = '' + json_str.length;
|
|
while (dirent.length < 6)
|
|
dirent = dirent + ' ';
|
|
return dirent + json_str;
|
|
}
|
|
|
|
function writeTar(tar, dir) {
|
|
var h_len = 16;
|
|
var cur = h_len;
|
|
files = fs.readdirSync(dir);
|
|
let data = [];
|
|
var directory = '';
|
|
var json = {};
|
|
for (f of files) {
|
|
let f_rec = {};
|
|
d = fs.readFileSync(dir+f);
|
|
if (0) {
|
|
cs = hs.compress(d);
|
|
f_rec.comp = "hs";
|
|
} else
|
|
cs = d;
|
|
print("Processing", f, cur, d.length, cs.length);
|
|
data.push(cs);
|
|
f_rec.st = cur;
|
|
var len = cs.length;
|
|
f_rec.si = len;
|
|
cur = cur + len;
|
|
json[f] = f_rec;
|
|
json_str = JSON.stringify(json, "", " ");
|
|
if (json_str.length < 16000)
|
|
continue;
|
|
directory += writeDir(json);
|
|
json = {};
|
|
}
|
|
directory += writeDir(json);
|
|
directory += '-1 ';
|
|
|
|
size = cur;
|
|
header = '' + size;
|
|
while (header.length < h_len) {
|
|
header = header+' ';
|
|
}
|
|
fs.writeFileSync(tar, header);
|
|
for (d of data)
|
|
fs.appendFileSync(tar, Buffer.from(d));
|
|
fs.appendFileSync(tar, directory);
|
|
}
|
|
|
|
function readTarFile(tar, f) {
|
|
const st = require('Storage');
|
|
json_off = st.read(tar, 0, 16) * 1;
|
|
print(json_off);
|
|
json = st.read(tar, json_off, -1);
|
|
files = JSON.parse(json);
|
|
rec = files[f];
|
|
return st.read(tar, rec.st, rec.si);
|
|
}
|
|
|
|
if (pc)
|
|
writeTar("delme.mtar", "delme/");
|
|
else {
|
|
print(readTarFile("delme.mtar", "ahoj"));
|
|
print(readTarFile("delme.mtar", "nazdar"));
|
|
}
|
|
|