def read_index(sections, idx, codec): table, cncx = OrderedDict(), CNCX([], codec) data = sections[idx].raw indx_header = parse_indx_header(data) indx_count = indx_header['count'] if indx_header['ncncx'] > 0: off = idx + indx_count + 1 cncx_records = [x.raw for x in sections[off:off+indx_header['ncncx']]] cncx = CNCX(cncx_records, codec) tag_section_start = indx_header['tagx'] control_byte_count, tags = parse_tagx_section(data[tag_section_start:]) read_variable_len_data(data, indx_header) index_headers = [] for i in range(idx + 1, idx + 1 + indx_count): # Index record data = sections[i].raw index_headers.append(parse_index_record(table, data, control_byte_count, tags, codec, indx_header['ordt_map'], strict=True)) read_variable_len_data(data, index_headers[-1]) return table, cncx, indx_header, index_headers