Use module os.
Split off file cache to module 'linecache'.
diff --git a/Lib/tb.py b/Lib/tb.py
index ef0c4b5..6b9cd9a 100644
--- a/Lib/tb.py
+++ b/Lib/tb.py
@@ -2,14 +2,10 @@
 # Also an interactive stack trace browser.
 
 import sys
-try:
-	import mac
-	os = mac
-except ImportError:
-	import posix
-	os = posix
+import os
 from stat import *
 import string
+import linecache
 
 def br(): browser(sys.last_traceback)
 
@@ -67,7 +63,7 @@
 	for i in range(first, last+1):
 		if i == lineno: prefix = '***' + string.rjust(`i`, 4) + ':'
 		else: prefix = string.rjust(`i`, 7) + ':'
-		line = readfileline(filename, i)
+		line = linecache.getline(filename, i)
 		if line[-1:] == '\n': line = line[:-1]
 		print prefix + line
 
@@ -112,7 +108,7 @@
 	filename = tb.tb_frame.f_code.co_filename
 	lineno = tb.tb_lineno
 	info = '"' + filename + '"(' + `lineno` + ')'
-	line = readfileline(filename, lineno)
+	line = linecache.getline(filename, lineno)
 	if line:
 		info = info + ': ' + string.strip(line)
 	print info
@@ -175,46 +171,3 @@
 		printobject(v[key], maxlevel-1)
 		if i+1 < n: print ',',
 	if n > 6: print '...',
-
-_filecache = {}
-
-def readfileline(filename, lineno):
-	try:
-		stat = os.stat(filename)
-	except os.error, msg:
-		print 'Cannot stat', filename, '--', msg
-		return ''
-	cache_ok = 0
-	if _filecache.has_key(filename):
-		cached_stat, lines = _filecache[filename]
-		if stat[ST_SIZE] == cached_stat[ST_SIZE] and \
-				stat[ST_MTIME] == cached_stat[ST_MTIME]:
-			cache_ok = 1
-		else:
-			print 'Stale cache entry for', filename
-			del _filecache[filename]
-	if not cache_ok:
-		lines = readfilelines(filename)
-		if not lines:
-			return ''
-		_filecache[filename] = stat, lines
-	if 0 <= lineno-1 < len(lines):
-		return lines[lineno-1]
-	else:
-		print 'Line number out of range, last line is', len(lines)
-		return ''
-
-def readfilelines(filename):
-	try:
-		fp = open(filename, 'r')
-	except:
-		print 'Cannot open', filename
-		return []
-	lines = []
-	while 1:
-		line = fp.readline()
-		if not line: break
-		lines.append(line)
-	if not lines:
-		print 'Empty file', filename
-	return lines