home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 January / Chip_2003-01_cd2.bin / convert / eJayMp3Pro / mp3pro_demo.exe / STRINGIO.PYC (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2000-06-16  |  6.2 KB  |  196 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 1.5)
  3.  
  4. import string
  5.  
  6. class StringIO:
  7.     
  8.     def __init__(self, buf = ''):
  9.         self.buf = buf
  10.         self.len = len(buf)
  11.         self.buflist = []
  12.         self.pos = 0
  13.         self.closed = 0
  14.         self.softspace = 0
  15.  
  16.     
  17.     def close(self):
  18.         if not (self.closed):
  19.             self.closed = 1
  20.             del self.buf
  21.             del self.pos
  22.         
  23.  
  24.     
  25.     def isatty(self):
  26.         if self.closed:
  27.             raise ValueError, 'I/O operation on closed file'
  28.         
  29.         return 0
  30.  
  31.     
  32.     def seek(self, pos, mode = 0):
  33.         if self.closed:
  34.             raise ValueError, 'I/O operation on closed file'
  35.         
  36.         if self.buflist:
  37.             self.buf = self.buf + string.joinfields(self.buflist, '')
  38.             self.buflist = []
  39.         
  40.         if mode == 1:
  41.             pos = pos + self.pos
  42.         elif mode == 2:
  43.             pos = pos + self.len
  44.         
  45.         self.pos = max(0, pos)
  46.  
  47.     
  48.     def tell(self):
  49.         if self.closed:
  50.             raise ValueError, 'I/O operation on closed file'
  51.         
  52.         return self.pos
  53.  
  54.     
  55.     def read(self, n = -1):
  56.         if self.closed:
  57.             raise ValueError, 'I/O operation on closed file'
  58.         
  59.         if self.buflist:
  60.             self.buf = self.buf + string.joinfields(self.buflist, '')
  61.             self.buflist = []
  62.         
  63.         if n < 0:
  64.             newpos = self.len
  65.         else:
  66.             newpos = min(self.pos + n, self.len)
  67.         r = self.buf[self.pos:newpos]
  68.         self.pos = newpos
  69.         return r
  70.  
  71.     
  72.     def readline(self, length = None):
  73.         if self.closed:
  74.             raise ValueError, 'I/O operation on closed file'
  75.         
  76.         if self.buflist:
  77.             self.buf = self.buf + string.joinfields(self.buflist, '')
  78.             self.buflist = []
  79.         
  80.         i = string.find(self.buf, '\n', self.pos)
  81.         if i < 0:
  82.             newpos = self.len
  83.         else:
  84.             newpos = i + 1
  85.         if length is not None:
  86.             if self.pos + length < newpos:
  87.                 newpos = self.pos + length
  88.             
  89.         
  90.         r = self.buf[self.pos:newpos]
  91.         self.pos = newpos
  92.         return r
  93.  
  94.     
  95.     def readlines(self):
  96.         lines = []
  97.         line = self.readline()
  98.         while line:
  99.             lines.append(line)
  100.             line = self.readline()
  101.         return lines
  102.  
  103.     
  104.     def write(self, s):
  105.         if self.closed:
  106.             raise ValueError, 'I/O operation on closed file'
  107.         
  108.         if not s:
  109.             return None
  110.         
  111.         if self.pos > self.len:
  112.             self.buflist.append('\x00' * (self.pos - self.len))
  113.             self.len = self.pos
  114.         
  115.         newpos = self.pos + len(s)
  116.         if self.pos < self.len:
  117.             if self.buflist:
  118.                 self.buf = self.buf + string.joinfields(self.buflist, '')
  119.                 self.buflist = []
  120.             
  121.             self.buflist = [
  122.                 self.buf[:self.pos],
  123.                 s,
  124.                 self.buf[newpos:]]
  125.             self.buf = ''
  126.         else:
  127.             self.buflist.append(s)
  128.             self.len = newpos
  129.         self.pos = newpos
  130.  
  131.     
  132.     def writelines(self, list):
  133.         self.write(string.joinfields(list, ''))
  134.  
  135.     
  136.     def flush(self):
  137.         if self.closed:
  138.             raise ValueError, 'I/O operation on closed file'
  139.         
  140.  
  141.     
  142.     def getvalue(self):
  143.         if self.buflist:
  144.             self.buf = self.buf + string.joinfields(self.buflist, '')
  145.             self.buflist = []
  146.         
  147.         return self.buf
  148.  
  149.  
  150.  
  151. def test():
  152.     import sys
  153.     if sys.argv[1:]:
  154.         file = sys.argv[1]
  155.     else:
  156.         file = '/etc/passwd'
  157.     lines = open(file, 'r').readlines()
  158.     text = open(file, 'r').read()
  159.     f = StringIO()
  160.     for line in lines[:-2]:
  161.         f.write(line)
  162.     
  163.     f.writelines(lines[-2:])
  164.     length = f.tell()
  165.     print 'File length =', length
  166.     f.seek(len(lines[0]))
  167.     f.write(lines[1])
  168.     f.seek(0)
  169.     print 'First line =', `f.readline()`
  170.     here = f.tell()
  171.     line = f.readline()
  172.     print 'Second line =', `line`
  173.     f.seek(-len(line), 1)
  174.     line2 = f.read(len(line))
  175.     if line != line2:
  176.         raise RuntimeError, 'bad result after seek back'
  177.     
  178.     f.seek(len(line2), 1)
  179.     list = f.readlines()
  180.     line = list[-1]
  181.     f.seek(f.tell() - len(line))
  182.     line2 = f.read()
  183.     if line != line2:
  184.         raise RuntimeError, 'bad result after seek back from EOF'
  185.     
  186.     print 'Read', len(list), 'more lines'
  187.     print 'File length =', f.tell()
  188.     if f.tell() != length:
  189.         raise RuntimeError, 'bad length'
  190.     
  191.     f.close()
  192.  
  193. if __name__ == '__main__':
  194.     test()
  195.  
  196.