import struct, sys, os, time, codecs (utf_encode, utf_decode, sr, sw) = codecs.lookup('utf-16-le') global mhit mhit = {} class mh_record: def __init__(self, type, hdr_len, hdr, offset, db, level): self.type = type self.hdr_len = hdr_len self.hdr = hdr self.data_start = offset self.db = db self.level = level def read_record(self): f = {'mhbd' : mhbd_record, 'mhsd' : mhsd_record, 'mhit' : mhit_record, 'mhod' : mhod_record, 'mhlt' : mhlt_record, 'mhlp' : mhlp_record, 'mhyp' : mhyp_record, 'mhip' : mhip_record} format = '<4sL' size = struct.calcsize(format) hdr = db.read(size) (type, hdr_len) = struct.unpack(format, hdr) hdr = db.read(hdr_len-size) data_start = db.tell() # print '%sinstancing %s' % ('\t'*self.level, type) new_rec = f[type](type, hdr_len, hdr, data_start, db, self.level+1) return new_rec def fill_in(self, nb_rec): self.record = [] self.db.seek(self.data_start) for i in range(nb_rec): # print '%s %s- rec %d/%d' % ('\t'*self.level, self.type, i, nb_rec) self.record.append(self.read_record()) class mhbd_record(mh_record): def __init__(self, type, hdr_len, hdr, offset, db, level): mh_record.__init__(self, type, hdr_len, hdr, offset, db, level) self.format = '