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 #if defined(_EMX) && !defined(_DJGPP)
12 uni_init(0);
13 #endif
14
15 #if !defined(_SFX_RTL_) && !defined(_WIN_ALL)
16 setbuf(stdout,NULL);
17 #endif
18
19 #if !defined(SFX_MODULE) && defined(_EMX)
20 EnumConfigPaths(argv[0],-1);
21 #endif
22
23 ErrHandler.SetSignalHandlers(true);
24
25 RARInitData();
26
27 #ifdef SFX_MODULE
28 char ModuleNameA[NM];
29 wchar ModuleNameW[NM];
30 #ifdef _WIN_ALL
31 GetModuleFileNameW(NULL,ModuleNameW,ASIZE(ModuleNameW));
32 WideToChar(ModuleNameW,ModuleNameA);
33 #else
34 strcpy(ModuleNameA,argv[0]);
35 *ModuleNameW=0;
36 #endif
37 #endif
38
39 #ifdef _WIN_ALL
40 SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT|SEM_FAILCRITICALERRORS|SEM_NOOPENFILEERRORBOX);
41
42
43 #endif
44
45 #if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SHELL_EXT)
46 bool ShutdownOnClose;
47 #endif
48
49 #ifdef ALLOW_EXCEPTIONS
50 try
51 #endif
52 {
53
54 CommandData Cmd;
55 #ifdef SFX_MODULE
56 strcpy(Cmd.Command,"X");
57 char *Switch=NULL;
58 #ifdef _SFX_RTL_
59 char *CmdLine=GetCommandLineA();
60 if (CmdLine!=NULL && *CmdLine=='\"')
61 CmdLine=strchr(CmdLine+1,'\"');
62 if (CmdLine!=NULL && (CmdLine=strpbrk(CmdLine," /"))!=NULL)
63 {
64 while (IsSpace(*CmdLine))
65 CmdLine++;
66 Switch=CmdLine;
67 }
68 #else
69 Switch=argc>1 ? argv[1]:NULL;
70 #endif
71 if (Switch!=NULL && Cmd.IsSwitch(Switch[0]))
72 {
73 int UpperCmd=etoupper(Switch[1]);
74 switch(UpperCmd)
75 {
76 case 'T':
77 case 'V':
78 Cmd.Command[0]=UpperCmd;
79 break;
80 case '?':
81 Cmd.OutHelp();
82 break;
83 }
84 }
85 Cmd.AddArcName(ModuleNameA,ModuleNameW);
86 Cmd.ParseDone();
87 #else // !SFX_MODULE
88 Cmd.PreprocessCommandLine(argc,argv);
89 if (!Cmd.ConfigDisabled)
90 {
91 Cmd.ReadConfig();
92 Cmd.ParseEnvVar();
93 }
94 Cmd.ParseCommandLine(argc,argv);
95 #endif
96
97 #if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SHELL_EXT)
98 ShutdownOnClose=Cmd.Shutdown;
99 #endif
100
101 InitConsoleOptions(Cmd.MsgStream,Cmd.Sound);
102 InitLogOptions(Cmd.LogName);
103 ErrHandler.SetSilent(Cmd.AllYes || Cmd.MsgStream==MSG_NULL);
104 ErrHandler.SetShutdown(Cmd.Shutdown);
105
106 Cmd.OutTitle();
107 Cmd.ProcessCommand();
108 }
109 #ifdef ALLOW_EXCEPTIONS
110 catch (int ErrCode)
111 {
112 ErrHandler.SetErrorCode(ErrCode);
113 }
114 #ifdef ENABLE_BAD_ALLOC
115 catch (bad_alloc)
116 {
117 ErrHandler.SetErrorCode(MEMORY_ERROR);
118 }
119 #endif
120 catch (...)
121 {
122 ErrHandler.SetErrorCode(FATAL_ERROR);
123 }
124 #endif
125
126 File::RemoveCreated();
127 #if defined(SFX_MODULE) && defined(_DJGPP)
128 _chmod(ModuleNameA,1,0x20);
129 #endif
130 #if defined(_EMX) && !defined(_DJGPP)
131 uni_done();
132 #endif
133 #if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SHELL_EXT)
134 if (ShutdownOnClose)
135 Shutdown();
136 #endif
137 return(ErrHandler.GetErrorCode());
138 }
139 #endif
140
141
142