OutTitle()1 void CommandData::OutTitle()
2 {
3   if (BareOutput || DisableCopyright)
4     return;
5 #if defined(__GNUC__) && defined(SFX_MODULE)
6   mprintf(St(MCopyrightS));
7 #else
8 #ifndef SILENT
9   static bool TitleShown=false;
10   if (TitleShown)
11     return;
12   TitleShown=true;
13 
14   wchar Version[80];
15   if (RARVER_BETA!=0)
16     swprintf(Version,ASIZE(Version),L"%d.%02d %ls %d",RARVER_MAJOR,RARVER_MINOR,St(MBeta),RARVER_BETA);
17   else
18     swprintf(Version,ASIZE(Version),L"%d.%02d",RARVER_MAJOR,RARVER_MINOR);
19 #if defined(_WIN_32) || defined(_WIN_64)
20   wcsncatz(Version,L" ",ASIZE(Version));
21 #endif
22 #ifdef _WIN_32
23   wcsncatz(Version,St(Mx86),ASIZE(Version));
24 #endif
25 #ifdef _WIN_64
26   wcsncatz(Version,St(Mx64),ASIZE(Version));
27 #endif
28   if (PrintVersion)
29   {
30     mprintf(L"%s",Version);
31     exit(0);
32   }
33   mprintf(St(MUCopyright),Version,RARVER_YEAR);
34 #endif
35 #endif
36 }
37 
38 
CmpMSGID(MSGID i1,MSGID i2)39 inline bool CmpMSGID(MSGID i1,MSGID i2)
40 {
41 #ifdef MSGID_INT
42   return i1==i2;
43 #else
44   // If MSGID is const char*, we cannot compare pointers only.
45   // Pointers to different instances of same string can differ,
46   // so we need to compare complete strings.
47   return wcscmp(i1,i2)==0;
48 #endif
49 }
50 
OutHelp(RAR_EXIT ExitCode)51 void CommandData::OutHelp(RAR_EXIT ExitCode)
52 {
53 #if !defined(SILENT)
54   OutTitle();
55   static MSGID Help[]={
56 #ifdef SFX_MODULE
57     // Console SFX switches definition.
58     MCHelpCmd,MSHelpCmdE,MSHelpCmdT,MSHelpCmdV
59 #else
60     // UnRAR switches definition.
61     MUNRARTitle1,MRARTitle2,MCHelpCmd,MCHelpCmdE,MCHelpCmdL,
62     MCHelpCmdP,MCHelpCmdT,MCHelpCmdV,MCHelpCmdX,MCHelpSw,MCHelpSwm,
63     MCHelpSwAT,MCHelpSwAC,MCHelpSwAD,MCHelpSwAG,MCHelpSwAI,MCHelpSwAP,
64     MCHelpSwCm,MCHelpSwCFGm,MCHelpSwCL,MCHelpSwCU,
65     MCHelpSwDH,MCHelpSwEP,MCHelpSwEP3,MCHelpSwF,MCHelpSwIDP,MCHelpSwIERR,
66     MCHelpSwINUL,MCHelpSwIOFF,MCHelpSwKB,
67 #ifdef WITH_ICONV
68     MCHelpSwLA,MCHelpSwLL,MCHelpSwLO,
69 #endif
70     MCHelpSwN,MCHelpSwNa,MCHelpSwNal,
71     MCHelpSwO,MCHelpSwOC,MCHelpSwOL,MCHelpSwOR,MCHelpSwOW,MCHelpSwP,
72     MCHelpSwPm,MCHelpSwR,MCHelpSwRI,MCHelpSwSC,MCHelpSwSL,MCHelpSwSM,
73     MCHelpSwTA,MCHelpSwTB,MCHelpSwTN,MCHelpSwTO,MCHelpSwTS,MCHelpSwU,
74     MCHelpSwVUnr,MCHelpSwVER,MCHelpSwVP,MCHelpSwX,MCHelpSwXa,MCHelpSwXal,
75     MCHelpSwY
76 #endif
77   };
78 
79   for (uint I=0;I<ASIZE(Help);I++)
80   {
81 #ifndef SFX_MODULE
82     if (CmpMSGID(Help[I],MCHelpSwV))
83       continue;
84 #ifndef _WIN_ALL
85     static MSGID Win32Only[]={
86       MCHelpSwIEML,MCHelpSwVD,MCHelpSwAO,MCHelpSwOS,MCHelpSwIOFF,
87       MCHelpSwEP2,MCHelpSwOC,MCHelpSwONI,MCHelpSwDR,MCHelpSwRI
88     };
89     bool Found=false;
90     for (uint J=0;J<ASIZE(Win32Only);J++)
91       if (CmpMSGID(Help[I],Win32Only[J]))
92       {
93         Found=true;
94         break;
95       }
96     if (Found)
97       continue;
98 #endif
99 #if !defined(_UNIX) && !defined(_WIN_ALL)
100     if (CmpMSGID(Help[I],MCHelpSwOW))
101       continue;
102 #endif
103 #if !defined(_WIN_ALL) && !defined(_EMX)
104     if (CmpMSGID(Help[I],MCHelpSwAC))
105       continue;
106 #endif
107 #ifndef SAVE_LINKS
108     if (CmpMSGID(Help[I],MCHelpSwOL))
109       continue;
110 #endif
111 #ifndef RAR_SMP
112     if (CmpMSGID(Help[I],MCHelpSwMT))
113       continue;
114 #endif
115 #endif
116     mprintf(St(Help[I]));
117   }
118   mprintf(L"\n");
119   ErrHandler.Exit(ExitCode);
120 #endif
121 }
122 
123