diff options
-rwxr-xr-x | fontdump/fontdump.c | 80 |
1 files changed, 66 insertions, 14 deletions
diff --git a/fontdump/fontdump.c b/fontdump/fontdump.c index 0abe1f44..df6104c4 100755 --- a/fontdump/fontdump.c +++ b/fontdump/fontdump.c @@ -1,6 +1,10 @@ #include <windows.h> #include <tchar.h> +#include <stdarg.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> #include "os_calls.h" #include "arch.h" @@ -12,31 +16,55 @@ static HWND g_go_button = 0; //static char* g_font_name = "Tahoma"; //static char* g_font_name = "MS Sans Serif"; //static char* g_font_name = "DejaVu Serif"; -//static char* g_font_name = "Arial"; -static char* g_font_name = "Comic Sans MS"; +//static char* g_font_name = "DejaVu Sans"; +static char* g_font_name = "Arial"; +//static char* g_font_name = "Comic Sans MS"; static int g_font_size = 10; static HFONT g_font = 0; +static int g_running = 0; #define FONT_DATASIZE(_w, _h) (((_h * ((_w + 7) / 8)) + 3) & ~3) /*****************************************************************************/ int +check_messages(void) +{ + MSG msg; + + while (PeekMessage(&msg, 0, 0, 0, PM_NOREMOVE)) + { + GetMessage(&msg, NULL, 0, 0); + TranslateMessage(&msg); + DispatchMessage(&msg); + } + return 0; +} + +/*****************************************************************************/ +static int msg(char* msg1, ...) { + va_list ap; + char text1[512]; + + va_start(ap, msg1); + vsnprintf(text1, 511, msg1, ap); + SendMessageA(g_lb, LB_ADDSTRING, 0, (LPARAM)text1); + va_end(ap); return 0; } /*****************************************************************************/ -int +static int show_last_error(void) { LPVOID lpMsgBuf; - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, - NULL, GetLastError(), - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR)&lpMsgBuf, 0, NULL); - MessageBox(g_wnd, lpMsgBuf, _T("GetLastError"), MB_OK | MB_ICONINFORMATION); + FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, + NULL, GetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPSTR)&lpMsgBuf, 0, NULL); + msg("GetLastError - %s", lpMsgBuf); LocalFree(lpMsgBuf); return 0; } @@ -77,8 +105,15 @@ font_dump(void) tui8 b1; short x2; + if (g_running) + { + return 0; + } + g_running = 1; + msg("starting"); zero1 = 0; g_snprintf(filename, 255, "%s-%d.fv1", g_font_name, g_font_size); + msg("creating file %s", filename); g_file_delete(filename); fd = g_file_open(filename); g_file_write(fd, "FNT1", 4); @@ -103,6 +138,7 @@ font_dump(void) } for (x1 = 32; x1 < 1024; x1++) { + check_messages(); dc = GetWindowDC(g_wnd); saved = SelectObject(dc, g_font); if (!GetCharABCWidths(dc, x1, x1, &abc)) @@ -167,7 +203,7 @@ font_dump(void) bitmap = CreateDIBSection(dc, &bi, DIB_RGB_COLORS, (void*)&bits, 0, 0); if (bitmap == 0) { - MessageBox(g_wnd, _T("CreateDIBSection failed"), _T("error"), MB_OK); + msg("error - CreateDIBSection failed"); } else { @@ -240,7 +276,7 @@ font_dump(void) } if (sz.cx != (long)(abc.abcA + abc.abcB + abc.abcC)) { - MessageBox(g_wnd, _T("width not right 1"), _T("error"), MB_OK); + msg("error - width not right 1"); } brush = CreateSolidBrush(RGB(255, 255, 255)); FillRect(dc, &rect, brush); @@ -282,7 +318,8 @@ font_dump(void) } } g_file_close(fd); - PostMessage(g_wnd, WM_CLOSE, 0, 0); + msg("done"); + g_running = 0; return 0; } @@ -316,6 +353,18 @@ wnd_proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) font_dump(); break; case WM_COMMAND: + if ((HWND)lParam == g_exit_button) + { + PostMessage(g_wnd, WM_CLOSE, 0, 0); + } + else if ((HWND)lParam == g_go_button) + { + while (SendMessage(g_lb, LB_GETCOUNT, 0, 0) > 0) + { + SendMessage(g_lb, LB_DELETESTRING, 0, 0); + } + SetTimer(g_wnd, 1, 1000, 0); + } break; } return DefWindowProc(hWnd, message, wParam, lParam); @@ -329,6 +378,8 @@ create_window(void) DWORD style; HDC dc; int height; + int left; + int top; ZeroMemory(&wc, sizeof(wc)); wc.lpfnWndProc = wnd_proc; /* points to window procedure */ @@ -342,8 +393,10 @@ create_window(void) } style = WS_OVERLAPPED | WS_CAPTION | WS_POPUP | WS_MINIMIZEBOX | WS_SYSMENU | WS_SIZEBOX | WS_MAXIMIZEBOX; + left = GetSystemMetrics(SM_CXSCREEN) / 2 - 640 / 2; + top = GetSystemMetrics(SM_CYSCREEN) / 2 - 480 / 2; g_wnd = CreateWindow(wc.lpszClassName, _T("fontdump"), - style, 0, 0, 640, 480, + style, left, top, 640, 480, (HWND) NULL, (HMENU) NULL, g_instance, (LPVOID) NULL); style = WS_CHILD | WS_VISIBLE | WS_BORDER; @@ -361,11 +414,10 @@ create_window(void) 0, 0, g_font_name); if (g_font == 0) { - MessageBox(g_wnd, _T("Font creation failed"), _T("error"), MB_OK); + msg("error - Font creation failed"); } ReleaseDC(g_wnd, dc); PostMessage(g_wnd, WM_SETFONT, (WPARAM)g_font, 0); - //SetTimer(g_wnd, 1, 1000, 0); return 0; } |