xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/Far/ProgressBox.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // ProgressBox.cpp
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h"
4*f6dc9357SAndroid Build Coastguard Worker 
5*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/IntToString.h"
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/StringConvert.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker #include "FarUtils.h"
9*f6dc9357SAndroid Build Coastguard Worker #include "ProgressBox.h"
10*f6dc9357SAndroid Build Coastguard Worker 
ClearCurState()11*f6dc9357SAndroid Build Coastguard Worker void CPercentPrinterState::ClearCurState()
12*f6dc9357SAndroid Build Coastguard Worker {
13*f6dc9357SAndroid Build Coastguard Worker   Completed = 0;
14*f6dc9357SAndroid Build Coastguard Worker   Total = ((UInt64)(Int64)-1);
15*f6dc9357SAndroid Build Coastguard Worker   Files = 0;
16*f6dc9357SAndroid Build Coastguard Worker   FilesTotal = 0;
17*f6dc9357SAndroid Build Coastguard Worker   Command.Empty();
18*f6dc9357SAndroid Build Coastguard Worker   FileName.Empty();
19*f6dc9357SAndroid Build Coastguard Worker }
20*f6dc9357SAndroid Build Coastguard Worker 
Init(const char * title)21*f6dc9357SAndroid Build Coastguard Worker void CProgressBox::Init(const char *title)
22*f6dc9357SAndroid Build Coastguard Worker {
23*f6dc9357SAndroid Build Coastguard Worker   _title = title;
24*f6dc9357SAndroid Build Coastguard Worker   _wasPrinted = false;
25*f6dc9357SAndroid Build Coastguard Worker   StartTick = GetTickCount();
26*f6dc9357SAndroid Build Coastguard Worker   _prevTick = StartTick;
27*f6dc9357SAndroid Build Coastguard Worker   _prevElapsedSec = 0;
28*f6dc9357SAndroid Build Coastguard Worker }
29*f6dc9357SAndroid Build Coastguard Worker 
GetPower32(UInt32 val)30*f6dc9357SAndroid Build Coastguard Worker static unsigned GetPower32(UInt32 val)
31*f6dc9357SAndroid Build Coastguard Worker {
32*f6dc9357SAndroid Build Coastguard Worker   const unsigned kStart = 32;
33*f6dc9357SAndroid Build Coastguard Worker   UInt32 mask = ((UInt32)1 << (kStart - 1));
34*f6dc9357SAndroid Build Coastguard Worker   for (unsigned i = kStart;; i--)
35*f6dc9357SAndroid Build Coastguard Worker   {
36*f6dc9357SAndroid Build Coastguard Worker     if (i == 0 || (val & mask) != 0)
37*f6dc9357SAndroid Build Coastguard Worker       return i;
38*f6dc9357SAndroid Build Coastguard Worker     mask >>= 1;
39*f6dc9357SAndroid Build Coastguard Worker   }
40*f6dc9357SAndroid Build Coastguard Worker }
41*f6dc9357SAndroid Build Coastguard Worker 
GetPower64(UInt64 val)42*f6dc9357SAndroid Build Coastguard Worker static unsigned GetPower64(UInt64 val)
43*f6dc9357SAndroid Build Coastguard Worker {
44*f6dc9357SAndroid Build Coastguard Worker   UInt32 high = (UInt32)(val >> 32);
45*f6dc9357SAndroid Build Coastguard Worker   if (high == 0)
46*f6dc9357SAndroid Build Coastguard Worker     return GetPower32((UInt32)val);
47*f6dc9357SAndroid Build Coastguard Worker   return GetPower32(high) + 32;
48*f6dc9357SAndroid Build Coastguard Worker }
49*f6dc9357SAndroid Build Coastguard Worker 
MyMultAndDiv(UInt64 mult1,UInt64 mult2,UInt64 divider)50*f6dc9357SAndroid Build Coastguard Worker static UInt64 MyMultAndDiv(UInt64 mult1, UInt64 mult2, UInt64 divider)
51*f6dc9357SAndroid Build Coastguard Worker {
52*f6dc9357SAndroid Build Coastguard Worker   unsigned pow1 = GetPower64(mult1);
53*f6dc9357SAndroid Build Coastguard Worker   unsigned pow2 = GetPower64(mult2);
54*f6dc9357SAndroid Build Coastguard Worker   while (pow1 + pow2 > 64)
55*f6dc9357SAndroid Build Coastguard Worker   {
56*f6dc9357SAndroid Build Coastguard Worker     if (pow1 > pow2) { pow1--; mult1 >>= 1; }
57*f6dc9357SAndroid Build Coastguard Worker     else             { pow2--; mult2 >>= 1; }
58*f6dc9357SAndroid Build Coastguard Worker     divider >>= 1;
59*f6dc9357SAndroid Build Coastguard Worker   }
60*f6dc9357SAndroid Build Coastguard Worker   UInt64 res = mult1 * mult2;
61*f6dc9357SAndroid Build Coastguard Worker   if (divider != 0)
62*f6dc9357SAndroid Build Coastguard Worker     res /= divider;
63*f6dc9357SAndroid Build Coastguard Worker   return res;
64*f6dc9357SAndroid Build Coastguard Worker }
65*f6dc9357SAndroid Build Coastguard Worker 
66*f6dc9357SAndroid Build Coastguard Worker #define UINT_TO_STR_2(val) { s[0] = (char)('0' + (val) / 10); s[1] = (char)('0' + (val) % 10); s += 2; }
67*f6dc9357SAndroid Build Coastguard Worker 
GetTimeString(UInt64 timeValue,char * s)68*f6dc9357SAndroid Build Coastguard Worker static void GetTimeString(UInt64 timeValue, char *s)
69*f6dc9357SAndroid Build Coastguard Worker {
70*f6dc9357SAndroid Build Coastguard Worker   const UInt64 hours = timeValue / 3600;
71*f6dc9357SAndroid Build Coastguard Worker   UInt32 seconds = (UInt32)(timeValue - hours * 3600);
72*f6dc9357SAndroid Build Coastguard Worker   const UInt32 minutes = seconds / 60;
73*f6dc9357SAndroid Build Coastguard Worker   seconds %= 60;
74*f6dc9357SAndroid Build Coastguard Worker   if (hours > 99)
75*f6dc9357SAndroid Build Coastguard Worker   {
76*f6dc9357SAndroid Build Coastguard Worker     ConvertUInt64ToString(hours, s);
77*f6dc9357SAndroid Build Coastguard Worker     for (; *s != 0; s++);
78*f6dc9357SAndroid Build Coastguard Worker   }
79*f6dc9357SAndroid Build Coastguard Worker   else
80*f6dc9357SAndroid Build Coastguard Worker   {
81*f6dc9357SAndroid Build Coastguard Worker     const UInt32 hours32 = (UInt32)hours;
82*f6dc9357SAndroid Build Coastguard Worker     UINT_TO_STR_2(hours32)
83*f6dc9357SAndroid Build Coastguard Worker   }
84*f6dc9357SAndroid Build Coastguard Worker   *s++ = ':'; UINT_TO_STR_2(minutes)
85*f6dc9357SAndroid Build Coastguard Worker   *s++ = ':'; UINT_TO_STR_2(seconds)
86*f6dc9357SAndroid Build Coastguard Worker   *s = 0;
87*f6dc9357SAndroid Build Coastguard Worker }
88*f6dc9357SAndroid Build Coastguard Worker 
ReduceString(const UString & src,AString & dest)89*f6dc9357SAndroid Build Coastguard Worker void CProgressBox::ReduceString(const UString &src, AString &dest)
90*f6dc9357SAndroid Build Coastguard Worker {
91*f6dc9357SAndroid Build Coastguard Worker   UnicodeStringToMultiByte2(dest, src, CP_OEMCP);
92*f6dc9357SAndroid Build Coastguard Worker 
93*f6dc9357SAndroid Build Coastguard Worker   if (dest.Len() <= MaxLen)
94*f6dc9357SAndroid Build Coastguard Worker     return;
95*f6dc9357SAndroid Build Coastguard Worker   unsigned len = FileName.Len();
96*f6dc9357SAndroid Build Coastguard Worker   for (; len != 0;)
97*f6dc9357SAndroid Build Coastguard Worker   {
98*f6dc9357SAndroid Build Coastguard Worker     unsigned delta = len / 8;
99*f6dc9357SAndroid Build Coastguard Worker     if (delta == 0)
100*f6dc9357SAndroid Build Coastguard Worker       delta = 1;
101*f6dc9357SAndroid Build Coastguard Worker     len -= delta;
102*f6dc9357SAndroid Build Coastguard Worker     _tempU = FileName;
103*f6dc9357SAndroid Build Coastguard Worker     _tempU.Delete(len / 2, FileName.Len() - len);
104*f6dc9357SAndroid Build Coastguard Worker     _tempU.Insert(len / 2, L" . ");
105*f6dc9357SAndroid Build Coastguard Worker     UnicodeStringToMultiByte2(dest, _tempU, CP_OEMCP);
106*f6dc9357SAndroid Build Coastguard Worker     if (dest.Len() <= MaxLen)
107*f6dc9357SAndroid Build Coastguard Worker       return;
108*f6dc9357SAndroid Build Coastguard Worker   }
109*f6dc9357SAndroid Build Coastguard Worker   dest.Empty();
110*f6dc9357SAndroid Build Coastguard Worker }
111*f6dc9357SAndroid Build Coastguard Worker 
Print_UInt64_and_String(AString & s,UInt64 val,const char * name)112*f6dc9357SAndroid Build Coastguard Worker static void Print_UInt64_and_String(AString &s, UInt64 val, const char *name)
113*f6dc9357SAndroid Build Coastguard Worker {
114*f6dc9357SAndroid Build Coastguard Worker   char temp[32];
115*f6dc9357SAndroid Build Coastguard Worker   ConvertUInt64ToString(val, temp);
116*f6dc9357SAndroid Build Coastguard Worker   s += temp;
117*f6dc9357SAndroid Build Coastguard Worker   s.Add_Space();
118*f6dc9357SAndroid Build Coastguard Worker   s += name;
119*f6dc9357SAndroid Build Coastguard Worker }
120*f6dc9357SAndroid Build Coastguard Worker 
121*f6dc9357SAndroid Build Coastguard Worker 
PrintSize_bytes_Smart(AString & s,UInt64 val)122*f6dc9357SAndroid Build Coastguard Worker static void PrintSize_bytes_Smart(AString &s, UInt64 val)
123*f6dc9357SAndroid Build Coastguard Worker {
124*f6dc9357SAndroid Build Coastguard Worker   // Print_UInt64_and_String(s, val, "bytes");
125*f6dc9357SAndroid Build Coastguard Worker   {
126*f6dc9357SAndroid Build Coastguard Worker     char temp[32];
127*f6dc9357SAndroid Build Coastguard Worker     ConvertUInt64ToString(val, temp);
128*f6dc9357SAndroid Build Coastguard Worker     s += temp;
129*f6dc9357SAndroid Build Coastguard Worker   }
130*f6dc9357SAndroid Build Coastguard Worker 
131*f6dc9357SAndroid Build Coastguard Worker   if (val == 0)
132*f6dc9357SAndroid Build Coastguard Worker     return;
133*f6dc9357SAndroid Build Coastguard Worker 
134*f6dc9357SAndroid Build Coastguard Worker   unsigned numBits = 10;
135*f6dc9357SAndroid Build Coastguard Worker   char c = 'K';
136*f6dc9357SAndroid Build Coastguard Worker   char temp[4] = { 'K', 'i', 'B', 0 };
137*f6dc9357SAndroid Build Coastguard Worker        if (val >= ((UInt64)10 << 30)) { numBits = 30; c = 'G'; }
138*f6dc9357SAndroid Build Coastguard Worker   else if (val >= ((UInt64)10 << 20)) { numBits = 20; c = 'M'; }
139*f6dc9357SAndroid Build Coastguard Worker   temp[0] = c;
140*f6dc9357SAndroid Build Coastguard Worker   s += " (";
141*f6dc9357SAndroid Build Coastguard Worker   Print_UInt64_and_String(s, ((val + ((UInt64)1 << numBits) - 1) >> numBits), temp);
142*f6dc9357SAndroid Build Coastguard Worker   s += ')';
143*f6dc9357SAndroid Build Coastguard Worker }
144*f6dc9357SAndroid Build Coastguard Worker 
145*f6dc9357SAndroid Build Coastguard Worker 
146*f6dc9357SAndroid Build Coastguard Worker static const unsigned kPercentsSize = 4;
147*f6dc9357SAndroid Build Coastguard Worker 
Print()148*f6dc9357SAndroid Build Coastguard Worker void CProgressBox::Print()
149*f6dc9357SAndroid Build Coastguard Worker {
150*f6dc9357SAndroid Build Coastguard Worker   DWORD tick = GetTickCount();
151*f6dc9357SAndroid Build Coastguard Worker   DWORD elapsedTicks = tick - StartTick;
152*f6dc9357SAndroid Build Coastguard Worker   DWORD elapsedSec = elapsedTicks / 1000;
153*f6dc9357SAndroid Build Coastguard Worker 
154*f6dc9357SAndroid Build Coastguard Worker   if (_wasPrinted)
155*f6dc9357SAndroid Build Coastguard Worker   {
156*f6dc9357SAndroid Build Coastguard Worker     if (elapsedSec == _prevElapsedSec)
157*f6dc9357SAndroid Build Coastguard Worker     {
158*f6dc9357SAndroid Build Coastguard Worker       if ((UInt32)(tick - _prevTick) < _tickStep)
159*f6dc9357SAndroid Build Coastguard Worker         return;
160*f6dc9357SAndroid Build Coastguard Worker       if (_printedState.IsEqualTo((const CPercentPrinterState &)*this))
161*f6dc9357SAndroid Build Coastguard Worker         return;
162*f6dc9357SAndroid Build Coastguard Worker     }
163*f6dc9357SAndroid Build Coastguard Worker   }
164*f6dc9357SAndroid Build Coastguard Worker 
165*f6dc9357SAndroid Build Coastguard Worker   UInt64 cur = Completed;
166*f6dc9357SAndroid Build Coastguard Worker   UInt64 total = Total;
167*f6dc9357SAndroid Build Coastguard Worker 
168*f6dc9357SAndroid Build Coastguard Worker   if (!UseBytesForPercents)
169*f6dc9357SAndroid Build Coastguard Worker   {
170*f6dc9357SAndroid Build Coastguard Worker     cur = Files;
171*f6dc9357SAndroid Build Coastguard Worker     total = FilesTotal;
172*f6dc9357SAndroid Build Coastguard Worker   }
173*f6dc9357SAndroid Build Coastguard Worker 
174*f6dc9357SAndroid Build Coastguard Worker   {
175*f6dc9357SAndroid Build Coastguard Worker     _timeStr.Empty();
176*f6dc9357SAndroid Build Coastguard Worker     _timeStr = "Elapsed time: ";
177*f6dc9357SAndroid Build Coastguard Worker     char s[40];
178*f6dc9357SAndroid Build Coastguard Worker     GetTimeString(elapsedSec, s);
179*f6dc9357SAndroid Build Coastguard Worker     _timeStr += s;
180*f6dc9357SAndroid Build Coastguard Worker 
181*f6dc9357SAndroid Build Coastguard Worker     if (cur != 0)
182*f6dc9357SAndroid Build Coastguard Worker     {
183*f6dc9357SAndroid Build Coastguard Worker       UInt64 remainingTime = 0;
184*f6dc9357SAndroid Build Coastguard Worker       if (cur < total)
185*f6dc9357SAndroid Build Coastguard Worker         remainingTime = MyMultAndDiv(elapsedTicks, total - cur, cur);
186*f6dc9357SAndroid Build Coastguard Worker       UInt64 remainingSec = remainingTime / 1000;
187*f6dc9357SAndroid Build Coastguard Worker       _timeStr += "    Remaining time: ";
188*f6dc9357SAndroid Build Coastguard Worker 
189*f6dc9357SAndroid Build Coastguard Worker       GetTimeString(remainingSec, s);
190*f6dc9357SAndroid Build Coastguard Worker       _timeStr += s;
191*f6dc9357SAndroid Build Coastguard Worker     }
192*f6dc9357SAndroid Build Coastguard Worker   }
193*f6dc9357SAndroid Build Coastguard Worker 
194*f6dc9357SAndroid Build Coastguard Worker 
195*f6dc9357SAndroid Build Coastguard Worker   {
196*f6dc9357SAndroid Build Coastguard Worker     _perc.Empty();
197*f6dc9357SAndroid Build Coastguard Worker     char s[32];
198*f6dc9357SAndroid Build Coastguard Worker     unsigned size;
199*f6dc9357SAndroid Build Coastguard Worker     {
200*f6dc9357SAndroid Build Coastguard Worker       UInt64 val = 0;
201*f6dc9357SAndroid Build Coastguard Worker       if (total != (UInt64)(Int64)-1 && total != 0)
202*f6dc9357SAndroid Build Coastguard Worker         val = cur * 100 / Total;
203*f6dc9357SAndroid Build Coastguard Worker 
204*f6dc9357SAndroid Build Coastguard Worker       ConvertUInt64ToString(val, s);
205*f6dc9357SAndroid Build Coastguard Worker       size = (unsigned)strlen(s);
206*f6dc9357SAndroid Build Coastguard Worker       s[size++] = '%';
207*f6dc9357SAndroid Build Coastguard Worker       s[size] = 0;
208*f6dc9357SAndroid Build Coastguard Worker     }
209*f6dc9357SAndroid Build Coastguard Worker 
210*f6dc9357SAndroid Build Coastguard Worker     unsigned len = size;
211*f6dc9357SAndroid Build Coastguard Worker     while (len < kPercentsSize)
212*f6dc9357SAndroid Build Coastguard Worker       len = kPercentsSize;
213*f6dc9357SAndroid Build Coastguard Worker     len++;
214*f6dc9357SAndroid Build Coastguard Worker 
215*f6dc9357SAndroid Build Coastguard Worker     if (len < MaxLen)
216*f6dc9357SAndroid Build Coastguard Worker     {
217*f6dc9357SAndroid Build Coastguard Worker       unsigned numChars = MaxLen - len;
218*f6dc9357SAndroid Build Coastguard Worker       unsigned filled = 0;
219*f6dc9357SAndroid Build Coastguard Worker       if (total != (UInt64)(Int64)-1 && total != 0)
220*f6dc9357SAndroid Build Coastguard Worker         filled = (unsigned)(cur * numChars / total);
221*f6dc9357SAndroid Build Coastguard Worker       if (filled > numChars)
222*f6dc9357SAndroid Build Coastguard Worker         filled = numChars;
223*f6dc9357SAndroid Build Coastguard Worker       unsigned i = 0;
224*f6dc9357SAndroid Build Coastguard Worker       for (i = 0; i < filled; i++)
225*f6dc9357SAndroid Build Coastguard Worker         _perc += (char)(Byte)0xDB; // '=';
226*f6dc9357SAndroid Build Coastguard Worker       for (; i < numChars; i++)
227*f6dc9357SAndroid Build Coastguard Worker         _perc += (char)(Byte)0xB0; // '.';
228*f6dc9357SAndroid Build Coastguard Worker     }
229*f6dc9357SAndroid Build Coastguard Worker 
230*f6dc9357SAndroid Build Coastguard Worker     _perc.Add_Space();
231*f6dc9357SAndroid Build Coastguard Worker     while (size < kPercentsSize)
232*f6dc9357SAndroid Build Coastguard Worker     {
233*f6dc9357SAndroid Build Coastguard Worker       _perc.Add_Space();
234*f6dc9357SAndroid Build Coastguard Worker       size++;
235*f6dc9357SAndroid Build Coastguard Worker     }
236*f6dc9357SAndroid Build Coastguard Worker     _perc += s;
237*f6dc9357SAndroid Build Coastguard Worker   }
238*f6dc9357SAndroid Build Coastguard Worker 
239*f6dc9357SAndroid Build Coastguard Worker   _files.Empty();
240*f6dc9357SAndroid Build Coastguard Worker   if (Files != 0 || FilesTotal != 0)
241*f6dc9357SAndroid Build Coastguard Worker   {
242*f6dc9357SAndroid Build Coastguard Worker     _files += "Files: ";
243*f6dc9357SAndroid Build Coastguard Worker     char s[32];
244*f6dc9357SAndroid Build Coastguard Worker     // if (Files != 0)
245*f6dc9357SAndroid Build Coastguard Worker     {
246*f6dc9357SAndroid Build Coastguard Worker       ConvertUInt64ToString(Files, s);
247*f6dc9357SAndroid Build Coastguard Worker       _files += s;
248*f6dc9357SAndroid Build Coastguard Worker     }
249*f6dc9357SAndroid Build Coastguard Worker     if (FilesTotal != 0)
250*f6dc9357SAndroid Build Coastguard Worker     {
251*f6dc9357SAndroid Build Coastguard Worker       _files += " / ";
252*f6dc9357SAndroid Build Coastguard Worker       ConvertUInt64ToString(FilesTotal, s);
253*f6dc9357SAndroid Build Coastguard Worker       _files += s;
254*f6dc9357SAndroid Build Coastguard Worker     }
255*f6dc9357SAndroid Build Coastguard Worker   }
256*f6dc9357SAndroid Build Coastguard Worker 
257*f6dc9357SAndroid Build Coastguard Worker   _sizesStr.Empty();
258*f6dc9357SAndroid Build Coastguard Worker   if (Total != 0)
259*f6dc9357SAndroid Build Coastguard Worker   {
260*f6dc9357SAndroid Build Coastguard Worker     _sizesStr += "Size: ";
261*f6dc9357SAndroid Build Coastguard Worker     PrintSize_bytes_Smart(_sizesStr, Completed);
262*f6dc9357SAndroid Build Coastguard Worker     if (Total != 0 && Total != (UInt64)(Int64)-1)
263*f6dc9357SAndroid Build Coastguard Worker     {
264*f6dc9357SAndroid Build Coastguard Worker       _sizesStr += " / ";
265*f6dc9357SAndroid Build Coastguard Worker       PrintSize_bytes_Smart(_sizesStr, Total);
266*f6dc9357SAndroid Build Coastguard Worker     }
267*f6dc9357SAndroid Build Coastguard Worker   }
268*f6dc9357SAndroid Build Coastguard Worker 
269*f6dc9357SAndroid Build Coastguard Worker   _name1.Empty();
270*f6dc9357SAndroid Build Coastguard Worker   _name2.Empty();
271*f6dc9357SAndroid Build Coastguard Worker 
272*f6dc9357SAndroid Build Coastguard Worker   if (!FileName.IsEmpty())
273*f6dc9357SAndroid Build Coastguard Worker   {
274*f6dc9357SAndroid Build Coastguard Worker     _name1U.Empty();
275*f6dc9357SAndroid Build Coastguard Worker     _name2U.Empty();
276*f6dc9357SAndroid Build Coastguard Worker 
277*f6dc9357SAndroid Build Coastguard Worker     /*
278*f6dc9357SAndroid Build Coastguard Worker     if (_isDir)
279*f6dc9357SAndroid Build Coastguard Worker       s1 = _filePath;
280*f6dc9357SAndroid Build Coastguard Worker     else
281*f6dc9357SAndroid Build Coastguard Worker     */
282*f6dc9357SAndroid Build Coastguard Worker     {
283*f6dc9357SAndroid Build Coastguard Worker       const int slashPos = FileName.ReverseFind_PathSepar();
284*f6dc9357SAndroid Build Coastguard Worker       if (slashPos >= 0)
285*f6dc9357SAndroid Build Coastguard Worker       {
286*f6dc9357SAndroid Build Coastguard Worker         _name1U.SetFrom(FileName, (unsigned)(slashPos + 1));
287*f6dc9357SAndroid Build Coastguard Worker         _name2U = FileName.Ptr(slashPos + 1);
288*f6dc9357SAndroid Build Coastguard Worker       }
289*f6dc9357SAndroid Build Coastguard Worker       else
290*f6dc9357SAndroid Build Coastguard Worker         _name2U = FileName;
291*f6dc9357SAndroid Build Coastguard Worker     }
292*f6dc9357SAndroid Build Coastguard Worker     ReduceString(_name1U, _name1);
293*f6dc9357SAndroid Build Coastguard Worker     ReduceString(_name2U, _name2);
294*f6dc9357SAndroid Build Coastguard Worker   }
295*f6dc9357SAndroid Build Coastguard Worker 
296*f6dc9357SAndroid Build Coastguard Worker   {
297*f6dc9357SAndroid Build Coastguard Worker     const char *strings[] = { _title, _timeStr, _files, _sizesStr, Command, _name1, _name2, _perc };
298*f6dc9357SAndroid Build Coastguard Worker     NFar::g_StartupInfo.ShowMessage(FMSG_LEFTALIGN, NULL, strings, Z7_ARRAY_SIZE(strings), 0);
299*f6dc9357SAndroid Build Coastguard Worker   }
300*f6dc9357SAndroid Build Coastguard Worker 
301*f6dc9357SAndroid Build Coastguard Worker   _wasPrinted = true;
302*f6dc9357SAndroid Build Coastguard Worker   _printedState = *this;
303*f6dc9357SAndroid Build Coastguard Worker   _prevTick = tick;
304*f6dc9357SAndroid Build Coastguard Worker   _prevElapsedSec = elapsedSec;
305*f6dc9357SAndroid Build Coastguard Worker }
306