221 lines
3.7 KiB
C
221 lines
3.7 KiB
C
/*++
|
|
|
|
Copyright (c) 1992 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
dngauge.c
|
|
|
|
Abstract:
|
|
|
|
Code implementing a gas gauge for file copies for DOS-hosted NT Setup.
|
|
|
|
Author:
|
|
|
|
Ted Miller (tedm) 14-April-1992
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
|
|
#include "enduser.h"
|
|
|
|
#define THERM_WIDTH 500
|
|
#define THERM_HEIGHT 18
|
|
|
|
#define FRAME_THICK 2
|
|
#define MARGIN_LEFT 5
|
|
#define MARGIN_RIGHT 5
|
|
#define MARGIN_TOP 6
|
|
#define MARGIN_BOTTOM (CharHeight+4)
|
|
|
|
#define FRAME_WIDTH (THERM_WIDTH+(2*FRAME_THICK)+MARGIN_LEFT+MARGIN_RIGHT)
|
|
#define FRAME_HEIGHT (THERM_HEIGHT+(2*FRAME_THICK)+MARGIN_TOP+MARGIN_BOTTOM)
|
|
|
|
#define FRAME_X ((640-FRAME_WIDTH)/2)
|
|
#define FRAME_Y 300
|
|
|
|
#define THERM_X (FRAME_X + FRAME_THICK + MARGIN_LEFT)
|
|
#define THERM_Y (FRAME_Y + FRAME_THICK + MARGIN_TOP)
|
|
|
|
#define FRAME_COLOR VGAPIX_LIGHT_GRAY
|
|
#define MARGIN_COLOR VGAPIX_BLUE
|
|
#define THERM_COLOR VGAPIX_LIGHT_YELLOW
|
|
|
|
|
|
ULONG TickCount;
|
|
ULONG TickedSoFar;
|
|
unsigned CurrentPercent;
|
|
unsigned CurrentThermWidth;
|
|
|
|
extern BYTE CharWidth;
|
|
extern BYTE CharHeight;
|
|
|
|
VOID
|
|
pGaugeDraw(
|
|
VOID
|
|
);
|
|
|
|
|
|
VOID
|
|
GaugeInit(
|
|
IN ULONG RangeMax
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Initialize the gas gauge. This includes drawing the gas gauge at 0%
|
|
and setting some global variables.
|
|
|
|
Arguments:
|
|
|
|
RangeMax - supplies maximum tick count that 100% represents.
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
TickCount = RangeMax;
|
|
TickedSoFar = 0;
|
|
CurrentPercent = 0;
|
|
CurrentThermWidth = 0;
|
|
|
|
pGaugeDraw();
|
|
}
|
|
|
|
|
|
VOID
|
|
DnpRepaintGaugeTherm(
|
|
IN BOOL ForceRepaint
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Draw the entire gauge in its current state.
|
|
|
|
Arguments:
|
|
|
|
ForceRepaint - if TRUE, the gauge is redrawn even if the percentage
|
|
hasn't changed since the last time the gauge was redrawn.
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
unsigned PercentComplete;
|
|
unsigned Width;
|
|
char text[10];
|
|
|
|
if(!TickCount) {
|
|
return;
|
|
}
|
|
|
|
//
|
|
// Figure out the percent complete and how many pixels
|
|
// of width the current tick count represents on-screen.
|
|
//
|
|
PercentComplete = (unsigned)(100L * TickedSoFar / TickCount);
|
|
Width = (unsigned)(THERM_WIDTH * TickedSoFar / TickCount);
|
|
|
|
if(ForceRepaint || (Width != CurrentThermWidth)) {
|
|
|
|
CurrentThermWidth = Width;
|
|
|
|
VgaClearRegion(THERM_X,THERM_Y,Width,THERM_HEIGHT,THERM_COLOR);
|
|
|
|
if(ForceRepaint || (CurrentPercent != PercentComplete)) {
|
|
|
|
CurrentPercent = PercentComplete;
|
|
|
|
Width = sprintf(text,"%u%%",CurrentPercent);
|
|
|
|
FontWriteString(
|
|
text,
|
|
(640-(CharWidth*Width))/2,
|
|
THERM_Y + THERM_HEIGHT + ((MARGIN_BOTTOM-CharHeight)/2) + 1,
|
|
VGAPIX_LIGHT_GRAY,
|
|
VGAPIX_BLUE
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
VOID
|
|
GaugeDelta(
|
|
IN ULONG Delta
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
'Tick' the gas gauge by adding a given delta to the progress so far.
|
|
Adjust the thermometer and percent-complete readouts.
|
|
|
|
Arguments:
|
|
|
|
Delta - supplies additional progress units.
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
TickedSoFar += Delta;
|
|
if(TickedSoFar > TickCount) {
|
|
TickedSoFar = TickCount;
|
|
}
|
|
DnpRepaintGaugeTherm(FALSE);
|
|
}
|
|
|
|
|
|
VOID
|
|
pGaugeDraw(
|
|
VOID
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Redraw the gas gauge in its current state.
|
|
|
|
Arguments:
|
|
|
|
None.
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
|
|
{
|
|
VgaClearRegion(FRAME_X,FRAME_Y,FRAME_WIDTH,FRAME_HEIGHT,FRAME_COLOR);
|
|
|
|
VgaClearRegion(
|
|
FRAME_X + FRAME_THICK,
|
|
FRAME_Y + FRAME_THICK,
|
|
FRAME_WIDTH - (2*FRAME_THICK),
|
|
FRAME_HEIGHT - (2*FRAME_THICK),
|
|
MARGIN_COLOR
|
|
);
|
|
|
|
DnpRepaintGaugeTherm(TRUE);
|
|
}
|