You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

39 lines
1.5 KiB
JavaScript

'use strict';
const createBufferReader = require("../../buffer-reader");
const createBitParser = require("../../../bit-parser");
const parsePrimaryVolumeDescriptor = require("./primary-volume");
const parseEscapeSequences = require("../../parse/escape-sequences");
/* Supplementary volume flags: (ref http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-119.pdf)
* Bit Description
* 0 If set, the Escape Sequences field specifies at least one escape sequence not registered according to ISO 2375.
* 1 - 7 Reserved
*/
let parseVolumeFlags = createBitParser([
"hasNonISO2375EscapeSequences",
null,
null,
null,
null,
null,
null,
null
]);
module.exports = function parseSupplementaryVolumeDescriptor(data) {
let bufferReader = createBufferReader(data);
let escapeSequences = data.slice(81, 113);
let encodings = parseEscapeSequences(escapeSequences);
/* The format of a primary and supplementary volume descriptor are mostly the same - the only real difference is that a supplementary volume descriptor will also have a volumeFlags and escapeSequences field. We can therefore just parse this volume descriptor like a primary volume descriptor, and then merge in the additional fields. */
return Object.assign(parsePrimaryVolumeDescriptor(data, encodings[0]), {
volumeFlags: parseVolumeFlags(bufferReader.int8(0)),
escapeSequences: escapeSequences,
encodings: encodings
});
};