[haiku-commits] haiku: hrev45188 - src/bin/unrar

  • From: zharik@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 22 Jan 2013 10:42:43 +0100 (CET)

hrev45188 adds 2 changesets to branch 'master'
old head: 90ae2e54f6ccaca73c011a2aa4cdd660417108ad
new head: e449bae89186bea95f123280559c5195be5017e7
overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=e449bae+%5E90ae2e5

----------------------------------------------------------------------------

44e22d2: Vim, KeymapSwitcher and UnRAR packages updated
  
  * Version of Vim package for x86_64 added;
  * Version of KeymapSwitcher package for x86_64 added;
  * KeymapSwitcher package fixed to preserve Cmd <-> Ctrl swap settings on
    keymaps switch. Fixes #9142;
  * UnRAR updated from 3.7.8 to 4.2.4, fixed for multibyte characters
    support and build for x86_64. Partially fixes #4879;

e449bae: bin/unrar outsorced to UnRAR 4.2.4 opt.package

                                        [ Siarzhuk Zharski <zharik@xxxxxx> ]

----------------------------------------------------------------------------

125 files changed, 50 insertions(+), 22935 deletions(-)
build/jam/HaikuImage       |    2 +-
build/jam/OptionalPackages |   59 +-
src/bin/Jamfile            |    1 -
src/bin/unrar/Jamfile      |   47 -
src/bin/unrar/arccmt.cpp   |  215 ----
src/bin/unrar/archive.cpp  |  267 -----
src/bin/unrar/archive.hpp  |  126 --
src/bin/unrar/arcread.cpp  |  653 -----------
src/bin/unrar/array.hpp    |  122 --
src/bin/unrar/beosea.cpp   |  113 --
src/bin/unrar/cmddata.cpp  | 1287 --------------------
src/bin/unrar/cmddata.hpp  |   57 -
src/bin/unrar/coder.cpp    |   47 -
src/bin/unrar/coder.hpp    |   24 -
src/bin/unrar/compress.hpp |   36 -
src/bin/unrar/consio.cpp   |  289 -----
src/bin/unrar/consio.hpp   |   46 -
src/bin/unrar/crc.cpp      |   61 -
src/bin/unrar/crc.hpp      |   10 -
src/bin/unrar/crypt.cpp    |  381 ------
src/bin/unrar/crypt.hpp    |   62 -
src/bin/unrar/dll.cpp      |  365 ------
src/bin/unrar/dll.def      |   12 -
src/bin/unrar/dll.hpp      |  138 ---
src/bin/unrar/encname.cpp  |   57 -
src/bin/unrar/encname.hpp  |   20 -
src/bin/unrar/errhnd.cpp   |  374 ------
src/bin/unrar/errhnd.hpp   |   62 -
src/bin/unrar/extinfo.cpp  |   76 --
src/bin/unrar/extinfo.hpp  |    8 -
src/bin/unrar/extract.cpp  |  873 --------------
src/bin/unrar/extract.hpp  |   42 -
src/bin/unrar/filcreat.cpp |  239 ----
src/bin/unrar/filcreat.hpp |   13 -
src/bin/unrar/file.cpp     |  704 -----------
src/bin/unrar/file.hpp     |  100 --
src/bin/unrar/filefn.cpp   |  570 ---------
src/bin/unrar/filefn.hpp   |   41 -
src/bin/unrar/filestr.cpp  |  145 ---
src/bin/unrar/filestr.hpp  |    8 -
src/bin/unrar/find.cpp     |  296 -----
src/bin/unrar/find.hpp     |   48 -
src/bin/unrar/getbits.cpp  |   24 -
src/bin/unrar/getbits.hpp  |   38 -
src/bin/unrar/global.cpp   |    4 -
src/bin/unrar/global.hpp   |   14 -
src/bin/unrar/headers.hpp  |  306 -----
src/bin/unrar/int64.cpp    |  274 -----
src/bin/unrar/int64.hpp    |   86 --
src/bin/unrar/isnt.cpp     |   17 -
src/bin/unrar/isnt.hpp     |    6 -
src/bin/unrar/license.txt  |   40 -
src/bin/unrar/list.cpp     |  388 ------
src/bin/unrar/list.hpp     |    6 -
src/bin/unrar/loclang.hpp  |  349 ------
src/bin/unrar/log.cpp      |   24 -
src/bin/unrar/log.hpp      |   18 -
src/bin/unrar/match.cpp    |  262 -----
src/bin/unrar/match.hpp    |   12 -
src/bin/unrar/model.cpp    |  610 ----------
src/bin/unrar/model.hpp    |  132 ---
src/bin/unrar/msc.dep      | 2532 ----------------------------------------
src/bin/unrar/options.cpp  |   28 -
src/bin/unrar/options.hpp  |  142 ---
src/bin/unrar/os.hpp       |  246 ----
src/bin/unrar/os2ea.cpp    |   94 --
src/bin/unrar/pathfn.cpp   |  714 -----------
src/bin/unrar/pathfn.hpp   |   46 -
src/bin/unrar/rar.cpp      |  144 ---
src/bin/unrar/rar.hpp      |   80 --
src/bin/unrar/rardefs.hpp  |   24 -
src/bin/unrar/rarfn.hpp    |    7 -
src/bin/unrar/rarlang.hpp  |   10 -
src/bin/unrar/raros.hpp    |   41 -
src/bin/unrar/rartypes.hpp |   23 -
src/bin/unrar/rarvm.cpp    | 1113 ------------------
src/bin/unrar/rarvm.hpp    |  109 --
src/bin/unrar/rarvmtbl.cpp |   53 -
src/bin/unrar/rawread.cpp  |  126 --
src/bin/unrar/rawread.hpp  |   32 -
src/bin/unrar/rdwrfn.cpp   |  264 -----
src/bin/unrar/rdwrfn.hpp   |   83 --
src/bin/unrar/readme.txt   |   63 -
src/bin/unrar/recvol.cpp   |  367 ------
src/bin/unrar/recvol.hpp   |   16 -
src/bin/unrar/resource.cpp |   12 -
src/bin/unrar/resource.hpp |   14 -
src/bin/unrar/rijndael.cpp |  298 -----
src/bin/unrar/rijndael.hpp |   37 -
src/bin/unrar/rs.cpp       |  143 ---
src/bin/unrar/rs.hpp       |   32 -
src/bin/unrar/savepos.cpp  |   15 -
src/bin/unrar/savepos.hpp  |   15 -
src/bin/unrar/scantree.cpp |  292 -----
src/bin/unrar/scantree.hpp |   52 -
src/bin/unrar/sha1.cpp     |  231 ----
src/bin/unrar/sha1.hpp     |   17 -
src/bin/unrar/smallfn.cpp  |   23 -
src/bin/unrar/smallfn.hpp  |    8 -
[ *** stats truncated: 26 lines dropped *** ]

############################################################################

Commit:      44e22d214f5d0bb4a6a6d05db787fa40fccf09a2
URL:         http://cgit.haiku-os.org/haiku/commit/?id=44e22d2
Author:      Siarzhuk Zharski <zharik@xxxxxx>
Date:        Tue Jan 22 08:16:38 2013 UTC

Ticket:      https://dev.haiku-os.org/ticket/4879
Ticket:      https://dev.haiku-os.org/ticket/9142

Vim, KeymapSwitcher and UnRAR packages updated

* Version of Vim package for x86_64 added;
* Version of KeymapSwitcher package for x86_64 added;
* KeymapSwitcher package fixed to preserve Cmd <-> Ctrl swap settings on
  keymaps switch. Fixes #9142;
* UnRAR updated from 3.7.8 to 4.2.4, fixed for multibyte characters
  support and build for x86_64. Partially fixes #4879;

----------------------------------------------------------------------------

diff --git a/build/jam/OptionalPackages b/build/jam/OptionalPackages
index 3952594..b0d4a60 100644
--- a/build/jam/OptionalPackages
+++ b/build/jam/OptionalPackages
@@ -95,6 +95,7 @@ if $(HAIKU_ADD_ALTERNATIVE_GCC_LIBS) = 1
 #      TimGMSoundFont                  - a good quality General MIDI Sound Font
 #      TrackerNewTemplates             - template files for Tracker's New menu
 #      Transmission                    - a fast, easy, and free BitTorrent 
Client
+#      UnRAR                                   - utility to list, test and 
extract RAR archives
 #      UserlandFS                              - aids native file system 
development (like FUSE)
 #      Vim                                             - Vi IMproved. Highly 
configurable text editor
 #      Vision                                  - powerful native IRC client
@@ -1330,22 +1331,29 @@ if [ IsOptionalHaikuImagePackageAdded ICU-devel ] {
 
 # KeymapSwitcher
 if [ IsOptionalHaikuImagePackageAdded KeymapSwitcher ] {
-       if $(TARGET_ARCH) != x86 {
-               Echo "No optional package KeymapSwitcher available for 
$(TARGET_ARCH)" ;
-       } else {
+       if $(TARGET_ARCH) = x86 {
                if $(HAIKU_GCC_VERSION[1]) >= 4 {
                        InstallOptionalHaikuImagePackage
-                               
KeymapSwitcher-1.2.7-r1a4-x86-gcc4-2012-11-01.zip
-                               : 
$(baseURL)/KeymapSwitcher-1.2.7-r1a4-x86-gcc4-2012-11-01.zip
+                               KeymapSwitcher-1.2.7-x86-gcc4-2013-01-08.zip
+                               : 
$(baseURL)/KeymapSwitcher-1.2.7-x86-gcc4-2013-01-08.zip
                                : : : false ;
                } else {
                        InstallOptionalHaikuImagePackage
-                               
KeymapSwitcher-1.2.7-r1a4-x86-gcc2-2012-11-01.zip
-                               : 
$(baseURL)/KeymapSwitcher-1.2.7-r1a4-x86-gcc2-2012-11-01.zip
+                               KeymapSwitcher-1.2.7-x86-gcc2-2013-01-08.zip
+                               : 
$(baseURL)/KeymapSwitcher-1.2.7-x86-gcc2-2013-01-08.zip
                                : : : false ;
                }
                AddSymlinkToHaikuImage home config settings deskbar Preferences
                        : /boot/common/bin/KeymapSwitcher ;
+       } else if $(TARGET_ARCH) = x86_64 {
+               InstallOptionalHaikuImagePackage
+                       KeymapSwitcher-1.2.7-x86_64-2013-01-08.zip
+                       : $(baseURL)/KeymapSwitcher-1.2.7-x86_64-2013-01-08.zip
+                       : : true ;
+               AddSymlinkToHaikuImage home config settings deskbar Preferences
+                       : /boot/common/bin/KeymapSwitcher ;
+       } else {
+               Echo "No optional package KeymapSwitcher available for 
$(TARGET_ARCH)" ;
        }
 }
 
@@ -2080,6 +2088,31 @@ if [ IsOptionalHaikuImagePackageAdded Transmission ] {
 }
 
 
+# UnRAR
+if [ IsOptionalHaikuImagePackageAdded UnRAR ] {
+       if $(TARGET_ARCH) = x86 {
+               if $(HAIKU_GCC_VERSION[1]) >= 4 {
+                       InstallOptionalHaikuImagePackage
+                               UnRAR-4.2.4-x86-gcc4-2013-01-21.zip
+                               : $(baseURL)/UnRAR-4.2.4-x86-gcc4-2013-01-21.zip
+                               : : true ;
+               } else {
+                       InstallOptionalHaikuImagePackage
+                               UnRAR-4.2.4-x86-gcc2-2013-01-21.zip
+                               : $(baseURL)/UnRAR-4.2.4-x86-gcc2-2013-01-21.zip
+                               : : true ;
+               }
+       } else if $(TARGET_ARCH) = x86_64 {
+               InstallOptionalHaikuImagePackage
+                       UnRAR-4.2.4-x86_64-2013-01-21.zip
+                       : $(baseURL)/UnRAR-4.2.4-x86_64-2013-01-21.zip
+                       : : true ;
+       } else {
+               Echo "No optional package UnRAR available for $(TARGET_ARCH)" ;
+       }
+}
+
+
 # UserlandFS
 if [ IsOptionalHaikuImagePackageAdded UserlandFS ] {
        local arch = $(TARGET_ARCH) ;
@@ -2135,9 +2168,7 @@ if [ IsOptionalHaikuImagePackageAdded UserlandFS ] {
 
 # Vim
 if [ IsOptionalHaikuImagePackageAdded Vim ] {
-       if $(TARGET_ARCH) != x86 {
-               Echo "No optional package Vim available for $(TARGET_ARCH)" ;
-       } else {
+       if $(TARGET_ARCH) = x86 {
                if $(HAIKU_GCC_VERSION[1]) >= 4 {
                        InstallOptionalHaikuImagePackage 
vim-7.3-r1a4-x86-gcc4-2012-09-26.zip
                                :  
$(baseURL)/vim-7.3-r1a4-x86-gcc4-2012-09-26.zip
@@ -2149,6 +2180,14 @@ if [ IsOptionalHaikuImagePackageAdded Vim ] {
                }
                AddSymlinkToHaikuImage home config settings deskbar Applications
                        : /boot/common/bin/gvim ;
+       } else if $(TARGET_ARCH) = x86_64 {
+               InstallOptionalHaikuImagePackage vim-7.3-x86_64-2013-01-19.zip
+                       :  $(baseURL)/vim-7.3-x86_64-2013-01-19.zip
+                       : : true ;
+               AddSymlinkToHaikuImage home config settings deskbar Applications
+                       : /boot/common/bin/gvim ;
+       } else {
+               Echo "No optional package Vim available for $(TARGET_ARCH)" ;
        }
 }
 

############################################################################

Revision:    hrev45188
Commit:      e449bae89186bea95f123280559c5195be5017e7
URL:         http://cgit.haiku-os.org/haiku/commit/?id=e449bae
Author:      Siarzhuk Zharski <zharik@xxxxxx>
Date:        Tue Jan 22 08:27:44 2013 UTC

bin/unrar outsorced to UnRAR 4.2.4 opt.package

----------------------------------------------------------------------------

diff --git a/build/jam/HaikuImage b/build/jam/HaikuImage
index a90dca6..3dddaaf 100644
--- a/build/jam/HaikuImage
+++ b/build/jam/HaikuImage
@@ -35,7 +35,7 @@ SYSTEM_BIN = [ FFilterByBuildFeatures
        split stat strace stty su sum sync sysinfo
        tac tail tcpdump tcptester tee telnet telnetd test timeout top touch
        tput tr traceroute translate trash true truncate tsort tty
-       uname unchop unexpand unmount uniq unlink unrar unshar unzip unzipsfx
+       uname unchop unexpand unmount uniq unlink unshar unzip unzipsfx
        <bin>updatedb uptime urlwrapper useradd uudecode uuencode
        vdir version vmstat
        waitfor watch wc wget whoami writembr@x86 xargs xres yes
diff --git a/src/bin/Jamfile b/src/bin/Jamfile
index dccce63..4d1f653 100644
--- a/src/bin/Jamfile
+++ b/src/bin/Jamfile
@@ -274,7 +274,6 @@ SubInclude HAIKU_TOP src bin rmd160 ;
 SubInclude HAIKU_TOP src bin screen_blanker ;
 SubInclude HAIKU_TOP src bin screenmode ;
 SubInclude HAIKU_TOP src bin sharutils ;
-SubInclude HAIKU_TOP src bin unrar ;
 SubInclude HAIKU_TOP src bin writembr ;
 SubInclude HAIKU_TOP src bin zic ;
 
diff --git a/src/bin/unrar/Jamfile b/src/bin/unrar/Jamfile
deleted file mode 100644
index b7a0dce..0000000
--- a/src/bin/unrar/Jamfile
+++ /dev/null
@@ -1,47 +0,0 @@
-SubDir HAIKU_TOP src bin unrar ;
-
-BinCommand unrar :
-       rar.cpp
-       strlist.cpp
-       strfn.cpp
-       pathfn.cpp
-       int64.cpp
-       savepos.cpp
-       global.cpp
-       file.cpp
-       filefn.cpp
-       filcreat.cpp
-       archive.cpp
-       arcread.cpp
-       unicode.cpp
-       system.cpp
-       isnt.cpp
-       crypt.cpp
-       crc.cpp
-       rawread.cpp
-       encname.cpp
-       resource.cpp
-       match.cpp
-       timefn.cpp
-       rdwrfn.cpp
-       consio.cpp
-       options.cpp
-       ulinks.cpp
-       errhnd.cpp
-       rarvm.cpp
-       rijndael.cpp
-       getbits.cpp
-       sha1.cpp
-       extinfo.cpp
-       extract.cpp
-       volume.cpp
-       list.cpp
-       find.cpp
-       unpack.cpp
-       cmddata.cpp
-       scantree.cpp
-       filestr.cpp
-       recvol.cpp
-       rs.cpp
-       : be $(TARGET_LIBSUPC++) : unrar.rdef
-;
diff --git a/src/bin/unrar/arccmt.cpp b/src/bin/unrar/arccmt.cpp
deleted file mode 100644
index 6ada2f0..0000000
--- a/src/bin/unrar/arccmt.cpp
+++ /dev/null
@@ -1,215 +0,0 @@
-bool Archive::GetComment(Array<byte> *CmtData,Array<wchar> *CmtDataW)
-{
-  if (!MainComment)
-    return(false);
-  SaveFilePos SavePos(*this);
-
-  ushort CmtLength;
-#ifndef SFX_MODULE
-  if (OldFormat)
-  {
-    Seek(SFXSize+SIZEOF_OLDMHD,SEEK_SET);
-    CmtLength=GetByte()+(GetByte()<<8);
-  }
-  else
-#endif
-  {
-    if (NewMhd.Flags & MHD_COMMENT)
-    {
-      Seek(SFXSize+SIZEOF_MARKHEAD+SIZEOF_NEWMHD,SEEK_SET);
-      ReadHeader();
-    }
-    else
-    {
-      Seek(SFXSize+SIZEOF_MARKHEAD+NewMhd.HeadSize,SEEK_SET);
-      return(SearchSubBlock(SUBHEAD_TYPE_CMT)!=0 && 
ReadCommentData(CmtData,CmtDataW)!=0);
-    }
-#ifndef SFX_MODULE
-    if (CommHead.HeadCRC!=HeaderCRC)
-    {
-      Log(FileName,St(MLogCommHead));
-      Alarm();
-      return(false);
-    }
-    CmtLength=CommHead.HeadSize-SIZEOF_COMMHEAD;
-#endif
-  }
-#ifndef SFX_MODULE
-  if (OldFormat && (OldMhd.Flags & MHD_PACK_COMMENT) || !OldFormat && 
CommHead.Method!=0x30)
-  {
-    if (!OldFormat && (CommHead.UnpVer < 15 || CommHead.UnpVer > UNP_VER || 
CommHead.Method > 0x35))
-      return(false);
-    ComprDataIO DataIO;
-    Unpack Unpack(&DataIO);
-    Unpack.Init();
-    DataIO.SetTestMode(true);
-    uint UnpCmtLength;
-    if (OldFormat)
-    {
-#ifdef NOCRYPT
-      return(false);
-#else
-      UnpCmtLength=GetByte()+(GetByte()<<8);
-      CmtLength-=2;
-      DataIO.SetCmt13Encryption();
-#endif
-    }
-    else
-      UnpCmtLength=CommHead.UnpSize;
-    DataIO.SetFiles(this,NULL);
-    DataIO.EnableShowProgress(false);
-    DataIO.SetPackedSizeToRead(CmtLength);
-    Unpack.SetDestSize(UnpCmtLength);
-    Unpack.DoUnpack(CommHead.UnpVer,false);
-
-    if (!OldFormat && ((~DataIO.UnpFileCRC)&0xffff)!=CommHead.CommCRC)
-    {
-      Log(FileName,St(MLogCommBrk));
-      Alarm();
-      return(false);
-    }
-    else
-    {
-      unsigned char *UnpData;
-      uint UnpDataSize;
-      DataIO.GetUnpackedData(&UnpData,&UnpDataSize);
-      CmtData->Alloc(UnpDataSize);
-      memcpy(&((*CmtData)[0]),UnpData,UnpDataSize);
-    }
-  }
-  else
-  {
-    CmtData->Alloc(CmtLength);
-    
-    Read(&((*CmtData)[0]),CmtLength);
-    if (!OldFormat && 
CommHead.CommCRC!=(~CRC(0xffffffff,&((*CmtData)[0]),CmtLength)&0xffff))
-    {
-      Log(FileName,St(MLogCommBrk));
-      Alarm();
-      CmtData->Reset();
-      return(false);
-    }
-  }
-#endif
-#if defined(_WIN_32) && !defined(_WIN_CE)
-  if (CmtData->Size()>0)
-  {
-    int CmtSize=CmtData->Size();
-    OemToCharBuff((char *)CmtData->Addr(),(char *)CmtData->Addr(),CmtSize);
-
-    if (CmtDataW!=NULL)
-    {
-      CmtDataW->Alloc(CmtSize+1);
-      CmtData->Push(0);
-      CharToWide((char *)CmtData->Addr(),CmtDataW->Addr(),CmtSize+1);
-      CmtData->Alloc(CmtSize);
-      CmtDataW->Alloc(strlenw(CmtDataW->Addr()));
-    }
-  }
-#endif
-  return(CmtData->Size()>0);
-}
-
-
-int Archive::ReadCommentData(Array<byte> *CmtData,Array<wchar> *CmtDataW)
-{
-  bool Unicode=SubHead.SubFlags & SUBHEAD_FLAGS_CMT_UNICODE;
-  if (!ReadSubData(CmtData,NULL))
-    return(0);
-  int CmtSize=CmtData->Size();
-  if (Unicode)
-  {
-    CmtSize/=2;
-    Array<wchar> DataW(CmtSize+1);
-    RawToWide(CmtData->Addr(),DataW.Addr(),CmtSize);
-    DataW[CmtSize]=0;
-    int DestSize=CmtSize*4;
-    CmtData->Alloc(DestSize+1);
-    WideToChar(DataW.Addr(),(char *)CmtData->Addr(),DestSize);
-    (*CmtData)[DestSize]=0;
-    CmtSize=strlen((char *)CmtData->Addr());
-    CmtData->Alloc(CmtSize);
-    if (CmtDataW!=NULL)
-    {
-      *CmtDataW=DataW;
-      CmtDataW->Alloc(CmtSize);
-    }
-  }
-  else
-    if (CmtDataW!=NULL)
-    {
-      CmtData->Push(0);
-      CmtDataW->Alloc(CmtSize+1);
-      CharToWide((char *)CmtData->Addr(),CmtDataW->Addr(),CmtSize+1);
-      CmtData->Alloc(CmtSize);
-      CmtDataW->Alloc(strlenw(CmtDataW->Addr()));
-    }
-  return(CmtSize);
-}
-
-
-void Archive::ViewComment()
-{
-#ifndef GUI
-  if (Cmd->DisableComment)
-    return;
-  Array<byte> CmtBuf;
-  if (GetComment(&CmtBuf,NULL))
-  {
-    int CmtSize=CmtBuf.Size();
-    char *ChPtr=(char *)memchr(&CmtBuf[0],0x1A,CmtSize);
-    if (ChPtr!=NULL)
-      CmtSize=ChPtr-(char *)&CmtBuf[0];
-    mprintf("\n");
-    OutComment((char *)&CmtBuf[0],CmtSize);
-  }
-#endif
-}
-
-
-#ifndef SFX_MODULE
-void Archive::ViewFileComment()
-{
-  if (!(NewLhd.Flags & LHD_COMMENT) || Cmd->DisableComment || OldFormat)
-    return;
-#ifndef GUI
-  mprintf(St(MFileComment));
-#endif
-  const int MaxSize=0x8000;
-  Array<char> CmtBuf(MaxSize);
-  SaveFilePos SavePos(*this);
-  Seek(CurBlockPos+SIZEOF_NEWLHD+NewLhd.NameSize,SEEK_SET);
-  Int64 SaveCurBlockPos=CurBlockPos;
-  Int64 SaveNextBlockPos=NextBlockPos;
-
-  int Size=ReadHeader();
-
-  CurBlockPos=SaveCurBlockPos;
-  NextBlockPos=SaveNextBlockPos;
-
-  if (Size<7 || CommHead.HeadType!=COMM_HEAD)
-    return;
-  if (CommHead.HeadCRC!=HeaderCRC)
-  {
-#ifndef GUI
-    Log(FileName,St(MLogCommHead));
-#endif
-    return;
-  }
-  if (CommHead.UnpVer < 15 || CommHead.UnpVer > UNP_VER ||
-      CommHead.Method > 0x30 || CommHead.UnpSize > MaxSize)
-    return;
-  Read(&CmtBuf[0],CommHead.UnpSize);
-  if 
(CommHead.CommCRC!=((~CRC(0xffffffff,&CmtBuf[0],CommHead.UnpSize)&0xffff)))
-  {
-    Log(FileName,St(MLogBrokFCmt));
-  }
-  else
-  {
-    OutComment(&CmtBuf[0],CommHead.UnpSize);
-#ifndef GUI
-    mprintf("\n");
-#endif
-  }
-}
-#endif
diff --git a/src/bin/unrar/archive.cpp b/src/bin/unrar/archive.cpp
deleted file mode 100644
index 3460f99..0000000
--- a/src/bin/unrar/archive.cpp
+++ /dev/null
@@ -1,267 +0,0 @@
-#include "rar.hpp"
-
-#ifndef SHELL_EXT
-#include "arccmt.cpp"
-#endif
-
-
-Archive::Archive(RAROptions *InitCmd)
-{
-  Cmd=InitCmd==NULL ? &DummyCmd:InitCmd;
-  OpenShared=Cmd->OpenShared;
-  OldFormat=false;
-  Solid=false;
-  Volume=false;
-  MainComment=false;
-  Locked=false;
-  Signed=false;
-  NotFirstVolume=false;
-  SFXSize=0;
-  LatestTime.Reset();
-  Protected=false;
-  Encrypted=false;
-  BrokenFileHeader=false;
-  LastReadBlock=0;
-
-  CurBlockPos=0;
-  NextBlockPos=0;
-
-  RecoveryPos=SIZEOF_MARKHEAD;
-  RecoverySectors=-1;
-
-  memset(&NewMhd,0,sizeof(NewMhd));
-  NewMhd.HeadType=MAIN_HEAD;
-  NewMhd.HeadSize=SIZEOF_NEWMHD;
-  HeaderCRC=0;
-  VolWrite=0;
-  AddingFilesSize=0;
-  AddingHeadersSize=0;
-#if !defined(SHELL_EXT) && !defined(NOCRYPT)
-  *HeadersSalt=0;
-  *SubDataSalt=0;
-#endif
-  *FirstVolumeName=0;
-  *FirstVolumeNameW=0;
-
-  Splitting=false;
-  NewArchive=false;
-
-  SilentOpen=false;
-
-}
-
-
-#ifndef SHELL_EXT
-void Archive::CheckArc(bool EnableBroken)
-{
-  if (!IsArchive(EnableBroken))
-  {
-    Log(FileName,St(MBadArc),FileName);
-    ErrHandler.Exit(FATAL_ERROR);
-  }
-}
-#endif
-
-
-#if !defined(SHELL_EXT) && !defined(SFX_MODULE)
-void Archive::CheckOpen(char *Name,wchar *NameW)
-{
-  TOpen(Name,NameW);
-  CheckArc(false);
-}
-#endif
-
-
-bool Archive::WCheckOpen(char *Name,wchar *NameW)
-{
-  if (!WOpen(Name,NameW))
-    return(false);
-  if (!IsArchive(false))
-  {
-#ifndef SHELL_EXT
-    Log(FileName,St(MNotRAR),FileName);
-#endif
-    Close();
-    return(false);
-  }
-  return(true);
-}
-
-
-bool Archive::IsSignature(byte *D)
-{
-  bool Valid=false;
-  if (D[0]==0x52)
-#ifndef SFX_MODULE
-    if (D[1]==0x45 && D[2]==0x7e && D[3]==0x5e)
-    {
-      OldFormat=true;
-      Valid=true;
-    }
-    else
-#endif
-      if (D[1]==0x61 && D[2]==0x72 && D[3]==0x21 && D[4]==0x1a && D[5]==0x07 
&& D[6]==0x00)
-      {
-        OldFormat=false;
-        Valid=true;
-      }
-  return(Valid);
-}
-
-
-bool Archive::IsArchive(bool EnableBroken)
-{
-  Encrypted=false;
-#ifndef SFX_MODULE
-  if (IsDevice())
-  {
-#ifndef SHELL_EXT
-    Log(FileName,St(MInvalidName),FileName);
-#endif
-    return(false);
-  }
-#endif
-  if (Read(MarkHead.Mark,SIZEOF_MARKHEAD)!=SIZEOF_MARKHEAD)
-    return(false);
-  SFXSize=0;
-  if (IsSignature(MarkHead.Mark))
-  {
-    if (OldFormat)
-      Seek(0,SEEK_SET);
-  }
-  else
-  {
-    Array<char> Buffer(MAXSFXSIZE);
-    long CurPos=int64to32(Tell());
-    int ReadSize=Read(&Buffer[0],Buffer.Size()-16);
-    for (int I=0;I<ReadSize;I++)
-      if (Buffer[I]==0x52 && IsSignature((byte *)&Buffer[I]))
-      {
-        if (OldFormat && I>0 && CurPos<28 && ReadSize>31)
-        {
-          char *D=&Buffer[28-CurPos];
-          if (D[0]!=0x52 || D[1]!=0x53 || D[2]!=0x46 || D[3]!=0x58)
-            continue;
-        }
-        SFXSize=CurPos+I;
-        Seek(SFXSize,SEEK_SET);
-        if (!OldFormat)
-          Read(MarkHead.Mark,SIZEOF_MARKHEAD);
-        break;
-      }
-    if (SFXSize==0)
-      return(false);
-  }
-  ReadHeader();
-  SeekToNext();
-#ifndef SFX_MODULE
-  if (OldFormat)
-  {
-    NewMhd.Flags=OldMhd.Flags & 0x3f;
-    NewMhd.HeadSize=OldMhd.HeadSize;
-  }
-  else
-#endif
-  {
-    if (HeaderCRC!=NewMhd.HeadCRC)
-    {
-#ifndef SHELL_EXT
-      Log(FileName,St(MLogMainHead));
-#endif
-      Alarm();
-      if (!EnableBroken)
-        return(false);
-    }
-  }
-  Volume=(NewMhd.Flags & MHD_VOLUME);
-  Solid=(NewMhd.Flags & MHD_SOLID)!=0;
-  MainComment=(NewMhd.Flags & MHD_COMMENT)!=0;
-  Locked=(NewMhd.Flags & MHD_LOCK)!=0;
-  Signed=(NewMhd.PosAV!=0);
-  Protected=(NewMhd.Flags & MHD_PROTECT)!=0;
-  Encrypted=(NewMhd.Flags & MHD_PASSWORD)!=0;
-
-  if (NewMhd.EncryptVer>UNP_VER)
-  {
-#ifdef RARDLL
-    Cmd->DllError=ERAR_UNKNOWN_FORMAT;
-#else
-    ErrHandler.SetErrorCode(WARNING);
-  #if !defined(SILENT) && !defined(SFX_MODULE)
-      Log(FileName,St(MUnknownMeth),FileName);
-      Log(FileName,St(MVerRequired),NewMhd.EncryptVer/10,NewMhd.EncryptVer%10);
-  #endif
-#endif
-    return(false);
-  }
-#ifdef RARDLL
-  SilentOpen=true;
-#endif
-
-  //if not encrypted, we'll check it below
-  NotFirstVolume=Encrypted && (NewMhd.Flags & MHD_FIRSTVOLUME)==0;
-
-  if (!SilentOpen || !Encrypted)
-  {
-    SaveFilePos SavePos(*this);
-    Int64 SaveCurBlockPos=CurBlockPos,SaveNextBlockPos=NextBlockPos;
-
-    NotFirstVolume=false;
-    while (ReadHeader())
-    {
-      int HeaderType=GetHeaderType();
-      if (HeaderType==NEWSUB_HEAD)
-      {
-        if (SubHead.CmpName(SUBHEAD_TYPE_CMT))
-          MainComment=true;
-        if ((SubHead.Flags & LHD_SPLIT_BEFORE) ||
-            Volume && (NewMhd.Flags & MHD_FIRSTVOLUME)==0)
-          NotFirstVolume=true;
-      }
-      else
-      {
-        if (HeaderType==FILE_HEAD && ((NewLhd.Flags & LHD_SPLIT_BEFORE)!=0 ||
-            Volume && NewLhd.UnpVer>=29 && (NewMhd.Flags & 
MHD_FIRSTVOLUME)==0))
-          NotFirstVolume=true;
-        break;
-      }
-      SeekToNext();
-    }
-    CurBlockPos=SaveCurBlockPos;
-    NextBlockPos=SaveNextBlockPos;
-  }
-  if (!Volume || !NotFirstVolume)
-  {
-    strcpy(FirstVolumeName,FileName);
-    strcpyw(FirstVolumeNameW,FileNameW);
-  }
-
-  return(true);
-}
-
-
-
-
-void Archive::SeekToNext()
-{
-  Seek(NextBlockPos,SEEK_SET);
-}
-
-
-#ifndef SFX_MODULE
-int Archive::GetRecoverySize(bool Required)
-{
-  if (!Protected)
-    return(0);
-  if (RecoverySectors!=-1 || !Required)
-    return(RecoverySectors);
-  SaveFilePos SavePos(*this);
-  Seek(SFXSize,SEEK_SET);
-  SearchSubBlock(SUBHEAD_TYPE_RR);
-  return(RecoverySectors);
-}
-#endif
-
-
-
-
diff --git a/src/bin/unrar/archive.hpp b/src/bin/unrar/archive.hpp
deleted file mode 100644
index 1e0675e..0000000
--- a/src/bin/unrar/archive.hpp
+++ /dev/null
@@ -1,126 +0,0 @@
-#ifndef _RAR_ARCHIVE_
-#define _RAR_ARCHIVE_
-
-class Pack;
-
-enum {EN_LOCK=1,EN_VOL=2,EN_FIRSTVOL=4};
-
-class Archive:public File
-{
-  private:
-    bool IsSignature(byte *D);
-    void UpdateLatestTime(FileHeader *CurBlock);
-    void ConvertNameCase(char *Name);
-    void ConvertNameCase(wchar *Name);
-    void ConvertUnknownHeader();
-    int ReadOldHeader();
-    void PrepareExtraTime(FileHeader *hd,EXTTIME_MODE etm,EXTTIME_MODE 
etc,EXTTIME_MODE eta,EXTTIME_MODE etarc,Array<byte> &TimeData);
-
-#if !defined(SHELL_EXT) && !defined(NOCRYPT)
-    CryptData HeadersCrypt;
-    byte HeadersSalt[SALT_SIZE];
-#endif
-#ifndef SHELL_EXT
-    ComprDataIO SubDataIO;
-    byte SubDataSalt[SALT_SIZE];
-#endif
-    RAROptions *Cmd,DummyCmd;
-
-    MarkHeader MarkHead;
-    OldMainHeader OldMhd;
-
-    int RecoverySectors;
-    Int64 RecoveryPos;
-
-    RarTime LatestTime;
-    int LastReadBlock;
-    int CurHeaderType;
-
-    bool SilentOpen;
-  public:
-    Archive(RAROptions *InitCmd=NULL);
-    bool IsArchive(bool EnableBroken);
-    int SearchBlock(int BlockType);
-    int SearchSubBlock(const char *Type);
-    int ReadBlock(int BlockType);
-    void WriteBlock(int BlockType,BaseBlock *wb=NULL);
-    int PrepareNamesToWrite(char *Name,wchar *NameW,char *DestName,byte 
*DestNameW);
-    void SetLhdSize();
-    int ReadHeader();
-    void CheckArc(bool EnableBroken);
-    void CheckOpen(char *Name,wchar *NameW=NULL);
-    bool WCheckOpen(char *Name,wchar *NameW=NULL);
-    bool TestLock(int Mode);
-    void MakeTemp();
-    void CopyMainHeader(Archive &Src,bool CopySFX=true,char 
*NameToDisplay=NULL);
-    bool ProcessToFileHead(Archive &Src,bool LastBlockAdded,
-      Pack *Pack=NULL,const char *SkipName=NULL);
-    void TmpToArc(Archive &Src);
-    void CloseNew(int AdjustRecovery,bool CloseVolume);
-    void WriteEndBlock(bool CloseVolume);
-    void CopyFileRecord(Archive &Src);
-    void CopyArchiveData(Archive &Src);
-    bool GetComment(Array<byte> *CmtData,Array<wchar> *CmtDataW);
-    void ViewComment();
-    void ViewFileComment();
-    void SetLatestTime(RarTime *NewTime);
-    void SeekToNext();
-    bool CheckAccess();
-    bool IsArcDir();
-    bool IsArcLabel();
-    void ConvertAttributes();
-    int GetRecoverySize(bool Required);
-    void VolSubtractHeaderSize(int SubSize);
-    void AddSubData(byte *SrcData,int DataSize,File *SrcFile,char *Name,bool 
AllowSplit);
-    bool ReadSubData(Array<byte> *UnpData,File *DestFile);
-    int GetHeaderType() {return(CurHeaderType);};
-    int ReadCommentData(Array<byte> *CmtData,Array<wchar> *CmtDataW);
-    void WriteCommentData(byte *Data,int DataSize,bool FileComment);
-    RAROptions* GetRAROptions() {return(Cmd);}
-    void SetSilentOpen(bool Mode) {SilentOpen=Mode;}
-
-    BaseBlock ShortBlock;
-    MainHeader NewMhd;
-    FileHeader NewLhd;
-    EndArcHeader EndArcHead;
-    SubBlockHeader SubBlockHead;
-    FileHeader SubHead;
-    CommentHeader CommHead;
-    ProtectHeader ProtectHead;
-    AVHeader AVHead;
-    SignHeader SignHead;
-    UnixOwnersHeader UOHead;
-    MacFInfoHeader MACHead;
-    EAHeader EAHead;
-    StreamHeader StreamHead;
-
-    Int64 CurBlockPos;
-    Int64 NextBlockPos;
-
-    bool OldFormat;
-    bool Solid;
-    bool Volume;
-    bool MainComment;
-    bool Locked;
-    bool Signed;
-    bool NotFirstVolume;
-    bool Protected;
-    bool Encrypted;
-    uint SFXSize;
-    bool BrokenFileHeader;
-
-    bool Splitting;
-
-    ushort HeaderCRC;
-
-    Int64 VolWrite;
-    Int64 AddingFilesSize;
-    uint AddingHeadersSize;
-
-    bool NewArchive;
-
-    char FirstVolumeName[NM];
-    wchar FirstVolumeNameW[NM];
-};
-
-#endif
diff --git a/src/bin/unrar/arcread.cpp b/src/bin/unrar/arcread.cpp
deleted file mode 100644
index 43a23db..0000000
--- a/src/bin/unrar/arcread.cpp
+++ /dev/null
@@ -1,653 +0,0 @@
-#include "rar.hpp"
-
-int Archive::SearchBlock(int BlockType)
-{
-  int Size,Count=0;
-  while ((Size=ReadHeader())!=0 &&
-         (BlockType==ENDARC_HEAD || GetHeaderType()!=ENDARC_HEAD))
-  {
-    if ((++Count & 127)==0)
-      Wait();
-    if (GetHeaderType()==BlockType)
-      return(Size);
-    SeekToNext();
-  }
-  return(0);
-}
-
-
-int Archive::SearchSubBlock(const char *Type)
-{
-  int Size;
-  while ((Size=ReadHeader())!=0 && GetHeaderType()!=ENDARC_HEAD)
-  {
-    if (GetHeaderType()==NEWSUB_HEAD && SubHead.CmpName(Type))
-      return(Size);
-    SeekToNext();
-  }
-  return(0);
-}
-
-
-int Archive::ReadHeader()
-{
-  CurBlockPos=Tell();
-
-#ifndef SFX_MODULE
-  if (OldFormat)
-    return(ReadOldHeader());
-#endif
-
-  RawRead Raw(this);
-
-  bool Decrypt=Encrypted && CurBlockPos>=SFXSize+SIZEOF_MARKHEAD+SIZEOF_NEWMHD;
-
-  if (Decrypt)
-  {
-#if defined(SHELL_EXT) || defined(NOCRYPT)
-    return(0);
-#else
-    if (Read(HeadersSalt,SALT_SIZE)!=SALT_SIZE)
-      return(0);
-    if (*Cmd->Password==0)
-#ifdef RARDLL
-      if (Cmd->Callback==NULL ||
-          
Cmd->Callback(UCM_NEEDPASSWORD,Cmd->UserData,(LONG)Cmd->Password,sizeof(Cmd->Password))==-1)
-      {
-        Close();
-        ErrHandler.Exit(USER_BREAK);
-      }
-
-#else
-      if 
(!GetPassword(PASSWORD_ARCHIVE,FileName,Cmd->Password,sizeof(Cmd->Password)))
-      {
-        Close();
-        ErrHandler.Exit(USER_BREAK);
-      }
-#endif
-    
HeadersCrypt.SetCryptKeys(Cmd->Password,HeadersSalt,false,false,NewMhd.EncryptVer>=36);
-    Raw.SetCrypt(&HeadersCrypt);
-#endif
-  }
-
-  Raw.Read(SIZEOF_SHORTBLOCKHEAD);
-  if (Raw.Size()==0)
-  {
-    Int64 ArcSize=FileLength();
-    if (CurBlockPos>ArcSize || NextBlockPos>ArcSize)
-    {
-  #ifndef SHELL_EXT
-      Log(FileName,St(MLogUnexpEOF));
-  #endif
-      ErrHandler.SetErrorCode(WARNING);
-    }
-    return(0);
-  }
-
-  Raw.Get(ShortBlock.HeadCRC);
-  byte HeadType;
-  Raw.Get(HeadType);
-  ShortBlock.HeadType=(HEADER_TYPE)HeadType;
-  Raw.Get(ShortBlock.Flags);
-  Raw.Get(ShortBlock.HeadSize);
-  if (ShortBlock.HeadSize<SIZEOF_SHORTBLOCKHEAD)
-  {
-#ifndef SHELL_EXT
-    Log(FileName,St(MLogFileHead),"???");
-#endif
-    BrokenFileHeader=true;
-    ErrHandler.SetErrorCode(CRC_ERROR);
-    return(0);
-  }
-
-  if (ShortBlock.HeadType==COMM_HEAD)
-    Raw.Read(SIZEOF_COMMHEAD-SIZEOF_SHORTBLOCKHEAD);
-  else
-    if (ShortBlock.HeadType==MAIN_HEAD && (ShortBlock.Flags & MHD_COMMENT)!=0)
-      Raw.Read(SIZEOF_NEWMHD-SIZEOF_SHORTBLOCKHEAD);
-    else
-      Raw.Read(ShortBlock.HeadSize-SIZEOF_SHORTBLOCKHEAD);
-
-  NextBlockPos=CurBlockPos+ShortBlock.HeadSize;
-
-  switch(ShortBlock.HeadType)
-  {
-    case MAIN_HEAD:
-      *(BaseBlock *)&NewMhd=ShortBlock;
-      Raw.Get(NewMhd.HighPosAV);
-      Raw.Get(NewMhd.PosAV);
-      if (NewMhd.Flags & MHD_ENCRYPTVER)
-        Raw.Get(NewMhd.EncryptVer);
-      break;
-    case ENDARC_HEAD:
-      *(BaseBlock *)&EndArcHead=ShortBlock;
-      if (EndArcHead.Flags & EARC_DATACRC)
-        Raw.Get(EndArcHead.ArcDataCRC);
-      if (EndArcHead.Flags & EARC_VOLNUMBER)
-        Raw.Get(EndArcHead.VolNumber);
-      break;
-    case FILE_HEAD:
-    case NEWSUB_HEAD:
-      {
-        FileHeader *hd=ShortBlock.HeadType==FILE_HEAD ? &NewLhd:&SubHead;
-        *(BaseBlock *)hd=ShortBlock;
-        Raw.Get(hd->PackSize);
-        Raw.Get(hd->UnpSize);
-        Raw.Get(hd->HostOS);
-        Raw.Get(hd->FileCRC);
-        Raw.Get(hd->FileTime);
-        Raw.Get(hd->UnpVer);
-        Raw.Get(hd->Method);
-        Raw.Get(hd->NameSize);
-        Raw.Get(hd->FileAttr);
-        if (hd->Flags & LHD_LARGE)
-        {
-          Raw.Get(hd->HighPackSize);
-          Raw.Get(hd->HighUnpSize);
-        }
-        else 
-        {
-          hd->HighPackSize=hd->HighUnpSize=0;
-          if (hd->UnpSize==0xffffffff)
-          {
-            hd->UnpSize=int64to32(INT64MAX);
-            hd->HighUnpSize=int64to32(INT64MAX>>32);
-          }
-        }
-        hd->FullPackSize=int32to64(hd->HighPackSize,hd->PackSize);
-        hd->FullUnpSize=int32to64(hd->HighUnpSize,hd->UnpSize);
-
-        char FileName[NM*4];
-        int NameSize=Min(hd->NameSize,sizeof(FileName)-1);
-        Raw.Get((byte *)FileName,NameSize);
-        FileName[NameSize]=0;
-
-        strncpyz(hd->FileName,FileName,ASIZE(hd->FileName));
-
-        if (hd->HeadType==NEWSUB_HEAD)
-        {
-          int DataSize=hd->HeadSize-hd->NameSize-SIZEOF_NEWLHD;
-          if (hd->Flags & LHD_SALT)
-            DataSize-=SALT_SIZE;
-          if (DataSize>0)
-          {
-            hd->SubData.Alloc(DataSize);
-            Raw.Get(&hd->SubData[0],DataSize);
-            if (hd->CmpName(SUBHEAD_TYPE_RR))
-            {
-              byte *D=&hd->SubData[8];
-              
RecoverySectors=D[0]+((uint)D[1]<<8)+((uint)D[2]<<16)+((uint)D[3]<<24);
-            }
-          }
-        }
-        else
-          if (hd->HeadType==FILE_HEAD)
-          {
-            if (hd->Flags & LHD_UNICODE)
-            {
-              EncodeFileName NameCoder;
-              int Length=strlen(FileName);
-              if (Length==hd->NameSize)
-              {
-                
UtfToWide(FileName,hd->FileNameW,sizeof(hd->FileNameW)/sizeof(hd->FileNameW[0])-1);
-                
WideToChar(hd->FileNameW,hd->FileName,sizeof(hd->FileName)/sizeof(hd->FileName[0])-1);
-                ExtToInt(hd->FileName,hd->FileName);
-              }
-              else
-              {
-                Length++;
-                NameCoder.Decode(FileName,(byte *)FileName+Length,
-                                 hd->NameSize-Length,hd->FileNameW,
-                                 
sizeof(hd->FileNameW)/sizeof(hd->FileNameW[0]));
-              }
-              if (*hd->FileNameW==0)
-                hd->Flags &= ~LHD_UNICODE;
-            }
-            else
-              *hd->FileNameW=0;
-#ifndef SFX_MODULE
-            ConvertNameCase(hd->FileName);
-            ConvertNameCase(hd->FileNameW);
-#endif
-            ConvertUnknownHeader();
-          }
-        if (hd->Flags & LHD_SALT)
-          Raw.Get(hd->Salt,SALT_SIZE);
-        hd->mtime.SetDos(hd->FileTime);
-        hd->ctime.Reset();
-        hd->atime.Reset();
-        hd->arctime.Reset();
-        if (hd->Flags & LHD_EXTTIME)
-        {
-          ushort Flags;
-          Raw.Get(Flags);
-          RarTime *tbl[4];
-          tbl[0]=&NewLhd.mtime;
-          tbl[1]=&NewLhd.ctime;
-          tbl[2]=&NewLhd.atime;
-          tbl[3]=&NewLhd.arctime;
-          for (int I=0;I<4;I++)
-          {
-            RarTime *CurTime=tbl[I];
-            uint rmode=Flags>>(3-I)*4;
-            if ((rmode & 8)==0)
-              continue;
-            if (I!=0)
-            {
-              uint DosTime;
-              Raw.Get(DosTime);
-              CurTime->SetDos(DosTime);
-            }
-            RarLocalTime rlt;
-            CurTime->GetLocal(&rlt);
-            if (rmode & 4)
-              rlt.Second++;
-            rlt.Reminder=0;
-            int count=rmode&3;
-            for (int J=0;J<count;J++)
-            {
-              byte CurByte;
-              Raw.Get(CurByte);
-              rlt.Reminder|=(((uint)CurByte)<<((J+3-count)*8));
-            }
-            CurTime->SetLocal(&rlt);
-          }
-        }
-        NextBlockPos+=hd->FullPackSize;
-        bool CRCProcessedOnly=(hd->Flags & LHD_COMMENT)!=0;
-        HeaderCRC=~Raw.GetCRC(CRCProcessedOnly)&0xffff;
-        if (hd->HeadCRC!=HeaderCRC)
-        {
-          if (hd->HeadType==NEWSUB_HEAD)
-            strcat(hd->FileName,"- ???");
-          BrokenFileHeader=true;
-          ErrHandler.SetErrorCode(WARNING);
-#ifndef SHELL_EXT
-          Log(Archive::FileName,St(MLogFileHead),IntNameToExt(hd->FileName));
-          Alarm();
-#endif
-        }
-      }
-      break;
-#ifndef SFX_MODULE
-    case COMM_HEAD:
-      *(BaseBlock *)&CommHead=ShortBlock;
-      Raw.Get(CommHead.UnpSize);
-      Raw.Get(CommHead.UnpVer);
-      Raw.Get(CommHead.Method);
-      Raw.Get(CommHead.CommCRC);
-      break;
-    case SIGN_HEAD:
-      *(BaseBlock *)&SignHead=ShortBlock;
-      Raw.Get(SignHead.CreationTime);
-      Raw.Get(SignHead.ArcNameSize);
-      Raw.Get(SignHead.UserNameSize);
-      break;
-    case AV_HEAD:
-      *(BaseBlock *)&AVHead=ShortBlock;
-      Raw.Get(AVHead.UnpVer);
-      Raw.Get(AVHead.Method);
-      Raw.Get(AVHead.AVVer);
-      Raw.Get(AVHead.AVInfoCRC);
-      break;
-    case PROTECT_HEAD:
-      *(BaseBlock *)&ProtectHead=ShortBlock;
-      Raw.Get(ProtectHead.DataSize);
-      Raw.Get(ProtectHead.Version);
-      Raw.Get(ProtectHead.RecSectors);
-      Raw.Get(ProtectHead.TotalBlocks);
-      Raw.Get(ProtectHead.Mark,8);
-      NextBlockPos+=ProtectHead.DataSize;
-      RecoverySectors=ProtectHead.RecSectors;
-      break;
-    case SUB_HEAD:
-      *(BaseBlock *)&SubBlockHead=ShortBlock;
-      Raw.Get(SubBlockHead.DataSize);
-      NextBlockPos+=SubBlockHead.DataSize;
-      Raw.Get(SubBlockHead.SubType);
-      Raw.Get(SubBlockHead.Level);
-      switch(SubBlockHead.SubType)
-      {
-        case UO_HEAD:
-          *(SubBlockHeader *)&UOHead=SubBlockHead;
-          Raw.Get(UOHead.OwnerNameSize);
-          Raw.Get(UOHead.GroupNameSize);
-          if (UOHead.OwnerNameSize>NM-1)
-            UOHead.OwnerNameSize=NM-1;
-          if (UOHead.GroupNameSize>NM-1)
-            UOHead.GroupNameSize=NM-1;
-          Raw.Get((byte *)UOHead.OwnerName,UOHead.OwnerNameSize);
-          Raw.Get((byte *)UOHead.GroupName,UOHead.GroupNameSize);
-          UOHead.OwnerName[UOHead.OwnerNameSize]=0;
-          UOHead.GroupName[UOHead.GroupNameSize]=0;
-          break;
-        case MAC_HEAD:
-          *(SubBlockHeader *)&MACHead=SubBlockHead;
-          Raw.Get(MACHead.fileType);
-          Raw.Get(MACHead.fileCreator);
-          break;
-        case EA_HEAD:
-        case BEEA_HEAD:
-        case NTACL_HEAD:
-          *(SubBlockHeader *)&EAHead=SubBlockHead;
-          Raw.Get(EAHead.UnpSize);
-          Raw.Get(EAHead.UnpVer);
-          Raw.Get(EAHead.Method);
-          Raw.Get(EAHead.EACRC);
-          break;
-        case STREAM_HEAD:
-          *(SubBlockHeader *)&StreamHead=SubBlockHead;
-          Raw.Get(StreamHead.UnpSize);
-          Raw.Get(StreamHead.UnpVer);
-          Raw.Get(StreamHead.Method);
-          Raw.Get(StreamHead.StreamCRC);
-          Raw.Get(StreamHead.StreamNameSize);
-          if (StreamHead.StreamNameSize>NM-1)
-            StreamHead.StreamNameSize=NM-1;
-          Raw.Get((byte *)StreamHead.StreamName,StreamHead.StreamNameSize);
-          StreamHead.StreamName[StreamHead.StreamNameSize]=0;
-          break;
-      }
-      break;
-#endif
-    default:
-      if (ShortBlock.Flags & LONG_BLOCK)
-      {
-        uint DataSize;
-        Raw.Get(DataSize);
-        NextBlockPos+=DataSize;
-      }
-      break;
-  }
-  HeaderCRC=~Raw.GetCRC(false)&0xffff;
-  CurHeaderType=ShortBlock.HeadType;
-  if (Decrypt)
-  {
-    NextBlockPos+=Raw.PaddedSize()+SALT_SIZE;
-
-    if (ShortBlock.HeadCRC!=HeaderCRC)
-    {
-      bool Recovered=false;
-      if (ShortBlock.HeadType==ENDARC_HEAD && (EndArcHead.Flags & 
EARC_REVSPACE)!=0)
-      {
-        SaveFilePos SavePos(*this);
-        Int64 Length=Tell();
-        Seek(Length-7,SEEK_SET);
-        Recovered=true;
-        for (int J=0;J<7;J++)
-          if (GetByte()!=0)
-            Recovered=false;
-      }
-      if (!Recovered)
-      {
-#ifndef SILENT
-        Log(FileName,St(MEncrBadCRC),FileName);
-#endif
-        Close();
-
-        BrokenFileHeader=true;
-        ErrHandler.SetErrorCode(CRC_ERROR);
-        return(0);
-//        ErrHandler.Exit(CRC_ERROR);
-      }
-    }
-  }
-
-  if (NextBlockPos<=CurBlockPos)
-  {
-#ifndef SHELL_EXT
-    Log(FileName,St(MLogFileHead),"???");
-#endif
-    BrokenFileHeader=true;
-    ErrHandler.SetErrorCode(CRC_ERROR);
-    return(0);
-  }
-  return(Raw.Size());
-}
-
-
-#ifndef SFX_MODULE
-int Archive::ReadOldHeader()
-{
-  RawRead Raw(this);
-  if (CurBlockPos<=SFXSize)
-  {
-    Raw.Read(SIZEOF_OLDMHD);
-    Raw.Get(OldMhd.Mark,4);
-    Raw.Get(OldMhd.HeadSize);
-    Raw.Get(OldMhd.Flags);
-    NextBlockPos=CurBlockPos+OldMhd.HeadSize;
-    CurHeaderType=MAIN_HEAD;
-  }
-  else
-  {
-    OldFileHeader OldLhd;
-    Raw.Read(SIZEOF_OLDLHD);
-    NewLhd.HeadType=FILE_HEAD;
-    Raw.Get(NewLhd.PackSize);
-    Raw.Get(NewLhd.UnpSize);
-    Raw.Get(OldLhd.FileCRC);
-    Raw.Get(NewLhd.HeadSize);
-    Raw.Get(NewLhd.FileTime);
-    Raw.Get(OldLhd.FileAttr);
-    Raw.Get(OldLhd.Flags);
-    Raw.Get(OldLhd.UnpVer);
-    Raw.Get(OldLhd.NameSize);
-    Raw.Get(OldLhd.Method);
-
-    NewLhd.Flags=OldLhd.Flags|LONG_BLOCK;
-    NewLhd.UnpVer=(OldLhd.UnpVer==2) ? 13 : 10;
-    NewLhd.Method=OldLhd.Method+0x30;
-    NewLhd.NameSize=OldLhd.NameSize;
-    NewLhd.FileAttr=OldLhd.FileAttr;
-    NewLhd.FileCRC=OldLhd.FileCRC;
-    NewLhd.FullPackSize=NewLhd.PackSize;
-    NewLhd.FullUnpSize=NewLhd.UnpSize;
-
-    NewLhd.mtime.SetDos(NewLhd.FileTime);
-    NewLhd.ctime.Reset();
-    NewLhd.atime.Reset();
-    NewLhd.arctime.Reset();
-
-    Raw.Read(OldLhd.NameSize);
-    Raw.Get((byte *)NewLhd.FileName,OldLhd.NameSize);
-    NewLhd.FileName[OldLhd.NameSize]=0;
-    ConvertNameCase(NewLhd.FileName);
-    *NewLhd.FileNameW=0;
-
-    if (Raw.Size()!=0)
-      NextBlockPos=CurBlockPos+NewLhd.HeadSize+NewLhd.PackSize;
-    CurHeaderType=FILE_HEAD;
-  }
-  return(NextBlockPos>CurBlockPos ? Raw.Size():0);
-}
-#endif
-
-
-void Archive::ConvertNameCase(char *Name)
-{
-  if (Cmd->ConvertNames==NAMES_UPPERCASE)
-  {
-    IntToExt(Name,Name);
-    strupper(Name);
-    ExtToInt(Name,Name);
-  }
-  if (Cmd->ConvertNames==NAMES_LOWERCASE)
-  {
-    IntToExt(Name,Name);
-    strlower(Name);
-    ExtToInt(Name,Name);
-  }
-}
-
-
-#ifndef SFX_MODULE
-void Archive::ConvertNameCase(wchar *Name)
-{
-  if (Cmd->ConvertNames==NAMES_UPPERCASE)
-    strupperw(Name);
-  if (Cmd->ConvertNames==NAMES_LOWERCASE)
-    strlowerw(Name);
-}
-#endif
-
-
-bool Archive::IsArcDir()
-{
-  return((NewLhd.Flags & LHD_WINDOWMASK)==LHD_DIRECTORY);
-}
-
-
-bool Archive::IsArcLabel()
-{
-  return(NewLhd.HostOS<=HOST_WIN32 && (NewLhd.FileAttr & 8));
-}
-
-
-void Archive::ConvertAttributes()
-{
-#if defined(_WIN_32) || defined(_EMX)
-  switch(NewLhd.HostOS)
-  {
-    case HOST_MSDOS:
-    case HOST_OS2:
-    case HOST_WIN32:
-      break;
-    case HOST_UNIX:
-    case HOST_BEOS:
-      if ((NewLhd.Flags & LHD_WINDOWMASK)==LHD_DIRECTORY)
-        NewLhd.FileAttr=0x10;
-      else
-        NewLhd.FileAttr=0x20;
-      break;
-    default:
-      if ((NewLhd.Flags & LHD_WINDOWMASK)==LHD_DIRECTORY)
-        NewLhd.FileAttr=0x10;
-      else
-        NewLhd.FileAttr=0x20;
-      break;
-  }
-#endif
-#ifdef _UNIX
-  static mode_t mask = (mode_t) -1;
-
-  if (mask == (mode_t) -1)
-  {
-    mask = umask(022);
-    umask(mask);
-  }
-  switch(NewLhd.HostOS)
-  {
-    case HOST_MSDOS:
-    case HOST_OS2:
-    case HOST_WIN32:
-      if (NewLhd.FileAttr & 0x10)
-        NewLhd.FileAttr=0x41ff & ~mask;
-      else
-        if (NewLhd.FileAttr & 1)
-          NewLhd.FileAttr=0x8124 & ~mask;
-        else
-          NewLhd.FileAttr=0x81b6 & ~mask;
-      break;
-    case HOST_UNIX:
-    case HOST_BEOS:
-      break;
-    default:
-      if ((NewLhd.Flags & LHD_WINDOWMASK)==LHD_DIRECTORY)
-        NewLhd.FileAttr=0x41ff & ~mask;
-      else
-        NewLhd.FileAttr=0x81b6 & ~mask;
-      break;
-  }
-#endif
-}
-
-
-void Archive::ConvertUnknownHeader()
-{
-  if (NewLhd.UnpVer<20 && (NewLhd.FileAttr & 0x10))
-    NewLhd.Flags|=LHD_DIRECTORY;
-  if (NewLhd.HostOS>=HOST_MAX)
-  {
-    if ((NewLhd.Flags & LHD_WINDOWMASK)==LHD_DIRECTORY)
-      NewLhd.FileAttr=0x10;
-    else
-      NewLhd.FileAttr=0x20;
-  }
-  for (char *s=NewLhd.FileName;*s!=0;s=charnext(s))
-  {
-    if (*s=='/' || *s=='\\')
-      *s=CPATHDIVIDER;
-#if defined(_APPLE) && !defined(UNICODE_SUPPORTED)
-    if ((byte)*s<32 || (byte)*s>127)
-      *s='_';
-#endif
-  }
-  for (wchar *s=NewLhd.FileNameW;*s!=0;s++)
-    if (*s=='/' || *s=='\\')
-      *s=CPATHDIVIDER;
-}
-
-
-#ifndef SHELL_EXT
-bool Archive::ReadSubData(Array<byte> *UnpData,File *DestFile)
-{
-  if (HeaderCRC!=SubHead.HeadCRC)
-  {
-#ifndef SHELL_EXT
-    Log(FileName,St(MSubHeadCorrupt));
-#endif
-    ErrHandler.SetErrorCode(CRC_ERROR);
-    return(false);
-  }
-  if (SubHead.Method<0x30 || SubHead.Method>0x35 || 
SubHead.UnpVer>/*PACK_VER*/36)
-  {
-#ifndef SHELL_EXT
-    Log(FileName,St(MSubHeadUnknown));
-#endif
-    return(false);
-  }
-
-  if (SubHead.PackSize==0 && (SubHead.Flags & LHD_SPLIT_AFTER)==0)
-    return(true);
-
-  SubDataIO.Init();
-  Unpack Unpack(&SubDataIO);
-  Unpack.Init();
-
-  if (DestFile==NULL)
-  {
-    UnpData->Alloc(SubHead.UnpSize);
-    SubDataIO.SetUnpackToMemory(&(*UnpData)[0],SubHead.UnpSize);
-  }
-  if (SubHead.Flags & LHD_PASSWORD)
-    if (*Cmd->Password)
-      SubDataIO.SetEncryption(SubHead.UnpVer,Cmd->Password,
-             (SubHead.Flags & LHD_SALT) ? SubHead.Salt:NULL,false,
-             SubHead.UnpVer>=36);
-    else
-      return(false);
-  SubDataIO.SetPackedSizeToRead(SubHead.PackSize);
-  SubDataIO.EnableShowProgress(false);
-  SubDataIO.SetFiles(this,DestFile);
-  SubDataIO.UnpVolume=(SubHead.Flags & LHD_SPLIT_AFTER);
-  SubDataIO.SetSubHeader(&SubHead,NULL);
-  Unpack.SetDestSize(SubHead.UnpSize);
-  if (SubHead.Method==0x30)
-    CmdExtract::UnstoreFile(SubDataIO,SubHead.UnpSize);
-  else
-    Unpack.DoUnpack(SubHead.UnpVer,false);
-
-  if (SubHead.FileCRC!=~SubDataIO.UnpFileCRC)
-  {
-#ifndef SHELL_EXT
-    Log(FileName,St(MSubHeadDataCRC),SubHead.FileName);
-#endif
-    ErrHandler.SetErrorCode(CRC_ERROR);
-    if (UnpData!=NULL)
-      UnpData->Reset();
-    return(false);
-  }
-  return(true);
-}
-#endif
diff --git a/src/bin/unrar/array.hpp b/src/bin/unrar/array.hpp
deleted file mode 100644
index 1130bfb..0000000
--- a/src/bin/unrar/array.hpp
+++ /dev/null
@@ -1,122 +0,0 @@
-#ifndef _RAR_ARRAY_
-#define _RAR_ARRAY_
-
-extern ErrorHandler ErrHandler;
-
-template <class T> class Array
-{
-  private:
-    T *Buffer;
-    int BufSize;
-    int AllocSize;
-  public:
-    Array();
-    Array(int Size);
-    ~Array();
-    inline void CleanData();
-    inline T& operator [](int Item);
-    inline int Size();
-    void Add(int Items);
-    void Alloc(int Items);
-    void Reset();
-    void operator = (Array<T> &Src);
-    void Push(T Item);
-    T* Addr() {return(Buffer);}
-};
-
-template <class T> void Array<T>::CleanData()
-{
-  Buffer=NULL;
-  BufSize=0;
-  AllocSize=0;
-}
-
-
-template <class T> Array<T>::Array()
-{
-  CleanData();
-}
-
-
-template <class T> Array<T>::Array(int Size)
-{
-  Buffer=(T *)rarmalloc(sizeof(T)*Size);
-  if (Buffer==NULL && Size!=0)
-    ErrHandler.MemoryError();
-
-  AllocSize=BufSize=Size;
-}
-
-
-template <class T> Array<T>::~Array()
-{
-  if (Buffer!=NULL)
-    rarfree(Buffer);
-}
-
-
-template <class T> inline T& Array<T>::operator [](int Item)
-{
-  return(Buffer[Item]);
-}
-
-
-template <class T> inline int Array<T>::Size()
-{
-  return(BufSize);
-}
-
-
-template <class T> void Array<T>::Add(int Items)
-{
-  BufSize+=Items;
-  if (BufSize>AllocSize)
-  {
-    int Suggested=AllocSize+AllocSize/4+32;
-    int NewSize=Max(BufSize,Suggested);
-
-    Buffer=(T *)rarrealloc(Buffer,NewSize*sizeof(T));
-    if (Buffer==NULL)
-      ErrHandler.MemoryError();
-    AllocSize=NewSize;
-  }
-}
-
-
-template <class T> void Array<T>::Alloc(int Items)
-{
-  if (Items>AllocSize)
-    Add(Items-BufSize);
-  else
-    BufSize=Items;
-}
-
-
-template <class T> void Array<T>::Reset()
-{
-  if (Buffer!=NULL)
-  {
-    rarfree(Buffer);
-    Buffer=NULL;
-  }
-  BufSize=0;
-  AllocSize=0;
-}
-
-
-template <class T> void Array<T>::operator =(Array<T> &Src)
-{
-  Reset();
-  Alloc(Src.BufSize);
-  if (Src.BufSize!=0)
-    memcpy((void *)Buffer,(void *)Src.Buffer,Src.BufSize*sizeof(T));
-}
-
-
-template <class T> void Array<T>::Push(T Item)
-{
-  Add(1);
-  (*this)[Size()-1]=Item;
-}
-
-#endif
diff --git a/src/bin/unrar/beosea.cpp b/src/bin/unrar/beosea.cpp
deleted file mode 100644
index 86eb7d4..0000000
--- a/src/bin/unrar/beosea.cpp
+++ /dev/null
@@ -1,113 +0,0 @@
-
-
-void ExtractBeEA(Archive &Arc,char *FileName)
-{
-  if (Arc.HeaderCRC!=Arc.EAHead.HeadCRC)
-  {
-    Log(Arc.FileName,St(MEABroken),FileName);
-    ErrHandler.SetErrorCode(CRC_ERROR);
-    return;
-  }
-  if (Arc.EAHead.Method<0x31 || Arc.EAHead.Method>0x35 || 
Arc.EAHead.UnpVer>PACK_VER)
-  {
-    Log(Arc.FileName,St(MEAUnknHeader),FileName);
-    return;
-  }
-
-  ComprDataIO DataIO;
-  Unpack Unpack(&DataIO);
-  Unpack.Init();
-
-  Array<byte> UnpData(Arc.EAHead.UnpSize);
-  DataIO.SetUnpackToMemory(&UnpData[0],Arc.EAHead.UnpSize);
-  DataIO.SetPackedSizeToRead(Arc.EAHead.DataSize);
-  DataIO.EnableShowProgress(false);
-  DataIO.SetFiles(&Arc,NULL);
-  Unpack.SetDestSize(Arc.EAHead.UnpSize);
-  Unpack.DoUnpack(Arc.EAHead.UnpVer,false);
-
-  if (Arc.EAHead.EACRC!=~DataIO.UnpFileCRC)
-  {
-    Log(Arc.FileName,St(MEABroken),FileName);
-    ErrHandler.SetErrorCode(CRC_ERROR);
-    return;
-  }
-  int fd = open(FileName,O_WRONLY);
-  if (fd==-1)
-  {
-    Log(Arc.FileName,St(MCannotSetEA),FileName);
-    ErrHandler.SetErrorCode(WARNING);
-    return;
-  }
-
-  int AttrPos=0;
-  while (AttrPos<Arc.EAHead.UnpSize)
-  {
-    unsigned char *CurItem=&UnpData[AttrPos];
-    int NameSize=CurItem[0]+((int)CurItem[1]<<8);
-    int 
Type=CurItem[2]+((int)CurItem[3]<<8)+((int)CurItem[4]<<16)+((int)CurItem[5]<<24);
-    int 
Size=CurItem[6]+((int)CurItem[7]<<8)+((int)CurItem[8]<<16)+((int)CurItem[9]<<24);
-    char Name[1024];
-    if (NameSize>=sizeof(Name))
-    {
-      Log(Arc.FileName,St(MCannotSetEA),FileName);
-      ErrHandler.SetErrorCode(WARNING);
-      break;
-    }
-    memcpy(Name,CurItem+10,NameSize);
-    Name[NameSize]=0;
-    if (fs_write_attr(fd,Name,Type,0,CurItem+10+NameSize,Size)==-1)
-    {
-      Log(Arc.FileName,St(MCannotSetEA),FileName);
-      ErrHandler.SetErrorCode(WARNING);
-      break;
-    }
-    AttrPos+=10+NameSize+Size;
-  }
-  close(fd);
-  mprintf(St(MShowEA));
-}
-
-
-void ExtractBeEANew(Archive &Arc,char *FileName)
-{
-  Array<byte> SubData;
-  if (!Arc.ReadSubData(&SubData,NULL))
-    return;
-
-  int fd = open(FileName,O_WRONLY);
-  if (fd==-1)
-  {
-    Log(Arc.FileName,St(MCannotSetEA),FileName);
-    ErrHandler.SetErrorCode(WARNING);
-    return;
-  }
-
-  int AttrPos=0;
-  while (AttrPos<Arc.EAHead.UnpSize)
-  {
-    unsigned char *CurItem=&SubData[AttrPos];
-    int NameSize=CurItem[0]+((int)CurItem[1]<<8);
-    int 
Type=CurItem[2]+((int)CurItem[3]<<8)+((int)CurItem[4]<<16)+((int)CurItem[5]<<24);
-    int 
Size=CurItem[6]+((int)CurItem[7]<<8)+((int)CurItem[8]<<16)+((int)CurItem[9]<<24);
-    char Name[1024];
-    if (NameSize>=sizeof(Name))
-    {
-      Log(Arc.FileName,St(MCannotSetEA),FileName);
-      ErrHandler.SetErrorCode(WARNING);
-      break;
-    }
-    memcpy(Name,CurItem+10,NameSize);
-    Name[NameSize]=0;
-    if (fs_write_attr(fd,Name,Type,0,CurItem+10+NameSize,Size)==-1)
-    {
-      Log(Arc.FileName,St(MCannotSetEA),FileName);
-      ErrHandler.SetErrorCode(WARNING);
-      break;
-    }
-    AttrPos+=10+NameSize+Size;
-  }
-  close(fd);
-  mprintf(St(MShowEA));
-}
-
diff --git a/src/bin/unrar/cmddata.cpp b/src/bin/unrar/cmddata.cpp
deleted file mode 100644
index 41f3dd7..0000000
--- a/src/bin/unrar/cmddata.cpp
+++ /dev/null
@@ -1,1287 +0,0 @@
-#include "rar.hpp"
-
-CommandData::CommandData()
-{
-  FileArgs=ExclArgs=InclArgs=StoreArgs=ArcNames=NULL;
-  Init();
-}
-
-
-CommandData::~CommandData()
-{
-  Close();
-}
-
-
-void CommandData::Init()
-{
-  Close();
-
-  *Command=0;
-  *ArcName=0;
-  *ArcNameW=0;
-  FileLists=false;
-  NoMoreSwitches=false;
-  TimeConverted=false;
-
-  FileArgs=new StringList;
-  ExclArgs=new StringList;
-  InclArgs=new StringList;
-  StoreArgs=new StringList;
-  ArcNames=new StringList;
-}
-
-
-void CommandData::Close()
-{
-  delete FileArgs;
-  delete ExclArgs;
-  delete InclArgs;
-  delete StoreArgs;
-  delete ArcNames;
-  FileArgs=ExclArgs=InclArgs=StoreArgs=ArcNames=NULL;
-  NextVolSizes.Reset();
-}
-
-
-#if !defined(SFX_MODULE)
-void CommandData::ParseArg(char *Arg,wchar *ArgW)
-{
-  if (IsSwitch(*Arg) && !NoMoreSwitches)
-    if (Arg[1]=='-')
-      NoMoreSwitches=true;
-    else
-      ProcessSwitch(&Arg[1]);
-  else
-    if (*Command==0)
-    {
-      strncpyz(Command,Arg,ASIZE(Command));
-      if (ArgW!=NULL)
-        strncpyw(CommandW,ArgW,sizeof(CommandW)/sizeof(CommandW[0]));
-      if (etoupper(*Command)=='S')
-      {
-        const char *SFXName=Command[1] ? Command+1:DefSFXName;
-        if (PointToName(SFXName)!=SFXName || FileExist(SFXName))
-          strcpy(SFXModule,SFXName);
-        else
-          GetConfigName(SFXName,SFXModule,true);
-      }
-#ifndef GUI
-      *Command=etoupper(*Command);
-      if (*Command!='I' && *Command!='S')
-        strupper(Command);
-#endif
-    }
-    else
-      if (*ArcName==0)
-      {
-        strncpyz(ArcName,Arg,ASIZE(ArcName));
-        if (ArgW!=NULL)
-          strncpyzw(ArcNameW,ArgW,ASIZE(ArcNameW));
-      }
-      else
-      {
-        int Length=strlen(Arg);
-        char EndChar=Arg[Length-1];
-        char CmdChar=etoupper(*Command);
-        bool Add=strchr("AFUM",CmdChar)!=NULL;
-        bool Extract=CmdChar=='X' || CmdChar=='E';
-        if ((IsDriveDiv(EndChar) || IsPathDiv(EndChar)) && !Add)
-        {
-          strncpyz(ExtrPath,Arg,ASIZE(ExtrPath));
-          if (ArgW!=NULL)
-            strncpyzw(ExtrPathW,ArgW,ASIZE(ExtrPathW));
-        }
-        else
-          if ((Add || CmdChar=='T') && *Arg!='@')
-            FileArgs->AddString(Arg);
-          else
-          {
-            struct FindData FileData;
-            bool Found=FindFile::FastFind(Arg,NULL,&FileData);
-            if (!Found && *Arg=='@' && !IsWildcard(Arg))
-            {
-              FileLists=true;
-
-              RAR_CHARSET Charset=FilelistCharset;
-
-#if defined(_WIN_32) && !defined(GUI)
-              // for compatibility reasons we use OEM encoding
-              // in Win32 console version by default
-
-              if (Charset==RCH_DEFAULT)
-                Charset=RCH_OEM;
-#endif
-
-              ReadTextFile(Arg+1,FileArgs,false,true,Charset,true,true);
-            }
-            else
-              if (Found && FileData.IsDir && Extract && *ExtrPath==0)
-              {
-                strcpy(ExtrPath,Arg);
-                AddEndSlash(ExtrPath);
-              }
-              else
-                FileArgs->AddString(Arg);
-          }
-      }
-}
-#endif
-
-
-void CommandData::ParseDone()
-{
-  if (FileArgs->ItemsCount()==0 && !FileLists)
-    FileArgs->AddString(MASKALL);
-  char CmdChar=etoupper(*Command);
-  bool Extract=CmdChar=='X' || CmdChar=='E';
-  if (Test && Extract)
-    Test=false;
-  BareOutput=(CmdChar=='L' || CmdChar=='V') && Command[1]=='B';
-}
-
-
-#if !defined(SFX_MODULE) && !defined(_WIN_CE)
-void CommandData::ParseEnvVar()
-{
-  char *EnvStr=getenv("RAR");
-  if (EnvStr!=NULL)
-    ProcessSwitchesString(EnvStr);
-}
-#endif
-
-
-
-// return 'false' if -cfg- is present and preprocess switches
-// which must be processed before the rest of command line
-
-#ifndef SFX_MODULE
-bool CommandData::IsConfigEnabled(int argc,char *argv[])
-{
-  bool ConfigEnabled=true;
-  for (int I=1;I<argc;I++)
-    if (IsSwitch(*argv[I]))
-    {
-      if (stricomp(&argv[I][1],"cfg-")==0)
-        ConfigEnabled=false;
-#ifndef GUI
-      if (strnicomp(&argv[I][1],"ilog",4)==0)
-      {
-        // ensure that correct log file name is already set
-        // if we need to report an error when processing the command line
-        ProcessSwitch(&argv[I][1]);
-        InitLogOptions(LogName);
-      }
-#endif
-      if (strnicomp(&argv[I][1],"sc",2)==0)
-      {
-        // process -cs before reading any file lists
-        ProcessSwitch(&argv[I][1]);
-      }
-    }
-  return(ConfigEnabled);
-}
-#endif
-
-
-#if !defined(GUI) && !defined(SFX_MODULE)
-void CommandData::ReadConfig(int argc,char *argv[])
-{
-  StringList List;
-  if (ReadTextFile(DefConfigName,&List,true))
-  {
-    char *Str;
-    while ((Str=List.GetString())!=NULL)
-    {
-      while (isspace(*Str))
-        Str++;
-      if (strnicomp(Str,"switches=",9)==0)
-        ProcessSwitchesString(Str+9);
-    }
-  }
-}
-#endif
-
-
-#if !defined(SFX_MODULE) && !defined(_WIN_CE)
-void CommandData::ProcessSwitchesString(char *Str)
-{
-  while (*Str)
-  {
-    while (!IsSwitch(*Str) && *Str!=0)
-      Str++;
-    if (*Str==0)
-      break;
-    char *Next=Str;
-    while (!(Next[0]==' ' && IsSwitch(Next[1])) && *Next!=0)
-      Next++;
-    char NextChar=*Next;
-    *Next=0;
-    ProcessSwitch(Str+1);
-    *Next=NextChar;
-    Str=Next;
-  }
-}
-#endif
-
-
-#if !defined(SFX_MODULE)
-void CommandData::ProcessSwitch(char *Switch)
-{
-
-  switch(etoupper(Switch[0]))
-  {
-    case 'I':
-      if (strnicomp(&Switch[1],"LOG",3)==0)
-      {
-        strncpyz(LogName,Switch[4] ? Switch+4:DefLogName,ASIZE(LogName));
-        break;
-      }
-      if (stricomp(&Switch[1],"SND")==0)
-      {
-        Sound=true;
-        break;
-      }
-      if (stricomp(&Switch[1],"ERR")==0)
-      {
-        MsgStream=MSG_STDERR;
-        break;
-      }
-      if (strnicomp(&Switch[1],"EML",3)==0)
-      {
-        strncpyz(EmailTo,Switch[4] ? Switch+4:"@",ASIZE(EmailTo));
-        EmailTo[sizeof(EmailTo)-1]=0;
-        break;
-      }
-      if (stricomp(&Switch[1],"NUL")==0)
-      {
-        MsgStream=MSG_NULL;
-        break;
-      }
-      if (etoupper(Switch[1])=='D')
-      {
-        for (int I=2;Switch[I]!=0;I++)
-          switch(etoupper(Switch[I]))
-          {
-            case 'Q':
-              MsgStream=MSG_ERRONLY;
-              break;
-            case 'C':
-              DisableCopyright=true;
-              break;
-            case 'D':
-              DisableDone=true;
-              break;
-            case 'P':
-              DisablePercentage=true;
-              break;
-          }
-        break;
-      }
-      if (stricomp(&Switch[1],"OFF")==0)
-      {
-        Shutdown=true;
-        break;
-      }
-      break;
-    case 'T':
-      switch(etoupper(Switch[1]))
-      {
-        case 'K':
-          ArcTime=ARCTIME_KEEP;
-          break;
-        case 'L':
-          ArcTime=ARCTIME_LATEST;
-          break;
-        case 'O':
-          FileTimeBefore.SetAgeText(Switch+2);
-          break;
-        case 'N':
-          FileTimeAfter.SetAgeText(Switch+2);
-          break;
-        case 'B':
-          FileTimeBefore.SetIsoText(Switch+2);
-          break;
-        case 'A':
-          FileTimeAfter.SetIsoText(Switch+2);
-          break;
-        case 'S':
-          {
-            EXTTIME_MODE Mode=EXTTIME_HIGH3;
-            bool CommonMode=Switch[2]>='0' && Switch[2]<='4';
-            if (CommonMode)
-              Mode=(EXTTIME_MODE)(Switch[2]-'0');
-            if (Switch[2]=='-')
-              Mode=EXTTIME_NONE;
-            if (CommonMode || Switch[2]=='-' || Switch[2]=='+' || Switch[2]==0)
-              xmtime=xctime=xatime=Mode;
-            else
-            {
-              if (Switch[3]>='0' && Switch[3]<='4')
-                Mode=(EXTTIME_MODE)(Switch[3]-'0');
-              if (Switch[3]=='-')
-                Mode=EXTTIME_NONE;
-              switch(etoupper(Switch[2]))
-              {
-                case 'M':
-                  xmtime=Mode;
-                  break;
-                case 'C':
-                  xctime=Mode;
-                  break;
-                case 'A':
-                  xatime=Mode;
-                  break;
-                case 'R':
-                  xarctime=Mode;
-                  break;
-              }
-            }
-          }
-          break;
-        case '-':
-          Test=false;
-          break;
-        case 0:
-          Test=true;
-          break;
-        default:
-          BadSwitch(Switch);
-          break;
-      }
-      break;
-    case 'A':
-      switch(etoupper(Switch[1]))
-      {
-        case 'C':
-          ClearArc=true;
-          break;
-        case 'D':
-          AppendArcNameToPath=true;
-          break;
-        case 'G':
-          if (Switch[2]=='-' && Switch[3]==0)
-            GenerateArcName=0;
-          else
-          {
-            GenerateArcName=true;
-            strncpyz(GenerateMask,Switch+2,ASIZE(GenerateMask));
-          }
-          break;
-        case 'N': //reserved for archive name
-          break;
-        case 'O':
-          AddArcOnly=true;
-          break;
-        case 'P':
-          strcpy(ArcPath,Switch+2);
-          break;
-        case 'S':
-          SyncFiles=true;
-          break;
-        default:
-          BadSwitch(Switch);
-          break;
-      }
-      break;
-    case 'D':
-      if (Switch[2]==0)
-        switch(etoupper(Switch[1]))
-        {
-          case 'S':
-            DisableSortSolid=true;
-            break;
-          case 'H':
-            OpenShared=true;
-            break;
-          case 'F':
-            DeleteFiles=true;
-            break;
-        }
-      break;
-    case 'O':
-      switch(etoupper(Switch[1]))
-      {
-        case '+':
-          Overwrite=OVERWRITE_ALL;
-          break;
-        case '-':
-          Overwrite=OVERWRITE_NONE;
-          break;
-        case 'R':
-          Overwrite=OVERWRITE_AUTORENAME;
-          break;
-        case 'W':
-          ProcessOwners=true;
-          break;
-#ifdef SAVE_LINKS
-        case 'L':
-          SaveLinks=true;
-          break;
-#endif
-#ifdef _WIN_32
-        case 'S':
-          SaveStreams=true;
-          break;
-        case 'C':
-          SetCompressedAttr=true;
-          break;
-#endif
-        default :
-          BadSwitch(Switch);
-          break;
-      }
-      break;
-    case 'R':
-      switch(etoupper(Switch[1]))
-      {
-        case 0:
-          Recurse=RECURSE_ALWAYS;
-          break;
-        case '-':
-          Recurse=0;
-          break;
-        case '0':
-          Recurse=RECURSE_WILDCARDS;
-          break;
-#ifndef _WIN_CE
-        case 'I':
-          {
-            Priority=atoi(Switch+2);
-            char *ChPtr=strchr(Switch+2,':');
-            if (ChPtr!=NULL)
-            {
-              SleepTime=atoi(ChPtr+1);
-              InitSystemOptions(SleepTime);
-            }
-            SetPriority(Priority);
-          }
-          break;
-#endif
-      }
-      break;
-    case 'Y':
-      AllYes=true;
-      break;
-    case 'N':
-    case 'X':
-      if (Switch[1]!=0)
-      {
-        StringList *Args=etoupper(Switch[0])=='N' ? InclArgs:ExclArgs;
-        if (Switch[1]=='@' && !IsWildcard(Switch))
-        {
-          RAR_CHARSET Charset=FilelistCharset;
-
-#if defined(_WIN_32) && !defined(GUI)
-          // for compatibility reasons we use OEM encoding
-          // in Win32 console version by default
-
-          if (Charset==RCH_DEFAULT)
-            Charset=RCH_OEM;
-#endif
-
-          ReadTextFile(Switch+2,Args,false,true,Charset,true,true);
-        }
-        else
-          Args->AddString(Switch+1);
-      }
-      break;
-    case 'E':
-      switch(etoupper(Switch[1]))
-      {
-        case 'P':
-          switch(Switch[2])
-          {
-            case 0:
-              ExclPath=EXCL_SKIPWHOLEPATH;
-              break;
-            case '1':
-              ExclPath=EXCL_BASEPATH;
-              break;
-            case '2':
-              ExclPath=EXCL_SAVEFULLPATH;
-              break;
-            case '3':
-              ExclPath=EXCL_ABSPATH;
-              break;
-          }
-          break;
-        case 'D':
-          ExclEmptyDir=true;
-          break;
-        case 'E':
-          ProcessEA=false;
-          break;
-        case 'N':
-          NoEndBlock=true;
-          break;
-        default:
-          if (Switch[1]=='+')
-          {
-            InclFileAttr=GetExclAttr(&Switch[2]);
-            InclAttrSet=true;
-          }
-          else
-            ExclFileAttr=GetExclAttr(&Switch[1]);
-          break;
-      }
-      break;
-    case 'P':
-      if (Switch[1]==0)
-      {
-        GetPassword(PASSWORD_GLOBAL,NULL,Password,sizeof(Password));
-        eprintf("\n");
-      }
-      else
-        strncpyz(Password,Switch+1,ASIZE(Password));
-      break;
-    case 'H':
-      if (etoupper(Switch[1])=='P')
-      {
-        EncryptHeaders=true;
-        if (Switch[2]!=0)
-          strncpyz(Password,Switch+2,ASIZE(Password));
-        else
-          if (*Password==0)
-          {
-            GetPassword(PASSWORD_GLOBAL,NULL,Password,sizeof(Password));
-            eprintf("\n");
-          }
-      }
-      break;
-    case 'Z':
-      strncpyz(CommentFile,Switch[1]!=0 ? Switch+1:"stdin",ASIZE(CommentFile));
-      break;
-    case 'M':
-      switch(etoupper(Switch[1]))
-      {
-        case 'C':
-          {
-            char *Str=Switch+2;
-            if (*Str=='-')
-              for (int I=0;I<sizeof(FilterModes)/sizeof(FilterModes[0]);I++)
-                FilterModes[I].State=FILTER_DISABLE;
-            else
-              while (*Str)
-              {
-                int Param1=0,Param2=0;
-                FilterState State=FILTER_AUTO;
-                FilterType Type=FILTER_NONE;
-                if (isdigit(*Str))
-                {
-                  Param1=atoi(Str);
-                  while (isdigit(*Str))
-                    Str++;
-                }
-                if (*Str==':' && isdigit(Str[1]))
-                {
-                  Param2=atoi(++Str);
-                  while (isdigit(*Str))
-                    Str++;
-                }
-                switch(etoupper(*(Str++)))
-                {
-                  case 'T': Type=FILTER_PPM;         break;
-                  case 'E': Type=FILTER_E8;          break;
-                  case 'D': Type=FILTER_DELTA;       break;
-                  case 'A': Type=FILTER_AUDIO;       break;
-                  case 'C': Type=FILTER_RGB;         break;
-                  case 'I': Type=FILTER_ITANIUM;     break;
-                  case 'L': Type=FILTER_UPCASETOLOW; break;
-                }
-                if (*Str=='+' || *Str=='-')
-                  State=*(Str++)=='+' ? FILTER_FORCE:FILTER_DISABLE;
-                FilterModes[Type].State=State;
-                FilterModes[Type].Param1=Param1;
-                FilterModes[Type].Param2=Param2;
-              }
-            }
-          break;
-        case 'M':
-          break;
-        case 'D':
-          {
-            if ((WinSize=atoi(&Switch[2]))==0)
-              WinSize=0x10000<<(etoupper(Switch[2])-'A');
-            else
-              WinSize*=1024;
-            if (!CheckWinSize())
-              BadSwitch(Switch);
-          }
-          break;
-        case 'S':
-          {
-            char *Names=Switch+2,DefNames[512];
-            if (*Names==0)
-            {
-              strcpy(DefNames,DefaultStoreList);
-              Names=DefNames;
-            }
-            while (*Names!=0)
-            {
-              char *End=strchr(Names,';');
-              if (End!=NULL)
-                *End=0;
-              if (*Names=='.')
-                Names++;
-              char Mask[NM];
-              if (strpbrk(Names,"*?.")==NULL)
-                sprintf(Mask,"*.%s",Names);
-              else
-                strcpy(Mask,Names);
-              StoreArgs->AddString(Mask);
-              if (End==NULL)
-                break;
-              Names=End+1;
-            }
-          }
-          break;
-#ifdef PACK_SMP
-        case 'T':
-          Threads=atoi(Switch+2);
-          if (Threads>MaxSearchThreads)
-            BadSwitch(Switch);
-          else
-          {
-          }
-          break;
-#endif
-        default:
-          Method=Switch[1]-'0';
-          if (Method>5 || Method<0)
-            BadSwitch(Switch);
-          break;
-      }
-      break;
-    case 'V':
-      switch(etoupper(Switch[1]))
-      {
-#ifdef _WIN_32
-        case 'D':
-          EraseDisk=true;
-          break;
-#endif
-        case 'N':
-          OldNumbering=true;
-          break;
-        case 'P':
-          VolumePause=true;
-          break;
-        case 'E':
-          if (etoupper(Switch[2])=='R')
-            VersionControl=atoi(Switch+3)+1;
-          break;
-        case '-':
-          VolSize=0;
-          break;
-        default:
-          {
-            Int64 NewVolSize=atoil(&Switch[1]);
-
-            if (NewVolSize==0)
-              NewVolSize=INT64ERR;
-            else
-              switch (Switch[strlen(Switch)-1])
-              {
-                case 'f':
-                case 'F':
-                  switch(int64to32(NewVolSize))
-                  {
-                    case 360:
-                      NewVolSize=362496;
-                      break;
-                    case 720:
-                      NewVolSize=730112;
-                      break;
-                    case 1200:
-                      NewVolSize=1213952;
-                      break;
-                    case 1440:
-                      NewVolSize=1457664;
-                      break;
-                    case 2880:
-                      NewVolSize=2915328;
-                      break;
-                  }
-                  break;
-                case 'k':
-                  NewVolSize*=1024;
-                  break;
-                case 'm':
-                  NewVolSize*=1024*1024;
-                  break;
-                case 'M':
-                  NewVolSize*=1000*1000;
-                  break;
-                case 'g':
-                  NewVolSize*=1024*1024;
-                  NewVolSize*=1024;
-                  break;
-                case 'G':
-                  NewVolSize*=1000*1000;
-                  NewVolSize*=1000;
-                  break;
-                case 'b':
-                case 'B':
-                  break;
-                default:
-                  NewVolSize*=1000;
-                  break;
-              }
-            if (VolSize==0)
-              VolSize=NewVolSize;
-            else
-              NextVolSizes.Push(NewVolSize);
-          }
-          break;
-      }
-      break;
-    case 'F':
-      if (Switch[1]==0)
-        FreshFiles=true;
-      else
-        BadSwitch(Switch);
-      break;
-    case 'U':
-      if (Switch[1]==0)
-        UpdateFiles=true;
-      else
-        BadSwitch(Switch);
-      break;
-    case 'W':
-      strncpyz(TempPath,&Switch[1],ASIZE(TempPath));
-      AddEndSlash(TempPath);
-      break;
-    case 'S':
-      if (strnicomp(Switch,"SFX",3)==0)
-      {
-        const char *SFXName=Switch[3] ? Switch+3:DefSFXName;
-        if (PointToName(SFXName)!=SFXName || FileExist(SFXName))
-          strcpy(SFXModule,SFXName);
-        else
-          GetConfigName(SFXName,SFXModule,true);
-      }
-      if (isdigit(Switch[1]))
-      {
-        Solid|=SOLID_COUNT;
-        SolidCount=atoi(&Switch[1]);
-      }
-      else
-        switch(etoupper(Switch[1]))
-        {
-          case 0:
-            Solid|=SOLID_NORMAL;
-            break;
-          case '-':
-            Solid=SOLID_NONE;
-            break;

[ *** diff truncated: 21288 lines dropped *** ]



Other related posts: