mirror of
https://github.com/Xevion/easy7zip.git
synced 2026-02-01 00:24:14 -06:00
4.44 beta
This commit is contained in:
committed by
Kornel Lesiński
parent
804edc5756
commit
d9666cf046
Executable
+90
@@ -0,0 +1,90 @@
|
||||
// PercentPrinter.cpp
|
||||
|
||||
#include "StdAfx.h"
|
||||
|
||||
#include "Common/IntToString.h"
|
||||
#include "Common/String.h"
|
||||
|
||||
#include "PercentPrinter.h"
|
||||
|
||||
const int kPaddingSize = 2;
|
||||
const int kPercentsSize = 4;
|
||||
const int kMaxExtraSize = kPaddingSize + 32 + kPercentsSize;
|
||||
|
||||
static void ClearPrev(char *p, int num)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < num; i++) *p++ = '\b';
|
||||
for (i = 0; i < num; i++) *p++ = ' ';
|
||||
for (i = 0; i < num; i++) *p++ = '\b';
|
||||
*p = '\0';
|
||||
}
|
||||
|
||||
void CPercentPrinter::ClosePrint()
|
||||
{
|
||||
if (m_NumExtraChars == 0)
|
||||
return;
|
||||
char s[kMaxExtraSize * 3 + 1];
|
||||
ClearPrev(s, m_NumExtraChars);
|
||||
(*OutStream) << s;
|
||||
m_NumExtraChars = 0;
|
||||
}
|
||||
|
||||
void CPercentPrinter::PrintString(const char *s)
|
||||
{
|
||||
ClosePrint();
|
||||
(*OutStream) << s;
|
||||
}
|
||||
|
||||
void CPercentPrinter::PrintString(const wchar_t *s)
|
||||
{
|
||||
ClosePrint();
|
||||
(*OutStream) << s;
|
||||
}
|
||||
|
||||
void CPercentPrinter::PrintNewLine()
|
||||
{
|
||||
ClosePrint();
|
||||
(*OutStream) << "\n";
|
||||
}
|
||||
|
||||
void CPercentPrinter::RePrintRatio()
|
||||
{
|
||||
char s[32];
|
||||
ConvertUInt64ToString(((m_Total == 0) ? 0 : (m_CurValue * 100 / m_Total)), s);
|
||||
int size = (int)strlen(s);
|
||||
s[size++] = '%';
|
||||
s[size] = '\0';
|
||||
|
||||
int extraSize = kPaddingSize + MyMax(size, kPercentsSize);
|
||||
if (extraSize < m_NumExtraChars)
|
||||
extraSize = m_NumExtraChars;
|
||||
|
||||
char fullString[kMaxExtraSize * 3];
|
||||
char *p = fullString;
|
||||
int i;
|
||||
if (m_NumExtraChars == 0)
|
||||
{
|
||||
for (i = 0; i < extraSize; i++)
|
||||
*p++ = ' ';
|
||||
m_NumExtraChars = extraSize;
|
||||
}
|
||||
|
||||
for (i = 0; i < m_NumExtraChars; i++)
|
||||
*p++ = '\b';
|
||||
m_NumExtraChars = extraSize;
|
||||
for (; size < m_NumExtraChars; size++)
|
||||
*p++ = ' ';
|
||||
strcpy(p, s);
|
||||
(*OutStream) << fullString;
|
||||
OutStream->Flush();
|
||||
m_PrevValue = m_CurValue;
|
||||
}
|
||||
|
||||
void CPercentPrinter::PrintRatio()
|
||||
{
|
||||
if (m_CurValue < m_PrevValue + m_MinStepSize &&
|
||||
m_CurValue + m_MinStepSize > m_PrevValue && m_NumExtraChars != 0)
|
||||
return;
|
||||
RePrintRatio();
|
||||
}
|
||||
Reference in New Issue
Block a user