/*++ 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 "winnt.h" #include unsigned FileCount; unsigned FilesCopied; unsigned CurrentPercent; int GaugeChar; VOID DnInitGauge( IN unsigned NumberOfFiles, IN PSCREEN AdditionalScreen OPTIONAL ) /*++ Routine Description: Initialize the gas gauge. This includes drawing the gas gauge at 0% and setting some global variables. Arguments: NumberOfFiles - supplies total number of files that 100% represents. Screen - If specified, supplies a screen to display along with the gas gauge. Return Value: None. --*/ { FileCount = NumberOfFiles; FilesCopied = 0; CurrentPercent = 0; GaugeChar = DnGetGaugeChar(); DnDrawGauge(AdditionalScreen); } VOID DnpRepaintGauge( IN BOOLEAN ForceRepaint ) /*++ Routine Description: Draw the entire gauge inits 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 temp; char Therm[GAUGE_WIDTH+1]; unsigned SpacesOnScreen; #ifdef CODEPAGE_437 BOOLEAN HalfSpace; #endif if(!FileCount) { return; } // // Figure out the percent complete. // PercentComplete = (unsigned)(100L * FilesCopied / FileCount); if(ForceRepaint || (PercentComplete != CurrentPercent)) { CurrentPercent = PercentComplete; // // Figure out how many spaces this represents on-screen. // temp = CurrentPercent * GAUGE_WIDTH; SpacesOnScreen = temp / 100; memset(Therm,GaugeChar,SpacesOnScreen); Therm[SpacesOnScreen] = '\0'; DnPositionCursor(GAUGE_THERM_X,GAUGE_THERM_Y); DnSetGaugeAttribute(TRUE); DnWriteString(Therm); DnSetGaugeAttribute(FALSE); sprintf(Therm,"%u%%",CurrentPercent); DnPositionCursor(GAUGE_PERCENT_X,GAUGE_PERCENT_Y); DnWriteString(Therm); } } VOID DnTickGauge( VOID ) /*++ Routine Description: 'Tick' the gas gauge, ie, indicate that another file has been copied. Adjust the thermometer and percent-complete readouts. Arguments: None. Return Value: None. --*/ { if(FilesCopied < FileCount) { FilesCopied++; } DnpRepaintGauge(FALSE); } VOID DnDrawGauge( IN PSCREEN AdditionalScreen OPTIONAL ) /*++ Routine Description: Clear the client area and redraw the gas gauge in its current state. Arguments: Screen - If specified, supplies a screen to display along with the gas gauge. Return Value: None. --*/ { DnClearClientArea(); if(AdditionalScreen) { DnDisplayScreen(AdditionalScreen); } DnDisplayScreen(&DnsGauge); DnpRepaintGauge(TRUE); }