diff -ur rubyscript2exe-0.2.1.tar.gz/rubyscript2exe/eee.pas rubyscript2exe-0.3.0.tar.gz/rubyscript2exe/eee.pas
--- rubyscript2exe-0.2.1.tar.gz/rubyscript2exe/eee.pas	2004-12-18 18:02:07.000000000 +0100
+++ rubyscript2exe-0.3.0.tar.gz/rubyscript2exe/eee.pas	2004-12-27 13:17:55.000000000 +0100
@@ -6,14 +6,14 @@
 
 uses
 
-  SysUtils, Dos;
+  SysUtils, Dos, GZio;
 
 const
 
-  {$IFDEF LINUX}
-    slash	= ´/´;
-  {$ELSE}
+  {$IFDEF WIN32}
     slash	= ´\´;
+  {$ELSE}
+    slash	= ´/´;
   {$ENDIF}
 
 type
@@ -21,23 +21,28 @@
   header =	record
 		  klasse	: string[1];
 		  tekst		: string[255];
-		  length	: longint;
+		  datalength	: longint;
 		end;
 
   tail =	record
-		  length	: longint;
-		  number	: longint;
-		  who		: string[255];
 		  exename	: string[255];
+		  gzlength	: longint;
+		  who		: string[255];
+		  number	: longint;
 		end;
 
 var
 
   tempdir	: string[255];
   workdir	: string[255];
+  workdir1	: string[255];
+  workdir2	: string[255];
+  workfile	: string[255];
+  exename	: string[255];
   me		: string[255];
   infile	: file of byte;
   outfile	: file of byte;
+  zfile		: gzFile;
   eeefile	: Text;
   klasse	: string[1];
   tekst1	: string[255];
@@ -52,26 +57,27 @@
   quotedparms	: string;
   justextract	: boolean;
   list		: boolean;
-  currentdir	: string[255];
+  {$IFDEF WIN32}
+  {$ELSE}
+    currentdir	: string[255];
+  {$ENDIF}
 
 
 procedure getdir2(drivenr: byte; var dir: string[255]);
 
 begin
 
-  {$IFDEF LINUX}	// Foutje indien bovenliggende dirs niet benaderbaar zijn.
-    if currentdir = ´´ then begin
-      if (paramcount > 3) then begin
-        currentdir	:= paramstr(4);
-      end
-      else begin
-        currentdir	:= getenv(´PWD´);	// PWD wordt alleen gezet als het parent process een shell is.
+  {$IFDEF WIN32}
+    getdir(drivenr, dir);
+  {$ELSE}	// Foutje indien bovenliggende dirs niet benaderbaar zijn.
+    if (currentdir = ´´) then begin
+      currentdir	:= getenv(´EEEDIR´);
+      if (currentdir = ´´) then begin
+        currentdir	:= getenv(´PWD´);
       end;
     end;
 
     dir	:= currentdir;
-  {$ELSE}
-    getdir(drivenr, dir);
   {$ENDIF}
 
 end;
@@ -81,7 +87,9 @@
 
 begin
 
-  {$IFDEF LINUX}	// Foutje indien bovenliggende dirs niet benaderbaar zijn.
+  {$IFDEF WIN32}
+    chdir(dir);
+  {$ELSE}	// Foutje indien bovenliggende dirs niet benaderbaar zijn.
     if copy(dir, 1, 1) <> ´/´ then begin
       dir	:= currentdir + ´/´ + dir;
     end;
@@ -89,8 +97,6 @@
     currentdir	:= dir;
 
     chdir(dir);
-  {$ELSE}
-    chdir(dir);
   {$ENDIF}
 
 end;
@@ -147,21 +153,53 @@
 end;
 
 
-procedure bufferxor(var b: array of byte);
+procedure blockeat(var infile: file; inlength: longint);
+
+var
+  b	: array[0..99999] of byte;
+  l	: longint;
+  c	: longint;
+
+begin
+
+  c		:= inlength div sizeof(b);
+
+  while (c >= 0) do begin
+    if (c = 0)	then l := inlength-(inlength div sizeof(b))*sizeof(b)
+		else l := sizeof(b);
+
+    blockread(infile, b, l);
+
+    dec(c);
+  end;
+
+end;
+
+
+procedure blockeatfromgz(var zfile: gzFile; inlength: longint);
 
 var
-  i	: longint;
+  b	: array[0..99999] of byte;
+  l	: longint;
+  c	: longint;
 
 begin
 
-  for i := 0 to sizeof(b)-1 do begin
-    b[i]	:= 123 xor b[i];
+  c		:= inlength div sizeof(b);
+
+  while (c >= 0) do begin
+    if (c = 0)	then l := inlength-(inlength div sizeof(b))*sizeof(b)
+		else l := sizeof(b);
+
+    gzread(zfile, addr(b), l);
+
+    dec(c);
   end;
 
 end;
 
 
-procedure blockeat(var infile: file; inlength: longint);
+procedure blockcopy(var infile: file; var outfile: file; inlength: longint);
 
 var
   b	: array[0..99999] of byte;
@@ -178,6 +216,7 @@
 		else l := sizeof(b);
 
     blockread(infile, b, l, n);
+    blockwrite(outfile, b, n);
 
     dec(c);
   end;
@@ -185,7 +224,7 @@
 end;
 
 
-procedure blockcopy(var infile: file; var outfile: file; inlength: longint; encrypt: boolean);
+procedure blockcopytogz(var infile: file; var zfile: gzFile; inlength: longint);
 
 var
   b	: array[0..99999] of byte;
@@ -202,9 +241,31 @@
 		else l := sizeof(b);
 
     blockread(infile, b, l, n);
-    if (encrypt) then begin
-      bufferxor(b);
-    end;
+    gzwrite(zfile, addr(b), n);
+
+    dec(c);
+  end;
+
+end;
+
+
+procedure blockcopyfromgz(var zfile: gzFile; var outfile: file; inlength: longint);
+
+var
+  b	: array[0..99999] of byte;
+  l	: longint;
+  c	: longint;
+  n	: longint;
+
+begin
+
+  c		:= inlength div sizeof(b);
+
+  while (c >= 0) do begin
+    if (c = 0)	then l := inlength-(inlength div sizeof(b))*sizeof(b)
+		else l := sizeof(b);
+
+    n	:= gzread(zfile, addr(b), l);
     blockwrite(outfile, b, n);
 
     dec(c);
@@ -213,7 +274,7 @@
 end;
 
 
-procedure pakin_f(var outfile: file; klasse: string[1]; tekst: string[255]; entry: string[255]; var t: tail);
+procedure pakin_f(var zfile: gzFile; klasse: string[1]; tekst: string[255]; entry: string[255]; var t: tail);
 
 var
   infile	: file of byte;
@@ -226,10 +287,9 @@
 
   assign(infile, entry);
   reset(infile, 1);
-  h.length	:= filesize(infile);
-  t.length	:= t.length + h.length + sizeof(h);
-  blockwrite(outfile, h, sizeof(h));
-  blockcopy(infile, outfile, h.length, true);
+  h.datalength	:= filesize(infile);
+  gzwrite(zfile, addr(h), sizeof(h));
+  blockcopytogz(infile, zfile, h.datalength);
   close(infile);
 
   t.number	:= t.number + 1;
@@ -237,7 +297,7 @@
 end;
 
 
-procedure pakin_d(var outfile: file; klasse: string[1]; tekst: string[255]; entry: string[255]; var t: tail);
+procedure pakin_d(var zfile: gzFile; klasse: string[1]; tekst: string[255]; entry: string[255]; var t: tail);
 
 var
   h		: header;
@@ -248,17 +308,16 @@
 
   h.klasse	:= klasse;
   h.tekst	:= tekst;
-  h.length	:= 0;
-  t.length	:= t.length + sizeof(h);
+  h.datalength	:= 0;
 
-  blockwrite(outfile, h, sizeof(h));
+  gzwrite(zfile, addr(h), sizeof(h));
 
   t.number	:= t.number + 1;
 
 end;
 
 
-procedure pakin_r(var outfile: file; klasse: string[1]; tekst: string[255]; entry: string[255]; var t: tail);
+procedure pakin_r(var zfile: gzFile; klasse: string[1]; tekst: string[255]; entry: string[255]; var t: tail);
 
 var
   f		: file;
@@ -270,7 +329,7 @@
 
   klasse	:= klasse;
 
-  pakin_d(outfile, ´d´, tekst, entry, t);
+  pakin_d(zfile, ´d´, tekst, entry, t);
 
   getdir2(0, dir);
   chdir2(entry);
@@ -282,11 +341,11 @@
 
     if (attr and directory > 0) then begin
       if ((not (sr.name = ´.´)) and (not (sr.name = ´..´))) then begin
-        pakin_r(outfile, ´r´, tekst + slash + sr.name, sr.name, t);
+        pakin_r(zfile, ´r´, tekst + slash + sr.name, sr.name, t);
       end;
     end
     else begin
-      pakin_f(outfile, ´f´, tekst + slash + sr.name, sr.name, t);
+      pakin_f(zfile, ´f´, tekst + slash + sr.name, sr.name, t);
     end;
 
     findnext(sr);
@@ -298,7 +357,7 @@
 end;
 
 
-procedure pakin_c(var outfile: file; klasse: string[1]; tekst: string[255]; entry: string[255]; var t: tail);
+procedure pakin_c(var zfile: gzFile; klasse: string[1]; tekst: string[255]; entry: string[255]; var t: tail);
 
 var
   h		: header;
@@ -309,17 +368,16 @@
 
   h.klasse	:= klasse;
   h.tekst	:= tekst;
-  h.length	:= 0;
-  t.length	:= t.length + sizeof(h);
+  h.datalength	:= 0;
 
-  blockwrite(outfile, h, sizeof(h));
+  gzwrite(zfile, addr(h), sizeof(h));
 
   t.number	:= t.number + 1;
 
 end;
 
 
-procedure pakin_t(var outfile: file; klasse: string[1]; tekst: string[255]; entry: string[255]; var t: tail);
+procedure pakin_t(var zfile: gzFile; klasse: string[1]; tekst: string[255]; entry: string[255]; var t: tail);
 
 var
   h		: header;
@@ -330,10 +388,9 @@
 
   h.klasse	:= klasse;
   h.tekst	:= tekst;
-  h.length	:= 0;
-  t.length	:= t.length + sizeof(h);
+  h.datalength	:= 0;
 
-  blockwrite(outfile, h, sizeof(h));
+  gzwrite(zfile, addr(h), sizeof(h));
 
   t.number	:= t.number + 1;
 
@@ -344,28 +401,17 @@
 
 begin
 
-  assign(outfile, paramstr(2));
-  rewrite(outfile, 1);
-
   assign(eeefile, paramstr(1));
   reset(eeefile);
 
-  if (paramcount > 2) then begin
-    assign(infile, paramstr(3));
-    t.exename	:= paramstr(3);
-  end
-  else begin
-    assign(infile, paramstr(0));
-    t.exename	:= paramstr(0);
+  exename	:= getenv(´EEEEXE´);
+  if (exename = ´´) then begin
+    exename	:= paramstr(0);
   end;
 
-  reset(infile, 1);
-  blockcopy(infile, outfile, filesize(infile), false);
-  close(infile);
-
-  t.length	:= 0;
+  t.exename	:= exename;
   t.number	:= 0;
-  t.who	:= me;
+  t.who		:= me;
 
   s		:= slash;
   i		:= pos(s, t.exename);
@@ -374,6 +420,8 @@
     i		:= pos(s, t.exename);
   end;
 
+  zfile	:= gzopen(workfile, ´w´);
+
   repeat
     readln(eeefile, s);
 
@@ -382,45 +430,59 @@
       tekst1	:= copy(s, 3, length(s)-2);
 
       case klasse[1] of
-        ´f´: pakin_f(outfile, klasse, tekst1, tekst1, t);
-        ´d´: pakin_d(outfile, klasse, tekst1, tekst1, t);
-        ´r´: pakin_r(outfile, klasse, tekst1, tekst1, t);
-        ´c´: pakin_c(outfile, klasse, tekst1, tekst1, t);
-        ´t´: pakin_t(outfile, klasse, tekst1, tekst1, t);
+        ´f´: pakin_f(zfile, klasse, tekst1, tekst1, t);
+        ´d´: pakin_d(zfile, klasse, tekst1, tekst1, t);
+        ´r´: pakin_r(zfile, klasse, tekst1, tekst1, t);
+        ´c´: pakin_c(zfile, klasse, tekst1, tekst1, t);
+        ´t´: pakin_t(zfile, klasse, tekst1, tekst1, t);
       end;
     end;
   until eof(eeefile);
 
-  t.length	:= t.length + sizeof(t);
-
-  blockwrite(outfile, t, sizeof(t));
+  gzclose(zfile);
 
   close(eeefile);
 
+  assign(outfile, paramstr(2));
+  rewrite(outfile, 1);
+
+  assign(infile, exename);
+  reset(infile, 1);
+  blockcopy(infile, outfile, filesize(infile));
+  close(infile);
+
+  assign(infile, workfile);
+  reset(infile, 1);
+  blockcopy(infile, outfile, filesize(infile));
+  t.gzlength	:= filesize(infile);
+  close(infile);
+
+  blockwrite(outfile, t, sizeof(t));
+
   close(outfile);
 
 end;
 
 
-procedure pakuit_f(var infile: file; var outfile: file; tekst: string; var h: header);
+procedure pakuit_f(var zfile: gzFile; var outfile: file; tekst: string; var h: header);
 
 begin
 
   assign(outfile, workdir + slash + tekst);
   rewrite(outfile, 1);
 
-  blockcopy(infile, outfile, h.length, true);
+  blockcopyfromgz(zfile, outfile, h.datalength);
 
   close(outfile);
 
 end;
 
 
-procedure pakuit_d(var infile: file; var outfile: file; tekst: string; var h: header);
+procedure pakuit_d(var zfile: gzFile; var outfile: file; tekst: string; var h: header);
 
 begin
 
-  infile	:= infile;
+  zfile		:= zfile;
   outfile	:= outfile;
   h		:= h;
 
@@ -429,21 +491,25 @@
 end;
 
 
-procedure pakuit_c(var infile: file; var outfile: file; tekst: string; var h: header);
+procedure pakuit_c(var zfile: gzFile; var outfile: file; tekst: string; var h: header);
 
 var
   c		: string;
   p		: string;
-  i		: longint;
-  sr		: searchrec;
+  {$IFDEF WIN32}
+    i		: longint;
+  {$ELSE}
+    sr		: searchrec;
+  {$ENDIF}
 
 begin
 
-  infile	:= infile;
+  zfile		:= zfile;
   outfile	:= outfile;
   h		:= h;
 
-  {$IFDEF LINUX}
+  {$IFDEF WIN32}
+  {$ELSE}
     findfirst(workdir + ´/eee.sh´, archive, sr);
     if (doserror = 0) then begin
       c	:= ´/bin/sh´;
@@ -452,11 +518,7 @@
     end;
   {$ENDIF}
 
-  {$IFDEF LINUX}
-    i	:= 0;
-    c	:= getenv(´SHELL´);
-    p	:= ´-c "´ + tekst + ´"´;
-  {$ELSE}
+  {$IFDEF WIN32}
     i	:= pos(´ ´, tekst);
     if (i = 0) then begin
       c	:= tekst;
@@ -466,6 +528,10 @@
       c	:= copy(tekst, 1, i-1);
       p	:= copy(tekst, i+1, length(tekst)-i);
     end;
+  {$ELSE}
+    i	:= 0;
+    c	:= getenv(´SHELL´);
+    p	:= ´-c "´ + tekst + ´"´;
   {$ENDIF}
 
   executeprocess(c, p);
@@ -473,22 +539,26 @@
 end;
 
 
-procedure pakuit_t(var infile: file; var outfile: file; tekst: string; var h: header);
+procedure pakuit_t(var zfile: gzFile; var outfile: file; tekst: string; var h: header);
 
 var
   c		: string;
   p		: string;
-  i		: longint;
   dir		: string[255];
-  sr		: searchrec;
+  {$IFDEF WIN32}
+    i		: longint;
+  {$ELSE}
+    sr		: searchrec;
+  {$ENDIF}
 
 begin
 
-  infile	:= infile;
+  zfile		:= zfile;
   outfile	:= outfile;
   h		:= h;
 
-  {$IFDEF LINUX}
+  {$IFDEF WIN32}
+  {$ELSE}
     findfirst(workdir + ´/eee.sh´, archive, sr);
     if (doserror = 0) then begin
       c	:= ´/bin/sh´;
@@ -497,11 +567,7 @@
     end;
   {$ENDIF}
 
-  {$IFDEF LINUX}
-    i	:= 0;
-    c	:= getenv(´SHELL´);
-    p	:= ´-c "´ + tekst + ´"´;
-  {$ELSE}
+  {$IFDEF WIN32}
     i	:= pos(´ ´, tekst);
     if (i = 0) then begin
       c	:= tekst;
@@ -511,6 +577,9 @@
       c	:= copy(tekst, 1, i-1);
       p	:= copy(tekst, i+1, length(tekst)-i);
     end;
+  {$ELSE}
+    c	:= getenv(´SHELL´);
+    p	:= ´-c "´ + tekst + ´"´;
   {$ENDIF}
 
   getdir2(0, dir);
@@ -525,70 +594,71 @@
 
 begin
 
-  randomize;
+  assign(infile, paramstr(0));
+  reset(infile, 1);
 
-  getdir2(0, dir);
-  chdir2(tempdir);
-    {$I-}
-      repeat
-        str(random(1000), s);
-        workdir	:= ´eee.´ + s;
-        mkdir(workdir);
-      until (ioresult = 0);
-    {$I+}
+  blockeat(infile, filesize(infile)-t.gzlength-sizeof(t));
 
-    workdir	:= tempdir + slash + workdir;
-  chdir2(dir);
+  assign(outfile, workfile);
+  rewrite(outfile, 1);
+  blockcopy(infile, outfile, t.gzlength);
+  close(outfile);
 
-  assign(infile, paramstr(0));
-  reset(infile, 1);
-  blockeat(infile, filesize(infile)-t.length);
+  close(infile);
 
-  try
+  zfile	:= gzopen(workfile, ´r´);
 
-    for teller := 1 to t.number do begin
-      blockread(infile, h, sizeof(h));
+  for teller := 1 to t.number do begin
+    gzread(zfile, addr(h), sizeof(h));
 
-      klasse	:= h.klasse;
-      tekst2	:= h.tekst;
+    klasse	:= h.klasse;
+    tekst2	:= h.tekst;
 
-      s		:= ´%tempdir%´;
+    s		:= ´%tempdir%´;
+    i		:= pos(s, tekst2);
+    while (i > 0) do begin
+      tekst2	:= copy(tekst2, 1, i-1) + workdir + copy(tekst2, i+length(s), length(tekst2)-(i+length(s))+1);
       i		:= pos(s, tekst2);
-      while (i > 0) do begin
-        tekst2	:= copy(tekst2, 1, i-1) + workdir + copy(tekst2, i+length(s), length(tekst2)-(i+length(s))+1);
-        i		:= pos(s, tekst2);
-      end;
+    end;
 
-      s		:= ´%parms%´;
+    s		:= ´%tempdir1%´;
+    i		:= pos(s, tekst2);
+    while (i > 0) do begin
+      tekst2	:= copy(tekst2, 1, i-1) + workdir1 + copy(tekst2, i+length(s), length(tekst2)-(i+length(s))+1);
       i		:= pos(s, tekst2);
-      while (i > 0) do begin
-        tekst2	:= copy(tekst2, 1, i-1) + parms + copy(tekst2, i+length(s), length(tekst2)-(i+length(s))+1);
-        i		:= pos(s, tekst2);
-      end;
+    end;
 
-      s		:= ´%quotedparms%´;
+    s		:= ´%tempdir2%´;
+    i		:= pos(s, tekst2);
+    while (i > 0) do begin
+      tekst2	:= copy(tekst2, 1, i-1) + workdir2 + copy(tekst2, i+length(s), length(tekst2)-(i+length(s))+1);
       i		:= pos(s, tekst2);
-      while (i > 0) do begin
-        tekst2	:= copy(tekst2, 1, i-1) + quotedparms + copy(tekst2, i+length(s), length(tekst2)-(i+length(s))+1);
-        i		:= pos(s, tekst2);
-      end;
-
-      case klasse[1] of
-        ´f´: pakuit_f(infile, outfile, tekst2, h);
-        ´d´: pakuit_d(infile, outfile, tekst2, h);
-        ´c´: pakuit_c(infile, outfile, tekst2, h);
-        ´t´: pakuit_t(infile, outfile, tekst2, h);
-      end;
     end;
 
-  finally
-
-    close(infile);
+    s		:= ´%parms%´;
+    i		:= pos(s, tekst2);
+    while (i > 0) do begin
+      tekst2	:= copy(tekst2, 1, i-1) + parms + copy(tekst2, i+length(s), length(tekst2)-(i+length(s))+1);
+      i		:= pos(s, tekst2);
+    end;
 
-    recursivedelete(workdir);
+    s		:= ´%quotedparms%´;
+    i		:= pos(s, tekst2);
+    while (i > 0) do begin
+      tekst2	:= copy(tekst2, 1, i-1) + quotedparms + copy(tekst2, i+length(s), length(tekst2)-(i+length(s))+1);
+      i		:= pos(s, tekst2);
+    end;
 
+    case klasse[1] of
+      ´f´: pakuit_f(zfile, outfile, tekst2, h);
+      ´d´: pakuit_d(zfile, outfile, tekst2, h);
+      ´c´: pakuit_c(zfile, outfile, tekst2, h);
+      ´t´: pakuit_t(zfile, outfile, tekst2, h);
+    end;
   end;
 
+  gzclose(zfile);
+
 end;
 
 
@@ -601,44 +671,48 @@
 
   assign(outfile, t.exename);
   rewrite(outfile);
-  blockcopy(infile, outfile, filesize(infile)-t.length, false);
+  blockcopy(infile, outfile, filesize(infile)-t.gzlength-sizeof(t));
   close(outfile);
 
-  assign(eeefile, ´app.eee´);
-  rewrite(eeefile);
-
-  try
 
-    for teller := 1 to t.number do begin
-      blockread(infile, h, sizeof(h));
+  assign(outfile, workfile);
+  rewrite(outfile, 1);
+  blockcopy(infile, outfile, t.gzlength);
+  close(outfile);
 
-      writeln(eeefile, h.klasse, ´ ´, h.tekst);
+  close(infile);
 
-      if (h.klasse = ´f´) then begin
-        assign(outfile, h.tekst);
-        rewrite(outfile, 1);
+  zfile	:= gzopen(workfile, ´r´);
 
-        blockcopy(infile, outfile, h.length, true);
+  assign(eeefile, ´app.eee´);
+  rewrite(eeefile);
 
-        close(outfile);
-      end;
+  for teller := 1 to t.number do begin
+    gzread(zfile, addr(h), sizeof(h));
 
-      if (h.klasse = ´d´) then begin
-        {$I-}
-          mkdir(h.tekst);
-          if (ioresult = 0) then;
-        {$I+}
-      end;
-    end;
+    writeln(eeefile, h.klasse, ´ ´, h.tekst);
 
-  finally
+    if (h.klasse = ´f´) then begin
+      assign(outfile, h.tekst);
+      rewrite(outfile, 1);
 
-    close(eeefile);
+      blockcopyfromgz(zfile, outfile, h.datalength);
 
-    close(infile);
+      close(outfile);
+    end;
 
+    if (h.klasse = ´d´) then begin
+      {$I-}
+        mkdir(h.tekst);
+        if (ioresult = 0) then;
+      {$I+}
+    end;
   end;
 
+  close(eeefile);
+
+  gzclose(zfile);
+
 end;
 
 
@@ -649,29 +723,32 @@
   assign(infile, paramstr(0));
   reset(infile, 1);
 
-  blockeat(infile, filesize(infile)-t.length);
-
-  try
+  blockeat(infile, filesize(infile)-t.gzlength-sizeof(t));
 
-    for teller := 1 to t.number do begin
-      blockread(infile, h, sizeof(h));
+  assign(outfile, workfile);
+  rewrite(outfile, 1);
+  blockcopy(infile, outfile, t.gzlength);
+  close(outfile);
 
-      if (h.klasse = ´f´) then begin
-        writeln(h.klasse, ´ ´, h.tekst, ´ (´, h.length, ´)´);
-        blockeat(infile, h.length);
-      end
-      else begin
-        writeln(h.klasse, ´ ´, h.tekst);
-      end;
+  close(infile);
 
-    end;
+  zfile	:= gzopen(workfile, ´r´);
 
-  finally
+  for teller := 1 to t.number do begin
+    gzread(zfile, addr(h), sizeof(h));
 
-    close(infile);
+    if (h.klasse = ´f´) then begin
+      writeln(h.klasse, ´ ´, h.tekst, ´ (´, h.datalength, ´)´);
+      blockeatfromgz(zfile, h.datalength);
+    end
+    else begin
+      writeln(h.klasse, ´ ´, h.tekst);
+    end;
 
   end;
 
+  gzclose(zfile);
+
 end;
 
 
@@ -708,6 +785,39 @@
     end;
   end;
 
+  randomize;
+
+  getdir2(0, dir);
+  chdir2(tempdir);
+    {$I-}
+      repeat
+        str(random(1000), s);
+        workdir	:= ´eee.´ + s;
+        mkdir(workdir);
+      until (ioresult = 0);
+    {$I+}
+
+    workdir	:= tempdir + slash + workdir;
+    workfile	:= workdir + slash + ´eee.gz´;
+
+    workdir1	:= workdir;
+    workdir2	:= workdir;
+
+    s		:= ´\´;
+    i		:= pos(s, workdir1);
+    while (i > 0) do begin
+      workdir1	:= copy(workdir1, 1, i-1) + ´/´ + copy(workdir1, i+length(s), length(workdir1)-(i+length(s))+1);
+      i		:= pos(s, workdir1);
+    end;
+
+    s		:= ´/´;
+    i		:= pos(s, workdir2);
+    while (i > 0) do begin
+      workdir2	:= copy(workdir2, 1, i-1) + ´\´ + copy(workdir2, i+length(s), length(workdir2)-(i+length(s))+1);
+      i		:= pos(s, workdir2);
+    end;
+  chdir2(dir);
+
   filemode	:= 0;
 
   assign(infile, paramstr(0));
@@ -716,6 +826,10 @@
   blockread(infile, t, sizeof(t));
   close(infile);
 
+  if (pos(´eeew´, lowercase(t.exename)) > 0) then begin
+    list	:= false;
+  end;
+
   if (t.who <> me) then begin
     pakin;
   end
@@ -733,4 +847,6 @@
     end;
   end;
 
+  recursivedelete(workdir);
+
 end.
diff -ur rubyscript2exe-0.2.1.tar.gz/rubyscript2exe/ev/ftools.rb rubyscript2exe-0.3.0.tar.gz/rubyscript2exe/ev/ftools.rb
--- rubyscript2exe-0.2.1.tar.gz/rubyscript2exe/ev/ftools.rb	2004-12-18 18:02:07.000000000 +0100
+++ rubyscript2exe-0.3.0.tar.gz/rubyscript2exe/ev/ftools.rb	2004-12-27 13:17:55.000000000 +0100
@@ -139,7 +139,11 @@
   end
 
   def self.touch(file)
-    File.open(file, "a"){|f|}
+    if File.exists?(file)
+      File.utime(Time.now, File.mtime(file), file)
+    else
+      File.open(file, "a"){|f|}
+    end
   end
 
   def self.which(file)
diff -ur rubyscript2exe-0.2.1.tar.gz/rubyscript2exe/init.rb rubyscript2exe-0.3.0.tar.gz/rubyscript2exe/init.rb
--- rubyscript2exe-0.2.1.tar.gz/rubyscript2exe/init.rb	2004-12-08 13:48:37.000000000 +0100
+++ rubyscript2exe-0.3.0.tar.gz/rubyscript2exe/init.rb	2004-12-26 22:50:56.000000000 +0100
@@ -14,10 +14,6 @@
   not windows? and not cygwin?			# Hack ???
 end
 
-def linux?
-  not windows? and not cygwin?			# Hack ???
-end
-
 def windows?
   not (target_os.downcase =~ /32/).nil?		# Hack ???
 end
@@ -144,6 +140,13 @@
   end
 end
 
+File.open(tmplocation("eee.rb"), "w") do |f|
+  f.puts "lib = File.expand_path(File.dirname(__FILE__)) + ´/lib´"
+  f.puts "lib.sub!(/^.:/, ´/cygdrive/%s´ % $&[0..0].downcase) if lib =~ /^.:/"	if cygwin?
+  f.puts "$:.clear"
+  f.puts "$: << lib"
+end
+
 File.open(tmplocation("app.eee"), "w") do |f|
   rubyexe	= "ruby.exe"
   rubyexe	= "rubyw.exe"	if rubyw
@@ -152,11 +155,14 @@
   f.puts "r bin"
   f.puts "r lib"
   f.puts "f eee.sh"	if linux?
+  f.puts "f eee.rb"
   f.puts "r app"
   if linux?
-    f.puts "c source %tempdir%/eee.sh %tempdir% %tempdir%/bin/#{rubyexe} -I %tempdir%/lib %tempdir%/app/app.rb %quotedparms%"
+    f.puts "c source %tempdir%/eee.sh %tempdir% %tempdir%/bin/#{rubyexe} -r %tempdir%/eee.rb %tempdir%/app/app.rb %quotedparms%"
+  elsif cygwin?
+    f.puts "c %tempdir%\\bin\\#{rubyexe} -r %tempdir1%/eee.rb %tempdir1%/app/app.rb %quotedparms%"
   else
-    f.puts "c %tempdir%/bin/#{rubyexe} -I %tempdir%/lib %tempdir%/app/app.rb %quotedparms%"
+    f.puts "c %tempdir%\\bin\\#{rubyexe} -r %tempdir%\\eee.rb %tempdir%\\app\\app.rb %quotedparms%"
   end
 end
 
@@ -167,7 +173,10 @@
 File.chmod(0755, to)	if linux?
 
 tmplocation do
-  system(backslashes("#{(linux? or cygwin?) ? "./" : ""}#{eeeexe} app.eee #{appexe} #{eeeexe} #{Dir.pwd}"))
+  ENV["EEEEXE"]	= eeeexe
+  ENV["EEEDIR"]	= Dir.pwd
+
+  system(backslashes("#{newlocation(linux? ? "eee.bin" : "eee")} app.eee #{appexe}"))
 end
 
 from	= tmplocation(appexe)
@@ -177,5 +186,5 @@
 File.chmod(0755, to)	if linux?
 
 oldlocation do
-  system(backslashes("reshacker -modify #{newlocation(appexe)}, #{appexe}, #{appico}, icon,appicon,"))	if File.file?(appico) and (windows? or cygwin?)
+  system(backslashes("reshacker -modify #{tmplocation(appexe)}, #{appexe}, #{appico}, icon,appicon,"))	if File.file?(appico) and (windows? or cygwin?)
 end
diff -ur rubyscript2exe-0.2.1.tar.gz/rubyscript2exe/require2lib.rb rubyscript2exe-0.3.0.tar.gz/rubyscript2exe/require2lib.rb
--- rubyscript2exe-0.2.1.tar.gz/rubyscript2exe/require2lib.rb	2004-12-18 18:02:07.000000000 +0100
+++ rubyscript2exe-0.3.0.tar.gz/rubyscript2exe/require2lib.rb	2004-12-27 13:17:55.000000000 +0100
@@ -39,6 +39,8 @@
 
     File.makedirs(LIBDIR)
 
+    pureruby	= true
+
     ($" + $require2lib_loaded).each do |req|
       if not JUSTEV or req =~ /^ev\//
         unless req =~ /^rubygems[\.\/]/
@@ -56,6 +58,8 @@
 
                     File.makedirs(File.dirname(tofile))
                     File.copy(fromfile, tofile)
+
+                    pureruby	= false	unless req =~ /\.rb$/i
                   else
                     $stderr.puts "Skipped #{fromfile} ."	if VERBOSE
                   end
@@ -71,6 +75,8 @@
       end
     end
 
+    $stderr.puts "Not all copied files are pure Ruby."	unless pureruby
+
     if $".include?("rubygems.rb") or $".include?("rubygems.so")
       autorequire	= {}
 
Binary files rubyscript2exe-0.2.1.tar.gz/rubyscript2exe/eee.bin and rubyscript2exe-0.3.0.tar.gz/rubyscript2exe/eee.bin differ
Binary files rubyscript2exe-0.2.1.tar.gz/rubyscript2exe/eee.exe and rubyscript2exe-0.3.0.tar.gz/rubyscript2exe/eee.exe differ
Binary files rubyscript2exe-0.2.1.tar.gz/rubyscript2exe/eeew.exe and rubyscript2exe-0.3.0.tar.gz/rubyscript2exe/eeew.exe differ