function parse_SupBook(blob, length, opts) {
	var end = blob.l + length;
	var ctab = blob.read_shift(2);
	var cch = blob.read_shift(2);
	opts.sbcch = cch;
	if(cch == 0x0401 || cch == 0x3A01) return [cch, ctab];
	if(cch < 0x01 || cch >0xff) throw new Error("Unexpected SupBook type: "+cch);
	var virtPath = parse_XLUnicodeStringNoCch(blob, cch);
	/* TODO: 2.5.277 Virtual Path */
	var rgst = [];
	while(end > blob.l) rgst.push(parse_XLUnicodeString(blob));
	return [cch, ctab, virtPath, rgst];
}
function parse_SupBook(blob, length, opts) {
	var end = blob.l + length;
	var ctab = blob.read_shift(2);
	var cch = blob.read_shift(2);
	opts.sbcch = cch;
	if(cch == 0x0401 || cch == 0x3A01) return [cch, ctab];
	if(cch < 0x01 || cch >0xff) throw new Error("Unexpected SupBook type: "+cch);
	var virtPath = parse_XLUnicodeStringNoCch(blob, cch);
	/* TODO: 2.5.277 Virtual Path */
	var rgst = [];
	while(end > blob.l) rgst.push(parse_XLUnicodeString(blob));
	return [cch, ctab, virtPath, rgst];
}
function parse_SupBook ( blob , length , opts ) { var end = blob . l + length ; var ctab = blob . read_shift ( 2 ) ; var cch = blob . read_shift ( 2 ) ; opts . sbcch = cch ; if ( cch == 0x0401 || cch == 0x3A01 ) return [ cch , ctab ] ; if ( cch < 0x01 || cch > 0xff ) throw new Error ( "Unexpected SupBook type: " + cch ) ; var virtPath = parse_XLUnicodeStringNoCch ( blob , cch ) ; /* TODO: 2.5.277 Virtual Path */ var rgst = [ ] ; while ( end > blob . l ) rgst . push ( parse_XLUnicodeString ( blob ) ) ; return [ cch , ctab , virtPath , rgst ] ; }
TODO: parse 2.4.136 /* [MS-XLS] 2.4.271
TODO : parse 2 . 4 . 136 / * [ MS - XLS ] 2 . 4 . 271
Parse SupBook