diff -ur tar2rubyscript-0.3.tar.gz/tar2rubyscript/tar2rubyscript.rb tar2rubyscript-0.3.1.tar.gz/tar2rubyscript/tar2rubyscript.rb
--- tar2rubyscript-0.3.tar.gz/tar2rubyscript/tar2rubyscript.rb	2003-09-21 19:15:48.000000000 +0200
+++ tar2rubyscript-0.3.1.tar.gz/tar2rubyscript/tar2rubyscript.rb	2003-10-04 20:16:33.000000000 +0200
@@ -33,9 +33,14 @@
 
   Dir.chdir(tardir)
 
+  if FileTest.file?("tar2rubyscript.bat")
+    puts "\".\\tar2rubyscript.bat\""
+    system(".\\tar2rubyscript.bat")
+  end
+
   if FileTest.file?("tar2rubyscript.sh")
     puts "\". ./tar2rubyscript.sh\""
-    system(". ./tar2rubyscript.sh")
+    system("sh -c \". ./tar2rubyscript.sh\"")
   end
 
   Dir.chdir("..")
diff -ur tar2rubyscript-0.3.tar.gz/tar2rubyscript/tarrubyscript.rb tar2rubyscript-0.3.1.tar.gz/tar2rubyscript/tarrubyscript.rb
--- tar2rubyscript-0.3.tar.gz/tar2rubyscript/tarrubyscript.rb	2003-09-21 19:15:48.000000000 +0200
+++ tar2rubyscript-0.3.1.tar.gz/tar2rubyscript/tarrubyscript.rb	2003-10-04 20:16:33.000000000 +0200
@@ -21,8 +21,13 @@
 # Tar2RubyScript constants
 
 JustExtract	= ARGV.include?("--tar2rubyscript-justextract")
+
 ARGV.concat	[]
 
+ARGV.delete_if do |arg|
+  arg =~ /^--tar2rubyscript-/
+end
+
 # Tar constants
 
 BLOCKSIZE	= 512
@@ -56,6 +61,12 @@
     @fp	= filehandle
   end
 
+  def extract
+    each do |entry|
+      entry.extract
+    end
+  end
+
   def each
     @fp.rewind
 
@@ -67,7 +78,7 @@
   def next_entry
     buf	= @fp.read(BLOCKSIZE)
 
-    if buf == "\000" * BLOCKSIZE
+    if buf.length < BLOCKSIZE or buf == "\000" * BLOCKSIZE
       entry	= nil
     else
       entry	= Entry.new(buf, @fp)
@@ -75,12 +86,6 @@
 
     entry
   end
-
-  def extract
-    each do |entry|
-      entry.extract
-    end
-  end
 end
 
 class Entry
@@ -90,8 +95,6 @@
     @header	= Header.new(header)
 
     if @header.file?
-      #puts "File: #{@header.name}, #{@header.size} bytes"
-
       padding	= (BLOCKSIZE - (@header.size % BLOCKSIZE)) % BLOCKSIZE
 
       @data	= fp.read(@header.size)	if @header.size > 0
@@ -105,30 +108,35 @@
         begin
           Dir.mkdir(@header.name, @header.mode)
         rescue SystemCallError => e
-          puts "Couldn´t create dir: " + e.message
+          puts "Couldn´t create dir #{@header.name}: " + e.message
         end
       else
-        begin
-          File.open(@header.name, "wb") do |fp|
-            fp.write(@data)
-            fp.chmod(@header.mode)
+        if @header.file?
+          begin
+            File.open(@header.name, "wb") do |fp|
+              fp.write(@data)
+              fp.chmod(@header.mode)
+            end
+          rescue => e
+            puts "Couldn´t create file #{@header.name}: " + e.message
           end
-        rescue => e
-          puts "Couldn´t create file: " + e.message
+        else
+          puts "Couldn´t handle entry #{@header.name}"
         end
       end
 
-      #File.utime(@header.mtime, Time.new, @header.name)	# ???
+      #File.chown(@header.uid, @header.gid, @header.name)
+      #File.utime(Time.now, @header.mtime, @header.name)
     end
   end
 end
 
 class Header
-  attr_reader(:name, :size, :mtime, :uname, :gname, :mode)
+  attr_reader(:name, :uid, :gid, :size, :mtime, :uname, :gname, :mode)
 
   def initialize(header)
-    types	= [´str´, ´oct´, ´oct´, ´oct´, ´oct´, ´time´, ´oct´, ´str´, ´str´, ´str´, ´str´, ´str´, ´oct´, ´oct´]
     fields	= header.unpack(´A100 A8 A8 A8 A12 A12 A8 A1 A100 A8 A32 A32 A8 A8´)
+    types	= [´str´, ´oct´, ´oct´, ´oct´, ´oct´, ´time´, ´oct´, ´str´, ´str´, ´str´, ´str´, ´str´, ´oct´, ´oct´]
     converted	= []
 
     begin
@@ -144,7 +152,7 @@
 
       @name, @mode, @uid, @gid, @size, @mtime, @chksum, @linkflag, @linkname, @magic, @uname, @gname, @devmajor, @devminor	= converted
 
-      @name.gsub!(/\.\//, "")
+      @name.gsub!(/^\.\//, "")
 
       @raw	= header
     rescue ArgumentError => e
@@ -172,35 +180,37 @@
 class TempSpace
   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	= "#{@workdir}/tar2rubyscript.d.#{Process.pid}"
-    @tempfile	= "#{@workdir}/tar2rubyscript.f.#{Process.pid}"
+    @olddir	= Dir.pwd
+    @tmpdir	= "/tmp"
+    @tmpdir	= "c:/tmp"	if FileTest.exists?("c:/")
+    @tempdir	= "#{@tmpdir}/tar2rubyscript.d.#{Process.pid}"
+    @tempfile	= "#{@tmpdir}/tar2rubyscript.f.#{Process.pid}"
+
+    @newdir=@tempdir
   end
 
   def eval
-
-		# Create the temp environment.
-
-    Dir.mkdir(@workdir)	if not FileTest.exists?(@workdir)
+    Dir.mkdir(@tmpdir)	if not FileTest.exists?(@tmpdir)
     Dir.mkdir(@tempdir)	if not FileTest.exists?(@tempdir)
 
-    Dir.chdir(@tempdir)
+    newlocation do
+
+		# Create the temp environment.
 
-    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)
+      entries	= Dir.entries(@tempdir)
+      entries.delete(".")
+      entries.delete("..")
+
+      if entries.length == 1
+        entry	= @tempdir + "/" + entries.shift
+        if FileTest.directory?(entry)
+          @newdir	= entry
+        end
       end
     end
 
@@ -221,21 +231,18 @@
 
 		# Remove the temp environment.
 
-      Dir.chdir(@orgdir)
+      Dir.chdir(@olddir)
 
       recursivedelete(@tempfile)
       recursivedelete(@tempdir)
-
-    end
-
-    ARGV.delete_if do |arg|
-      arg =~ /^--tar2rubyscript-/
     end
 
 		# Execute init.rb .
 
-    File.open("init.rb") do |f|
-      instance_eval(f.read)
+    newlocation do
+      File.open("init.rb") do |f|
+        instance_eval(f.read)
+      end
     end
   end
 
@@ -258,12 +265,28 @@
   end
 
   def oldlocation(file="")
-    res	= file
+    if block_given?
+      pdir	= Dir.pwd
+
+      Dir.chdir(@olddir)
+        res	= yield
+      Dir.chdir(pdir)
+    else
+      res	= File.expand_path(file, @olddir)	if not file.nil?
+    end
+
+    res
+  end
 
-    if not file.nil?
-      res	= @orgdir + "/" + file
-      res	= file	if file =~ /^\//
-      res	= file	if file =~ /^.:/
+  def newlocation(file="")
+    if block_given?
+      pdir	= Dir.pwd
+
+      Dir.chdir(@newdir)
+        res	= yield
+      Dir.chdir(pdir)
+    else
+      res	= File.expand_path(file, @newdir)	if not file.nil?
     end
 
     res
@@ -273,11 +296,9 @@
 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}"
+    @tmpdir	= "/tmp"
+    @tmpdir	= "c:/tmp"	if FileTest.exists?("c:/")
+    @tempfile	= "#{@tmpdir}/tar2rubyscript.f.#{Process.pid}"
   end
 
   def extract
@@ -285,10 +306,7 @@
 
 		# Create the temp environment.
 
-      Dir.mkdir(@workdir)	if not FileTest.exists?(@workdir)
-      Dir.mkdir(@tempdir)	if not FileTest.exists?(@tempdir)
-
-      Dir.chdir(@tempdir)
+      Dir.mkdir(@tmpdir)	if not FileTest.exists?(@tmpdir)
 
       File.open(@tempfile, "wb")	{|f| f.write @archive}
       File.open(@tempfile, "rb")	{|f| Reader.new(f).extract}
@@ -297,8 +315,6 @@
 
 		# Remove the temp environment.
 
-      Dir.chdir(@orgdir)
-
       File.delete(@tempfile)
 
     end