/* FUNCTIONS ****************************************************************/
-static VOID
-DrawBorder(PPROGRESSBAR Bar)
+static
+VOID
+DrawBorder(
+ PPROGRESSBAR Bar)
{
- COORD coPos;
- DWORD Written;
- SHORT i;
-
- /* draw upper left corner */
- coPos.X = Bar->Left;
- coPos.Y = Bar->Top + 1;
- FillConsoleOutputCharacterA(StdOutput,
- 0xDA, // '+',
- 1,
- coPos,
- &Written);
-
- /* draw upper edge */
- coPos.X = Bar->Left + 1;
- coPos.Y = Bar->Top + 1;
- FillConsoleOutputCharacterA(StdOutput,
- 0xC4, // '-',
- Bar->Right - Bar->Left - 1,
- coPos,
- &Written);
-
- /* draw upper right corner */
- coPos.X = Bar->Right;
- coPos.Y = Bar->Top + 1;
- FillConsoleOutputCharacterA(StdOutput,
- 0xBF, // '+',
- 1,
- coPos,
- &Written);
-
- /* draw left and right edge */
- for (i = Bar->Top + 2; i < Bar->Bottom; i++)
+ COORD coPos;
+ DWORD Written;
+ SHORT i;
+
+ /* draw upper left corner */
+ coPos.X = Bar->Left;
+ coPos.Y = Bar->Top + 1;
+ FillConsoleOutputCharacterA(StdOutput,
+ 0xDA, // '+',
+ 1,
+ coPos,
+ &Written);
+
+ /* draw upper edge */
+ coPos.X = Bar->Left + 1;
+ coPos.Y = Bar->Top + 1;
+ FillConsoleOutputCharacterA(StdOutput,
+ 0xC4, // '-',
+ Bar->Right - Bar->Left - 1,
+ coPos,
+ &Written);
+
+ /* draw upper right corner */
+ coPos.X = Bar->Right;
+ coPos.Y = Bar->Top + 1;
+ FillConsoleOutputCharacterA(StdOutput,
+ 0xBF, // '+',
+ 1,
+ coPos,
+ &Written);
+
+ /* draw left and right edge */
+ for (i = Bar->Top + 2; i < Bar->Bottom; i++)
{
- coPos.X = Bar->Left;
- coPos.Y = i;
- FillConsoleOutputCharacterA(StdOutput,
- 0xB3, // '|',
- 1,
- coPos,
- &Written);
-
- coPos.X = Bar->Right;
- FillConsoleOutputCharacterA(StdOutput,
- 0xB3, //'|',
- 1,
- coPos,
- &Written);
+ coPos.X = Bar->Left;
+ coPos.Y = i;
+ FillConsoleOutputCharacterA(StdOutput,
+ 0xB3, // '|',
+ 1,
+ coPos,
+ &Written);
+
+ coPos.X = Bar->Right;
+ FillConsoleOutputCharacterA(StdOutput,
+ 0xB3, //'|',
+ 1,
+ coPos,
+ &Written);
}
- /* draw lower left corner */
- coPos.X = Bar->Left;
- coPos.Y = Bar->Bottom;
- FillConsoleOutputCharacterA(StdOutput,
- 0xC0, // '+',
- 1,
- coPos,
- &Written);
-
- /* draw lower edge */
- coPos.X = Bar->Left + 1;
- coPos.Y = Bar->Bottom;
- FillConsoleOutputCharacterA(StdOutput,
- 0xC4, // '-',
- Bar->Right - Bar->Left - 1,
- coPos,
- &Written);
-
- /* draw lower right corner */
- coPos.X = Bar->Right;
- coPos.Y = Bar->Bottom;
- FillConsoleOutputCharacterA(StdOutput,
- 0xD9, // '+',
- 1,
- coPos,
- &Written);
+ /* draw lower left corner */
+ coPos.X = Bar->Left;
+ coPos.Y = Bar->Bottom;
+ FillConsoleOutputCharacterA(StdOutput,
+ 0xC0, // '+',
+ 1,
+ coPos,
+ &Written);
+
+ /* draw lower edge */
+ coPos.X = Bar->Left + 1;
+ coPos.Y = Bar->Bottom;
+ FillConsoleOutputCharacterA(StdOutput,
+ 0xC4, // '-',
+ Bar->Right - Bar->Left - 1,
+ coPos,
+ &Written);
+
+ /* draw lower right corner */
+ coPos.X = Bar->Right;
+ coPos.Y = Bar->Bottom;
+ FillConsoleOutputCharacterA(StdOutput,
+ 0xD9, // '+',
+ 1,
+ coPos,
+ &Written);
}
-static VOID
-DrawThickBorder(PPROGRESSBAR Bar)
+
+static
+VOID
+DrawThickBorder(
+ PPROGRESSBAR Bar)
{
- COORD coPos;
- DWORD Written;
- SHORT i;
-
- /* draw upper left corner */
- coPos.X = Bar->Left;
- coPos.Y = Bar->Top + 1;
- FillConsoleOutputCharacterA(StdOutput,
- 0xC9, // '+',
- 1,
- coPos,
- &Written);
-
- /* draw upper edge */
- coPos.X = Bar->Left + 1;
- coPos.Y = Bar->Top + 1;
- FillConsoleOutputCharacterA(StdOutput,
- 0xCD, // '-',
- Bar->Right - Bar->Left - 1,
- coPos,
- &Written);
-
- /* draw upper right corner */
- coPos.X = Bar->Right;
- coPos.Y = Bar->Top + 1;
- FillConsoleOutputCharacterA(StdOutput,
- 0xBB, // '+',
- 1,
- coPos,
- &Written);
-
- /* draw left and right edge */
- for (i = Bar->Top + 2; i < Bar->Bottom; i++)
+ COORD coPos;
+ DWORD Written;
+ SHORT i;
+
+ /* draw upper left corner */
+ coPos.X = Bar->Left;
+ coPos.Y = Bar->Top + 1;
+ FillConsoleOutputCharacterA(StdOutput,
+ 0xC9, // '+',
+ 1,
+ coPos,
+ &Written);
+
+ /* draw upper edge */
+ coPos.X = Bar->Left + 1;
+ coPos.Y = Bar->Top + 1;
+ FillConsoleOutputCharacterA(StdOutput,
+ 0xCD, // '-',
+ Bar->Right - Bar->Left - 1,
+ coPos,
+ &Written);
+
+ /* draw upper right corner */
+ coPos.X = Bar->Right;
+ coPos.Y = Bar->Top + 1;
+ FillConsoleOutputCharacterA(StdOutput,
+ 0xBB, // '+',
+ 1,
+ coPos,
+ &Written);
+
+ /* draw left and right edge */
+ for (i = Bar->Top + 2; i < Bar->Bottom; i++)
{
- coPos.X = Bar->Left;
- coPos.Y = i;
- FillConsoleOutputCharacterA(StdOutput,
- 0xBA, // '|',
- 1,
- coPos,
- &Written);
-
- coPos.X = Bar->Right;
- FillConsoleOutputCharacterA(StdOutput,
- 0xBA, //'|',
- 1,
- coPos,
- &Written);
+ coPos.X = Bar->Left;
+ coPos.Y = i;
+ FillConsoleOutputCharacterA(StdOutput,
+ 0xBA, // '|',
+ 1,
+ coPos,
+ &Written);
+
+ coPos.X = Bar->Right;
+ FillConsoleOutputCharacterA(StdOutput,
+ 0xBA, //'|',
+ 1,
+ coPos,
+ &Written);
}
- /* draw lower left corner */
- coPos.X = Bar->Left;
- coPos.Y = Bar->Bottom;
- FillConsoleOutputCharacterA(StdOutput,
- 0xC8, // '+',
- 1,
- coPos,
- &Written);
-
- /* draw lower edge */
- coPos.X = Bar->Left + 1;
- coPos.Y = Bar->Bottom;
- FillConsoleOutputCharacterA(StdOutput,
- 0xCD, // '-',
- Bar->Right - Bar->Left - 1,
- coPos,
- &Written);
-
- /* draw lower right corner */
- coPos.X = Bar->Right;
- coPos.Y = Bar->Bottom;
- FillConsoleOutputCharacterA(StdOutput,
- 0xBC, // '+',
- 1,
- coPos,
- &Written);
+ /* draw lower left corner */
+ coPos.X = Bar->Left;
+ coPos.Y = Bar->Bottom;
+ FillConsoleOutputCharacterA(StdOutput,
+ 0xC8, // '+',
+ 1,
+ coPos,
+ &Written);
+
+ /* draw lower edge */
+ coPos.X = Bar->Left + 1;
+ coPos.Y = Bar->Bottom;
+ FillConsoleOutputCharacterA(StdOutput,
+ 0xCD, // '-',
+ Bar->Right - Bar->Left - 1,
+ coPos,
+ &Written);
+
+ /* draw lower right corner */
+ coPos.X = Bar->Right;
+ coPos.Y = Bar->Bottom;
+ FillConsoleOutputCharacterA(StdOutput,
+ 0xBC, // '+',
+ 1,
+ coPos,
+ &Written);
}
-static VOID
-DrawProgressBar(PPROGRESSBAR Bar)
+
+static
+VOID
+DrawProgressBar(
+ PPROGRESSBAR Bar)
{
- CHAR TextBuffer[8];
- COORD coPos;
- DWORD Written;
- PROGRESSBAR BarBorder = *Bar;
-
- /* Print percentage */
- sprintf(TextBuffer, "%-3lu%%", Bar->Percent);
-
- coPos.X = Bar->Left + (Bar->Width - 2) / 2;
- coPos.Y = Bar->Top;
- WriteConsoleOutputCharacterA(StdOutput,
- TextBuffer,
- 4,
- coPos,
- &Written);
-
- /* Draw the progress bar border */
- DrawBorder(Bar);
-
- /* Write Text Associated with Bar */
- CONSOLE_SetTextXY(Bar->TextTop, Bar->TextRight, Bar->Text);
-
- /* Draw the progress bar "border" border */
- if (Bar->Double)
- {
- BarBorder.Top -= 5;
- BarBorder.Bottom += 2;
- BarBorder.Right += 5;
- BarBorder.Left -= 5;
- DrawThickBorder(&BarBorder);
- }
-
- /* Draw the bar */
- coPos.X = Bar->Left + 1;
- for (coPos.Y = Bar->Top + 2; coPos.Y <= Bar->Bottom - 1; coPos.Y++)
+ CHAR TextBuffer[8];
+ COORD coPos;
+ DWORD Written;
+ PROGRESSBAR BarBorder = *Bar;
+
+ /* Print percentage */
+ sprintf(TextBuffer, "%-3lu%%", Bar->Percent);
+
+ coPos.X = Bar->Left + (Bar->Width - 2) / 2;
+ coPos.Y = Bar->Top;
+ WriteConsoleOutputCharacterA(StdOutput,
+ TextBuffer,
+ 4,
+ coPos,
+ &Written);
+
+ /* Draw the progress bar border */
+ DrawBorder(Bar);
+
+ /* Write Text Associated with Bar */
+ CONSOLE_SetTextXY(Bar->TextTop, Bar->TextRight, Bar->Text);
+
+ /* Draw the progress bar "border" border */
+ if (Bar->Double)
{
- FillConsoleOutputAttribute(StdOutput,
- FOREGROUND_YELLOW | BACKGROUND_BLUE,
- Bar->Width - 2,
- coPos,
- &Written);
-
- FillConsoleOutputCharacterA(StdOutput,
- ' ',
- Bar->Width - 2,
- coPos,
- &Written);
+ BarBorder.Top -= 5;
+ BarBorder.Bottom += 2;
+ BarBorder.Right += 5;
+ BarBorder.Left -= 5;
+ DrawThickBorder(&BarBorder);
}
+ /* Draw the bar */
+ coPos.X = Bar->Left + 1;
+ for (coPos.Y = Bar->Top + 2; coPos.Y <= Bar->Bottom - 1; coPos.Y++)
+ {
+ FillConsoleOutputAttribute(StdOutput,
+ FOREGROUND_YELLOW | BACKGROUND_BLUE,
+ Bar->Width - 2,
+ coPos,
+ &Written);
+
+ FillConsoleOutputCharacterA(StdOutput,
+ ' ',
+ Bar->Width - 2,
+ coPos,
+ &Written);
+ }
}
-
PPROGRESSBAR
-CreateProgressBar(SHORT Left,
- SHORT Top,
- SHORT Right,
- SHORT Bottom,
- SHORT TextTop,
- SHORT TextRight,
- IN BOOLEAN DoubleEdge,
- char* Text)
+CreateProgressBar(
+ SHORT Left,
+ SHORT Top,
+ SHORT Right,
+ SHORT Bottom,
+ SHORT TextTop,
+ SHORT TextRight,
+ IN BOOLEAN DoubleEdge,
+ CHAR *Text)
{
- PPROGRESSBAR Bar;
+ PPROGRESSBAR Bar;
- Bar = (PPROGRESSBAR)RtlAllocateHeap(ProcessHeap,
- 0,
- sizeof(PROGRESSBAR));
- if (Bar == NULL)
- return(NULL);
+ Bar = (PPROGRESSBAR)RtlAllocateHeap(ProcessHeap,
+ 0,
+ sizeof(PROGRESSBAR));
+ if (Bar == NULL)
+ return NULL;
- Bar->Left = Left;
- Bar->Top = Top;
- Bar->Right = Right;
- Bar->Bottom = Bottom;
- Bar->TextTop = TextTop;
- Bar->TextRight = TextRight;
- Bar->Double = DoubleEdge;
- Bar->Text = Text;
+ Bar->Left = Left;
+ Bar->Top = Top;
+ Bar->Right = Right;
+ Bar->Bottom = Bottom;
+ Bar->TextTop = TextTop;
+ Bar->TextRight = TextRight;
+ Bar->Double = DoubleEdge;
+ Bar->Text = Text;
- Bar->Width = Bar->Right - Bar->Left + 1;
+ Bar->Width = Bar->Right - Bar->Left + 1;
- Bar->Percent = 0;
- Bar->Pos = 0;
+ Bar->Percent = 0;
+ Bar->Pos = 0;
- Bar->StepCount = 0;
- Bar->CurrentStep = 0;
+ Bar->StepCount = 0;
+ Bar->CurrentStep = 0;
- DrawProgressBar(Bar);
+ DrawProgressBar(Bar);
- return(Bar);
+ return Bar;
}
VOID
-DestroyProgressBar(PPROGRESSBAR Bar)
+DestroyProgressBar(
+ PPROGRESSBAR Bar)
{
- RtlFreeHeap(ProcessHeap,
- 0,
- Bar);
+ RtlFreeHeap(ProcessHeap, 0, Bar);
}
+
VOID
-ProgressSetStepCount(PPROGRESSBAR Bar,
- ULONG StepCount)
+ProgressSetStepCount(
+ PPROGRESSBAR Bar,
+ ULONG StepCount)
{
- Bar->CurrentStep = 0;
- Bar->StepCount = StepCount;
+ Bar->CurrentStep = 0;
+ Bar->StepCount = StepCount;
- DrawProgressBar(Bar);
+ DrawProgressBar(Bar);
}
VOID
-ProgressNextStep(PPROGRESSBAR Bar)
+ProgressNextStep(
+ PPROGRESSBAR Bar)
{
- ProgressSetStep(Bar, Bar->CurrentStep + 1);
+ ProgressSetStep(Bar, Bar->CurrentStep + 1);
}
VOID
-ProgressSetStep (PPROGRESSBAR Bar,
- ULONG Step)
+ProgressSetStep(
+ PPROGRESSBAR Bar,
+ ULONG Step)
{
- CHAR TextBuffer[8];
- COORD coPos;
- DWORD Written;
- ULONG NewPercent;
- ULONG NewPos;
+ CHAR TextBuffer[8];
+ COORD coPos;
+ DWORD Written;
+ ULONG NewPercent;
+ ULONG NewPos;
- if (Step > Bar->StepCount)
- return;
+ if (Step > Bar->StepCount)
+ return;
- Bar->CurrentStep = Step;
+ Bar->CurrentStep = Step;
- /* Calculate new percentage */
- NewPercent = (ULONG)(((100.0 * (float)Bar->CurrentStep) / (float)Bar->StepCount) + 0.5);
+ /* Calculate new percentage */
+ NewPercent = (ULONG)(((100.0 * (float)Bar->CurrentStep) / (float)Bar->StepCount) + 0.5);
- /* Redraw precentage if changed */
- if (Bar->Percent != NewPercent)
+ /* Redraw precentage if changed */
+ if (Bar->Percent != NewPercent)
{
- Bar->Percent = NewPercent;
+ Bar->Percent = NewPercent;
- sprintf(TextBuffer, "%-3lu%%", Bar->Percent);
+ sprintf(TextBuffer, "%-3lu%%", Bar->Percent);
- coPos.X = Bar->Left + (Bar->Width - 2) / 2;
- coPos.Y = Bar->Top;
- WriteConsoleOutputCharacterA(StdOutput,
- TextBuffer,
- 4,
- coPos,
- &Written);
+ coPos.X = Bar->Left + (Bar->Width - 2) / 2;
+ coPos.Y = Bar->Top;
+ WriteConsoleOutputCharacterA(StdOutput,
+ TextBuffer,
+ 4,
+ coPos,
+ &Written);
}
- /* Calculate bar position */
- NewPos = (ULONG)((((float)(Bar->Width - 2) * 2.0 * (float)Bar->CurrentStep) / (float)Bar->StepCount) + 0.5);
+ /* Calculate bar position */
+ NewPos = (ULONG)((((float)(Bar->Width - 2) * 2.0 * (float)Bar->CurrentStep) / (float)Bar->StepCount) + 0.5);
- /* Redraw bar if changed */
- if (Bar->Pos != NewPos)
+ /* Redraw bar if changed */
+ if (Bar->Pos != NewPos)
{
- Bar->Pos = NewPos;
-
- for (coPos.Y = Bar->Top + 2; coPos.Y <= Bar->Bottom - 1; coPos.Y++)
- {
- coPos.X = Bar->Left + 1;
- FillConsoleOutputCharacterA(StdOutput,
- 0xDB,
- Bar->Pos / 2,
- coPos,
- &Written);
- coPos.X += Bar->Pos/2;
-
- if (NewPos & 1)
- {
- FillConsoleOutputCharacterA(StdOutput,
- 0xDD,
- 1,
- coPos,
- &Written);
- coPos.X++;
- }
-
- if (coPos.X <= Bar->Right - 1)
- {
- FillConsoleOutputCharacterA(StdOutput,
- ' ',
- Bar->Right - coPos.X,
- coPos,
- &Written);
- }
- }
+ Bar->Pos = NewPos;
+
+ for (coPos.Y = Bar->Top + 2; coPos.Y <= Bar->Bottom - 1; coPos.Y++)
+ {
+ coPos.X = Bar->Left + 1;
+ FillConsoleOutputCharacterA(StdOutput,
+ 0xDB,
+ Bar->Pos / 2,
+ coPos,
+ &Written);
+ coPos.X += Bar->Pos/2;
+
+ if (NewPos & 1)
+ {
+ FillConsoleOutputCharacterA(StdOutput,
+ 0xDD,
+ 1,
+ coPos,
+ &Written);
+ coPos.X++;
+ }
+
+ if (coPos.X <= Bar->Right - 1)
+ {
+ FillConsoleOutputCharacterA(StdOutput,
+ ' ',
+ Bar->Right - coPos.X,
+ coPos,
+ &Written);
+ }
+ }
}
}