/*++ 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); }