diff -ur tar2rubyscript-0.1.4.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.1.5.tar.gz/tar2rubyscript/tarrubyscript.rb
--- tar2rubyscript-0.1.4.tar.gz/tar2rubyscript/tarrubyscript.rb	2003-08-31 23:04:22.000000000 +0200
+++ tar2rubyscript-0.1.5.tar.gz/tar2rubyscript/tarrubyscript.rb	2003-09-09 21:53:33.000000000 +0200
@@ -16,6 +16,13 @@
 # Software Foundation, Inc., 59 Temple Place, Suite 330,
 # Boston, MA 02111-1307 USA
 
+# Tar2RubyScript constants
+
+JustExtract	= false
+ARGV.concat	[]
+
+# Tar constants
+
 BLOCKSIZE	= 512
 
 NAMELEN		= 100
@@ -171,50 +178,43 @@
   end
 
   def eval
-    begin
 
 		# Create the temp environment.
 
-      Dir.mkdir(@workdir)	if not FileTest.exists?(@workdir)
-      Dir.mkdir(@tempdir)	if not FileTest.exists?(@tempdir)
+    Dir.mkdir(@workdir)	if not FileTest.exists?(@workdir)
+    Dir.mkdir(@tempdir)	if not FileTest.exists?(@tempdir)
 
-      Dir.chdir(@tempdir)
+    Dir.chdir(@tempdir)
 
-      File.open(@tempfile, "wb")	{|f| f.write @archive}
-      File.open(@tempfile, "rb")	{|f| Reader.new(f).extract}
+    File.open(@tempfile, "wb")	{|f| f.write @archive}
+    File.open(@tempfile, "rb")	{|f| Reader.new(f).extract}
 
 		# Eventually look for a subdirectory.
 
-      entries	= Dir.entries(".")
-      entries.delete(".")
-      entries.delete("..")
-
-      if entries.length == 1
-        entry	= entries.shift
-        if FileTest.directory?(entry)
-          Dir.chdir(entry)
-        end
-      end
-
-		# Remember all IO objects.
-
-      ioobjects	= []
-      ObjectSpace::each_object(IO) do |obj|
-        ioobjects << obj.id
+    entries	= Dir.entries(".")
+    entries.delete(".")
+    entries.delete("..")
+
+    if entries.length == 1
+      entry	= entries.shift
+      if FileTest.directory?(entry)
+        Dir.chdir(entry)
       end
+    end
 
-		# Execute init.rb .
+		# Remember all File objects.
 
-      File.open("init.rb") do |f|
-        instance_eval(f.read)
-      end
+    @ioobjects	= []
+    ObjectSpace::each_object(File) do |obj|
+      @ioobjects << obj
+    end
 
-    ensure
+    at_exit do
 
-		# Close all IO objects, opened in init.rb .
+		# Close all File objects, opened in init.rb .
 
-      ObjectSpace::each_object(IO) do |obj|
-        obj.close	rescue nil	if not ioobjects.include?(obj.id)
+      ObjectSpace::each_object(File) do |obj|
+        obj.close	if (not obj.closed? and not @ioobjects.include?(obj))
       end
 
 		# Remove the temp environment.
@@ -225,6 +225,12 @@
       recursivedelete(@tempdir)
 
     end
+
+		# Execute init.rb .
+
+    File.open("init.rb") do |f|
+      instance_eval(f.read)
+    end
   end
 
   def recursivedelete(entry)
@@ -258,4 +264,43 @@
   end
 end
 
-TempSpace.new.eval
+class Extract
+  def initialize
+    @archive	= File.new($0, "rb").read.gsub(/\r/, "").split(/\n\n/)[-1].split("\n").collect{|s| s[2..-1]}.join("\n").unpack("m").shift
+    @orgdir	= Dir.pwd
+    @workdir	= "/tmp"
+    @workdir	= "c:/tmp"	if FileTest.exists?("c:/")
+    @tempdir	= @orgdir
+    @tempfile	= "#{@workdir}/tar2rubyscript.f.#{Process.pid}"
+  end
+
+  def extract
+    begin
+
+		# Create the temp environment.
+
+      Dir.mkdir(@workdir)	if not FileTest.exists?(@workdir)
+      Dir.mkdir(@tempdir)	if not FileTest.exists?(@tempdir)
+
+      Dir.chdir(@tempdir)
+
+      File.open(@tempfile, "wb")	{|f| f.write @archive}
+      File.open(@tempfile, "rb")	{|f| Reader.new(f).extract}
+
+    ensure
+
+		# Remove the temp environment.
+
+      Dir.chdir(@orgdir)
+
+      File.delete(@tempfile)
+
+    end
+  end
+end
+
+if JustExtract
+  Extract.new.extract
+else
+  TempSpace.new.eval
+end