flashmagic.js
Version:
NXP LPC Microprocessor Programmer
52 lines (51 loc) • 1.5 kB
JavaScript
;
var Symbol = require('es6-symbol');
var _checksumSym = Symbol();
var UUEncoder = (function () {
function UUEncoder() {
this[_checksumSym] = 0;
}
Object.defineProperty(UUEncoder.prototype, "checksum", {
get: function () {
return this[_checksumSym];
},
enumerable: true,
configurable: true
});
UUEncoder.prototype.reset = function () {
this[_checksumSym] = 0;
};
UUEncoder.prototype.encode = function (data, offset, length) {
var out = encodeSingle(length);
var sum = 0;
var n = ~~(length / 3) * 3;
var m = n + offset;
var i = offset;
while (i < m) {
var a = data[i++];
var b = data[i++];
var c = data[i++];
out += encodeTriple(a, b, c);
sum += a + b + c;
}
if (n < length) {
var a = data[i++];
var b = (n + 1 < length) ? data[i] : 0;
out += encodeTriple(a, b, 0);
sum += a + b;
}
this[_checksumSym] += sum;
return out;
};
return UUEncoder;
}());
exports.UUEncoder = UUEncoder;
function encodeSingle(b) {
return String.fromCharCode(b ? (b + 32) : 0x60);
}
function encodeTriple(a, b, c) {
return encodeSingle((a >>> 2) & 0x3F) +
encodeSingle(((a << 4) & 0x30) | ((b >>> 4) & 0x0F)) +
encodeSingle(((b << 2) & 0x3C) | ((c >>> 6) & 0x03)) +
encodeSingle(c & 0x3F);
}