Author: akhaldi
Date: Thu Jan 7 13:39:15 2016
New Revision: 70524
URL:
http://svn.reactos.org/svn/reactos?rev=70524&view=rev
Log:
[0.4.0] * Merge the bootvid font generator improvements by Hermès in revisions 70512 and
70513.
Modified:
branches/ros-branch-0_4_0/ (props changed)
branches/ros-branch-0_4_0/rosapps/applications/devutils/ (props changed)
branches/ros-branch-0_4_0/rosapps/applications/devutils/bootvid_font_generator/bootvid_font_generator.c
Propchange: branches/ros-branch-0_4_0/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jan 7 13:39:15 2016
@@ -1 +1 @@
-/trunk:70000-70321,70323-70324,70328-70337,70339-70340,70347,70349,70354-70358,70360,70363,70369,70373,70375-70378,70381,70384-70385,70387-70389,70398,70400,70408,70424,70436-70437,70443,70464,70470,70480,70497,70499-70501,70507-70510
+/trunk:70000-70321,70323-70324,70328-70337,70339-70340,70347,70349,70354-70358,70360,70363,70369,70373,70375-70378,70381,70384-70385,70387-70389,70398,70400,70408,70424,70436-70437,70443,70464,70470,70480,70497,70499-70501,70507-70510,70512-70513
Propchange: branches/ros-branch-0_4_0/rosapps/applications/devutils/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jan 7 13:39:15 2016
@@ -1 +1 @@
-/trunk/rosapps/applications/devutils:70507-70509
+/trunk/rosapps/applications/devutils:70507-70509,70512-70513
Modified:
branches/ros-branch-0_4_0/rosapps/applications/devutils/bootvid_font_generator/bootvid_font_generator.c
URL:
http://svn.reactos.org/svn/reactos/branches/ros-branch-0_4_0/rosapps/applic…
==============================================================================
---
branches/ros-branch-0_4_0/rosapps/applications/devutils/bootvid_font_generator/bootvid_font_generator.c [iso-8859-1]
(original)
+++
branches/ros-branch-0_4_0/rosapps/applications/devutils/bootvid_font_generator/bootvid_font_generator.c [iso-8859-1]
Thu Jan 7 13:39:15 2016
@@ -1,29 +1,36 @@
/*
- * PROJECT: ReactOS bootvid Font Generator Utility
+ * PROJECT: ReactOS BootVid Font Generator Utility
* LICENSE: GNU GPLv2 or any later version as published by the Free Software
Foundation
- * PURPOSE: Generates the FontData array for the bootdata.c file of bootvid
+ * PURPOSE: Generates the FontData array for the bootdata.c file of bootvid.dll
* COPYRIGHT: Copyright 2016 Colin Finck <colin(a)reactos.org>
*/
+#include <stdio.h>
+#include <conio.h>
#include <windows.h>
-#include <stdio.h>
+
+/*
+ * Enable this #define if you want to dump the generated character on screen
+ */
+// #define DUMP_CHAR_ON_SCREEN
// Windows original Blue Screen font is "Lucida Console" at FONT_SIZE 10 with
no offsets.
-#define FONT_NAME L"Anonymous Pro"
-#define FONT_SIZE 10
-#define X_OFFSET 1
-#define Y_OFFSET 0
-#define HEIGHT 13
-#define WIDTH 8
+#define FONT_NAME_DEF "Lucida Console" // "DejaVu Sans Mono" //
"Anonymous Pro"
+#define FONT_SIZE_DEF 10
+#define X_OFFSET_DEF 0 // 0 // 1
+#define Y_OFFSET_DEF 0
+#define HEIGHT 13 // Must be == BOOTCHAR_HEIGHT (see
reactos/drivers/base/bootvid/precomp.h)
+#define WIDTH 8 // 8 bits == 1 byte
+
+#ifdef DUMP_CHAR_ON_SCREEN
/**
* Sketch the character on the console screen using ASCII characters.
* Allows you to easily check if the font fits properly into the 8x13 box.
*/
-void DumpCharacterOnScreen(DWORD BmpBits[])
+static void DumpCharacterOnScreen(DWORD BmpBits[])
{
- int i;
- int j;
+ int i, j;
for (i = 0; i < HEIGHT; i++)
{
@@ -39,111 +46,149 @@
}
}
+#else
+
/**
* Dump the FontData for the bootvid/i386/bootdata.c array.
*/
-void DumpCharacterFontData(DWORD BmpBits[])
+static void DumpCharacterFontData(DWORD BmpBits[])
{
static int iBegin = 0;
int i;
- printf(" ");
+ fprintf(stdout, " ");
for (i = 0; i < HEIGHT; i++)
- printf("0x%02lX, ", BmpBits[i]);
+ fprintf(stdout, "0x%02lX, ", BmpBits[i]);
- printf(" // %d\n", iBegin);
+ fprintf(stdout, " // %d\n", iBegin);
iBegin += HEIGHT;
}
+#endif
/**
* Use GDI APIs to load a monospace font and plot a single character into a bitmap.
*/
-BOOL PlotCharacter(WCHAR Character, DWORD BmpBits[])
+static BOOL PlotCharacter(HDC hDC, HFONT hFont, INT XOffset, INT YOffset, CHAR Character,
DWORD BmpBits[])
{
BOOL bReturnValue = FALSE;
- int iHeight;
+ HBITMAP hOldBmp;
+ HFONT hOldFont;
HBITMAP hBmp = NULL;
- HDC hDC = NULL;
- HFONT hFont = NULL;
- PBITMAPINFO pBmpInfo;
-
- hDC = CreateCompatibleDC(NULL);
- if (!hDC)
- {
- printf("CreateCompatibleDC failed with error %lu!\n", GetLastError());
- goto Cleanup;
- }
+ BYTE BmpInfo[sizeof(BITMAPINFO) + sizeof(RGBQUAD)];
+ PBITMAPINFO pBmpInfo = (PBITMAPINFO)&BmpInfo;
hBmp = CreateCompatibleBitmap(hDC, WIDTH, HEIGHT);
if (!hBmp)
{
- printf("CreateCompatibleBitmap failed with error %lu!\n",
GetLastError());
+ fprintf(stderr, "CreateCompatibleBitmap failed with error %lu!\n",
GetLastError());
goto Cleanup;
}
- iHeight = -MulDiv(FONT_SIZE, GetDeviceCaps(hDC, LOGPIXELSY), 72);
- hFont = CreateFontW(iHeight, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET,
0, 0, NONANTIALIASED_QUALITY, FIXED_PITCH, FONT_NAME);
- if (!hFont)
- {
- printf("CreateFontW failed with error %lu!\n", GetLastError());
- goto Cleanup;
- }
-
- SelectObject(hDC, hBmp);
- SelectObject(hDC, hFont);
+ hOldBmp = SelectObject(hDC, hBmp);
+ hOldFont = SelectObject(hDC, hFont);
SetBkColor(hDC, RGB(0, 0, 0));
SetTextColor(hDC, RGB(255, 255, 255));
- TextOutW(hDC, X_OFFSET, Y_OFFSET, &Character, 1);
+ TextOutA(hDC, XOffset, YOffset, &Character, 1);
- // Allocate enough memory for BITMAPINFO and one additional color in the color
table.
- // BITMAPINFO already contains a color table entry for a single color and GetDIBits
needs space for two colors (black and white).
- pBmpInfo = HeapAlloc(GetProcessHeap(), 0, sizeof(BITMAPINFO) + sizeof(RGBQUAD));
- ZeroMemory(pBmpInfo, sizeof(BITMAPINFO) + sizeof(RGBQUAD));
+ /*
+ * Use enough memory for BITMAPINFO and one additional color in the color table.
+ * BITMAPINFO already contains a color table entry for a single color and
+ * GetDIBits needs space for two colors (black and white).
+ */
+ ZeroMemory(&BmpInfo, sizeof(BmpInfo));
pBmpInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pBmpInfo->bmiHeader.biHeight = -HEIGHT;
pBmpInfo->bmiHeader.biWidth = WIDTH;
pBmpInfo->bmiHeader.biBitCount = 1;
pBmpInfo->bmiHeader.biPlanes = 1;
+ bReturnValue = TRUE;
+
if (!GetDIBits(hDC, hBmp, 0, HEIGHT, BmpBits, pBmpInfo, 0))
{
- printf("GetDIBits failed with error %lu!\n", GetLastError());
- goto Cleanup;
+ fprintf(stderr, "GetDIBits failed with error %lu!\n", GetLastError());
+ bReturnValue = FALSE;
}
- bReturnValue = TRUE;
+ SelectObject(hDC, hOldBmp);
+ SelectObject(hDC, hOldFont);
Cleanup:
- if (hFont)
- DeleteObject(hFont);
-
if (hBmp)
DeleteObject(hBmp);
-
- if (hDC)
- DeleteDC(hDC);
return bReturnValue;
}
-int main()
+static void DumpFont(LPSTR FontName, INT FontSize, INT XOffset, INT YOffset)
{
+ int iHeight;
+ HDC hDC = NULL;
+ HFONT hFont = NULL;
+
DWORD BmpBits[HEIGHT];
- WCHAR c;
+ USHORT c;
+
+ hDC = CreateCompatibleDC(NULL);
+ if (!hDC)
+ {
+ fprintf(stderr, "CreateCompatibleDC failed with error %lu!\n",
GetLastError());
+ goto Cleanup;
+ }
+
+ iHeight = -MulDiv(FontSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
+ hFont = CreateFontA(iHeight, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
+ ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
+ NONANTIALIASED_QUALITY, FIXED_PITCH, FontName);
+ if (!hFont)
+ {
+ fprintf(stderr, "CreateFont failed with error %lu!\n",
GetLastError());
+ goto Cleanup;
+ }
for (c = 0; c < 256; c++)
{
- PlotCharacter(c, BmpBits);
+ PlotCharacter(hDC, hFont, XOffset, YOffset, (CHAR)c, BmpBits);
-#if 0
+#ifdef DUMP_CHAR_ON_SCREEN
DumpCharacterOnScreen(BmpBits);
- system("pause");
+ fprintf(stdout, "\nPress any key to continue...\n");
+ _getch();
system("cls");
#else
DumpCharacterFontData(BmpBits);
#endif
}
+Cleanup:
+ if (hFont)
+ DeleteObject(hFont);
+
+ if (hDC)
+ DeleteDC(hDC);
+}
+
+int main(int argc, char** argv)
+{
+ /* Validate the arguments */
+ if (argc > 5 || (argc >= 2 && strncmp(argv[1], "/?", 2) ==
0))
+ {
+ fprintf(stdout,
+ "Usage: %s \"font name\" [font size] [X-offset]
[Y-offset]\n"
+ "Default font name is: \"%s\"\n"
+ "Default font size is: %i\n"
+ "Default X-offset is: %i\n"
+ "Default Y-offset is: %i\n",
+ argv[0],
+ FONT_NAME_DEF, FONT_SIZE_DEF, X_OFFSET_DEF, Y_OFFSET_DEF);
+
+ return -1;
+ }
+
+ DumpFont((argc <= 1) ? FONT_NAME_DEF : argv[1],
+ (argc <= 2) ? FONT_SIZE_DEF : atoi(argv[2]),
+ (argc <= 3) ? X_OFFSET_DEF : atoi(argv[3]),
+ (argc <= 4) ? Y_OFFSET_DEF : atoi(argv[4]));
return 0;
}