|
|
/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
dndisp.c
Abstract:
DOS-based NT setup program video display routines.
Author:
Ted Miller (tedm) 30-March-1992
Revision History:
--*/
#include "enduser.h"
#define SCREEN_TOP_SCANLINE 80
#define SCREEN_WIDTH 80
#define SCREEN_HEIGHT 25
BYTE CurrentPixelValue; BYTE LeftMargin; BYTE ScreenX; BYTE ScreenY; BYTE CharWidth; BYTE CharHeight; FPCHAR BannerBitmap;
VOID DispInitialize( VOID )
/*++
Routine Description:
Put the display in a known state and initialize the display package.
Arguments:
None.
Return Value:
None.
--*/
{ VgaInit(); // this clears the screen
FontGetInfo(&CharWidth,&CharHeight);
DispClearClientArea(NULL);
DispSetLeftMargin(TEXT_LEFT_MARGIN); DispPositionCursor(TEXT_LEFT_MARGIN,TEXT_TOP_LINE);
CurrentPixelValue = DEFAULT_TEXT_PIXEL_VALUE; }
VOID DispReinitialize( VOID ) { FontGetInfo(&CharWidth,&CharHeight); }
VOID DispSetCurrentPixelValue( IN BYTE PixelValue ) { CurrentPixelValue = PixelValue; }
FPVOID DispSaveDescriptionArea( OUT USHORT *SaveTop, OUT USHORT *SaveHeight, OUT USHORT *SaveBytesPerRow, OUT USHORT *DescriptionTop ) { *DescriptionTop = (CharHeight > 12) ? 16 : 25; *SaveHeight = CharHeight * 5; *SaveTop = (*DescriptionTop * CharHeight) + SCREEN_TOP_SCANLINE;
return(VgaSaveBlock(0,*SaveTop,640,*SaveHeight,SaveBytesPerRow)); }
VOID DispSetLeftMargin( IN BYTE X ) { LeftMargin = X; }
VOID DispClearClientArea( IN FPCHAR NewBannerBitmap OPTIONAL )
/*++
Routine Description:
Clear the client area of the screen, ie, the area between the header and status line. We do this by restoring the background and banner bitmaps.
Arguments:
None.
Return Value:
None.
--*/
{ if(NewBannerBitmap) { BannerBitmap = strdup(NewBannerBitmap); }
VgaDisplayBitmapFromFile("backgrnd.bmp",0,0,IoBuffer,63*512); redisplay: if(!VgaDisplayBitmapFromFile(BannerBitmap ? BannerBitmap : "enduser.bmp",0,0,IoBuffer,63*512)) { //
// File might not exist
//
if(BannerBitmap) { free(BannerBitmap); BannerBitmap = NULL; goto redisplay; } } }
VOID DispPositionCursor( IN BYTE X, IN BYTE Y )
/*++
Routine Description:
Position the cursor.
Arguments:
X,Y - cursor coords
Return Value:
None.
--*/
{ if(X >= SCREEN_WIDTH) { X = 0; Y++; }
if(Y >= SCREEN_HEIGHT) { Y = 0; }
ScreenX = X; ScreenY = Y; }
VOID DispGetCursorPosition( OUT FPBYTE X, OUT FPBYTE Y ) { *X = ScreenX; *Y = ScreenY; }
VOID DispWriteChar( IN CHAR chr )
/*++
Routine Description:
Write a character in the current attribute at the current position.
Arguments:
chr - Character to write
Return Value:
None.
--*/
{ if(chr == '\n') { ScreenX = LeftMargin; ScreenY++; return; }
//
// Output the character
//
FontWriteChar( chr, ScreenX * CharWidth, SCREEN_TOP_SCANLINE + (ScreenY * CharHeight), CurrentPixelValue, 16 // no background value, text is transparent
); }
VOID DispWriteString( IN FPCHAR String )
/*++
Routine Description:
Write a string on the client area in the current position and adjust the current position. The string is written in the current attribute.
Arguments:
String - null terminated string to write.
Return Value:
None.
--*/
{ FPCHAR p;
for(p=String; *p; p++) { DispWriteChar(*p); if(*p != '\n') { ScreenX++; } } }
|