ReactOS  0.4.15-dev-448-gd6c4411
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_ 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_ 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_ PUCHAR String)
 
VOID NTAPI VidBufferToScreenBlt (_In_ 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_ PUCHAR  Buffer,
_In_ ULONG  BitsPerPixel,
_In_ ULONG  Delta 
)
static

Definition at line 49 of file common.c.

57 {
58  ULONG sx, dx, dy;
59  UCHAR color;
60  ULONG offset = 0;
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 (dy = Top; dy < Bottom; ++dy)
86  {
87  sx = 0;
88  do
89  {
90  /* Extract color */
91  color = Buffer[offset + sx];
92 
93  /* Calc destination x */
94  dx = Left + (sx << 1);
95 
96  /* Set two pixels */
97  SetPixel(dx, dy, color >> 4);
98  SetPixel(dx + 1, dy, color & 0x0F);
99 
100  sx++;
101  } while (dx < Right);
102  offset += Delta;
103  }
104 }
VOID PrepareForSetPixel(VOID)
Definition: vga.c:81
FORCEINLINE VOID SetPixel(_In_ ULONG Left, _In_ ULONG Top, _In_ UCHAR Color)
Definition: arm.h:50
#define DbgPrint
Definition: loader.c:25
GLint dy
Definition: linetemp.h:97
GLintptr offset
Definition: glext.h:5920
GLuint color
Definition: glext.h:6243
Definition: bufpool.h:45
unsigned char UCHAR
Definition: xmlstorage.h:181
static LPHIST_ENTRY Bottom
Definition: history.c:54
static ULONG Delta
Definition: xboxvideo.c:32
GLint dx
Definition: linetemp.h:97
unsigned int ULONG
Definition: retypes.h:1
static LPHIST_ENTRY Top
Definition: history.c:53

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(), 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 108 of file common.c.

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

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

Referenced by BootLogoFadeIn(), and InbvBitBlt().

◆ VidBufferToScreenBlt()

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

Definition at line 448 of file common.c.

455 {
456  /* Make sure we have a width and height */
457  if (!Width || !Height)
458  return;
459 
460  /* Call the helper function */
461  BitBlt(Left, Top, Width, Height, Buffer, 4, Delta);
462 }
static VOID NTAPI BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_ PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
Definition: common.c:49
Definition: bufpool.h:45
static ULONG Delta
Definition: xboxvideo.c:32
static LPHIST_ENTRY Top
Definition: history.c:53

Referenced by InbvBufferToScreenBlt(), and InbvRotationThread().

◆ VidDisplayString()

VOID NTAPI VidDisplayString ( _In_ PUCHAR  String)

Definition at line 370 of file common.c.

372 {
373  /* Start looping the string */
374  for (; *String; ++String)
375  {
376  /* Treat new-line separately */
377  if (*String == '\n')
378  {
379  /* Modify Y position */
382  {
383  /* Scroll the view and clear the current row */
387  }
388  else
389  {
390  /* Preserve the current row */
392  }
393 
394  /* Update current X */
396 
397  /* No need to clear this row */
398  ClearRow = FALSE;
399  }
400  else if (*String == '\r')
401  {
402  /* Update current X */
404 
405  /* If a new-line does not follow we will clear the current row */
406  if (String[1] != '\n') ClearRow = TRUE;
407  }
408  else
409  {
410  /* Clear the current row if we had a return-carriage without a new-line */
411  if (ClearRow)
412  {
414  ClearRow = FALSE;
415  }
416 
417  /* Display this character */
420 
421  /* Check if we should scroll */
423  {
424  /* Update Y position and check if we should scroll it */
427  {
428  /* Scroll the view and clear the current row */
432  }
433  else
434  {
435  /* Preserve the current row */
437  }
438 
439  /* Update current X */
441  }
442  }
443  }
444 }
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 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_ PUCHAR  String,
_In_ ULONG  Left,
_In_ ULONG  Top,
_In_ BOOLEAN  Transparent 
)

Definition at line 320 of file common.c.

325 {
326  ULONG BackColor;
327 
328  /*
329  * If the caller wanted transparent, then send the special value (16),
330  * else use our default and call the helper routine.
331  */
332  BackColor = Transparent ? BV_COLOR_NONE : BV_COLOR_LIGHT_CYAN;
333 
334  /* Loop every character and adjust the position */
335  for (; *String; ++String, Left += BOOTCHAR_WIDTH)
336  {
337  /* Display a character */
338  DisplayCharacter(*String, Left, Top, BV_COLOR_LIGHT_BLUE, BackColor);
339  }
340 }
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 344 of file common.c.

349 {
350  /* Assert alignment */
351  ASSERT((Left % BOOTCHAR_WIDTH) == 0);
352  ASSERT((Right % BOOTCHAR_WIDTH) == BOOTCHAR_WIDTH - 1);
353 
354  /* Set Scroll Region */
355  VidpScrollRegion[0] = Left;
356  VidpScrollRegion[1] = Top;
357  VidpScrollRegion[2] = Right;
359 
360  /* Set current X and Y */
361  VidpCurrentX = Left;
362  VidpCurrentY = Top;
363 }
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 307 of file common.c.

309 {
310  ULONG OldColor;
311 
312  /* Save the old color and set the new one */
313  OldColor = VidpTextColor;
315  return OldColor;
316 }
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().