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