diff -r -u -p golded+/golded3/gcarea.cpp golded_arc/golded3/gcarea.cpp
--- golded+/golded3/gcarea.cpp	Thu May 11 19:04:44 2000
+++ golded_arc/golded3/gcarea.cpp	Wed Dec 19 16:55:24 2001
@@ -64,8 +64,6 @@ void AreaList::SortAreaGroup(const char*
     }
   }
 }
-
-
 //  ------------------------------------------------------------------
 //  Rename an echoid
 
@@ -345,6 +343,10 @@ void AreaList::AddNewArea(AreaCfg* aa) {
     (*ap)->set_path(aa->path);
     (*ap)->set_board(aa->board);
     (*ap)->set_msgbase(aa->msgbase);
+    (*ap)->set_temppath(CFG->temppath);
+    (*ap)->set_oldpath(aa->path);
+    (*ap)->set_goldpath(CFG->goldpath);
+    (*ap)->set_shell(&ShellToDos);
   }
   (*ap)->set_desc(newarea or strblank(desc) ? aa->desc : desc);
   (*ap)->set_areaid(aa->areaid);
diff -r -u -p golded+/golded3/gmarea.h golded_arc/golded3/gmarea.h
--- golded+/golded3/gmarea.h	Fri Oct 20 15:14:14 2000
+++ golded_arc/golded3/gmarea.h	Wed Dec 19 16:56:36 2001
@@ -406,6 +406,8 @@ public:
   const char* echoid() const      { return area->echoid(); }
   const char* desc() const        { return area->desc(); }
   const char* path() const        { return area->path(); }
+  const char* temppath() const    { return area->temppath(); }
+  const char* oldpath() const     { return area->oldpath(); }
 
   void set_marked(bool value)   { if(value) marks |= (word)(1<<AL.mask); else marks &= (word)(~(1<<AL.mask)); }
 
@@ -429,6 +431,11 @@ public:
   void set_echoid(const char* s)   { area->set_echoid(s); }
   void set_desc(const char* s)     { area->set_desc(s); }
   void set_path(const char* s)     { area->set_path(s); }
+  void set_temppath(const char* s)      { area->set_temppath(s); }
+  void set_oldpath(const char* s)      { area->set_oldpath(s); }
+  void set_goldpath(const char* s)      { area->set_goldpath(s); }
+
+  void set_shell(int (*f)(char *,char *,int,int,int,int)){area->set_shell(f); }
 
 
   //  ----------------------------------------------------------------
Only in golded_arc/golded3: mygolded.h
diff -r -u -p golded+/goldlib/gall/gfilutil.h golded_arc/goldlib/gall/gfilutil.h
--- golded+/goldlib/gall/gfilutil.h	Mon May 22 21:17:44 2000
+++ golded_arc/goldlib/gall/gfilutil.h	Mon Oct 29 16:51:50 2001
@@ -199,7 +199,7 @@ long filelength(int fh);
 
 void replaceextension(char *destpath, const char *srcpath, const char *ext);
 void extractdirname(char *dir, const char *path);
-
+const char * extractfilename(const char *path);
 
 //  ------------------------------------------------------------------
 
diff -r -u -p golded+/goldlib/gall/gfilutl1.cpp golded_arc/goldlib/gall/gfilutl1.cpp
--- golded+/goldlib/gall/gfilutl1.cpp	Fri Oct 20 15:14:14 2000
+++ golded_arc/goldlib/gall/gfilutl1.cpp	Wed Dec  5 11:59:50 2001
@@ -458,3 +458,22 @@ void extractdirname(char *dir, const cha
 
 //  ------------------------------------------------------------------
 
+
+const char * extractfilename(const char *path) {
+
+const char *p1 = path;
+const char *p2 = path;
+  while(*p1) {
+    if(isslash(*p1))
+      p2 = p1;
+      p1++;
+  }
+  if(isslash(*p2))
+    ++p2;
+  return p2;
+}
+
+
+//  ------------------------------------------------------------------
+
+
diff -r -u -p golded+/goldlib/gmb3/gmoarea.cpp golded_arc/goldlib/gmb3/gmoarea.cpp
--- golded+/goldlib/gmb3/gmoarea.cpp	Fri Feb 25 13:13:00 2000
+++ golded_arc/goldlib/gmb3/gmoarea.cpp	Wed Dec 19 16:49:52 2001
@@ -54,6 +54,7 @@ gmo_area::gmo_area() : cfg(), cfg2() {
   lastread = 0;
   lastreadentry = 0;
   isopen = false;
+  sw_zip=0;
 }
 
 
diff -r -u -p golded+/goldlib/gmb3/gmoarea.h golded_arc/goldlib/gmb3/gmoarea.h
--- golded+/goldlib/gmb3/gmoarea.h	Fri Feb 25 13:13:00 2000
+++ golded_arc/goldlib/gmb3/gmoarea.h	Wed Dec 19 16:57:04 2001
@@ -54,6 +54,7 @@ public:
 
   AreaCfgBase cfg;
   GStrSet3    cfg2;
+  GStrSet3    cfg3;
 
 
   //  ----------------------------------------------------------------
@@ -69,6 +70,7 @@ public:
   GTag*   Msgn;               // Message numbers
   GTag*   PMrk;               // Personal mail marks
 
+  uint    sw_zip;             // Switch for unzip and del function in raw_open & raw close
   uint    lastread;           // Number of last message read
   ulong   lastreadentry;      // Lastread message number at entry to area
 
@@ -98,6 +100,11 @@ public:
   const char* desc() const        { return cfg2.Get2(); }
   const char* path() const        { return cfg2.Get3(); }
 
+  const char* temppath() const      { return cfg3.Get1(); }
+  const char* oldpath() const      { return cfg3.Get2(); }
+  const char* goldpath() const      { return cfg3.Get3(); }
+
+
   void set_areaid(int a)        { cfg.areaid = a; }
   void set_groupid(int g)       { cfg.groupid = g; }
   void set_type(uint t)         { cfg.type = t; }
@@ -119,6 +126,9 @@ public:
   void set_desc(const char* s)     { cfg2.Change2(s); }
   void set_path(const char* s)     { cfg2.Change3(s); }
 
+  void set_temppath(const char* s)   { cfg3.Change1(s); }
+  void set_oldpath(const char* s)   { cfg3.Change2(s); }
+  void set_goldpath(const char* s)   { cfg3.Change3(s); }
 
   //  ----------------------------------------------------------------
   //  Determine msgbase format
@@ -184,6 +194,11 @@ public:
 
   virtual void set_highwater_mark() { }
   virtual void reset_highwater_mark() { }
+
+  //  ----------------------------------------------------------------
+  //  * system function
+  int (*ShellToDos)(char *, char *,int,int,int,int);        
+  void set_shell(int (*f)(char *, char *,int,int,int,int)){ShellToDos=f; }
 };
 
 
diff -r -u -p golded+/goldlib/gmb3/gmosqsh1.cpp golded_arc/goldlib/gmb3/gmosqsh1.cpp
--- golded+/goldlib/gmb3/gmosqsh1.cpp	Wed Aug 23 23:24:20 2000
+++ golded_arc/goldlib/gmb3/gmosqsh1.cpp	Wed Dec 19 20:15:34 2001
@@ -115,6 +115,26 @@ void SquishArea::raw_close() {
   if(data->fhsqi != -1)  ::close(data->fhsqi);  data->fhsqi = -1;
   if(data->fhsqd != -1)  ::close(data->fhsqd);  data->fhsqd = -1;
 
+/*
+string command(goldpath()),tpath(temppath());
+
+if( sw_zip==2 ){
+    if (tpath.size()==0){
+    tpath.append(getenv("GOLDTEMP"));
+    };
+    AddBackslash(tpath);
+    AddBackslash(command);
+    command.append("rmunzip ");
+    command.append(tpath);
+//    sw_zip=3;
+//    ShellToDos((char *)command.c_str(),(char *)command.c_str(),1,1,YES,YES);
+	remove(AddPath(path(), ".sqd"));
+	remove(AddPath(path(), ".sqi"));
+    set_path(oldpath());
+    sw_zip=0;
+};
+*/
+
   GFTRK(NULL);
 }
 
@@ -160,6 +180,32 @@ int SquishArea::test_open(const char* __
 //  ------------------------------------------------------------------
 
 void SquishArea::raw_open() {
+
+string ext,newpath(getenv("GOLDTEMP")),command(goldpath()),
+unzipfile(extractfilename(oldpath())) ;
+
+ ext.assign(unzipfile,unzipfile.rfind("."),unzipfile.size());
+    if ( ! ext.compare(".zip") && sw_zip==0 ){
+    unzipfile.replace(unzipfile.rfind("."),4,"");    
+    if (newpath.size()==0){
+    newpath.append(temppath());
+    };
+    if (newpath.size()==0){
+    newpath.append(getenv("TEMP"));
+    };
+    AddBackslash(newpath);
+    AddBackslash(command);
+    command.append("uncomp ");
+    command.append(path());
+    command.append(" ");
+    command.append(newpath);
+    newpath.append(unzipfile);
+    sw_zip=1;
+    set_path(newpath.c_str());
+    ShellToDos((char *)command.c_str(),(char *)command.c_str(),1,1,YES,NO);
+    sw_zip=2;
+
+    };
 
   GFTRK("SquishRawOpen");
 
Only in golded_arc: lib
