'Read at least wtd bytes (or until EOF)'

def read(self, totalwtd):

    decdata = ''
    wtd = totalwtd
    while (wtd > 0):
        if self.eof:
            return decdata
        wtd = (((wtd + 2) // 3) * 4)
        data = self.ifp.read(wtd)
        while 1:
            try:
                (decdatacur, self.eof) = binascii.a2b_hqx(data)
                break
            except binascii.Incomplete:
                pass
            newdata = self.ifp.read(1)
            if (not newdata):
                raise Error, 'Premature    EOF    on    binhex    file'
            data = (data + newdata)
        decdata = (decdata + decdatacur)
        wtd = (totalwtd - len(decdata))
        if ((not decdata) and (not self.eof)):
            raise Error, 'Premature    EOF    on    binhex    file'
    return decdata
