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