home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Narzedzia / Calibre / calibre-0.8.18.msi / file_262 / chunk.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-09-09  |  3.1 KB  |  118 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.7)
  3.  
  4.  
  5. class Chunk:
  6.     
  7.     def __init__(self, file, align = True, bigendian = True, inclheader = False):
  8.         import struct
  9.         self.closed = False
  10.         self.align = align
  11.         if bigendian:
  12.             strflag = '>'
  13.         else:
  14.             strflag = '<'
  15.         self.file = file
  16.         self.chunkname = file.read(4)
  17.         if len(self.chunkname) < 4:
  18.             raise EOFError
  19.         
  20.         try:
  21.             self.chunksize = struct.unpack(strflag + 'L', file.read(4))[0]
  22.         except struct.error:
  23.             raise EOFError
  24.  
  25.         if inclheader:
  26.             self.chunksize = self.chunksize - 8
  27.         self.size_read = 0
  28.         
  29.         try:
  30.             self.offset = self.file.tell()
  31.         except (AttributeError, IOError):
  32.             self.seekable = False
  33.  
  34.         self.seekable = True
  35.  
  36.     
  37.     def getname(self):
  38.         return self.chunkname
  39.  
  40.     
  41.     def getsize(self):
  42.         return self.chunksize
  43.  
  44.     
  45.     def close(self):
  46.         if not self.closed:
  47.             self.skip()
  48.             self.closed = True
  49.  
  50.     
  51.     def isatty(self):
  52.         if self.closed:
  53.             raise ValueError, 'I/O operation on closed file'
  54.         return False
  55.  
  56.     
  57.     def seek(self, pos, whence = 0):
  58.         if self.closed:
  59.             raise ValueError, 'I/O operation on closed file'
  60.         if not self.seekable:
  61.             raise IOError, 'cannot seek'
  62.         if whence == 1:
  63.             pos = pos + self.size_read
  64.         elif whence == 2:
  65.             pos = pos + self.chunksize
  66.         if pos < 0 or pos > self.chunksize:
  67.             raise RuntimeError
  68.         self.file.seek(self.offset + pos, 0)
  69.         self.size_read = pos
  70.  
  71.     
  72.     def tell(self):
  73.         if self.closed:
  74.             raise ValueError, 'I/O operation on closed file'
  75.         return self.size_read
  76.  
  77.     
  78.     def read(self, size = -1):
  79.         if self.closed:
  80.             raise ValueError, 'I/O operation on closed file'
  81.         if self.size_read >= self.chunksize:
  82.             return ''
  83.         if None < 0:
  84.             size = self.chunksize - self.size_read
  85.         if size > self.chunksize - self.size_read:
  86.             size = self.chunksize - self.size_read
  87.         data = self.file.read(size)
  88.         self.size_read = self.size_read + len(data)
  89.         if self.size_read == self.chunksize and self.align and self.chunksize & 1:
  90.             dummy = self.file.read(1)
  91.             self.size_read = self.size_read + len(dummy)
  92.         return data
  93.  
  94.     
  95.     def skip(self):
  96.         if self.closed:
  97.             raise ValueError, 'I/O operation on closed file'
  98.         if self.seekable:
  99.             
  100.             try:
  101.                 n = self.chunksize - self.size_read
  102.                 if self.align and self.chunksize & 1:
  103.                     n = n + 1
  104.                 self.file.seek(n, 1)
  105.                 self.size_read = self.size_read + n
  106.                 return None
  107.             except IOError:
  108.                 pass
  109.             
  110.  
  111.         while self.size_read < self.chunksize:
  112.             n = min(8192, self.chunksize - self.size_read)
  113.             dummy = self.read(n)
  114.             if not dummy:
  115.                 raise EOFError
  116.  
  117.  
  118.