1 #include "rar.hpp"
2 
3 #if !defined(GUI) && !defined(RARDLL)
main(int argc,char * argv[])4 int main(int argc, char *argv[])
5 {
6 
7 #ifdef _UNIX
8   setlocale(LC_ALL,"");
9 #endif
10 
11   InitConsole();
12   ErrHandler.SetSignalHandlers(true);
13 
14 #ifdef SFX_MODULE
15   wchar ModuleName[NM];
16 #ifdef _WIN_ALL
17   GetModuleFileName(NULL,ModuleName,ASIZE(ModuleName));
18 #else
19   CharToWide(argv[0],ModuleName,ASIZE(ModuleName));
20 #endif
21 #endif
22 
23 #ifdef _WIN_ALL
24   SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT|SEM_FAILCRITICALERRORS|SEM_NOOPENFILEERRORBOX);
25 
26 
27 #endif
28 
29 #if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SHELL_EXT)
30   // Must be initialized, normal initialization can be skipped in case of
31   // exception.
32   bool ShutdownOnClose=false;
33 #endif
34 
35   try
36   {
37 
38     CommandData *Cmd=new CommandData;
39 #ifdef SFX_MODULE
40     wcscpy(Cmd->Command,L"X");
41     char *Switch=argc>1 ? argv[1]:NULL;
42     if (Switch!=NULL && Cmd->IsSwitch(Switch[0]))
43     {
44       int UpperCmd=etoupper(Switch[1]);
45       switch(UpperCmd)
46       {
47         case 'T':
48         case 'V':
49           Cmd->Command[0]=UpperCmd;
50           break;
51         case '?':
52           Cmd->OutHelp(RARX_SUCCESS);
53           break;
54       }
55     }
56     Cmd->AddArcName(ModuleName);
57     Cmd->ParseDone();
58 #else // !SFX_MODULE
59     Cmd->ParseCommandLine(true,argc,argv);
60     if (!Cmd->ConfigDisabled)
61     {
62       Cmd->ReadConfig();
63       Cmd->ParseEnvVar();
64     }
65     Cmd->ParseCommandLine(false,argc,argv);
66 #endif
67 
68 #if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SHELL_EXT)
69     ShutdownOnClose=Cmd->Shutdown;
70 #endif
71 
72     uiInit(Cmd->Sound);
73     InitConsoleOptions(Cmd->MsgStream);
74     InitLogOptions(Cmd->LogName,Cmd->ErrlogCharset);
75     ErrHandler.SetSilent(Cmd->AllYes || Cmd->MsgStream==MSG_NULL);
76     ErrHandler.SetShutdown(Cmd->Shutdown);
77 
78     Cmd->OutTitle();
79     Cmd->ProcessCommand();
80     delete Cmd;
81   }
82   catch (RAR_EXIT ErrCode)
83   {
84     ErrHandler.SetErrorCode(ErrCode);
85   }
86   catch (std::bad_alloc&)
87   {
88     ErrHandler.MemoryErrorMsg();
89     ErrHandler.SetErrorCode(RARX_MEMORY);
90   }
91   catch (...)
92   {
93     ErrHandler.SetErrorCode(RARX_FATAL);
94   }
95 
96 #if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SHELL_EXT)
97   if (ShutdownOnClose)
98     Shutdown();
99 #endif
100   ErrHandler.MainExit=true;
101   return ErrHandler.GetErrorCode();
102 }
103 #endif
104 
105 
106