From 86cb3dcb7102f7c715c323bbd1c62f4f136ddfab Mon Sep 17 00:00:00 2001 From: Jer Noble <jer.noble@apple.com> Date: Thu, 6 Dec 2012 11:37:23 -0800 Subject: [PATCH] First version. --- Atom.js | 26 ++++++++++++++++++++++++++ AtomTester.html | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 Atom.js create mode 100644 AtomTester.html diff --git a/Atom.js b/Atom.js new file mode 100644 index 0000000..50ba17f --- /dev/null +++ b/Atom.js @@ -0,0 +1,26 @@ +var Atom = function(buffer, offset) { + this.size = 0; + this.type = ''; + this.childAtoms = []; + + return this.parse(buffer, offset) +}; + +Atom.prototype.parse = function(buffer, offset) +{ + // 'offset' is optional. + if (arguments.length < 2) + offset = 0; + + // Atoms are 8 bytes minimum. + if (buffer.byteLength - offset < 8) + return null; + + var view = new DataView(buffer, offset, 4); + this.size = view.getUint32(0); + + var typeArrayView = new Uint8Array(buffer, offset + 4, 4); + this.type = String.fromCharCode.apply(null, typeArrayView); + + return this; +}; \ No newline at end of file diff --git a/AtomTester.html b/AtomTester.html new file mode 100644 index 0000000..789e246 --- /dev/null +++ b/AtomTester.html @@ -0,0 +1,32 @@ +<!DOCTYPE html> +<head> + <title>AtomTester</title> + <script src=Atom.js></script> + <script> + var atoms = []; + function onFileSelect(e) { + var file = e.target.files[0]; + var reader = new FileReader(); + reader.onload = (function(file) { + return function(e) { + var offset = 0; + while (offset < e.target.result.byteLength) { + var atom = new Atom(e.target.result, offset); + if (!atom) + break; + atoms.push(atom); + offset += atom.size; + } + }; + })(file); + reader.readAsArrayBuffer(file); + } + + function setup() { + document.getElementById('file').addEventListener('change', onFileSelect, false); + } + </script> +</head> +<body id="atomtester" onload="setup()"> + <input type="file" id="file" name="file" /> +</body> \ No newline at end of file -- 2.40.1