ReactOS 0.4.15-dev-7788-g1ad9096
common.c File Reference
#include "precomp.h"
Include dependency graph for common.c:

Go to the source code of this file.

Functions

static VOID NTAPI BitBlt (_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
 
static VOID NTAPI RleBitBlt (_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_ PUCHAR Buffer)
 
ULONG NTAPI VidSetTextColor (_In_ ULONG Color)
 
VOID NTAPI VidDisplayStringXY (_In_z_ PUCHAR String, _In_ ULONG Left, _In_ ULONG Top, _In_ BOOLEAN Transparent)
 
VOID NTAPI VidSetScrollRegion (_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Right, _In_ ULONG Bottom)
 
VOID NTAPI VidDisplayString (_In_z_ PUCHAR String)
 
VOID NTAPI VidBufferToScreenBlt (_In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_ ULONG Delta)
 
VOID NTAPI VidBitBlt (_In_ PUCHAR Buffer, _In_ ULONG Left, _In_ ULONG Top)
 

Variables

UCHAR VidpTextColor = BV_COLOR_WHITE
 
ULONG VidpCurrentX = 0
 
ULONG VidpCurrentY = 0
 
ULONG VidpScrollRegion [4]
 
const RGBQUAD VidpDefaultPalette [BV_MAX_COLORS]
 
static BOOLEAN ClearRow = FALSE
 

Function Documentation

◆ BitBlt()

static VOID NTAPI BitBlt ( _In_ ULONG  Left,
_In_ ULONG  Top,
_In_ ULONG  Width,
_In_ ULONG  Height,
_In_reads_bytes_(Delta *Height) PUCHAR  Buffer,
_In_ ULONG  BitsPerPixel,
_In_ ULONG  Delta 
)
static

Definition at line 49 of file common.c.

57{
58 ULONG X, Y, Pixel;
61 const ULONG Bottom = Top + Height;
62 const ULONG Right = Left + Width;
63
64 /* Check if the buffer isn't 4bpp */
65 if (BitsPerPixel != 4)
66 {
67 /* FIXME: TODO */
68 DbgPrint("Unhandled BitBlt\n"
69 "%lux%lu @ (%lu|%lu)\n"
70 "Bits Per Pixel %lu\n"
71 "Buffer: %p. Delta: %lu\n",
72 Width,
73 Height,
74 Left,
75 Top,
76 BitsPerPixel,
77 Buffer,
78 Delta);
79 return;
80 }
81
83
84 /* 4bpp blitting */
85 for (Y = Top; Y < Bottom; ++Y)
86 {
88
89 for (X = Left, Pixel = 0;
90 X < Right;
91 ++X, ++Pixel)
92 {
93 if (Pixel % 2 == 0)
94 {
95 /* Extract colors at every two pixels */
97
98 SetPixel(X, Y, Colors >> 4);
99 }
100 else
101 {
102 SetPixel(X, Y, Colors & 0x0F);
103 }
104 }
105
106 Buffer += Delta;
107 }
108}
Colors
Definition: ansiprsr.h:4
FORCEINLINE VOID SetPixel(_In_ ULONG Left, _In_ ULONG Top, _In_ UCHAR Color)
Definition: arm.h:50
static LPHIST_ENTRY Bottom
Definition: history.c:54
static LPHIST_ENTRY Top
Definition: history.c:53
Definition: bufpool.h:45
#define Y(I)
#define DbgPrint
Definition: hal.h:12
#define X(b, s)
VOID PrepareForSetPixel(VOID)
Definition: vga.c:81
unsigned char * PUCHAR
Definition: typedefs.h:53
uint32_t ULONG
Definition: typedefs.h:59
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
Definition: font.h:89
_In_ HFONT _Out_ PUINT Height
Definition: font.h:88
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR InputBuffer
Definition: wdfiotarget.h:953
static ULONG Delta
Definition: xboxvideo.c:33
unsigned char UCHAR
Definition: xmlstorage.h:181

Referenced by CMenuDeskBar::_OnPaint(), AboutDlgProc(), add_ruler_units(), alpha_blend_image(), ANIMATE_PaintFrame(), ANIMATE_TransparentBlt(), BitBltFromClipboard(), CDimmedWindow::Blt(), BltCard(), C1_DrawLabel(), C1_InvertButton(), C1_OnDraw(), CDimmedWindow::Capture(), CaptureScreen(), CardBlt(), CC_PaintColorGraph(), CC_PaintCross(), check_BitBlt_pixel(), check_bits(), cicChangeBitmapColor(), cicConvertBlackBKGBitmap(), cicCreateDisabledBitmap(), cicCreateMaskBmp(), cicCreateShadowMaskBmp(), cicDrawMaskBmpOnDC(), cicMirrorBitmap(), ClippedBitBlt(), ClockWndProc(), ColorKeyedMaskBlt(), COMCTL32_EnsureBitmapSize(), ConvertBitmapTo32Bpp(), CCicLibMenuItem::CreateBitmap(), CreateMDIMenuBitmap(), CreateStarBitmap(), ddraw_surface_update_frontbuffer(), device_load_logo(), RdpClientUI::Display_DrawGlyph(), RdpClientUI::Display_MemBlt(), RdpClientUI::Display_ScreenBlt(), RdpClientUI::Display_TriBlt(), RdpClientUI::DisplayWindowProc(), DoBlt(), CCanvasWindow::DoDraw(), Draw(), draw_graphics(), DrawCard(), DrawFace(), DrawGlyph(), DrawHorzCardStrip(), DrawIconOnOwnerDrawnButtons(), CUIFButton::DrawIconProc(), PictureButton::DrawItem(), DrawLeds(), DrawMine(), DrawProc(), DrawTileBitmap(), DrawVertCardStrip(), dup_bitmap(), GeneralPageProc(), get_bitmap_info(), GetDiaogTextureBrush(), getSubImage(), Ghost_OnDraw(), GraphCtrl_AddPoint(), GraphCtrl_WndProc(), HEADER_DrawItem(), HelDdSurfBlt(), HelDdSurfLock(), HelDdSurfUnlock(), HEXEDIT_WM_PAINT(), HLPFILE_RtfAddTransparentBitmap(), ImageList_Add(), ImageList_AddMasked(), ImageList_BeginDrag(), ImageList_Copy(), imagelist_copy_images(), ImageList_DragMove(), ImageList_DragShowNolock(), ImageList_DrawIndirect(), ImageList_Duplicate(), ImageList_GetIcon(), IMAGELIST_InternalExpandBitmaps(), ImageList_Merge(), ImageList_Replace(), ImageList_ReplaceIcon(), Imm32DrawBitmap(), IntDrawState(), IntGetWindowBitmap(), IntGrayString(), LISTVIEW_Refresh(), LoadCardBitmapsFromLibrary(), MainWndProc(), mi_paint_rect(), CardRegion::MoveDragCardTo(), mstsc_WndProc(), NT5_DrawBaseBackground(), NT5_DrawLogoffIcon(), OLEPictureImpl_LoadWICSource(), CMainWindow::OnCommand(), OnDrawItem(), OnPaint(), CFullscreenWindow::OnPaint(), CMiniatureWindow::OnPaint(), CPaletteWindow::OnPaint(), CDownloaderProgress::OnPaint(), CBrandBand::OnPaint(), StartMenuRoot::Paint(), PaintBanner(), CardWindow::PaintCardRgn(), PaintCells(), PAINTING_DrawStateJam(), CAppScrnshotPreview::PaintOnDC(), PlayEnhMetaFileRecord(), PlayMetaFileRecord(), ProgressDlg::ProcessWindowMessage(), PROPSHEET_Paint(), putSubImage(), RosImageProc(), Run(), ScreenSaverProc(), show_image(), SIC_OverlayShortcutImage(), SkewDIB(), START_TEST(), StatusDialogProc(), StatusMessageWindowProc(), swapchain_gdi_frontbuffer_updated(), T1_DrawLabels(), T1_OnDraw(), test_32bit_ddb(), test_bitmap_colors(), test_clipping(), Test_CreateDIBitmap_CBM_CREATDIB(), test_D3DKMTCreateDCFromMemory(), test_dibsections(), test_emf_BitBlt(), test_printer_dc(), Test_Rectangle(), Test_SrcMono1(), ThemeEndBufferedPaint(), TOOLBAR_DrawMasked(), TRACKBAR_Refresh(), UXTHEME_SizedBlt(), VidBitBlt(), VidBufferToScreenBlt(), WinGBitBlt(), WndProc(), and ZoomWnd_OnDraw().

◆ RleBitBlt()

static VOID NTAPI RleBitBlt ( _In_ ULONG  Left,
_In_ ULONG  Top,
_In_ ULONG  Width,
_In_ ULONG  Height,
_In_ PUCHAR  Buffer 
)
static

Definition at line 112 of file common.c.

118{
119 ULONG YDelta;
120 ULONG x;
121 ULONG RleValue, NewRleValue;
122 ULONG Color, Color2;
123 ULONG i, j;
124 ULONG Code;
125
127
128 /* Set Y height and current X value and start loop */
129 YDelta = Top + Height - 1;
130 x = Left;
131 for (;;)
132 {
133 /* Get the current value and advance in the buffer */
134 RleValue = *Buffer;
135 Buffer++;
136 if (RleValue)
137 {
138 /* Check if we've gone past the edge */
139 if ((x + RleValue) > (Width + Left))
140 {
141 /* Fixup the pixel value */
142 RleValue = Left - x + Width;
143 }
144
145 /* Get the new value */
146 NewRleValue = *Buffer;
147
148 /* Get the two colors */
149 Color = NewRleValue >> 4;
150 Color2 = NewRleValue & 0xF;
151
152 /* Increase buffer position */
153 Buffer++;
154
155 /* Check if we need to do a fill */
156 if (Color == Color2)
157 {
158 /* Do a fill and continue the loop */
159 RleValue += x;
160 VidSolidColorFill(x, YDelta, RleValue - 1, YDelta, (UCHAR)Color);
161 x = RleValue;
162 continue;
163 }
164
165 /* Check if the pixel value is 1 or below */
166 if (RleValue > 1)
167 {
168 /* Set loop variables */
169 for (i = (RleValue - 2) / 2 + 1; i > 0; --i)
170 {
171 /* Set the pixels */
172 SetPixel(x, YDelta, (UCHAR)Color);
173 x++;
174 SetPixel(x, YDelta, (UCHAR)Color2);
175 x++;
176
177 /* Decrease pixel value */
178 RleValue -= 2;
179 }
180 }
181
182 /* Check if there is any value at all */
183 if (RleValue)
184 {
185 /* Set the pixel and increase position */
186 SetPixel(x, YDelta, (UCHAR)Color);
187 x++;
188 }
189
190 /* Start over */
191 continue;
192 }
193
194 /* Get the current pixel value */
195 RleValue = *Buffer;
196 Code = RleValue;
197 switch (Code)
198 {
199 /* Case 0 */
200 case 0:
201 {
202 /* Set new x value, decrease distance and restart */
203 x = Left;
204 YDelta--;
205 Buffer++;
206 continue;
207 }
208
209 /* Case 1 */
210 case 1:
211 {
212 /* Done */
213 return;
214 }
215
216 /* Case 2 */
217 case 2:
218 {
219 /* Set new x value, decrease distance and restart */
220 Buffer++;
221 x += *Buffer;
222 Buffer++;
223 YDelta -= *Buffer;
224 Buffer++;
225 continue;
226 }
227
228 /* Other values */
229 default:
230 {
231 Buffer++;
232 break;
233 }
234 }
235
236 /* Check if we've gone past the edge */
237 if ((x + RleValue) > (Width + Left))
238 {
239 /* Set fixed up loop count */
240 i = RleValue - Left - Width + x;
241
242 /* Fixup pixel value */
243 RleValue -= i;
244 }
245 else
246 {
247 /* Clear loop count */
248 i = 0;
249 }
250
251 /* Check the value now */
252 if (RleValue > 1)
253 {
254 /* Set loop variables */
255 for (j = (RleValue - 2) / 2 + 1; j > 0; --j)
256 {
257 /* Get the new value */
258 NewRleValue = *Buffer;
259
260 /* Get the two colors */
261 Color = NewRleValue >> 4;
262 Color2 = NewRleValue & 0xF;
263
264 /* Increase buffer position */
265 Buffer++;
266
267 /* Set the pixels */
268 SetPixel(x, YDelta, (UCHAR)Color);
269 x++;
270 SetPixel(x, YDelta, (UCHAR)Color2);
271 x++;
272
273 /* Decrease pixel value */
274 RleValue -= 2;
275 }
276 }
277
278 /* Check if there is any value at all */
279 if (RleValue)
280 {
281 /* Set the pixel and increase position */
282 Color = *Buffer >> 4;
283 Buffer++;
284 SetPixel(x, YDelta, (UCHAR)Color);
285 x++;
286 i--;
287 }
288
289 /* Check loop count now */
290 if ((LONG)i > 0)
291 {
292 /* Decrease it */
293 i--;
294
295 /* Set new position */
296 Buffer = Buffer + (i / 2) + 1;
297 }
298
299 /* Check if we need to increase the buffer */
300 if ((ULONG_PTR)Buffer & 1) Buffer++;
301 }
302}
VOID NTAPI VidSolidColorFill(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Right, _In_ ULONG Bottom, _In_ UCHAR Color)
Definition: bootvid.c:274
#define Code
Definition: deflate.h:80
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
long LONG
Definition: pedump.c:60
uint32_t ULONG_PTR
Definition: typedefs.h:65
_In_ UCHAR _In_ UCHAR _In_ ULONG Code
Definition: wdfdevice.h:1701

Referenced by VidBitBlt().

◆ VidBitBlt()

VOID NTAPI VidBitBlt ( _In_ PUCHAR  Buffer,
_In_ ULONG  Left,
_In_ ULONG  Top 
)

Definition at line 470 of file common.c.

474{
475 PBITMAPINFOHEADER BitmapInfoHeader;
476 LONG Delta;
477 PUCHAR BitmapOffset;
478 ULONG PaletteCount;
479
480 /* Get the Bitmap Header */
481 BitmapInfoHeader = (PBITMAPINFOHEADER)Buffer;
482
483 /* Initialize the palette */
484 PaletteCount = BitmapInfoHeader->biClrUsed ?
485 BitmapInfoHeader->biClrUsed : BV_MAX_COLORS;
486 InitPaletteWithTable((PULONG)(Buffer + BitmapInfoHeader->biSize),
487 PaletteCount);
488
489 /* Make sure we can support this bitmap */
490 ASSERT((BitmapInfoHeader->biBitCount * BitmapInfoHeader->biPlanes) <= 4);
491
492 /*
493 * Calculate the delta and align it on 32-bytes, then calculate
494 * the actual start of the bitmap data.
495 */
496 Delta = (BitmapInfoHeader->biBitCount * BitmapInfoHeader->biWidth) + 31;
497 Delta >>= 3;
498 Delta &= ~3;
499 BitmapOffset = Buffer + sizeof(BITMAPINFOHEADER) + PaletteCount * sizeof(ULONG);
500
501 /* Check the compression of the bitmap */
502 if (BitmapInfoHeader->biCompression == BI_RLE4)
503 {
504 /* Make sure we have a width and a height */
505 if ((BitmapInfoHeader->biWidth) && (BitmapInfoHeader->biHeight))
506 {
507 /* We can use RLE Bit Blt */
508 RleBitBlt(Left,
509 Top,
510 BitmapInfoHeader->biWidth,
511 BitmapInfoHeader->biHeight,
512 BitmapOffset);
513 }
514 }
515 else
516 {
517 /* Check if the height is negative */
518 if (BitmapInfoHeader->biHeight < 0)
519 {
520 /* Make it positive in the header */
521 BitmapInfoHeader->biHeight *= -1;
522 }
523 else
524 {
525 /* Update buffer offset */
526 BitmapOffset += ((BitmapInfoHeader->biHeight - 1) * Delta);
527 Delta *= -1;
528 }
529
530 /* Make sure we have a width and a height */
531 if ((BitmapInfoHeader->biWidth) && (BitmapInfoHeader->biHeight))
532 {
533 /* Do the BitBlt */
534 BitBlt(Left,
535 Top,
536 BitmapInfoHeader->biWidth,
537 BitmapInfoHeader->biHeight,
538 BitmapOffset,
539 BitmapInfoHeader->biBitCount,
540 Delta);
541 }
542 }
543}
VOID NTAPI InitPaletteWithTable(_In_ PULONG Table, _In_ ULONG Count)
Definition: bootvid.c:170
static VOID NTAPI RleBitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_ PUCHAR Buffer)
Definition: common.c:112
static VOID NTAPI BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
Definition: common.c:49
#define BI_RLE4
Definition: precomp.h:48
struct tagBITMAPINFOHEADER * PBITMAPINFOHEADER
#define ASSERT(a)
Definition: mode.c:44
#define BV_MAX_COLORS
Definition: display.h:32
USHORT biBitCount
Definition: precomp.h:37
ULONG biCompression
Definition: precomp.h:38
uint32_t * PULONG
Definition: typedefs.h:59

Referenced by BootLogoFadeIn(), and InbvBitBlt().

◆ VidBufferToScreenBlt()

VOID NTAPI VidBufferToScreenBlt ( _In_reads_bytes_(Delta *Height) PUCHAR  Buffer,
_In_ ULONG  Left,
_In_ ULONG  Top,
_In_ ULONG  Width,
_In_ ULONG  Height,
_In_ ULONG  Delta 
)

Definition at line 452 of file common.c.

459{
460 /* Make sure we have a width and height */
461 if (!Width || !Height)
462 return;
463
464 /* Call the helper function */
465 BitBlt(Left, Top, Width, Height, Buffer, 4, Delta);
466}

Referenced by InbvBufferToScreenBlt(), and InbvRotationThread().

◆ VidDisplayString()

VOID NTAPI VidDisplayString ( _In_z_ PUCHAR  String)

Definition at line 374 of file common.c.

376{
377 /* Start looping the string */
378 for (; *String; ++String)
379 {
380 /* Treat new-line separately */
381 if (*String == '\n')
382 {
383 /* Modify Y position */
386 {
387 /* Scroll the view and clear the current row */
391 }
392 else
393 {
394 /* Preserve the current row */
396 }
397
398 /* Update current X */
400
401 /* No need to clear this row */
402 ClearRow = FALSE;
403 }
404 else if (*String == '\r')
405 {
406 /* Update current X */
408
409 /* If a new-line does not follow we will clear the current row */
410 if (String[1] != '\n') ClearRow = TRUE;
411 }
412 else
413 {
414 /* Clear the current row if we had a return-carriage without a new-line */
415 if (ClearRow)
416 {
418 ClearRow = FALSE;
419 }
420
421 /* Display this character */
424
425 /* Check if we should scroll */
427 {
428 /* Update Y position and check if we should scroll it */
431 {
432 /* Scroll the view and clear the current row */
436 }
437 else
438 {
439 /* Preserve the current row */
441 }
442
443 /* Update current X */
445 }
446 }
447 }
448}
VOID NTAPI DoScroll(_In_ ULONG Scroll)
Definition: bootvid.c:59
VOID NTAPI PreserveRow(_In_ ULONG CurrentTop, _In_ ULONG TopDelta, _In_ BOOLEAN Restore)
Definition: bootvid.c:107
VOID NTAPI DisplayCharacter(_In_ CHAR Character, _In_ ULONG Left, _In_ ULONG Top, _In_ ULONG TextColor, _In_ ULONG BackColor)
Definition: bootvid.c:13
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
UCHAR VidpTextColor
Definition: common.c:5
ULONG VidpCurrentY
Definition: common.c:8
ULONG VidpCurrentX
Definition: common.c:7
ULONG VidpScrollRegion[4]
Definition: common.c:10
static BOOLEAN ClearRow
Definition: common.c:43
#define BOOTCHAR_HEIGHT
Definition: precomp.h:27
#define BOOTCHAR_WIDTH
Definition: precomp.h:28
#define BV_COLOR_NONE
Definition: display.h:31
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2433

Referenced by InbvDisplayString().

◆ VidDisplayStringXY()

VOID NTAPI VidDisplayStringXY ( _In_z_ PUCHAR  String,
_In_ ULONG  Left,
_In_ ULONG  Top,
_In_ BOOLEAN  Transparent 
)

Definition at line 324 of file common.c.

329{
330 ULONG BackColor;
331
332 /*
333 * If the caller wanted transparent, then send the special value (16),
334 * else use our default and call the helper routine.
335 */
336 BackColor = Transparent ? BV_COLOR_NONE : BV_COLOR_LIGHT_CYAN;
337
338 /* Loop every character and adjust the position */
339 for (; *String; ++String, Left += BOOTCHAR_WIDTH)
340 {
341 /* Display a character */
342 DisplayCharacter(*String, Left, Top, BV_COLOR_LIGHT_BLUE, BackColor);
343 }
344}
#define BV_COLOR_LIGHT_CYAN
Definition: display.h:29
#define BV_COLOR_LIGHT_BLUE
Definition: display.h:27

◆ VidSetScrollRegion()

VOID NTAPI VidSetScrollRegion ( _In_ ULONG  Left,
_In_ ULONG  Top,
_In_ ULONG  Right,
_In_ ULONG  Bottom 
)

Definition at line 348 of file common.c.

353{
354 /* Assert alignment */
355 ASSERT((Left % BOOTCHAR_WIDTH) == 0);
356 ASSERT((Right % BOOTCHAR_WIDTH) == BOOTCHAR_WIDTH - 1);
357
358 /* Set Scroll Region */
359 VidpScrollRegion[0] = Left;
361 VidpScrollRegion[2] = Right;
363
364 /* Set current X and Y */
365 VidpCurrentX = Left;
367}

Referenced by InbvSetScrollRegion().

◆ VidSetTextColor()

ULONG NTAPI VidSetTextColor ( _In_ ULONG  Color)

Definition at line 311 of file common.c.

313{
314 ULONG OldColor;
315
316 /* Save the old color and set the new one */
317 OldColor = VidpTextColor;
319 return OldColor;
320}

Referenced by InbvSetTextColor().

Variable Documentation

◆ ClearRow

BOOLEAN ClearRow = FALSE
static

Definition at line 43 of file common.c.

Referenced by VidDisplayString().

◆ VidpCurrentX

ULONG VidpCurrentX = 0

Definition at line 7 of file common.c.

Referenced by VidDisplayString(), VidInitialize(), VidResetDisplay(), and VidSetScrollRegion().

◆ VidpCurrentY

ULONG VidpCurrentY = 0

Definition at line 8 of file common.c.

Referenced by VidDisplayString(), VidInitialize(), VidResetDisplay(), and VidSetScrollRegion().

◆ VidpDefaultPalette

const RGBQUAD VidpDefaultPalette[BV_MAX_COLORS]
Initial value:
=
{
RGB( 0, 0, 0),
RGB(128, 0, 0),
RGB( 0, 128, 0),
RGB(128, 128, 0),
RGB( 0, 0, 128),
RGB(128, 0, 128),
RGB( 0, 128, 128),
RGB(128, 128, 128),
RGB(192, 192, 192),
RGB(255, 0, 0),
RGB( 0, 255, 0),
RGB(255, 255, 0),
RGB( 0, 0, 255),
RGB(255, 0, 255),
RGB( 0, 255, 255),
RGB(255, 255, 255),
}
#define RGB(r, g, b)
Definition: precomp.h:62

Definition at line 23 of file common.c.

Referenced by InitPaletteWithTable().

◆ VidpScrollRegion

ULONG VidpScrollRegion[4]
Initial value:
=
{
0,
0,
}
#define SCREEN_WIDTH
Definition: pc98video.c:27
#define SCREEN_HEIGHT
Definition: pc98video.c:28

Definition at line 10 of file common.c.

Referenced by DoScroll(), VidDisplayString(), and VidSetScrollRegion().

◆ VidpTextColor

UCHAR VidpTextColor = BV_COLOR_WHITE

Definition at line 5 of file common.c.

Referenced by VidDisplayString(), and VidSetTextColor().