home *** CD-ROM | disk | FTP | other *** search
/ ftp.rarlab.com / 2014.05.ftp.rarlab.com.tar / ftp.rarlab.com / rar / unrar-ia64.zip / rar.cpp < prev    next >
C/C++ Source or Header  |  2005-08-09  |  3KB  |  133 lines

  1. #include "rar.hpp"
  2.  
  3.  
  4. #include "smallfn.cpp"
  5.  
  6. #ifdef _DJGPP
  7. extern "C" char **__crt0_glob_function (char *arg) { return 0; }
  8. extern "C" void   __crt0_load_environment_file (char *progname) { }
  9. #endif
  10.  
  11. #if !defined(GUI) && !defined(RARDLL)
  12. int main(int argc, char *argv[])
  13. {
  14. #ifdef _UNIX
  15.   setlocale(LC_ALL,"");
  16. #endif
  17. #if defined(_EMX) && !defined(_DJGPP)
  18.   uni_init(0);
  19. #endif
  20. #ifndef SFX_MODULE
  21.   setbuf(stdout,NULL);
  22.  
  23.   #ifdef _EMX
  24.     EnumConfigPaths(argv[0],-1);
  25.   #endif
  26. #endif
  27.  
  28.   ErrHandler.SetSignalHandlers(true);
  29.  
  30.   RARInitData();
  31.  
  32. #ifdef SFX_MODULE
  33.   char ModuleName[NM];
  34. #ifdef _WIN_32
  35.   GetModuleFileName(NULL,ModuleName,sizeof(ModuleName));
  36. #else
  37.   strcpy(ModuleName,argv[0]);
  38. #endif
  39. #endif
  40.  
  41. #ifdef _WIN_32
  42.   SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT|SEM_FAILCRITICALERRORS|SEM_NOOPENFILEERRORBOX);
  43.  
  44.  
  45. #endif
  46.  
  47.  
  48. #ifdef ALLOW_EXCEPTIONS
  49.   try 
  50. #endif
  51.   {
  52.   
  53.     CommandData Cmd;
  54. #ifdef SFX_MODULE
  55.     strcpy(Cmd.Command,"X");
  56.     char *Switch=NULL;
  57. #ifdef _SFX_RTL_
  58.     char *CmdLine=GetCommandLine();
  59.     if (CmdLine!=NULL && *CmdLine=='\"')
  60.       CmdLine=strchr(CmdLine+1,'\"');
  61.     if (CmdLine!=NULL && (CmdLine=strpbrk(CmdLine," /"))!=NULL)
  62.     {
  63.       while (isspace(*CmdLine))
  64.         CmdLine++;
  65.       Switch=CmdLine;
  66.     }
  67. #else
  68.     Switch=argc>1 ? argv[1]:NULL;
  69. #endif
  70.     if (Switch!=NULL && Cmd.IsSwitch(Switch[0]))
  71.     {
  72.       int UpperCmd=toupper(Switch[1]);
  73.       switch(UpperCmd)
  74.       {
  75.         case 'T':
  76.         case 'V':
  77.           Cmd.Command[0]=UpperCmd;
  78.           break;
  79.         case '?':
  80.           Cmd.OutHelp();
  81.           break;
  82.       }
  83.     }
  84.     Cmd.AddArcName(ModuleName,NULL);
  85. #else
  86.     if (Cmd.IsConfigEnabled(argc,argv))
  87.     {
  88.       Cmd.ReadConfig(argc,argv);
  89.       Cmd.ParseEnvVar();
  90.     }
  91.     for (int I=1;I<argc;I++)
  92.       Cmd.ParseArg(argv[I],NULL);
  93. #endif
  94.     Cmd.ParseDone();
  95.  
  96.  
  97.     InitConsoleOptions(Cmd.MsgStream,Cmd.Sound);
  98.     InitLogOptions(Cmd.LogName);
  99.     ErrHandler.SetSilent(Cmd.AllYes || Cmd.MsgStream==MSG_NULL);
  100.     ErrHandler.SetShutdown(Cmd.Shutdown);
  101.  
  102.     Cmd.OutTitle();
  103.     Cmd.ProcessCommand();
  104.   }
  105. #ifdef ALLOW_EXCEPTIONS
  106.   catch (int ErrCode)
  107.   {
  108.     ErrHandler.SetErrorCode(ErrCode);
  109.   }
  110. #ifdef ENABLE_BAD_ALLOC
  111.   catch (bad_alloc)
  112.   {
  113.     ErrHandler.SetErrorCode(MEMORY_ERROR);
  114.   }
  115. #endif
  116.   catch (...)
  117.   {
  118.     ErrHandler.SetErrorCode(FATAL_ERROR);
  119.   }
  120. #endif
  121.   File::RemoveCreated();
  122. #if defined(SFX_MODULE) && defined(_DJGPP)
  123.   _chmod(ModuleName,1,0x20);
  124. #endif
  125. #if defined(_EMX) && !defined(_DJGPP)
  126.   uni_done();
  127. #endif
  128.   return(ErrHandler.GetErrorCode());
  129. }
  130. #endif
  131.  
  132.  
  133.