ReactOS  0.4.15-dev-1184-g23e04ae
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;
59  UCHAR Colors;
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 */
96  Colors = *InputBuffer++;
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 }
VOID PrepareForSetPixel(VOID)
Definition: vga.c:81
FORCEINLINE VOID SetPixel(_In_ ULONG Left, _In_ ULONG Top, _In_ UCHAR Color)
Definition: arm.h:50
#define Y(I)
#define DbgPrint
Definition: loader.c:25
unsigned char * PUCHAR
Definition: retypes.h:3
Definition: bufpool.h:45
Colors
Definition: ansiprsr.h:4
CHAR InputBuffer[80]
Definition: conmgr.c:33
unsigned char UCHAR
Definition: xmlstorage.h:181
static LPHIST_ENTRY Bottom
Definition: history.c:54
static ULONG Delta
Definition: xboxvideo.c:33
unsigned int ULONG
Definition: retypes.h:1
IN BOOLEAN OUT PSTR Buffer
Definition: progress.h:34
static LPHIST_ENTRY Top
Definition: history.c:53
#define X(b, s)

Referenced by CMenuDeskBar::_OnPaint(), AboutDlgProc(), add_ruler_units(), alpha_blend_image(), ANIMATE_PaintFrame(), ANIMATE_TransparentBlt(), BitBltFromClipboard(), CDimmedWindow::Blt(), BltCard(), Bri_OnDrawItem(), SelectionModel::CalculateContents(), CDimmedWindow::Capture(), CaptureScreen(), CardBlt(), CC_PaintColorGraph(), CC_PaintCross(), check_BitBlt_pixel(), check_bits(), ClippedBitBlt(), ClockWndProc(), ColorKeyedMaskBlt(), COMCTL32_EnsureBitmapSize(), Cont_OnDrawItem(), ConvertBitmapTo32Bpp(), CreateMDIMenuBitmap(), CreateStarBitmap(), ImageModel::Crop(), ddraw_surface_update_frontbuffer(), device_load_logo(), RdpClientUI::Display_MemBlt(), RdpClientUI::Display_ScreenBlt(), RdpClientUI::Display_TriBlt(), DoBlt(), Draw(), draw_graphics(), DrawCard(), DrawFace(), DrawGlyph(), DrawHorzCardStrip(), PictureButton::DrawItem(), DrawLeds(), DrawMine(), DrawProc(), DrawTileBitmap(), DrawVertCardStrip(), dup_bitmap(), GeneralPageProc(), GetDiaogTextureBrush(), Ghost_OnDraw(), GraphCtrl_DrawPoint(), GraphCtrl_Paint(), HEADER_DrawItem(), HelDdSurfBlt(), HelDdSurfLock(), HelDdSurfUnlock(), HEXEDIT_WM_PAINT(), HLPFILE_RtfAddTransparentBitmap(), ImageEditWndRepaint(), 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(), IntDrawState(), IntGetWindowBitmap(), IntGrayString(), LISTVIEW_Refresh(), LoadCardBitmapsFromLibrary(), MainWndProc(), mi_paint_rect(), CardRegion::MoveDragCardTo(), mstsc_WndProc(), NT5_DrawBaseBackground(), NT5_DrawLogoffIcon(), OLEPictureImpl_LoadWICSource(), CMainWindow::OnCommand(), OnDrawItem(), CFullscreenWindow::OnPaint(), CBrandBand::OnPaint(), CDownloaderProgress::OnPaint(), OnPaint(), StartMenuRoot::Paint(), PaintBanner(), CardWindow::PaintCardRgn(), PaintCells(), PAINTING_DrawStateJam(), CAppScrnshotPreview::PaintOnDC(), PlayEnhMetaFileRecord(), PlayMetaFileRecord(), PROPSHEET_Paint(), RosImageProc(), Run(), ScreenSaverProc(), show_image(), SIC_OverlayShortcutImage(), StatusDialogProc(), swapchain_gdi_frontbuffer_updated(), 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(), VolumeDlgProc(), WinGBitBlt(), and WndProc().

◆ 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 PrepareForSetPixel(VOID)
Definition: vga.c:81
FORCEINLINE VOID SetPixel(_In_ ULONG Left, _In_ ULONG Top, _In_ UCHAR Color)
Definition: arm.h:50
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
struct Color Color
uint32_t ULONG_PTR
Definition: typedefs.h:65
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
long LONG
Definition: pedump.c:60
Definition: bufpool.h:45
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
#define Code
Definition: deflate.h:80
VOID NTAPI VidSolidColorFill(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Right, _In_ ULONG Bottom, _In_ UCHAR Color)
Definition: bootvid.c:274
unsigned char UCHAR
Definition: xmlstorage.h:181
unsigned int ULONG
Definition: retypes.h:1
IN BOOLEAN OUT PSTR Buffer
Definition: progress.h:34
static LPHIST_ENTRY Top
Definition: history.c:53

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 }
USHORT biBitCount
Definition: precomp.h:37
struct tagBITMAPINFOHEADER BITMAPINFOHEADER
unsigned char * PUCHAR
Definition: retypes.h:3
ULONG biCompression
Definition: precomp.h:38
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
struct tagBITMAPINFOHEADER * PBITMAPINFOHEADER
long LONG
Definition: pedump.c:60
Definition: bufpool.h:45
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
static ULONG Delta
Definition: xboxvideo.c:33
unsigned int * PULONG
Definition: retypes.h:1
#define BI_RLE4
Definition: precomp.h:48
unsigned int ULONG
Definition: retypes.h:1
static LPHIST_ENTRY Top
Definition: history.c:53
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 BV_MAX_COLORS
Definition: display.h:32

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 }
Definition: bufpool.h:45
static ULONG Delta
Definition: xboxvideo.c:33
static LPHIST_ENTRY Top
Definition: history.c:53
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

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 }
UCHAR VidpTextColor
Definition: common.c:5
#define TRUE
Definition: types.h:120
VOID NTAPI DisplayCharacter(_In_ CHAR Character, _In_ ULONG Left, _In_ ULONG Top, _In_ ULONG TextColor, _In_ ULONG BackColor)
Definition: bootvid.c:13
static WCHAR String[]
Definition: stringtable.c:55
ULONG VidpScrollRegion[4]
Definition: common.c:10
#define BOOTCHAR_HEIGHT
Definition: precomp.h:27
#define FALSE
Definition: types.h:117
#define BV_COLOR_NONE
Definition: display.h:31
static BOOLEAN ClearRow
Definition: common.c:43
VOID NTAPI DoScroll(_In_ ULONG Scroll)
Definition: bootvid.c:59
ULONG VidpCurrentY
Definition: common.c:8
#define BOOTCHAR_WIDTH
Definition: precomp.h:28
VOID NTAPI PreserveRow(_In_ ULONG CurrentTop, _In_ ULONG TopDelta, _In_ BOOLEAN Restore)
Definition: bootvid.c:107
ULONG VidpCurrentX
Definition: common.c:7

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 }
VOID NTAPI DisplayCharacter(_In_ CHAR Character, _In_ ULONG Left, _In_ ULONG Top, _In_ ULONG TextColor, _In_ ULONG BackColor)
Definition: bootvid.c:13
static WCHAR String[]
Definition: stringtable.c:55
#define BV_COLOR_NONE
Definition: display.h:31
#define BV_COLOR_LIGHT_CYAN
Definition: display.h:29
#define BV_COLOR_LIGHT_BLUE
Definition: display.h:27
unsigned int ULONG
Definition: retypes.h:1
static LPHIST_ENTRY Top
Definition: history.c:53
#define BOOTCHAR_WIDTH
Definition: precomp.h:28

◆ 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;
360  VidpScrollRegion[1] = Top;
361  VidpScrollRegion[2] = Right;
363 
364  /* Set current X and Y */
365  VidpCurrentX = Left;
366  VidpCurrentY = Top;
367 }
ULONG VidpScrollRegion[4]
Definition: common.c:10
ULONG VidpCurrentY
Definition: common.c:8
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
static LPHIST_ENTRY Bottom
Definition: history.c:54
static LPHIST_ENTRY Top
Definition: history.c:53
#define BOOTCHAR_WIDTH
Definition: precomp.h:28
ULONG VidpCurrentX
Definition: common.c:7

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 }
UCHAR VidpTextColor
Definition: common.c:5
struct Color Color
unsigned int ULONG
Definition: retypes.h:1

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().