Initial revision
diff --git a/Lib/lib-old/newdir.py b/Lib/lib-old/newdir.py
new file mode 100644
index 0000000..7164b98
--- /dev/null
+++ b/Lib/lib-old/newdir.py
@@ -0,0 +1,79 @@
+# New dir() function and other attribute-related goodies
+
+# This should become a built-in function
+#
+def getattr(x, name):
+	return eval('x.'+name)
+
+# This should be the new dir(), except that it should still list
+# the current local name space by default
+#
+def listattrs(x):
+	try:
+		dictkeys = x.__dict__.keys()
+	except (NameError, TypeError):
+		dictkeys = []
+	#
+	try:
+		methods = x.__methods__
+	except (NameError, TypeError):
+		methods = []
+	#
+	try:
+		members = x.__members__
+	except (NameError, TypeError):
+		members = []
+	#
+	try:
+		the_class = x.__class__
+	except (NameError, TypeError):
+		the_class = None
+	#
+	try:
+		bases = x.__bases__
+	except (NameError, TypeError):
+		bases = ()
+	#
+	total = dictkeys + methods + members
+	if the_class:
+		# It's a class instace; add the class's attributes
+		# that are functions (methods)...
+		class_attrs = listattrs(the_class)
+		class_methods = []
+		for name in class_attrs:
+			if is_function(getattr(the_class, name)):
+				class_methods.append(name)
+		total = total + class_methods
+	elif bases:
+		# It's a derived class; add the base class attributes
+		for base in bases:
+			base_attrs = listattrs(base)
+			total = total + base_attrs
+	total.sort()
+	return total
+	i = 0
+	while i+1 < len(total):
+		if total[i] = total[i+1]:
+			del total[i+1]
+		else:
+			i = i+1
+	return total
+
+# Helper to recognize functions
+#
+def is_function(x):
+	return type(x) = type(is_function)
+
+# Approximation of builtin dir(); this lists the user's
+# variables by default, not the current local name space.
+# Use a class method to make a function that can be called
+# with or without arguments.
+#
+class _dirclass():
+	def dir(args):
+		if type(args) = type(()):
+			return listattrs(args[1])
+		else:
+			import __main__
+			return listattrs(__main__)
+dir = _dirclass().dir
diff --git a/Lib/newdir.py b/Lib/newdir.py
new file mode 100644
index 0000000..7164b98
--- /dev/null
+++ b/Lib/newdir.py
@@ -0,0 +1,79 @@
+# New dir() function and other attribute-related goodies
+
+# This should become a built-in function
+#
+def getattr(x, name):
+	return eval('x.'+name)
+
+# This should be the new dir(), except that it should still list
+# the current local name space by default
+#
+def listattrs(x):
+	try:
+		dictkeys = x.__dict__.keys()
+	except (NameError, TypeError):
+		dictkeys = []
+	#
+	try:
+		methods = x.__methods__
+	except (NameError, TypeError):
+		methods = []
+	#
+	try:
+		members = x.__members__
+	except (NameError, TypeError):
+		members = []
+	#
+	try:
+		the_class = x.__class__
+	except (NameError, TypeError):
+		the_class = None
+	#
+	try:
+		bases = x.__bases__
+	except (NameError, TypeError):
+		bases = ()
+	#
+	total = dictkeys + methods + members
+	if the_class:
+		# It's a class instace; add the class's attributes
+		# that are functions (methods)...
+		class_attrs = listattrs(the_class)
+		class_methods = []
+		for name in class_attrs:
+			if is_function(getattr(the_class, name)):
+				class_methods.append(name)
+		total = total + class_methods
+	elif bases:
+		# It's a derived class; add the base class attributes
+		for base in bases:
+			base_attrs = listattrs(base)
+			total = total + base_attrs
+	total.sort()
+	return total
+	i = 0
+	while i+1 < len(total):
+		if total[i] = total[i+1]:
+			del total[i+1]
+		else:
+			i = i+1
+	return total
+
+# Helper to recognize functions
+#
+def is_function(x):
+	return type(x) = type(is_function)
+
+# Approximation of builtin dir(); this lists the user's
+# variables by default, not the current local name space.
+# Use a class method to make a function that can be called
+# with or without arguments.
+#
+class _dirclass():
+	def dir(args):
+		if type(args) = type(()):
+			return listattrs(args[1])
+		else:
+			import __main__
+			return listattrs(__main__)
+dir = _dirclass().dir
diff --git a/Lib/tempfile.py b/Lib/tempfile.py
new file mode 100644
index 0000000..02e73e1
--- /dev/null
+++ b/Lib/tempfile.py
@@ -0,0 +1,32 @@
+# Temporary file name allocation
+
+import posix
+import path
+
+
+# Changeable parameters (by clients!)...
+# XXX Should the environment variable $TMPDIR override tempdir?
+
+tempdir = '/usr/tmp'
+template = '@'
+
+
+# Kludge to hold mutable state
+
+class Struct(): pass
+G = Struct()
+G.i = 0
+
+
+# User-callable function
+# XXX Should this have a parameter, like C's mktemp()?
+# XXX Should we instead use the model of Standard C's tempnam()?
+# XXX By all means, avoid a mess with four different functions like C...
+
+def mktemp():
+	while 1:
+		G.i = G.i+1
+		file = tempdir +'/'+ template + `posix.getpid()` +'.'+ `G.i`
+		if not path.exists(file):
+			break
+	return file