Sync with trunk r63878.

svn path=/branches/shell-experiments/; revision=63879
This commit is contained in:
David Quintana 2014-08-13 18:16:14 +00:00
parent 6f51eb4048
commit 810048d98e
56 changed files with 1172 additions and 346 deletions

View file

@ -128,7 +128,7 @@ CAPTION "Rreth ReactOS Notepad"
FONT 8, "MS Shell Dlg" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
CONTROL "ReactOS Notepad v1.0\r\nCopyright 1997,98 Marcel Baur <mbaur@g26.ethz.ch>\r\nCopyright 2000 Mike McCormack <Mike_McCormack@looksmart.com.au>\r\nCopyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>\r\nCopyright 2002 Andriy Palamarchuk\r\n", -1, "Static", SS_LEFTNOWORDWRAP | WS_GROUP, 46, 7, 232, 39 CONTROL "ReactOS Notepad v1.0\r\nCopyright 1997,98 Marcel Baur <mbaur@g26.ethz.ch>\r\nCopyright 2000 Mike McCormack <Mike_McCormack@looksmart.com.au>\r\nCopyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>\r\nCopyright 2002 Andriy Palamarchuk\r\n", -1, "Static", SS_LEFTNOWORDWRAP | WS_GROUP, 46, 7, 232, 39
CONTROL " ", -1, "Statik", 0x50000000, 8, 48, 272, 11 CONTROL " ", -1, "Static", 0x50000000, 8, 48, 272, 11
DEFPUSHBUTTON "Mbyll", IDOK, 114, 149, 44, 15, WS_GROUP DEFPUSHBUTTON "Mbyll", IDOK, 114, 149, 44, 15, WS_GROUP
ICON IDI_NPICON, -1, 12, 9, 20, 30 ICON IDI_NPICON, -1, 12, 9, 20, 30
EDITTEXT IDC_LICENSE, 8, 64, 272, 81, ES_MULTILINE | ES_READONLY | WS_VSCROLL EDITTEXT IDC_LICENSE, 8, 64, 272, 81, ES_MULTILINE | ES_READONLY | WS_VSCROLL

View file

@ -1098,7 +1098,7 @@ CabinetExtractFile(PCAB_SEARCH Search)
Size -= OutputLength; Size -= OutputLength;
/* reduce remaining block size by bytes consumed */ /* reduce remaining block size by bytes consumed */
RemainingBlock -= InputLength; RemainingBlock -= InputLength;
if (RemainingBlock == 0) if (Size > 0 && RemainingBlock == 0)
{ {
/* used up this block, move on to the next */ /* used up this block, move on to the next */
DPRINT("Out of block data\n"); DPRINT("Out of block data\n");

View file

@ -117,8 +117,8 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Ekzekuto" CAPTION "Ekzekuto"
FONT 8, "MS Shell Dlg" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
CONTROL "", 101, "Statik", SS_SIMPLE | SS_NOPREFIX, 3, 6, 150, 10 CONTROL "", 101, "Static", SS_SIMPLE | SS_NOPREFIX, 3, 6, 150, 10
CONTROL "&Comanda:", -1, "Statik", SS_LEFTNOWORDWRAP | WS_GROUP, 3, 18, 60, 10 CONTROL "&Comanda:", -1, "Static", SS_LEFTNOWORDWRAP | WS_GROUP, 3, 18, 60, 10
EDITTEXT 201, 3, 29, 134, 12, ES_AUTOHSCROLL EDITTEXT 201, 3, 29, 134, 12, ES_AUTOHSCROLL
CONTROL "Si &Simbol", 214, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 3, 45, 71, 12 CONTROL "Si &Simbol", 214, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 3, 45, 71, 12
DEFPUSHBUTTON "&OK", 1, 158, 6, 47, 14 DEFPUSHBUTTON "&OK", 1, 158, 6, 47, 14

View file

@ -31,24 +31,18 @@ add_custom_command(
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/reactos.dff.dyn DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/reactos.dff.dyn
) )
# And now we build reactos.cab # And now we build reactos.inf
# First we create reactos.inf
add_custom_command( add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/reactos.inf OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/reactos.inf
COMMAND native-cabman -C ${CMAKE_CURRENT_BINARY_DIR}/reactos.dff -L ${CMAKE_CURRENT_BINARY_DIR} -I -P ${REACTOS_SOURCE_DIR} COMMAND native-cabman -C ${CMAKE_CURRENT_BINARY_DIR}/reactos.dff -L ${CMAKE_CURRENT_BINARY_DIR} -I -P ${REACTOS_SOURCE_DIR}
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/reactos.dff native-cabman) DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/reactos.dff native-cabman)
# Then we create the actual cab file using a custom target # reactos.cab generation will be made later (cf. CMakeMacros.cmake - create iso lists)
add_custom_command( add_custom_target(reactos_cab_inf DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/reactos.inf)
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/reactos.cab
COMMAND native-cabman -C ${CMAKE_CURRENT_BINARY_DIR}/reactos.dff -RC ${CMAKE_CURRENT_BINARY_DIR}/reactos.inf -L ${CMAKE_CURRENT_BINARY_DIR} -N -P ${REACTOS_SOURCE_DIR}
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/reactos.inf native-cabman)
add_custom_target(reactos_cab DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/reactos.cab)
add_cd_file( add_cd_file(
TARGET reactos_cab TARGET reactos_cab
FILE ${CMAKE_CURRENT_BINARY_DIR}/reactos.cab ${CMAKE_CURRENT_BINARY_DIR}/reactos.inf FILE ${CMAKE_CURRENT_BINARY_DIR}/reactos.inf
DESTINATION reactos DESTINATION reactos
NO_CAB FOR bootcd regtest) NO_CAB FOR bootcd regtest)

View file

@ -316,15 +316,11 @@ function(add_cd_file)
file(APPEND ${REACTOS_BINARY_DIR}/boot/bootdata/packages/reactos.dff.dyn "\"${__relative_file}\" ${_num}\n") file(APPEND ${REACTOS_BINARY_DIR}/boot/bootdata/packages/reactos.dff.dyn "\"${__relative_file}\" ${_num}\n")
unset(__relative_file) unset(__relative_file)
if(_CD_TARGET) if(_CD_TARGET)
#manage dependency #manage dependency - target level
add_dependencies(reactos_cab ${_CD_TARGET}) add_dependencies(reactos_cab_inf ${_CD_TARGET})
# add this so that the combination make target/fast reactos_cab/fast bootcd/fast properly detects that reactos.cab must be rebuilt
if (CMAKE_BUILD_TOOL STREQUAL "make")
add_custom_command(TARGET ${_CD_TARGET}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E touch ${REACTOS_BINARY_DIR}/boot/bootdata/packages/reactos.dff)
endif()
endif() endif()
# manage dependency - file level
set_property(GLOBAL APPEND PROPERTY REACTOS_CAB_DEPENDS ${_CD_FILE})
endif() endif()
endif() #end bootcd endif() #end bootcd
@ -378,6 +374,22 @@ function(add_cd_file)
endfunction() endfunction()
function(create_iso_lists) function(create_iso_lists)
# generate reactos.cab before anything else
get_property(_filelist GLOBAL PROPERTY REACTOS_CAB_DEPENDS)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/reactos.cab
COMMAND native-cabman -C ${REACTOS_BINARY_DIR}/boot/bootdata/packages/reactos.dff -RC ${REACTOS_BINARY_DIR}/boot/bootdata/packages/reactos.inf -N -P ${REACTOS_SOURCE_DIR}
DEPENDS ${REACTOS_BINARY_DIR}/boot/bootdata/packages/reactos.inf native-cabman ${_filelist})
add_custom_target(reactos_cab DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/reactos.cab)
add_dependencies(reactos_cab reactos_cab_inf)
add_cd_file(
TARGET reactos_cab
FILE ${CMAKE_CURRENT_BINARY_DIR}/reactos.cab
DESTINATION reactos
NO_CAB FOR bootcd regtest)
get_property(_filelist GLOBAL PROPERTY BOOTCD_FILE_LIST) get_property(_filelist GLOBAL PROPERTY BOOTCD_FILE_LIST)
string(REPLACE ";" "\n" _filelist "${_filelist}") string(REPLACE ";" "\n" _filelist "${_filelist}")
file(APPEND ${REACTOS_BINARY_DIR}/boot/bootcd.lst "${_filelist}") file(APPEND ${REACTOS_BINARY_DIR}/boot/bootcd.lst "${_filelist}")

View file

@ -118,7 +118,6 @@ InitConsoleDefaults(PCONSOLE_PROPS pConInfo)
GuiInfo->FontSize.X = 0; GuiInfo->FontSize.X = 0;
GuiInfo->FontSize.Y = 0; GuiInfo->FontSize.Y = 0;
GuiInfo->FontWeight = FW_DONTCARE; GuiInfo->FontWeight = FW_DONTCARE;
GuiInfo->UseRasterFonts = TRUE;
GuiInfo->FullScreen = FALSE; GuiInfo->FullScreen = FALSE;
GuiInfo->ShowWindow = SW_SHOWNORMAL; GuiInfo->ShowWindow = SW_SHOWNORMAL;

View file

@ -76,11 +76,25 @@
if (GetTextExtentPoint32W(drawItem->hDC, L"R", 1, &CharSize)) if (GetTextExtentPoint32W(drawItem->hDC, L"R", 1, &CharSize))
GuiData->CharWidth = CharSize.cx; GuiData->CharWidth = CharSize.cx;
} }
/*
* See also: Display_SetTypeFace in applications/fontview/display.c
*/
#endif #endif
BOOL CALLBACK /*
EnumFontFamExProc(PLOGFONTW lplf, * Font pixel heights for TrueType fonts
*/
static SHORT TrueTypePoints[] =
{
// 8, 9, 10, 11, 12, 14, 16, 18, 20,
// 22, 24, 26, 28, 36, 48, 72
5, 6, 7, 8, 10, 12, 14, 16, 18, 20, 24, 28, 36, 72
};
static BOOL CALLBACK
EnumFontNamesProc(PLOGFONTW lplf,
PNEWTEXTMETRICW lpntm, PNEWTEXTMETRICW lpntm,
DWORD FontType, DWORD FontType,
LPARAM lParam) LPARAM lParam)
@ -197,6 +211,161 @@ EnumFontFamExProc(PLOGFONTW lplf,
return TRUE; return TRUE;
} }
static BOOL CALLBACK
EnumFontSizesProc(PLOGFONTW lplf,
PNEWTEXTMETRICW lpntm,
DWORD FontType,
LPARAM lParam)
{
HWND hwndCombo = (HWND)lParam;
WCHAR FontSize[100];
if (FontType != TRUETYPE_FONTTYPE)
{
// int logsize = lpntm->tmHeight - lpntm->tmInternalLeading;
// LONG pointsize = MulDiv(logsize, 72, GetDeviceCaps(hdc, LOGPIXELSY));
// swprintf(FontSize, L"%2d (%d x %d)", pointsize, lplf->lfWidth, lplf->lfHeight);
swprintf(FontSize, L"%d x %d", lplf->lfWidth, lplf->lfHeight);
/* Make sure the size doesn't already exist in the list */
if (SendMessageW(hwndCombo, LB_FINDSTRINGEXACT, 0, (LPARAM)FontSize) == LB_ERR)
{
/* Add the size */
INT idx = (INT)SendMessageW(hwndCombo, LB_ADDSTRING, 0, (LPARAM)FontSize);
/*
* Store this information in the list-item's userdata area.
* Format:
* Width = FontSize.X = LOWORD(FontSize);
* Height = FontSize.Y = HIWORD(FontSize);
*/
SendMessageW(hwndCombo, LB_SETITEMDATA, idx, MAKEWPARAM(lplf->lfWidth, lplf->lfHeight));
}
return TRUE;
}
else
{
int i;
for (i = 0; i < sizeof(TrueTypePoints) / sizeof(TrueTypePoints[0]); ++i)
{
swprintf(FontSize, L"%2d", TrueTypePoints[i]);
/* Make sure the size doesn't already exist in the list */
if (SendMessageW(hwndCombo, LB_FINDSTRINGEXACT, 0, (LPARAM)FontSize) == LB_ERR)
{
/* Add the size */
INT idx = (INT)SendMessageW(hwndCombo, LB_ADDSTRING, 0, (LPARAM)FontSize);
/*
* Store this information in the list-item's userdata area.
* Format:
* Width = FontSize.X = LOWORD(FontSize);
* Height = FontSize.Y = HIWORD(FontSize);
*/
SendMessageW(hwndCombo, LB_SETITEMDATA, idx, MAKEWPARAM(0, TrueTypePoints[i]));
}
}
return FALSE;
}
}
static VOID
FontSizeChange(HWND hwndDlg,
PGUI_CONSOLE_INFO GuiInfo);
static VOID
FontTypeChange(HWND hwndDlg,
PGUI_CONSOLE_INFO GuiInfo)
{
INT Length, nSel;
LPWSTR FaceName;
HDC hDC;
LOGFONTW lf;
nSel = (INT)SendDlgItemMessageW(hwndDlg, IDC_LBOX_FONTTYPE,
LB_GETCURSEL, 0, 0);
if (nSel == LB_ERR) return;
Length = (INT)SendDlgItemMessageW(hwndDlg, IDC_LBOX_FONTTYPE,
LB_GETTEXTLEN, nSel, 0);
if (Length == LB_ERR) return;
FaceName = HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY,
(Length + 1) * sizeof(WCHAR));
if (FaceName == NULL) return;
Length = (INT)SendDlgItemMessageW(hwndDlg, IDC_LBOX_FONTTYPE,
LB_GETTEXT, nSel, (LPARAM)FaceName);
FaceName[Length] = '\0';
Length = min(Length/*wcslen(FaceName) + 1*/, LF_FACESIZE); // wcsnlen
wcsncpy(GuiInfo->FaceName, FaceName, LF_FACESIZE);
GuiInfo->FaceName[Length] = L'\0';
DPRINT1("GuiInfo->FaceName = '%S'\n", GuiInfo->FaceName);
/* Enumerate the available sizes for the selected font */
ZeroMemory(&lf, sizeof(lf));
lf.lfCharSet = DEFAULT_CHARSET; // OEM_CHARSET;
// lf.lfPitchAndFamily = FIXED_PITCH | FF_DONTCARE;
wcsncpy(lf.lfFaceName, FaceName, LF_FACESIZE);
lf.lfFaceName[Length] = L'\0';
hDC = GetDC(NULL);
EnumFontFamiliesExW(hDC, &lf, (FONTENUMPROCW)EnumFontSizesProc,
(LPARAM)GetDlgItem(hwndDlg, IDC_LBOX_FONTSIZE), 0);
ReleaseDC(NULL, hDC);
HeapFree(GetProcessHeap(), 0, FaceName);
// TODO: Select a default font size????
FontSizeChange(hwndDlg, GuiInfo);
// InvalidateRect(GetDlgItem(hwndDlg, IDC_STATIC_FONT_WINDOW_PREVIEW), NULL, TRUE);
// InvalidateRect(GetDlgItem(hwndDlg, IDC_STATIC_SELECT_FONT_PREVIEW), NULL, TRUE);
}
static VOID
FontSizeChange(HWND hwndDlg,
PGUI_CONSOLE_INFO GuiInfo)
{
INT nSel;
ULONG FontSize;
WCHAR FontSizeStr[20];
nSel = (INT)SendDlgItemMessageW(hwndDlg, IDC_LBOX_FONTSIZE,
LB_GETCURSEL, 0, 0);
if (nSel == LB_ERR) return;
/*
* Format:
* Width = FontSize.X = LOWORD(FontSize);
* Height = FontSize.Y = HIWORD(FontSize);
*/
FontSize = (ULONG)SendDlgItemMessageW(hwndDlg, IDC_LBOX_FONTSIZE,
LB_GETITEMDATA, nSel, 0);
if (FontSize == LB_ERR) return;
GuiInfo->FontSize.X = LOWORD(FontSize);
GuiInfo->FontSize.Y = HIWORD(FontSize);
DPRINT1("GuiInfo->FontSize = (%d x %d)\n", GuiInfo->FontSize.X, GuiInfo->FontSize.Y);
InvalidateRect(GetDlgItem(hwndDlg, IDC_STATIC_FONT_WINDOW_PREVIEW), NULL, TRUE);
InvalidateRect(GetDlgItem(hwndDlg, IDC_STATIC_SELECT_FONT_PREVIEW), NULL, TRUE);
swprintf(FontSizeStr, L"%2d", GuiInfo->FontSize.X);
SetWindowText(GetDlgItem(hwndDlg, IDC_FONT_SIZE_X), FontSizeStr);
swprintf(FontSizeStr, L"%2d", GuiInfo->FontSize.Y);
SetWindowText(GetDlgItem(hwndDlg, IDC_FONT_SIZE_Y), FontSizeStr);
}
INT_PTR INT_PTR
CALLBACK CALLBACK
FontProc(HWND hwndDlg, FontProc(HWND hwndDlg,
@ -214,7 +383,6 @@ FontProc(HWND hwndDlg,
case WM_INITDIALOG: case WM_INITDIALOG:
{ {
HDC hDC; HDC hDC;
HWND hwndCombo;
LOGFONTW lf; LOGFONTW lf;
INT idx; INT idx;
@ -225,19 +393,19 @@ FontProc(HWND hwndDlg,
ZeroMemory(&lf, sizeof(lf)); ZeroMemory(&lf, sizeof(lf));
lf.lfCharSet = DEFAULT_CHARSET; // OEM_CHARSET; lf.lfCharSet = DEFAULT_CHARSET; // OEM_CHARSET;
// lf.lfPitchAndFamily = FIXED_PITCH | FF_DONTCARE; // lf.lfPitchAndFamily = FIXED_PITCH | FF_DONTCARE;
// lf.lfFaceName = L"";
hDC = GetDC(NULL); hDC = GetDC(NULL);
hwndCombo = GetDlgItem(hwndDlg, IDC_LBOX_FONTTYPE); EnumFontFamiliesExW(hDC, &lf, (FONTENUMPROCW)EnumFontNamesProc,
EnumFontFamiliesExW(hDC, &lf, (FONTENUMPROCW)EnumFontFamExProc, (LPARAM)hwndCombo, 0); (LPARAM)GetDlgItem(hwndDlg, IDC_LBOX_FONTTYPE), 0);
ReleaseDC(NULL, hDC); ReleaseDC(NULL, hDC);
DPRINT1("GuiInfo->FaceName = '%S'\n", GuiInfo->FaceName); DPRINT1("GuiInfo->FaceName = '%S'\n", GuiInfo->FaceName);
idx = (INT)SendMessageW(hwndCombo, LB_FINDSTRINGEXACT, 0, (LPARAM)GuiInfo->FaceName); idx = (INT)SendDlgItemMessageW(hwndDlg, IDC_LBOX_FONTTYPE,
if (idx != LB_ERR) LB_FINDSTRINGEXACT, 0, (LPARAM)GuiInfo->FaceName);
{ if (idx != LB_ERR) SendDlgItemMessageW(hwndDlg, IDC_LBOX_FONTTYPE,
SendMessageW(hwndCombo, LB_SETCURSEL, (WPARAM)idx, 0); LB_SETCURSEL, (WPARAM)idx, 0);
}
FontTypeChange(hwndDlg, GuiInfo);
return TRUE; return TRUE;
} }
@ -247,16 +415,66 @@ FontProc(HWND hwndDlg,
LPDRAWITEMSTRUCT drawItem = (LPDRAWITEMSTRUCT)lParam; LPDRAWITEMSTRUCT drawItem = (LPDRAWITEMSTRUCT)lParam;
if (drawItem->CtlID == IDC_STATIC_FONT_WINDOW_PREVIEW) if (drawItem->CtlID == IDC_STATIC_FONT_WINDOW_PREVIEW)
{
PaintConsole(drawItem, pConInfo); PaintConsole(drawItem, pConInfo);
}
else if (drawItem->CtlID == IDC_STATIC_SELECT_FONT_PREVIEW) else if (drawItem->CtlID == IDC_STATIC_SELECT_FONT_PREVIEW)
{
PaintText(drawItem, pConInfo, Screen); PaintText(drawItem, pConInfo, Screen);
}
return TRUE; return TRUE;
} }
case WM_NOTIFY:
{
switch (((LPNMHDR)lParam)->code)
{
case PSN_APPLY:
{
if (!pConInfo->AppliedConfig)
{
return ApplyConsoleInfo(hwndDlg, pConInfo);
}
else
{
/* Options have already been applied */
SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, PSNRET_NOERROR);
return TRUE;
}
break;
}
}
break;
}
case WM_COMMAND:
{
switch (HIWORD(wParam))
{
case LBN_SELCHANGE:
{
switch (LOWORD(wParam))
{
case IDC_LBOX_FONTTYPE:
{
FontTypeChange(hwndDlg, GuiInfo);
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break;
}
case IDC_LBOX_FONTSIZE:
{
FontSizeChange(hwndDlg, GuiInfo);
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break;
}
}
break;
}
}
break;
}
default: default:
break; break;
} }

View file

@ -35,7 +35,7 @@ BEGIN
LTEXT "Прозоречен преглед:", -1, 10, 10, 94, 10 LTEXT "Прозоречен преглед:", -1, 10, 10, 94, 10
LTEXT "Размер:", -1, 180, 10, 36, 10 LTEXT "Размер:", -1, 180, 10, 36, 10
CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74 CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74
LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL
LTEXT "&Шрифт:", -1, 10, 105, 33, 10 LTEXT "&Шрифт:", -1, 10, 105, 33, 10
CHECKBOX "&Получери шрифтове", IDC_CHECK_BOLD_FONTS, 38, 105, 85, 10 CHECKBOX "&Получери шрифтове", IDC_CHECK_BOLD_FONTS, 38, 105, 85, 10
LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL

View file

@ -41,7 +41,7 @@ BEGIN
LTEXT "Náhled okna:", -1, 10, 10, 94, 10 LTEXT "Náhled okna:", -1, 10, 10, 94, 10
LTEXT "Velikost:", -1, 180, 10, 36, 10 LTEXT "Velikost:", -1, 180, 10, 36, 10
CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74 CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74
LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL
LTEXT "&Písmo:", -1, 10, 105, 33, 10 LTEXT "&Písmo:", -1, 10, 105, 33, 10
CHECKBOX "&Tučná písma", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10 CHECKBOX "&Tučná písma", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10
LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL

View file

@ -37,7 +37,7 @@ BEGIN
LTEXT "Fenstervorschau", -1, 10, 7, 65, 10 LTEXT "Fenstervorschau", -1, 10, 7, 65, 10
LTEXT "Größe", -1, 130, 10, 30, 10 LTEXT "Größe", -1, 130, 10, 30, 10
CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 115, 70 CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 115, 70
LISTBOX IDC_LBOX_FONTSIZE, 130, 20, 55, 80, LBS_SORT | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTSIZE, 130, 20, 55, 80, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL
LTEXT "&Schrift", -1, 10, 105, 35, 10 LTEXT "&Schrift", -1, 10, 105, 35, 10
CHECKBOX "&Fette Schriften", IDC_CHECK_BOLD_FONTS, 45, 105, 60, 10 CHECKBOX "&Fette Schriften", IDC_CHECK_BOLD_FONTS, 45, 105, 60, 10
LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 50, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 50, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL

View file

@ -35,7 +35,7 @@ BEGIN
LTEXT "Window Preview:", -1, 10, 10, 94, 10 LTEXT "Window Preview:", -1, 10, 10, 94, 10
LTEXT "Size:", -1, 180, 10, 36, 10 LTEXT "Size:", -1, 180, 10, 36, 10
CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74 CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74
LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL
LTEXT "&Font:", -1, 10, 105, 33, 10 LTEXT "&Font:", -1, 10, 105, 33, 10
CHECKBOX "&Bold fonts", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10 CHECKBOX "&Bold fonts", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10
LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL

View file

@ -37,7 +37,7 @@ BEGIN
LTEXT "Ventana de Previsualización", -1, 10, 7, 65, 10 LTEXT "Ventana de Previsualización", -1, 10, 7, 65, 10
LTEXT "Tamaño", -1, 130, 10, 30, 10 LTEXT "Tamaño", -1, 130, 10, 30, 10
CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 115, 70 CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 115, 70
LISTBOX IDC_LBOX_FONTSIZE, 130, 20, 55, 80, LBS_SORT | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTSIZE, 130, 20, 55, 80, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL
LTEXT "&Fuente", -1, 10, 105, 35, 10 LTEXT "&Fuente", -1, 10, 105, 35, 10
CHECKBOX "&Negrita", IDC_CHECK_BOLD_FONTS, 45, 105, 60, 10 CHECKBOX "&Negrita", IDC_CHECK_BOLD_FONTS, 45, 105, 60, 10
LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 50, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 50, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL

View file

@ -37,14 +37,14 @@ BEGIN
LTEXT "Fenêtre de Prévisualisation :", -1, 10, 10, 94, 10 LTEXT "Fenêtre de Prévisualisation :", -1, 10, 10, 94, 10
LTEXT "Taille :", -1, 180, 10, 36, 10 LTEXT "Taille :", -1, 180, 10, 36, 10
CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74 CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74
LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL
LTEXT "&Police :", -1, 10, 105, 33, 10 LTEXT "&Police :", -1, 10, 105, 33, 10
CHECKBOX "&Gras", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10 CHECKBOX "&Gras", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10
LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL
GROUPBOX "", IDC_GROUPBOX_FONT_NAME, 6, 156, 241, 50 GROUPBOX "", IDC_GROUPBOX_FONT_NAME, 6, 156, 241, 50
CONTROL "", IDC_STATIC_SELECT_FONT_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 16, 165, 95, 35 CONTROL "", IDC_STATIC_SELECT_FONT_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 16, 165, 95, 35
LTEXT "Chaque caractère est :", -1, 124, 166, 75, 10 LTEXT "Chaque caractère utilise :", -1, 124, 166, 85, 10
LTEXT "largeur du pixel\nhauteur du pixel", -1, 136, 180, 101, 20 LTEXT "pixels en largeur\npixels en hauteur", -1, 136, 180, 101, 20
LTEXT "", IDC_FONT_SIZE_X, 120, 180, 10, 10 LTEXT "", IDC_FONT_SIZE_X, 120, 180, 10, 10
LTEXT "", IDC_FONT_SIZE_Y, 120, 188, 10, 10 LTEXT "", IDC_FONT_SIZE_Y, 120, 188, 10, 10
END END

View file

@ -37,7 +37,7 @@ BEGIN
LTEXT "תצוגה מקדימה:", -1, 10, 10, 94, 10 LTEXT "תצוגה מקדימה:", -1, 10, 10, 94, 10
LTEXT "גודל:", -1, 180, 10, 36, 10 LTEXT "גודל:", -1, 180, 10, 36, 10
CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74 CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74
LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL
LTEXT "גופן:", -1, 10, 105, 33, 10 LTEXT "גופן:", -1, 10, 105, 33, 10
CHECKBOX "גופנים מודגשים", IDC_CHECK_BOLD_FONTS, 41, 105, 33, 10 CHECKBOX "גופנים מודגשים", IDC_CHECK_BOLD_FONTS, 41, 105, 33, 10
LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL

View file

@ -37,7 +37,7 @@ BEGIN
LTEXT "Tinjauan Jendela", -1, 10, 7, 65, 10 LTEXT "Tinjauan Jendela", -1, 10, 7, 65, 10
LTEXT "Ukuran", -1, 130, 10, 30, 10 LTEXT "Ukuran", -1, 130, 10, 30, 10
CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 115, 70 CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 115, 70
LISTBOX IDC_LBOX_FONTSIZE, 130, 20, 55, 80, LBS_SORT | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTSIZE, 130, 20, 55, 80, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL
LTEXT "&Font", -1, 10, 105, 35, 10 LTEXT "&Font", -1, 10, 105, 35, 10
CHECKBOX "Font &tebal", IDC_CHECK_BOLD_FONTS, 45, 105, 60, 10 CHECKBOX "Font &tebal", IDC_CHECK_BOLD_FONTS, 45, 105, 60, 10
LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 50, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 50, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL

View file

@ -37,7 +37,7 @@ BEGIN
LTEXT "Anteprima", -1, 10, 7, 65, 10 LTEXT "Anteprima", -1, 10, 7, 65, 10
LTEXT "Dimansione", -1, 130, 10, 30, 10 LTEXT "Dimansione", -1, 130, 10, 30, 10
CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 115, 70 CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 115, 70
LISTBOX IDC_LBOX_FONTSIZE, 130, 20, 55, 80, LBS_SORT | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTSIZE, 130, 20, 55, 80, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL
LTEXT "&Font", -1, 10, 105, 35, 10 LTEXT "&Font", -1, 10, 105, 35, 10
CHECKBOX "&Grassetto fonts", IDC_CHECK_BOLD_FONTS, 45, 105, 60, 10 CHECKBOX "&Grassetto fonts", IDC_CHECK_BOLD_FONTS, 45, 105, 60, 10
LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 50, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 50, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL

View file

@ -35,7 +35,7 @@ BEGIN
LTEXT "Vindu forhåndsvisning:", -1, 10, 10, 94, 10 LTEXT "Vindu forhåndsvisning:", -1, 10, 10, 94, 10
LTEXT "Størrelse:", -1, 180, 10, 36, 10 LTEXT "Størrelse:", -1, 180, 10, 36, 10
CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74 CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74
LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL
LTEXT "&Skrift:", -1, 10, 105, 33, 10 LTEXT "&Skrift:", -1, 10, 105, 33, 10
CHECKBOX "&Fet skrift", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10 CHECKBOX "&Fet skrift", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10
LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL

View file

@ -42,7 +42,7 @@ BEGIN
LTEXT "Okno podglądu", -1, 10, 7, 65, 10 LTEXT "Okno podglądu", -1, 10, 7, 65, 10
LTEXT "Rozmiar", -1, 130, 10, 30, 10 LTEXT "Rozmiar", -1, 130, 10, 30, 10
CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 115, 70 CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 115, 70
LISTBOX IDC_LBOX_FONTSIZE, 130, 20, 55, 80, LBS_SORT | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTSIZE, 130, 20, 55, 80, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL
LTEXT "&Czcionka", -1, 10, 105, 35, 10 LTEXT "&Czcionka", -1, 10, 105, 35, 10
CHECKBOX "&Pogrubiona czcionka", IDC_CHECK_BOLD_FONTS, 45, 105, 60, 10 CHECKBOX "&Pogrubiona czcionka", IDC_CHECK_BOLD_FONTS, 45, 105, 60, 10
LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 50, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 50, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL

View file

@ -44,7 +44,7 @@ BEGIN
LTEXT "Previzionare:", -1, 10, 10, 94, 10 LTEXT "Previzionare:", -1, 10, 10, 94, 10
LTEXT "&Mărime:", -1, 180, 10, 36, 10 LTEXT "&Mărime:", -1, 180, 10, 36, 10
CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74 CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74
LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL
LTEXT "F&ont:", -1, 10, 105, 33, 10 LTEXT "F&ont:", -1, 10, 105, 33, 10
CHECKBOX "&Aldin", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10 CHECKBOX "&Aldin", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10
LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL

View file

@ -37,7 +37,7 @@ BEGIN
LTEXT "Окно предпросмотра:", -1, 10, 10, 94, 10 LTEXT "Окно предпросмотра:", -1, 10, 10, 94, 10
LTEXT "Размер:", -1, 180, 10, 36, 10 LTEXT "Размер:", -1, 180, 10, 36, 10
CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74 CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74
LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL
LTEXT "&Шрифт:", -1, 10, 105, 33, 10 LTEXT "&Шрифт:", -1, 10, 105, 33, 10
CHECKBOX "&Жирный", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10 CHECKBOX "&Жирный", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10
LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL

View file

@ -39,7 +39,7 @@ BEGIN
LTEXT "Ukážka okna:", -1, 10, 10, 94, 10 LTEXT "Ukážka okna:", -1, 10, 10, 94, 10
LTEXT "Veľkosť:", -1, 180, 10, 36, 10 LTEXT "Veľkosť:", -1, 180, 10, 36, 10
CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74 CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74
LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL
LTEXT "&Písmo:", -1, 10, 105, 33, 10 LTEXT "&Písmo:", -1, 10, 105, 33, 10
CHECKBOX "&Tučné písma", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10 CHECKBOX "&Tučné písma", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10
LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL

View file

@ -38,13 +38,13 @@ FONT 8, "MS Shell Dlg"
BEGIN BEGIN
LTEXT "Dritare Preview:", -1, 10, 10, 94, 10 LTEXT "Dritare Preview:", -1, 10, 10, 94, 10
LTEXT "Masë:", -1, 180, 10, 36, 10 LTEXT "Masë:", -1, 180, 10, 36, 10
CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Statik", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74 CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74
LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL
LTEXT "&Font:", -1, 10, 105, 33, 10 LTEXT "&Font:", -1, 10, 105, 33, 10
CHECKBOX "&Bold fonts", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10 CHECKBOX "&Bold fonts", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10
LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL
GROUPBOX "", IDC_GROUPBOX_FONT_NAME, 6, 156, 241, 50 GROUPBOX "", IDC_GROUPBOX_FONT_NAME, 6, 156, 241, 50
CONTROL "", IDC_STATIC_SELECT_FONT_PREVIEW, "Statik", SS_OWNERDRAW | SS_SUNKEN, 16, 165, 95, 35 CONTROL "", IDC_STATIC_SELECT_FONT_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 16, 165, 95, 35
LTEXT "Çdo krarakter është:", -1, 124, 166, 75, 10 LTEXT "Çdo krarakter është:", -1, 124, 166, 75, 10
LTEXT "pixeli ekranit i gjerë\npixel ekranit i gjatë", -1, 136, 180, 101, 20 LTEXT "pixeli ekranit i gjerë\npixel ekranit i gjatë", -1, 136, 180, 101, 20
LTEXT "", IDC_FONT_SIZE_X, 120, 180, 10, 10 LTEXT "", IDC_FONT_SIZE_X, 120, 180, 10, 10
@ -57,7 +57,7 @@ CAPTION "Pamja"
FONT 8, "MS Shell Dlg" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
LTEXT "Dritare Preview:", -1, 8, 6, 95, 10 LTEXT "Dritare Preview:", -1, 8, 6, 95, 10
CONTROL "", IDC_STATIC_LAYOUT_WINDOW_PREVIEW, "Statik", SS_SUNKEN | SS_OWNERDRAW, 8, 16, 115, 70 CONTROL "", IDC_STATIC_LAYOUT_WINDOW_PREVIEW, "Static", SS_SUNKEN | SS_OWNERDRAW, 8, 16, 115, 70
GROUPBOX "Masa e Ekranit Buffer", -1, 130, 12, 115, 50 GROUPBOX "Masa e Ekranit Buffer", -1, 130, 12, 115, 50
LTEXT "Gjerë:", -1, 140, 28, 40, 10 LTEXT "Gjerë:", -1, 140, 28, 40, 10
LTEXT "Gjatë:", -1, 140, 46, 39, 10 LTEXT "Gjatë:", -1, 140, 46, 39, 10
@ -114,26 +114,26 @@ BEGIN
EDITTEXT IDC_EDIT_COLOR_BLUE, 175, 48, 35, 14, ES_RIGHT | ES_NUMBER | WS_GROUP EDITTEXT IDC_EDIT_COLOR_BLUE, 175, 48, 35, 14, ES_RIGHT | ES_NUMBER | WS_GROUP
CONTROL "", IDC_UPDOWN_COLOR_BLUE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | CONTROL "", IDC_UPDOWN_COLOR_BLUE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT |
UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 210, 48, 10, 14 UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 210, 48, 10, 14
CONTROL "", IDC_STATIC_COLOR1, "Statik", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 23, 80, 12, 12 CONTROL "", IDC_STATIC_COLOR1, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 23, 80, 12, 12
CONTROL "", IDC_STATIC_COLOR2, "Statik", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 36, 80, 12, 12 CONTROL "", IDC_STATIC_COLOR2, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 36, 80, 12, 12
CONTROL "", IDC_STATIC_COLOR3, "Statik", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 49, 80, 12, 12 CONTROL "", IDC_STATIC_COLOR3, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 49, 80, 12, 12
CONTROL "", IDC_STATIC_COLOR4, "Statik", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 62, 80, 12, 12 CONTROL "", IDC_STATIC_COLOR4, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 62, 80, 12, 12
CONTROL "", IDC_STATIC_COLOR5, "Statik", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 75, 80, 12, 12 CONTROL "", IDC_STATIC_COLOR5, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 75, 80, 12, 12
CONTROL "", IDC_STATIC_COLOR6, "Statik", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 88, 80, 12, 12 CONTROL "", IDC_STATIC_COLOR6, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 88, 80, 12, 12
CONTROL "", IDC_STATIC_COLOR7, "Statik", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 101, 80, 12, 12 CONTROL "", IDC_STATIC_COLOR7, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 101, 80, 12, 12
CONTROL "", IDC_STATIC_COLOR8, "Statik", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 114, 80, 12, 12 CONTROL "", IDC_STATIC_COLOR8, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 114, 80, 12, 12
CONTROL "", IDC_STATIC_COLOR9, "Statik", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 127, 80, 12, 12 CONTROL "", IDC_STATIC_COLOR9, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 127, 80, 12, 12
CONTROL "", IDC_STATIC_COLOR10, "Statik", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 140, 80, 12, 12 CONTROL "", IDC_STATIC_COLOR10, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 140, 80, 12, 12
CONTROL "", IDC_STATIC_COLOR11, "Statik", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 153, 80, 12, 12 CONTROL "", IDC_STATIC_COLOR11, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 153, 80, 12, 12
CONTROL "", IDC_STATIC_COLOR12, "Statik", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 166, 80, 12, 12 CONTROL "", IDC_STATIC_COLOR12, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 166, 80, 12, 12
CONTROL "", IDC_STATIC_COLOR13, "Statik", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 179, 80, 12, 12 CONTROL "", IDC_STATIC_COLOR13, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 179, 80, 12, 12
CONTROL "", IDC_STATIC_COLOR14, "Statik", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 192, 80, 12, 12 CONTROL "", IDC_STATIC_COLOR14, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 192, 80, 12, 12
CONTROL "", IDC_STATIC_COLOR15, "Statik", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 205, 80, 12, 12 CONTROL "", IDC_STATIC_COLOR15, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 205, 80, 12, 12
CONTROL "", IDC_STATIC_COLOR16, "Statik", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 218, 80, 12, 12 CONTROL "", IDC_STATIC_COLOR16, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 218, 80, 12, 12
GROUPBOX "Preview (monitor)", -1, 8, 100, 237, 55 GROUPBOX "Preview (monitor)", -1, 8, 100, 237, 55
CONTROL "", IDC_STATIC_SCREEN_COLOR, "Statik", SS_OWNERDRAW | SS_SUNKEN, 13, 110, 227, 40 CONTROL "", IDC_STATIC_SCREEN_COLOR, "Static", SS_OWNERDRAW | SS_SUNKEN, 13, 110, 227, 40
GROUPBOX "Preview (Popup)", -1, 8, 160, 237, 55 GROUPBOX "Preview (Popup)", -1, 8, 160, 237, 55
CONTROL "", IDC_STATIC_POPUP_COLOR, "Statik", SS_OWNERDRAW | SS_SUNKEN, 13, 170, 227, 40 CONTROL "", IDC_STATIC_POPUP_COLOR, "Static", SS_OWNERDRAW | SS_SUNKEN, 13, 170, 227, 40
END END
IDD_APPLYOPTIONS DIALOGEX 0, 0, 220, 79 IDD_APPLYOPTIONS DIALOGEX 0, 0, 220, 79

View file

@ -37,7 +37,7 @@ BEGIN
LTEXT "Pencere Ön İzlemesi:", -1, 10, 10, 94, 10 LTEXT "Pencere Ön İzlemesi:", -1, 10, 10, 94, 10
LTEXT "&Boyutlar:", -1, 180, 10, 36, 10 LTEXT "&Boyutlar:", -1, 180, 10, 36, 10
CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74 CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74
LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL
LTEXT "&Yazı Tipi:", -1, 10, 105, 33, 10 LTEXT "&Yazı Tipi:", -1, 10, 105, 33, 10
CHECKBOX "&Kalın Yazı Tipleri", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10 CHECKBOX "&Kalın Yazı Tipleri", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10
LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL

View file

@ -37,7 +37,7 @@ BEGIN
LTEXT "Зразок вікна", -1, 10, 10, 94, 10 LTEXT "Зразок вікна", -1, 10, 10, 94, 10
LTEXT "Size:", -1, 180, 10, 36, 10 LTEXT "Size:", -1, 180, 10, 36, 10
CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74 CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74
LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL
LTEXT "&Шрифт:", -1, 10, 105, 33, 10 LTEXT "&Шрифт:", -1, 10, 105, 33, 10
CHECKBOX "&Жирні", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10 CHECKBOX "&Жирні", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10
LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL

View file

@ -37,7 +37,7 @@ BEGIN
LTEXT "窗口预览:", -1, 10, 10, 94, 10 LTEXT "窗口预览:", -1, 10, 10, 94, 10
LTEXT "大小:", -1, 180, 10, 36, 10 LTEXT "大小:", -1, 180, 10, 36, 10
CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74 CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74
LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTSIZE, 181, 20, 55, 80, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL
LTEXT "&字体(&F)", -1, 10, 105, 33, 10 LTEXT "&字体(&F)", -1, 10, 105, 33, 10
CHECKBOX "粗体(&B)", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10 CHECKBOX "粗体(&B)", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10
LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL

View file

@ -120,8 +120,8 @@ PaintText(LPDRAWITEMSTRUCT drawItem,
hBrush = CreateSolidBrush(nbkColor); hBrush = CreateSolidBrush(nbkColor);
if (!hBrush) return FALSE; if (!hBrush) return FALSE;
Font = CreateFontW(GuiInfo->FontSize.X, Font = CreateFontW(GuiInfo->FontSize.Y,
0, // GuiInfo->FontSize.Y, 0, // GuiInfo->FontSize.X,
0, 0,
TA_BASELINE, TA_BASELINE,
GuiInfo->FontWeight, GuiInfo->FontWeight,

View file

@ -9,7 +9,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Sfond" CAPTION "Sfond"
FONT 8, "MS Shell Dlg" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
CONTROL "", IDC_BACKGROUND_PREVIEW, "Statik", SS_OWNERDRAW, 70, 10, 105, 80, 0 CONTROL "", IDC_BACKGROUND_PREVIEW, "Static", SS_OWNERDRAW, 70, 10, 105, 80, 0
CONTROL "", IDC_BACKGROUND_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | CONTROL "", IDC_BACKGROUND_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL |
LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 8, 114, 174, 78 LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 8, 114, 174, 78
LTEXT "Zgjidhni një imazh për t'u përdorur si sfond tuaj desktop", IDC_STATIC, 8, 103, 230, 9 LTEXT "Zgjidhni një imazh për t'u përdorur si sfond tuaj desktop", IDC_STATIC, 8, 103, 230, 9
@ -24,7 +24,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Screensaver" CAPTION "Screensaver"
FONT 8, "MS Shell Dlg", 0, 0 FONT 8, "MS Shell Dlg", 0, 0
BEGIN BEGIN
CONTROL "", IDC_SCREENS_PREVIEW, "Statik", SS_OWNERDRAW, 70, 10, 105, 70, WS_EX_STATICEDGE CONTROL "", IDC_SCREENS_PREVIEW, "Static", SS_OWNERDRAW, 70, 10, 105, 70, WS_EX_STATICEDGE
GROUPBOX "&Screensaver", IDC_SCREENS_DUMMY, 8, 92, 230, 52 GROUPBOX "&Screensaver", IDC_SCREENS_DUMMY, 8, 92, 230, 52
COMBOBOX IDC_SCREENS_LIST, 14, 103, 100, 100, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_SCREENS_LIST, 14, 103, 100, 100, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Cilësime%t", IDC_SCREENS_SETTINGS, 120, 103, 50, 13, WS_GROUP PUSHBUTTON "Cilësime%t", IDC_SCREENS_SETTINGS, 120, 103, 50, 13, WS_GROUP
@ -134,7 +134,7 @@ BEGIN
LTEXT "", IDC_SETTINGS_RESOLUTION_TEXT, 10, 157, 100, 10, NOT WS_GROUP | SS_CENTER LTEXT "", IDC_SETTINGS_RESOLUTION_TEXT, 10, 157, 100, 10, NOT WS_GROUP | SS_CENTER
GROUPBOX "&Ngjyra", 1817, 125, 127, 115, 43 GROUPBOX "&Ngjyra", 1817, 125, 127, 115, 43
COMBOBOX IDC_SETTINGS_BPP, 131, 137, 103, 80, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_SETTINGS_BPP, 131, 137, 103, 80, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
CONTROL "", IDC_SETTINGS_SPECTRUM, "Statik", SS_OWNERDRAW | SS_SUNKEN, 131, 155, 103, 9 CONTROL "", IDC_SETTINGS_SPECTRUM, "Static", SS_OWNERDRAW | SS_SUNKEN, 131, 155, 103, 9
PUSHBUTTON "Përparuar...", IDC_SETTINGS_ADVANCED, 170, 174, 70, 14 PUSHBUTTON "Përparuar...", IDC_SETTINGS_ADVANCED, 170, 174, 70, 14
END END

View file

@ -677,7 +677,6 @@ CInternetToolbar::CInternetToolbar()
CInternetToolbar::~CInternetToolbar() CInternetToolbar::~CInternetToolbar()
{ {
fMenuCallback.Release();
} }
void CInternetToolbar::AddDockItem(IUnknown *newItem, int bandID, int flags) void CInternetToolbar::AddDockItem(IUnknown *newItem, int bandID, int flags)

View file

@ -881,6 +881,7 @@ IntWriteConsoleOutput(IN HANDLE hConsoleOutput,
{ {
WriteOutputRequest->CharInfo = &WriteOutputRequest->StaticBuffer; WriteOutputRequest->CharInfo = &WriteOutputRequest->StaticBuffer;
// CaptureBuffer = NULL; // CaptureBuffer = NULL;
WriteOutputRequest->UseVirtualMemory = FALSE;
} }
else else
{ {
@ -888,17 +889,36 @@ IntWriteConsoleOutput(IN HANDLE hConsoleOutput,
/* Allocate a Capture Buffer */ /* Allocate a Capture Buffer */
CaptureBuffer = CsrAllocateCaptureBuffer(1, Size); CaptureBuffer = CsrAllocateCaptureBuffer(1, Size);
if (CaptureBuffer == NULL) if (CaptureBuffer)
{ {
DPRINT1("CsrAllocateCaptureBuffer failed with size %ld!\n", Size); /* Allocate space in the Buffer */
SetLastError(ERROR_NOT_ENOUGH_MEMORY); CsrAllocateMessagePointer(CaptureBuffer,
return FALSE; Size,
(PVOID*)&WriteOutputRequest->CharInfo);
WriteOutputRequest->UseVirtualMemory = FALSE;
} }
else
{
/*
* CsrAllocateCaptureBuffer failed because we tried to allocate
* a too large (>= 64 kB, size of the CSR heap) data buffer.
* To circumvent this, Windows uses a trick (that we reproduce for
* compatibility reasons): we allocate a heap buffer in the process'
* memory, and CSR will read it via NtReadVirtualMemory.
*/
DPRINT1("CsrAllocateCaptureBuffer failed with size %ld, let's use local heap buffer...\n", Size);
/* Allocate space in the Buffer */ WriteOutputRequest->CharInfo = RtlAllocateHeap(RtlGetProcessHeap(), 0, Size);
CsrAllocateMessagePointer(CaptureBuffer, WriteOutputRequest->UseVirtualMemory = TRUE;
Size,
(PVOID*)&WriteOutputRequest->CharInfo); /* Bail out if we still cannot allocate memory */
if (WriteOutputRequest->CharInfo == NULL)
{
DPRINT1("Failed to allocate heap buffer with size %ld!\n", Size);
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
}
} }
/* Capture the user buffer contents */ /* Capture the user buffer contents */
@ -945,7 +965,16 @@ IntWriteConsoleOutput(IN HANDLE hConsoleOutput,
Success = NT_SUCCESS(ApiMessage.Status); Success = NT_SUCCESS(ApiMessage.Status);
/* Release the capture buffer if needed */ /* Release the capture buffer if needed */
if (CaptureBuffer) CsrFreeCaptureBuffer(CaptureBuffer); if (CaptureBuffer)
{
CsrFreeCaptureBuffer(CaptureBuffer);
}
else
{
/* If we used a heap buffer, free it */
if (WriteOutputRequest->UseVirtualMemory)
RtlFreeHeap(RtlGetProcessHeap(), 0, WriteOutputRequest->CharInfo);
}
/* Retrieve the results */ /* Retrieve the results */
_SEH2_TRY _SEH2_TRY

View file

@ -35,22 +35,18 @@ DefineDosDeviceA(
BOOL Result; BOOL Result;
if (lpDeviceName && if (lpDeviceName &&
! RtlCreateUnicodeStringFromAsciiz(&DeviceNameU, !RtlCreateUnicodeStringFromAsciiz(&DeviceNameU, lpDeviceName))
(LPSTR)lpDeviceName))
{ {
SetLastError(ERROR_NOT_ENOUGH_MEMORY); SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return 0; return 0;
} }
if (lpTargetPath && if (lpTargetPath &&
! RtlCreateUnicodeStringFromAsciiz(&TargetPathU, !RtlCreateUnicodeStringFromAsciiz(&TargetPathU, lpTargetPath))
(LPSTR)lpTargetPath))
{ {
if (DeviceNameU.Buffer) if (DeviceNameU.Buffer)
{ {
RtlFreeHeap(RtlGetProcessHeap (), RtlFreeUnicodeString(&DeviceNameU);
0,
DeviceNameU.Buffer);
} }
SetLastError(ERROR_NOT_ENOUGH_MEMORY); SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return 0; return 0;
@ -62,16 +58,12 @@ DefineDosDeviceA(
if (TargetPathU.Buffer) if (TargetPathU.Buffer)
{ {
RtlFreeHeap(RtlGetProcessHeap (), RtlFreeUnicodeString(&TargetPathU);
0,
TargetPathU.Buffer);
} }
if (DeviceNameU.Buffer) if (DeviceNameU.Buffer)
{ {
RtlFreeHeap(RtlGetProcessHeap (), RtlFreeUnicodeString(&DeviceNameU);
0,
DeviceNameU.Buffer);
} }
return Result; return Result;
} }
@ -114,7 +106,7 @@ DefineDosDeviceW(
ArgumentCount = 1; ArgumentCount = 1;
BufferSize = 0; BufferSize = 0;
if (! lpTargetPath) if (!lpTargetPath)
{ {
RtlInitUnicodeString(&NtTargetPathU, RtlInitUnicodeString(&NtTargetPathU,
NULL); NULL);
@ -128,10 +120,10 @@ DefineDosDeviceW(
} }
else else
{ {
if (! RtlDosPathNameToNtPathName_U(lpTargetPath, if (!RtlDosPathNameToNtPathName_U(lpTargetPath,
&NtTargetPathU, &NtTargetPathU,
0, NULL,
0)) NULL))
{ {
WARN("RtlDosPathNameToNtPathName_U() failed\n"); WARN("RtlDosPathNameToNtPathName_U() failed\n");
BaseSetLastNTError(STATUS_OBJECT_NAME_INVALID); BaseSetLastNTError(STATUS_OBJECT_NAME_INVALID);
@ -151,7 +143,7 @@ DefineDosDeviceW(
CaptureBuffer = CsrAllocateCaptureBuffer(ArgumentCount, CaptureBuffer = CsrAllocateCaptureBuffer(ArgumentCount,
BufferSize); BufferSize);
if (! CaptureBuffer) if (!CaptureBuffer)
{ {
SetLastError(ERROR_NOT_ENOUGH_MEMORY); SetLastError(ERROR_NOT_ENOUGH_MEMORY);
Result = FALSE; Result = FALSE;
@ -161,7 +153,7 @@ DefineDosDeviceW(
DefineDosDeviceRequest->Flags = dwFlags; DefineDosDeviceRequest->Flags = dwFlags;
CsrCaptureMessageBuffer(CaptureBuffer, CsrCaptureMessageBuffer(CaptureBuffer,
(PVOID)DeviceUpcaseNameU.Buffer, DeviceUpcaseNameU.Buffer,
DeviceUpcaseNameU.Length, DeviceUpcaseNameU.Length,
(PVOID*)&DefineDosDeviceRequest->DeviceName.Buffer); (PVOID*)&DefineDosDeviceRequest->DeviceName.Buffer);
@ -173,7 +165,7 @@ DefineDosDeviceW(
if (NtTargetPathU.Buffer) if (NtTargetPathU.Buffer)
{ {
CsrCaptureMessageBuffer(CaptureBuffer, CsrCaptureMessageBuffer(CaptureBuffer,
(PVOID)NtTargetPathU.Buffer, NtTargetPathU.Buffer,
NtTargetPathU.Length, NtTargetPathU.Length,
(PVOID*)&DefineDosDeviceRequest->TargetPath.Buffer); (PVOID*)&DefineDosDeviceRequest->TargetPath.Buffer);
} }
@ -212,7 +204,7 @@ DefineDosDeviceW(
dbcv.dbcv_size = sizeof(DEV_BROADCAST_VOLUME); dbcv.dbcv_size = sizeof(DEV_BROADCAST_VOLUME);
dbcv.dbcv_devicetype = DBT_DEVTYP_VOLUME; dbcv.dbcv_devicetype = DBT_DEVTYP_VOLUME;
dbcv.dbcv_reserved = 0; dbcv.dbcv_reserved = 0;
dbcv.dbcv_unitmask |= dbcv.dbcv_unitmask |=
(1 << (DeviceUpcaseNameU.Buffer[0] - L'A')); (1 << (DeviceUpcaseNameU.Buffer[0] - L'A'));
dbcv.dbcv_flags = DBTF_NET; dbcv.dbcv_flags = DBTF_NET;
(void) BSM_ptr(BSF_SENDNOTIFYMESSAGE | BSF_FLUSHDISK, (void) BSM_ptr(BSF_SENDNOTIFYMESSAGE | BSF_FLUSHDISK,
@ -227,7 +219,8 @@ DefineDosDeviceW(
} }
} }
if (NtTargetPathU.Buffer) if (NtTargetPathU.Buffer &&
NtTargetPathU.Buffer != lpTargetPath)
{ {
RtlFreeHeap(RtlGetProcessHeap(), RtlFreeHeap(RtlGetProcessHeap(),
0, 0,
@ -293,7 +286,7 @@ QueryDosDeviceA(
{ {
CurrentLength = min (ucchMax, MAXUSHORT / 2); CurrentLength = min (ucchMax, MAXUSHORT / 2);
TargetPathU.MaximumLength = TargetPathU.Length = (USHORT)CurrentLength * sizeof(WCHAR); TargetPathU.MaximumLength = TargetPathU.Length = (USHORT)CurrentLength * sizeof(WCHAR);
TargetPathA.Length = 0; TargetPathA.Length = 0;
TargetPathA.MaximumLength = (USHORT)CurrentLength; TargetPathA.MaximumLength = (USHORT)CurrentLength;

View file

@ -1640,26 +1640,101 @@ GetVDMCurrentDirectories(DWORD cchCurDirs, PCHAR lpszzCurDirs)
/* /*
* @unimplemented * @implemented (undocumented)
*/ */
BOOL BOOL
WINAPI WINAPI
RegisterConsoleVDM ( RegisterConsoleVDM(IN DWORD dwRegisterFlags,
DWORD Unknown0, IN HANDLE hStartHardwareEvent,
DWORD Unknown1, IN HANDLE hEndHardwareEvent,
DWORD Unknown2, IN HANDLE hErrorHardwareEvent,
DWORD Unknown3, IN DWORD dwUnusedVar,
DWORD Unknown4, OUT LPDWORD lpVideoStateLength,
DWORD Unknown5, OUT PVOID* lpVideoState, // PVIDEO_HARDWARE_STATE_HEADER*
DWORD Unknown6, IN PVOID lpUnusedBuffer,
DWORD Unknown7, IN DWORD dwUnusedBufferLength,
DWORD Unknown8, IN COORD dwVDMBufferSize,
DWORD Unknown9, OUT PVOID* lpVDMBuffer)
DWORD Unknown10
)
{ {
STUB; BOOL Success;
return FALSE; CONSOLE_API_MESSAGE ApiMessage;
PCONSOLE_REGISTERVDM RegisterVDMRequest = &ApiMessage.Data.RegisterVDMRequest;
PCSR_CAPTURE_BUFFER CaptureBuffer = NULL;
/* Set up the data to send to the Console Server */
RegisterVDMRequest->ConsoleHandle = NtCurrentPeb()->ProcessParameters->ConsoleHandle;
RegisterVDMRequest->RegisterFlags = dwRegisterFlags;
if (dwRegisterFlags != 0)
{
RegisterVDMRequest->StartHardwareEvent = hStartHardwareEvent;
RegisterVDMRequest->EndHardwareEvent = hEndHardwareEvent;
RegisterVDMRequest->ErrorHardwareEvent = hErrorHardwareEvent;
RegisterVDMRequest->VDMBufferSize = dwVDMBufferSize;
#if 0
RegisterVDMRequest->UnusedBufferLength = dwUnusedBufferLength;
/* Allocate a Capture Buffer */
CaptureBuffer = CsrAllocateCaptureBuffer(1, dwUnusedBufferLength);
if (CaptureBuffer == NULL)
{
DPRINT1("CsrAllocateCaptureBuffer failed!\n");
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
/* Capture the buffer to write */
CsrCaptureMessageBuffer(CaptureBuffer,
(PVOID)lpUnusedBuffer,
dwUnusedBufferLength,
(PVOID*)&RegisterVDMRequest->UnusedBuffer);
#endif
}
else
{
// CaptureBuffer = NULL;
}
/* Call the server */
CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
CaptureBuffer,
CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepRegisterVDM),
sizeof(*RegisterVDMRequest));
/* Check for success */
Success = NT_SUCCESS(ApiMessage.Status);
/* Release the capture buffer if needed */
if (CaptureBuffer) CsrFreeCaptureBuffer(CaptureBuffer);
/* Retrieve the results */
if (Success)
{
if (dwRegisterFlags != 0)
{
_SEH2_TRY
{
*lpVideoStateLength = RegisterVDMRequest->VideoStateLength;
*lpVideoState = RegisterVDMRequest->VideoState;
*lpVDMBuffer = RegisterVDMRequest->VDMBuffer;
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
SetLastError(ERROR_INVALID_ACCESS);
Success = FALSE;
}
_SEH2_END;
}
}
else
{
BaseSetLastNTError(ApiMessage.Status);
}
/* Return success status */
return Success;
} }
@ -1756,9 +1831,8 @@ VDMOperationStarted(IN ULONG Unknown0)
{ {
DPRINT1("VDMOperationStarted(%d)\n", Unknown0); DPRINT1("VDMOperationStarted(%d)\n", Unknown0);
return return BaseUpdateVDMEntry(VdmEntryUpdateControlCHandler,
BaseUpdateVDMEntry(VdmEntryUpdateControlCHandler, NULL,
NULL, 0,
0, Unknown0);
Unknown0);
} }

View file

@ -1120,7 +1120,7 @@ static void PointerFree(PMIDL_STUB_MESSAGE pStubMsg,
* BufferStart and BufferEnd won't be reset when allocating memory for * BufferStart and BufferEnd won't be reset when allocating memory for
* sending the response. we don't have to check for the new buffer here as * sending the response. we don't have to check for the new buffer here as
* it won't be used a type memory, only for buffer memory */ * it won't be used a type memory, only for buffer memory */
if (Pointer >= pStubMsg->BufferStart && Pointer < pStubMsg->BufferEnd) if (Pointer >= pStubMsg->BufferStart && Pointer <= pStubMsg->BufferEnd)
goto notfree; goto notfree;
if (attr & RPC_FC_P_ONSTACK) { if (attr & RPC_FC_P_ONSTACK) {

View file

@ -25,14 +25,14 @@ FONT 8, "MS Shell Dlg"
STYLE 0x10C80080 STYLE 0x10C80080
EXSTYLE 0x00000001 EXSTYLE 0x00000001
BEGIN BEGIN
CONTROL "", IDC_GRP1, "Buton", 0x50000007, 6, 5, 210, 146, 0x00000000 CONTROL "", IDC_GRP1, "Button", 0x50000007, 6, 5, 210, 146, 0x00000000
CONTROL "OK", IDC_OKBTN, "Buton", 0x50010000, 98, 156, 56, 13, 0x00000000 CONTROL "OK", IDC_OKBTN, "Button", 0x50010000, 98, 156, 56, 13, 0x00000000
CONTROL "Anulo", IDC_CANCELBTN, "Buton", 0x50010000, 158, 156, 56, 13, 0x00000000 CONTROL "Anulo", IDC_CANCELBTN, "Button", 0x50010000, 158, 156, 56, 13, 0x00000000
CONTROL "Baud normë:", IDC_STC1, "Statik", 0x50000000, 24, 31, 42, 9, 0x00000000 CONTROL "Baud normë:", IDC_STC1, "Static", 0x50000000, 24, 31, 42, 9, 0x00000000
CONTROL "Byte masë:", IDC_STC2, "Statik", 0x50000000, 24, 53, 42, 9, 0x00000000 CONTROL "Byte masë:", IDC_STC2, "Static", 0x50000000, 24, 53, 42, 9, 0x00000000
CONTROL "Barazi:", IDC_STC3, "Statik", 0x50000000, 24, 73, 42, 9, 0x00000000 CONTROL "Barazi:", IDC_STC3, "Static", 0x50000000, 24, 73, 42, 9, 0x00000000
CONTROL "Ndalo bits:", IDC_STC4, "Statik", 0x50000000, 24, 96, 42, 9, 0x00000000 CONTROL "Ndalo bits:", IDC_STC4, "Static", 0x50000000, 24, 96, 42, 9, 0x00000000
CONTROL "Kontroll Rrjedhe:", IDC_STC5, "Statik", 0x50000000, 24, 120, 42, 9, 0x00000000 CONTROL "Kontroll Rrjedhe:", IDC_STC5, "Static", 0x50000000, 24, 120, 42, 9, 0x00000000
CONTROL "", IDC_BAUDRATE, "ComboBox", 0x50210003, 98, 29, 100, 50, 0x00000000 CONTROL "", IDC_BAUDRATE, "ComboBox", 0x50210003, 98, 29, 100, 50, 0x00000000
CONTROL "", IDC_BYTESIZE, "ComboBox", 0x50210003, 98, 49, 100, 50, 0x00000000 CONTROL "", IDC_BYTESIZE, "ComboBox", 0x50210003, 98, 49, 100, 50, 0x00000000
CONTROL "", IDC_PARITY, "ComboBox", 0x50210003, 98, 72, 100, 50, 0x00000000 CONTROL "", IDC_PARITY, "ComboBox", 0x50210003, 98, 72, 100, 50, 0x00000000

View file

@ -1439,20 +1439,17 @@ HRESULT WINAPI CFSFolder::Drop(IDataObject *pDataObject,
_DoDropData *data = static_cast<_DoDropData*>(HeapAlloc(GetProcessHeap(), 0, sizeof(_DoDropData))); _DoDropData *data = static_cast<_DoDropData*>(HeapAlloc(GetProcessHeap(), 0, sizeof(_DoDropData)));
data->This = this; data->This = this;
// Need to maintain this class in case the window is closed or the class exists temporarily (when dropping onto a folder). // Need to maintain this class in case the window is closed or the class exists temporarily (when dropping onto a folder).
pDataObject->AddRef();
pAsyncOperation->StartOperation(NULL);
CoMarshalInterThreadInterfaceInStream(IID_IDataObject, pDataObject, &data->pStream);
this->AddRef(); this->AddRef();
data->pDataObject = pDataObject;
data->pAsyncOperation = pAsyncOperation;
data->dwKeyState = dwKeyState; data->dwKeyState = dwKeyState;
data->pt = pt; data->pt = pt;
// Need to dereference as pdweffect gets freed. // Need to dereference as pdweffect gets freed.
data->pdwEffect = *pdwEffect; data->pdwEffect = *pdwEffect;
data->pDataObject->AddRef();
data->pAsyncOperation->StartOperation(NULL);
SHCreateThread(CFSFolder::_DoDropThreadProc, data, NULL, NULL); SHCreateThread(CFSFolder::_DoDropThreadProc, data, NULL, NULL);
return S_OK; return S_OK;
} }
else
pAsyncOperation->Release();
} }
return this->_DoDrop(pDataObject, dwKeyState, pt, pdwEffect); return this->_DoDrop(pDataObject, dwKeyState, pt, pdwEffect);
} }
@ -1753,12 +1750,22 @@ HRESULT WINAPI CFSFolder::_DoDrop(IDataObject *pDataObject,
} }
DWORD WINAPI CFSFolder::_DoDropThreadProc(LPVOID lpParameter) { DWORD WINAPI CFSFolder::_DoDropThreadProc(LPVOID lpParameter) {
CoInitialize(NULL);
_DoDropData *data = static_cast<_DoDropData*>(lpParameter); _DoDropData *data = static_cast<_DoDropData*>(lpParameter);
HRESULT hr = data->This->_DoDrop(data->pDataObject, data->dwKeyState, data->pt, &data->pdwEffect); IDataObject *pDataObject;
HRESULT hr = CoGetInterfaceAndReleaseStream (data->pStream, IID_IDataObject, (void**) &pDataObject);
if (SUCCEEDED(hr))
{
CComPtr<IAsyncOperation> pAsyncOperation;
hr = data->This->_DoDrop(pDataObject, data->dwKeyState, data->pt, &data->pdwEffect);
if (SUCCEEDED(pDataObject->QueryInterface(IID_PPV_ARG(IAsyncOperation, &pAsyncOperation))))
{
pAsyncOperation->EndOperation(hr, NULL, data->pdwEffect);
}
pDataObject->Release();
}
//Release the CFSFolder and data object holds in the copying thread. //Release the CFSFolder and data object holds in the copying thread.
data->pAsyncOperation->EndOperation(hr, NULL, data->pdwEffect);
data->pAsyncOperation->Release();
data->pDataObject->Release();
data->This->Release(); data->This->Release();
//Release the parameter from the heap. //Release the parameter from the heap.
HeapFree(GetProcessHeap(), 0, data); HeapFree(GetProcessHeap(), 0, data);

View file

@ -123,8 +123,7 @@ class CFSFolder :
struct _DoDropData { struct _DoDropData {
CFSFolder *This; CFSFolder *This;
IDataObject *pDataObject; IStream *pStream;
IAsyncOperation *pAsyncOperation;
DWORD dwKeyState; DWORD dwKeyState;
POINTL pt; POINTL pt;
DWORD pdwEffect; DWORD pdwEffect;

View file

@ -289,11 +289,11 @@ BEGIN
LTEXT "Dokumentimi Sistemit:", -1, 8, 51, 95, 10 LTEXT "Dokumentimi Sistemit:", -1, 8, 51, 95, 10
EDITTEXT 14002, 110, 51, 120, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT 14002, 110, 51, 120, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP
LTEXT "", -1, 8, 64, 223, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE LTEXT "", -1, 8, 64, 223, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE
CONTROL "", 14013, "Statik", SS_SUNKEN | SS_OWNERDRAW, 8, 69, 10, 10 CONTROL "", 14013, "Static", SS_SUNKEN | SS_OWNERDRAW, 8, 69, 10, 10
LTEXT "Hapësira përdorur:", -1, 25, 69, 80, 10 LTEXT "Hapësira përdorur:", -1, 25, 69, 80, 10
EDITTEXT 14003, 110, 69, 86, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL EDITTEXT 14003, 110, 69, 86, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
EDITTEXT 14004, 197, 69, 33, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL EDITTEXT 14004, 197, 69, 33, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
CONTROL "", 14014, "Statik", SS_SUNKEN | SS_OWNERDRAW, 8, 82, 10, 10 CONTROL "", 14014, "Static", SS_SUNKEN | SS_OWNERDRAW, 8, 82, 10, 10
LTEXT "Hapësirë Falas:", -1, 25, 82, 80, 10 LTEXT "Hapësirë Falas:", -1, 25, 82, 80, 10
EDITTEXT 14005, 110, 82, 86, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL EDITTEXT 14005, 110, 82, 86, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
EDITTEXT 14006, 197, 82, 33, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL EDITTEXT 14006, 197, 82, 33, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
@ -301,7 +301,7 @@ BEGIN
LTEXT "Kapaciteti:", -1, 25, 103, 80, 10 LTEXT "Kapaciteti:", -1, 25, 103, 80, 10
EDITTEXT 14007, 110, 103, 86, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL EDITTEXT 14007, 110, 103, 86, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
EDITTEXT 14008, 197, 103, 33, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL EDITTEXT 14008, 197, 103, 33, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
CONTROL "", 14015, "Statik", SS_OWNERDRAW, 70, 116, 100, 30 CONTROL "", 14015, "Static", SS_OWNERDRAW, 70, 116, 100, 30
LTEXT "Drive %c", 14009, 100, 150, 70, 10 LTEXT "Drive %c", 14009, 100, 150, 70, 10
PUSHBUTTON "Pastrim &Disku", 14010, 160, 154, 70, 15, WS_TABSTOP PUSHBUTTON "Pastrim &Disku", 14010, 160, 154, 70, 15, WS_TABSTOP
LTEXT "", -1, 8, 171, 223, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE LTEXT "", -1, 8, 171, 223, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE

View file

@ -170,7 +170,11 @@ InstallBuiltinAccounts(VOID)
for (i = 0; i < 10; i++) for (i = 0; i < 10; i++)
{ {
ConvertStringSidToSid(BuiltinAccounts[i], &AccountSid); if (!ConvertStringSidToSid(BuiltinAccounts[i], &AccountSid))
{
DPRINT1("ConvertStringSidToSid(%S) failed: %lu\n", BuiltinAccounts[i], GetLastError());
continue;
}
Status = LsaCreateAccount(PolicyHandle, Status = LsaCreateAccount(PolicyHandle,
AccountSid, AccountSid,
@ -277,7 +281,11 @@ InstallPrivileges(VOID)
} }
DPRINT("SID: %S\n", szSidString); DPRINT("SID: %S\n", szSidString);
ConvertStringSidToSid(szSidString, &AccountSid); if (!ConvertStringSidToSid(szSidString, &AccountSid))
{
DPRINT1("ConvertStringSidToSid(%S) failed: %lu\n", szSidString, GetLastError());
continue;
}
Status = LsaOpenAccount(PolicyHandle, Status = LsaOpenAccount(PolicyHandle,
AccountSid, AccountSid,
@ -330,7 +338,7 @@ SetAdministratorPassword(LPCWSTR Password)
SAM_HANDLE UserHandle = NULL; SAM_HANDLE UserHandle = NULL;
NTSTATUS Status; NTSTATUS Status;
DPRINT1("SYSSETUP: SetAdministratorPassword(%S)\n", Password); DPRINT("SYSSETUP: SetAdministratorPassword(%p)\n", Password);
memset(&ObjectAttributes, 0, sizeof(LSA_OBJECT_ATTRIBUTES)); memset(&ObjectAttributes, 0, sizeof(LSA_OBJECT_ATTRIBUTES));
ObjectAttributes.Length = sizeof(LSA_OBJECT_ATTRIBUTES); ObjectAttributes.Length = sizeof(LSA_OBJECT_ATTRIBUTES);

View file

@ -618,6 +618,12 @@ BOOL WINAPI CloseConsoleHandle(_In_ HANDLE);
// BOOL WINAPI SetStdHandle(_In_ DWORD, _In_ HANDLE); // BOOL WINAPI SetStdHandle(_In_ DWORD, _In_ HANDLE);
/* Undocumented */ /* Undocumented */
BOOL WINAPI VerifyConsoleIoHandle(_In_ HANDLE); BOOL WINAPI VerifyConsoleIoHandle(_In_ HANDLE);
/* Undocumented */
BOOL
WINAPI
RegisterConsoleVDM(_In_ DWORD, _In_ HANDLE, _In_ HANDLE, _In_ HANDLE, _In_ DWORD,
_Out_ LPDWORD, _Out_ PVOID*, _In_ PVOID, _In_ DWORD, _In_ COORD,
_Out_ PVOID*);
BOOL BOOL
WINAPI WINAPI

View file

@ -544,7 +544,12 @@ typedef struct
SMALL_RECT WriteRegion; SMALL_RECT WriteRegion;
BOOLEAN Unicode; BOOLEAN Unicode;
ULONG Unknown; /*
* If we are going to write too large (>= 64 kB, size of the CSR heap)
* data buffers, we allocate a heap buffer in the process' memory, and
* CSR will read it via NtReadVirtualMemory.
*/
BOOLEAN UseVirtualMemory;
} CONSOLE_WRITEOUTPUT, *PCONSOLE_WRITEOUTPUT; } CONSOLE_WRITEOUTPUT, *PCONSOLE_WRITEOUTPUT;
typedef struct typedef struct
@ -801,6 +806,28 @@ typedef struct
BOOL Ansi; BOOL Ansi;
} CONSOLE_GETKBDLAYOUTNAME, *PCONSOLE_GETKBDLAYOUTNAME; } CONSOLE_GETKBDLAYOUTNAME, *PCONSOLE_GETKBDLAYOUTNAME;
typedef struct
{
HANDLE ConsoleHandle;
ULONG RegisterFlags;
HANDLE StartHardwareEvent;
HANDLE EndHardwareEvent;
HANDLE ErrorHardwareEvent;
/* Unused member */
ULONG UnusedVar;
ULONG VideoStateLength;
PVOID VideoState; // PVIDEO_HARDWARE_STATE_HEADER
/* Unused members */
PVOID UnusedBuffer;
ULONG UnusedBufferLength;
COORD VDMBufferSize;
PVOID VDMBuffer;
} CONSOLE_REGISTERVDM, *PCONSOLE_REGISTERVDM;
typedef struct _CONSOLE_API_MESSAGE typedef struct _CONSOLE_API_MESSAGE
{ {
PORT_MESSAGE Header; PORT_MESSAGE Header;
@ -898,6 +925,9 @@ typedef struct _CONSOLE_API_MESSAGE
CONSOLE_GETINPUTOUTPUTCP GetConsoleCPRequest; CONSOLE_GETINPUTOUTPUTCP GetConsoleCPRequest;
CONSOLE_SETINPUTOUTPUTCP SetConsoleCPRequest; CONSOLE_SETINPUTOUTPUTCP SetConsoleCPRequest;
CONSOLE_GETKBDLAYOUTNAME GetKbdLayoutNameRequest; CONSOLE_GETKBDLAYOUTNAME GetKbdLayoutNameRequest;
/* Virtual DOS Machine */
CONSOLE_REGISTERVDM RegisterVDMRequest;
} Data; } Data;
} CONSOLE_API_MESSAGE, *PCONSOLE_API_MESSAGE; } CONSOLE_API_MESSAGE, *PCONSOLE_API_MESSAGE;

View file

@ -23,7 +23,7 @@ static CONST DWORD MemoryLimit[] = { 0xAFFFF, 0xAFFFF, 0xB7FFF, 0xBFFFF };
/* /*
* Activate this line if you want to use the real * Activate this line if you want to use the real
* RegisterConsoleVDM API of Windows/ReactOS. * RegisterConsoleVDM API of ReactOS/Windows.
*/ */
// #define USE_REAL_REGISTERCONSOLEVDM // #define USE_REAL_REGISTERCONSOLEVDM
@ -314,33 +314,33 @@ static PCHAR_INFO CharBuff = NULL; // This is a hack, which is unneeded
BOOL BOOL
WINAPI WINAPI
__RegisterConsoleVDM(IN DWORD dwDosVDMFlag, __RegisterConsoleVDM(IN DWORD dwRegisterFlags,
IN HANDLE hEventHandle1, IN HANDLE hStartHardwareEvent,
IN HANDLE hEventHandle2, IN HANDLE hEndHardwareEvent,
IN HANDLE hEventHandle3, IN HANDLE hErrorHardwareEvent,
IN DWORD Unused1, IN DWORD dwUnusedVar,
OUT PULONG returned_val_1, OUT LPDWORD lpVideoStateLength,
OUT PVOID* returned_val_2, OUT PVOID* lpVideoState, // PVIDEO_HARDWARE_STATE_HEADER*
IN PVOID lpUnknownBuffer, IN PVOID lpUnusedBuffer,
IN DWORD dwUnknownBufferLength, IN DWORD dwUnusedBufferLength,
IN COORD dwVDMBufferSize, IN COORD dwVDMBufferSize,
OUT PVOID* lpVDMBuffer) OUT PVOID* lpVDMBuffer)
{ {
UNREFERENCED_PARAMETER(hEventHandle3); UNREFERENCED_PARAMETER(hErrorHardwareEvent);
UNREFERENCED_PARAMETER(Unused1); UNREFERENCED_PARAMETER(dwUnusedVar);
UNREFERENCED_PARAMETER(returned_val_1); UNREFERENCED_PARAMETER(lpVideoStateLength);
UNREFERENCED_PARAMETER(returned_val_2); UNREFERENCED_PARAMETER(lpVideoState);
UNREFERENCED_PARAMETER(lpUnknownBuffer); UNREFERENCED_PARAMETER(lpUnusedBuffer);
UNREFERENCED_PARAMETER(dwUnknownBufferLength); UNREFERENCED_PARAMETER(dwUnusedBufferLength);
SetLastError(0); SetLastError(0);
DPRINT1("__RegisterConsoleVDM(%d)\n", dwDosVDMFlag); DPRINT1("__RegisterConsoleVDM(%d)\n", dwRegisterFlags);
if (lpVDMBuffer == NULL) return FALSE; if (lpVDMBuffer == NULL) return FALSE;
if (dwDosVDMFlag != 0) if (dwRegisterFlags != 0)
{ {
// if (EventHandle_1 == NULL || EventHandle_2 == NULL) return FALSE; // if (hStartHardwareEvent == NULL || hEndHardwareEvent == NULL) return FALSE;
if (VDMBuffer != NULL) return FALSE; if (VDMBuffer != NULL) return FALSE;
VDMBufferSize = dwVDMBufferSize; VDMBufferSize = dwVDMBufferSize;
@ -451,7 +451,7 @@ static BOOL VgaAttachToConsoleInternal(PCOORD Resolution)
/* /*
* Windows 2k3 winsrv.dll calls NtVdmControl(VdmQueryVdmProcess == 14, &ConsoleHandle); * Windows 2k3 winsrv.dll calls NtVdmControl(VdmQueryVdmProcess == 14, &ConsoleHandle);
* in the two following APIs: * in the two following APIs:
* SrvRegisterConsoleVDM (corresponding win32 API: RegisterConsoleVDM) * SrvRegisterConsoleVDM (corresponding Win32 API: RegisterConsoleVDM)
* SrvVDMConsoleOperation (corresponding Win32 API: ) * SrvVDMConsoleOperation (corresponding Win32 API: )
* to check whether the current process is a VDM process, and fails otherwise with the * to check whether the current process is a VDM process, and fails otherwise with the
* error 0xC0000022 (). * error 0xC0000022 ().

View file

@ -372,28 +372,22 @@ FindRemoveAsyncMsg(PWND Wnd, WPARAM wParam)
pti = Wnd->head.pti; pti = Wnd->head.pti;
if (!IsListEmpty(&pti->SentMessagesListHead)) Entry = pti->SentMessagesListHead.Flink;
while (Entry != &pti->SentMessagesListHead)
{ {
// Scan sent queue messages to see if we received async messages. // Scan sent queue messages to see if we received async messages.
Entry = pti->SentMessagesListHead.Flink;
Message = CONTAINING_RECORD(Entry, USER_SENT_MESSAGE, ListEntry); Message = CONTAINING_RECORD(Entry, USER_SENT_MESSAGE, ListEntry);
do Entry = Entry->Flink;
{
if (IsListEmpty(Entry)) return;
if (!Message) return;
Entry = Message->ListEntry.Flink;
if (Message->Msg.message == WM_ASYNC_SETACTIVEWINDOW && if (Message->Msg.message == WM_ASYNC_SETACTIVEWINDOW &&
Message->Msg.hwnd == UserHMGetHandle(Wnd) && Message->Msg.hwnd == UserHMGetHandle(Wnd) &&
Message->Msg.wParam == wParam ) Message->Msg.wParam == wParam)
{ {
ERR("ASYNC SAW: Found one in the Sent Msg Queue! %p Activate/Deactivate %d\n", Message->Msg.hwnd,!!wParam); ERR("ASYNC SAW: Found one in the Sent Msg Queue! %p Activate/Deactivate %d\n", Message->Msg.hwnd, !!wParam);
RemoveEntryList(&Message->ListEntry); // Purge the entry. RemoveEntryList(&Message->ListEntry); // Purge the entry.
ExFreePoolWithTag(Message, TAG_USRMSG); ClearMsgBitsMask(pti, Message->QS_Flags);
} ExFreePoolWithTag(Message, TAG_USRMSG);
Message = CONTAINING_RECORD(Entry, USER_SENT_MESSAGE, ListEntry);
} }
while (Entry != &pti->SentMessagesListHead);
} }
} }

View file

@ -188,7 +188,7 @@ ConDrvSetConsoleActiveScreenBuffer(IN PCONSOLE Console,
if (Buffer == Console->ActiveBuffer) return STATUS_SUCCESS; if (Buffer == Console->ActiveBuffer) return STATUS_SUCCESS;
/* If old buffer has no handles, it's now unreferenced */ /* If old buffer has no handles, it's now unreferenced */
if (Console->ActiveBuffer->Header.HandleCount == 0) if (Console->ActiveBuffer->Header.ReferenceCount == 0)
{ {
ConioDeleteScreenBuffer(Console->ActiveBuffer); ConioDeleteScreenBuffer(Console->ActiveBuffer);
} }
@ -207,6 +207,13 @@ ConDrvGetActiveScreenBuffer(IN PCONSOLE Console)
/* PUBLIC DRIVER APIS *********************************************************/ /* PUBLIC DRIVER APIS *********************************************************/
NTSTATUS NTAPI
ConDrvWriteConsoleOutputVDM(IN PCONSOLE Console,
IN PTEXTMODE_SCREEN_BUFFER Buffer,
IN PCHAR_CELL CharInfo/*Buffer*/,
IN COORD CharInfoSize,
IN OUT PSMALL_RECT WriteRegion,
IN BOOLEAN DrawRegion);
NTSTATUS NTAPI NTSTATUS NTAPI
ConDrvInvalidateBitMapRect(IN PCONSOLE Console, ConDrvInvalidateBitMapRect(IN PCONSOLE Console,
IN PCONSOLE_SCREEN_BUFFER Buffer, IN PCONSOLE_SCREEN_BUFFER Buffer,
@ -218,6 +225,19 @@ ConDrvInvalidateBitMapRect(IN PCONSOLE Console,
/* Validity check */ /* Validity check */
ASSERT(Console == Buffer->Header.Console); ASSERT(Console == Buffer->Header.Console);
/* In text-mode only, draw the VDM buffer if present */
if (GetType(Buffer) == TEXTMODE_BUFFER)
{
PTEXTMODE_SCREEN_BUFFER TextBuffer = (PTEXTMODE_SCREEN_BUFFER)Buffer;
/*Status =*/ ConDrvWriteConsoleOutputVDM(Buffer->Header.Console,
TextBuffer,
Console->VDMBuffer,
Console->VDMBufferSize,
Region,
FALSE);
}
/* If the output buffer is the current one, redraw the correct portion of the screen */ /* If the output buffer is the current one, redraw the correct portion of the screen */
if (Buffer == Console->ActiveBuffer) TermDrawRegion(Console, Region); if (Buffer == Console->ActiveBuffer) TermDrawRegion(Console, Region);

View file

@ -722,6 +722,68 @@ ConDrvWriteConsoleOutput(IN PCONSOLE Console,
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
/*
* NOTE: This function is strongly inspired by ConDrvWriteConsoleOutput...
*/
NTSTATUS NTAPI
ConDrvWriteConsoleOutputVDM(IN PCONSOLE Console,
IN PTEXTMODE_SCREEN_BUFFER Buffer,
IN PCHAR_CELL CharInfo/*Buffer*/,
IN COORD CharInfoSize,
IN OUT PSMALL_RECT WriteRegion,
IN BOOLEAN DrawRegion)
{
SHORT X, Y;
SMALL_RECT ScreenBuffer;
PCHAR_CELL CurCharInfo;
SMALL_RECT CapturedWriteRegion;
PCHAR_INFO Ptr;
if (Console == NULL || Buffer == NULL || CharInfo == NULL || WriteRegion == NULL)
{
return STATUS_INVALID_PARAMETER;
}
/* Validity check */
ASSERT(Console == Buffer->Header.Console);
CapturedWriteRegion = *WriteRegion;
/* Make sure WriteRegion is inside the screen buffer */
ConioInitRect(&ScreenBuffer, 0, 0,
Buffer->ScreenBufferSize.Y - 1, Buffer->ScreenBufferSize.X - 1);
if (!ConioGetIntersection(&CapturedWriteRegion, &ScreenBuffer, &CapturedWriteRegion))
{
/*
* It is okay to have a WriteRegion completely outside
* the screen buffer. No data is written then.
*/
return STATUS_SUCCESS;
}
// CurCharInfo = CharInfo;
for (Y = CapturedWriteRegion.Top; Y <= CapturedWriteRegion.Bottom; ++Y)
{
/**/CurCharInfo = CharInfo + Y * CharInfoSize.X + CapturedWriteRegion.Left;/**/
Ptr = ConioCoordToPointer(Buffer, CapturedWriteRegion.Left, Y);
for (X = CapturedWriteRegion.Left; X <= CapturedWriteRegion.Right; ++X)
{
ConsoleAnsiCharToUnicodeChar(Console, &Ptr->Char.UnicodeChar, &CurCharInfo->Char);
Ptr->Attributes = CurCharInfo->Attributes;
++Ptr;
++CurCharInfo;
}
}
if (DrawRegion) TermDrawRegion(Console, &CapturedWriteRegion);
*WriteRegion = CapturedWriteRegion;
return STATUS_SUCCESS;
}
NTSTATUS NTAPI NTSTATUS NTAPI
ConDrvWriteConsole(IN PCONSOLE Console, ConDrvWriteConsole(IN PCONSOLE Console,
IN PTEXTMODE_SCREEN_BUFFER ScreenBuffer, IN PTEXTMODE_SCREEN_BUFFER ScreenBuffer,

View file

@ -463,15 +463,15 @@ CSR_API(SrvReadConsoleOutput)
DPRINT("SrvReadConsoleOutput\n"); DPRINT("SrvReadConsoleOutput\n");
NumCells = (ReadOutputRequest->ReadRegion.Right - ReadOutputRequest->ReadRegion.Left + 1) *
(ReadOutputRequest->ReadRegion.Bottom - ReadOutputRequest->ReadRegion.Top + 1);
/* /*
* For optimization purposes, Windows (and hence ReactOS, too, for * For optimization purposes, Windows (and hence ReactOS, too, for
* compatibility reasons) uses a static buffer if no more than one * compatibility reasons) uses a static buffer if no more than one
* cell is read. Otherwise a new buffer is used. * cell is read. Otherwise a new buffer is used.
* The client-side expects that we know this behaviour. * The client-side expects that we know this behaviour.
*/ */
NumCells = (ReadOutputRequest->ReadRegion.Right - ReadOutputRequest->ReadRegion.Left + 1) *
(ReadOutputRequest->ReadRegion.Bottom - ReadOutputRequest->ReadRegion.Top + 1);
if (NumCells <= 1) if (NumCells <= 1)
{ {
/* /*
@ -520,54 +520,95 @@ CSR_API(SrvWriteConsoleOutput)
NTSTATUS Status; NTSTATUS Status;
PCONSOLE_WRITEOUTPUT WriteOutputRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.WriteOutputRequest; PCONSOLE_WRITEOUTPUT WriteOutputRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.WriteOutputRequest;
PTEXTMODE_SCREEN_BUFFER Buffer; PTEXTMODE_SCREEN_BUFFER Buffer;
PCSR_PROCESS Process = CsrGetClientThread()->Process;
ULONG NumCells; ULONG NumCells;
PCHAR_INFO CharInfo; PCHAR_INFO CharInfo;
DPRINT("SrvWriteConsoleOutput\n"); DPRINT("SrvWriteConsoleOutput\n");
/*
* For optimization purposes, Windows (and hence ReactOS, too, for
* compatibility reasons) uses a static buffer if no more than one
* cell is written. Otherwise a new buffer is used.
* The client-side expects that we know this behaviour.
*/
NumCells = (WriteOutputRequest->WriteRegion.Right - WriteOutputRequest->WriteRegion.Left + 1) * NumCells = (WriteOutputRequest->WriteRegion.Right - WriteOutputRequest->WriteRegion.Left + 1) *
(WriteOutputRequest->WriteRegion.Bottom - WriteOutputRequest->WriteRegion.Top + 1); (WriteOutputRequest->WriteRegion.Bottom - WriteOutputRequest->WriteRegion.Top + 1);
if (NumCells <= 1) Status = ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(Process),
{
/*
* Adjust the internal pointer, because its old value points to
* the static buffer in the original ApiMessage structure.
*/
// WriteOutputRequest->CharInfo = &WriteOutputRequest->StaticBuffer;
CharInfo = &WriteOutputRequest->StaticBuffer;
}
else
{
if (!CsrValidateMessageBuffer(ApiMessage,
(PVOID*)&WriteOutputRequest->CharInfo,
NumCells,
sizeof(CHAR_INFO)))
{
return STATUS_INVALID_PARAMETER;
}
CharInfo = WriteOutputRequest->CharInfo;
}
Status = ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
WriteOutputRequest->OutputHandle, WriteOutputRequest->OutputHandle,
&Buffer, GENERIC_WRITE, TRUE); &Buffer, GENERIC_WRITE, TRUE);
if (!NT_SUCCESS(Status)) return Status; if (!NT_SUCCESS(Status)) return Status;
/*
* Validate the message buffer if we do not use a process' heap buffer
* (CsrAllocateCaptureBuffer succeeded because we haven't allocated
* a too large (>= 64 kB, size of the CSR heap) data buffer).
*/
if (!WriteOutputRequest->UseVirtualMemory)
{
/*
* For optimization purposes, Windows (and hence ReactOS, too, for
* compatibility reasons) uses a static buffer if no more than one
* cell is written. Otherwise a new buffer is used.
* The client-side expects that we know this behaviour.
*/
if (NumCells <= 1)
{
/*
* Adjust the internal pointer, because its old value points to
* the static buffer in the original ApiMessage structure.
*/
// WriteOutputRequest->CharInfo = &WriteOutputRequest->StaticBuffer;
CharInfo = &WriteOutputRequest->StaticBuffer;
}
else
{
if (!CsrValidateMessageBuffer(ApiMessage,
(PVOID*)&WriteOutputRequest->CharInfo,
NumCells,
sizeof(CHAR_INFO)))
{
Status = STATUS_INVALID_PARAMETER;
goto Quit;
}
CharInfo = WriteOutputRequest->CharInfo;
}
}
else
{
/*
* This was not the case: we use a heap buffer. Retrieve its contents.
*/
ULONG Size = NumCells * sizeof(CHAR_INFO);
CharInfo = ConsoleAllocHeap(HEAP_ZERO_MEMORY, Size);
if (CharInfo == NULL)
{
Status = STATUS_NO_MEMORY;
goto Quit;
}
Status = NtReadVirtualMemory(Process->ProcessHandle,
WriteOutputRequest->CharInfo,
CharInfo,
Size,
NULL);
if (!NT_SUCCESS(Status))
{
ConsoleFreeHeap(CharInfo);
// Status = STATUS_NO_MEMORY;
goto Quit;
}
}
Status = ConDrvWriteConsoleOutput(Buffer->Header.Console, Status = ConDrvWriteConsoleOutput(Buffer->Header.Console,
Buffer, Buffer,
WriteOutputRequest->Unicode, WriteOutputRequest->Unicode,
CharInfo, CharInfo,
&WriteOutputRequest->WriteRegion); &WriteOutputRequest->WriteRegion);
/* Free the temporary buffer if we used the process' heap buffer */
if (WriteOutputRequest->UseVirtualMemory && CharInfo)
ConsoleFreeHeap(CharInfo);
Quit:
ConSrvReleaseScreenBuffer(Buffer, TRUE); ConSrvReleaseScreenBuffer(Buffer, TRUE);
return Status; return Status;
} }

View file

@ -506,8 +506,8 @@ OnNcCreate(HWND hWnd, LPCREATESTRUCTW Create)
GuiData->hWindow = hWnd; GuiData->hWindow = hWnd;
GuiData->Font = CreateFontW(GuiData->GuiInfo.FontSize.X, GuiData->Font = CreateFontW(GuiData->GuiInfo.FontSize.Y,
0, // GuiData->GuiInfo.FontSize.Y, 0, // GuiData->GuiInfo.FontSize.X,
0, 0,
TA_BASELINE, TA_BASELINE,
GuiData->GuiInfo.FontWeight, GuiData->GuiInfo.FontWeight,

View file

@ -98,8 +98,8 @@ GuiConsoleReadUserSettings(IN OUT PGUI_CONSOLE_INFO TermInfo,
} }
else if (!wcscmp(szValueName, L"FontSize")) else if (!wcscmp(szValueName, L"FontSize"))
{ {
TermInfo->FontSize.X = LOWORD(Value); TermInfo->FontSize.X = LOWORD(Value); // Width
TermInfo->FontSize.Y = HIWORD(Value); TermInfo->FontSize.Y = HIWORD(Value); // Height
RetVal = TRUE; RetVal = TRUE;
} }
else if (!wcscmp(szValueName, L"FontWeight")) else if (!wcscmp(szValueName, L"FontWeight"))
@ -161,7 +161,7 @@ do {
SetConsoleSetting(L"FaceName", REG_SZ, (wcslen(TermInfo->FaceName) + 1) * sizeof(WCHAR), TermInfo->FaceName, L'\0'); // wcsnlen SetConsoleSetting(L"FaceName", REG_SZ, (wcslen(TermInfo->FaceName) + 1) * sizeof(WCHAR), TermInfo->FaceName, L'\0'); // wcsnlen
SetConsoleSetting(L"FontFamily", REG_DWORD, sizeof(DWORD), &TermInfo->FontFamily, FF_DONTCARE); SetConsoleSetting(L"FontFamily", REG_DWORD, sizeof(DWORD), &TermInfo->FontFamily, FF_DONTCARE);
Storage = MAKELONG(TermInfo->FontSize.X, TermInfo->FontSize.Y); Storage = MAKELONG(TermInfo->FontSize.X, TermInfo->FontSize.Y); // Width, Height
SetConsoleSetting(L"FontSize", REG_DWORD, sizeof(DWORD), &Storage, 0); SetConsoleSetting(L"FontSize", REG_DWORD, sizeof(DWORD), &Storage, 0);
SetConsoleSetting(L"FontWeight", REG_DWORD, sizeof(DWORD), &TermInfo->FontWeight, FW_DONTCARE); SetConsoleSetting(L"FontWeight", REG_DWORD, sizeof(DWORD), &TermInfo->FontWeight, FW_DONTCARE);
@ -197,7 +197,7 @@ GuiConsoleGetDefaultSettings(IN OUT PGUI_CONSOLE_INFO TermInfo,
* 1. Load the default values * 1. Load the default values
*/ */
// wcsncpy(TermInfo->FaceName, L"DejaVu Sans Mono", LF_FACESIZE); // wcsncpy(TermInfo->FaceName, L"DejaVu Sans Mono", LF_FACESIZE);
// TermInfo->FontSize = MAKELONG(12, 8); // 0x0008000C; // font is 8x12 // TermInfo->FontSize = MAKELONG(8, 12); // 0x000C0008; // font is 8x12
// TermInfo->FontSize = MAKELONG(16, 16); // font is 16x16 // TermInfo->FontSize = MAKELONG(16, 16); // font is 16x16
// TermInfo->FontWeight = FW_NORMAL; // TermInfo->FontWeight = FW_NORMAL;
@ -207,7 +207,6 @@ GuiConsoleGetDefaultSettings(IN OUT PGUI_CONSOLE_INFO TermInfo,
TermInfo->FontSize.X = 0; TermInfo->FontSize.X = 0;
TermInfo->FontSize.Y = 0; TermInfo->FontSize.Y = 0;
TermInfo->FontWeight = FW_DONTCARE; TermInfo->FontWeight = FW_DONTCARE;
TermInfo->UseRasterFonts = TRUE;
TermInfo->FullScreen = FALSE; TermInfo->FullScreen = FALSE;
TermInfo->ShowWindow = SW_SHOWNORMAL; TermInfo->ShowWindow = SW_SHOWNORMAL;
@ -333,7 +332,6 @@ GuiConsoleShowConsoleProperties(PGUI_CONSOLE_DATA GuiData,
GuiInfo->FontFamily = GuiData->GuiInfo.FontFamily; GuiInfo->FontFamily = GuiData->GuiInfo.FontFamily;
GuiInfo->FontSize = GuiData->GuiInfo.FontSize; GuiInfo->FontSize = GuiData->GuiInfo.FontSize;
GuiInfo->FontWeight = GuiData->GuiInfo.FontWeight; GuiInfo->FontWeight = GuiData->GuiInfo.FontWeight;
GuiInfo->UseRasterFonts = GuiData->GuiInfo.UseRasterFonts;
GuiInfo->FullScreen = GuiData->GuiInfo.FullScreen; GuiInfo->FullScreen = GuiData->GuiInfo.FullScreen;
GuiInfo->AutoPosition = GuiData->GuiInfo.AutoPosition; GuiInfo->AutoPosition = GuiData->GuiInfo.AutoPosition;
GuiInfo->WindowOrigin = GuiData->GuiInfo.WindowOrigin; GuiInfo->WindowOrigin = GuiData->GuiInfo.WindowOrigin;
@ -420,6 +418,92 @@ Quit:
return; return;
} }
BOOL
ChangeFont(PGUI_CONSOLE_DATA GuiData,
LPWSTR FaceName, // Points to a WCHAR array of LF_FACESIZE elements.
ULONG FontFamily,
COORD FontSize,
ULONG FontWeight)
{
HDC hDC;
HFONT OldFont, NewFont;
TEXTMETRICW Metrics;
SIZE CharSize;
SIZE_T Length;
NewFont = CreateFontW(FontSize.Y,
0, // FontSize.X,
0,
TA_BASELINE,
FontWeight,
FALSE,
FALSE,
FALSE,
OEM_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
NONANTIALIASED_QUALITY,
FIXED_PITCH | FontFamily /* FF_DONTCARE */,
FaceName);
if (NewFont == NULL)
{
DPRINT1("ChangeFont: CreateFont failed\n");
return FALSE;
}
hDC = GetDC(GuiData->hWindow);
if (hDC == NULL)
{
DPRINT1("ChangeFont: GetDC failed\n");
DeleteObject(NewFont);
return FALSE;
}
OldFont = SelectObject(hDC, NewFont);
if (OldFont == NULL)
{
DPRINT1("ChangeFont: SelectObject failed\n");
ReleaseDC(GuiData->hWindow, hDC);
DeleteObject(NewFont);
return FALSE;
}
if (!GetTextMetricsW(hDC, &Metrics))
{
DPRINT1("ChangeFont: GetTextMetrics failed\n");
SelectObject(hDC, OldFont);
ReleaseDC(GuiData->hWindow, hDC);
DeleteObject(NewFont);
return FALSE;
}
GuiData->CharWidth = Metrics.tmMaxCharWidth;
GuiData->CharHeight = Metrics.tmHeight + Metrics.tmExternalLeading;
/* Measure real char width more precisely if possible. */
if (GetTextExtentPoint32W(hDC, L"R", 1, &CharSize))
GuiData->CharWidth = CharSize.cx;
SelectObject(hDC, OldFont);
ReleaseDC(GuiData->hWindow, hDC);
if (GuiData->Font != NULL) DeleteObject(GuiData->Font);
GuiData->Font = NewFont;
Length = min(wcslen(FaceName) + 1, LF_FACESIZE); // wcsnlen
wcsncpy(GuiData->GuiInfo.FaceName, FaceName, LF_FACESIZE);
GuiData->GuiInfo.FaceName[Length] = L'\0'; // NULL-terminate
GuiData->GuiInfo.FontFamily = FontFamily;
GuiData->GuiInfo.FontSize = FontSize;
GuiData->GuiInfo.FontWeight = FontWeight;
return TRUE;
}
VOID VOID
GuiApplyUserSettings(PGUI_CONSOLE_DATA GuiData, GuiApplyUserSettings(PGUI_CONSOLE_DATA GuiData,
HANDLE hClientSection, HANDLE hClientSection,
@ -501,6 +585,15 @@ GuiApplyUserSettings(PGUI_CONSOLE_DATA GuiData,
// memcpy(&GuiData->GuiInfo, GuiInfo, sizeof(GUI_CONSOLE_INFO)); // memcpy(&GuiData->GuiInfo, GuiInfo, sizeof(GUI_CONSOLE_INFO));
/* Change the font */
ChangeFont(GuiData,
GuiInfo->FaceName,
GuiInfo->FontFamily,
GuiInfo->FontSize,
GuiInfo->FontWeight);
// HACK, needed because changing font may change the size of the window
/**/TermResizeTerminal(Console);/**/
/* Move the window to the user's values */ /* Move the window to the user's values */
GuiData->GuiInfo.AutoPosition = GuiInfo->AutoPosition; GuiData->GuiInfo.AutoPosition = GuiInfo->AutoPosition;
GuiData->GuiInfo.WindowOrigin = GuiInfo->WindowOrigin; GuiData->GuiInfo.WindowOrigin = GuiInfo->WindowOrigin;
@ -655,7 +748,6 @@ GuiApplyWindowsConsoleSettings(PGUI_CONSOLE_DATA GuiData,
GuiInfo.FullScreen = !!pConInfo->FullScreen; GuiInfo.FullScreen = !!pConInfo->FullScreen;
GuiInfo.AutoPosition = !!pConInfo->AutoPosition; GuiInfo.AutoPosition = !!pConInfo->AutoPosition;
GuiInfo.WindowOrigin = pConInfo->WindowPosition; GuiInfo.WindowOrigin = pConInfo->WindowPosition;
// BOOL GuiInfo.UseRasterFonts = pConInfo->
// WORD GuiInfo.ShowWindow = pConInfo-> // WORD GuiInfo.ShowWindow = pConInfo->
@ -675,6 +767,15 @@ GuiApplyWindowsConsoleSettings(PGUI_CONSOLE_DATA GuiData,
// memcpy(&GuiData->GuiInfo, &GuiInfo, sizeof(GUI_CONSOLE_INFO)); // memcpy(&GuiData->GuiInfo, &GuiInfo, sizeof(GUI_CONSOLE_INFO));
/* Change the font */
ChangeFont(GuiData,
GuiInfo.FaceName,
GuiInfo.FontFamily,
GuiInfo.FontSize,
GuiInfo.FontWeight);
// HACK, needed because changing font may change the size of the window
/**/TermResizeTerminal(Console);/**/
/* Move the window to the user's values */ /* Move the window to the user's values */
GuiData->GuiInfo.AutoPosition = GuiInfo.AutoPosition; GuiData->GuiInfo.AutoPosition = GuiInfo.AutoPosition;
GuiData->GuiInfo.WindowOrigin = GuiInfo.WindowOrigin; GuiData->GuiInfo.WindowOrigin = GuiInfo.WindowOrigin;

View file

@ -34,7 +34,6 @@ typedef struct _GUI_CONSOLE_INFO
ULONG FontFamily; ULONG FontFamily;
COORD FontSize; COORD FontSize;
ULONG FontWeight; ULONG FontWeight;
BOOL UseRasterFonts;
BOOL FullScreen; /* Whether the console is displayed in full-screen or windowed mode */ BOOL FullScreen; /* Whether the console is displayed in full-screen or windowed mode */
// ULONG HardwareState; /* _GDI_MANAGED, _DIRECT */ // ULONG HardwareState; /* _GDI_MANAGED, _DIRECT */

View file

@ -486,13 +486,15 @@ GuiInitFrontEnd(IN OUT PFRONTEND This,
* Set up GUI data * Set up GUI data
*/ */
// Font data
Length = min(wcslen(TermInfo.FaceName) + 1, LF_FACESIZE); // wcsnlen Length = min(wcslen(TermInfo.FaceName) + 1, LF_FACESIZE); // wcsnlen
wcsncpy(GuiData->GuiInfo.FaceName, TermInfo.FaceName, LF_FACESIZE); wcsncpy(GuiData->GuiInfo.FaceName, TermInfo.FaceName, LF_FACESIZE);
GuiData->GuiInfo.FaceName[Length] = L'\0'; GuiData->GuiInfo.FaceName[Length] = L'\0';
GuiData->GuiInfo.FontFamily = TermInfo.FontFamily; GuiData->GuiInfo.FontFamily = TermInfo.FontFamily;
GuiData->GuiInfo.FontSize = TermInfo.FontSize; GuiData->GuiInfo.FontSize = TermInfo.FontSize;
GuiData->GuiInfo.FontWeight = TermInfo.FontWeight; GuiData->GuiInfo.FontWeight = TermInfo.FontWeight;
GuiData->GuiInfo.UseRasterFonts = TermInfo.UseRasterFonts;
// Display
GuiData->GuiInfo.FullScreen = TermInfo.FullScreen; GuiData->GuiInfo.FullScreen = TermInfo.FullScreen;
GuiData->GuiInfo.ShowWindow = TermInfo.ShowWindow; GuiData->GuiInfo.ShowWindow = TermInfo.ShowWindow;
GuiData->GuiInfo.AutoPosition = TermInfo.AutoPosition; GuiData->GuiInfo.AutoPosition = TermInfo.AutoPosition;

View file

@ -24,7 +24,8 @@
/* FUNCTIONS ******************************************************************/ /* FUNCTIONS ******************************************************************/
COLORREF PaletteRGBFromAttrib(PCONSOLE Console, WORD Attribute) static COLORREF
PaletteRGBFromAttrib(PCONSOLE Console, WORD Attribute)
{ {
HPALETTE hPalette = Console->ActiveBuffer->PaletteHandle; HPALETTE hPalette = Console->ActiveBuffer->PaletteHandle;
PALETTEENTRY pe; PALETTEENTRY pe;
@ -35,6 +36,44 @@ COLORREF PaletteRGBFromAttrib(PCONSOLE Console, WORD Attribute)
return PALETTERGB(pe.peRed, pe.peGreen, pe.peBlue); return PALETTERGB(pe.peRed, pe.peGreen, pe.peBlue);
} }
static HFONT
ChangeFontAttributes(PGUI_CONSOLE_DATA GuiData,
// COORD FontSize,
ULONG FontWeight,
BOOLEAN bItalic,
BOOLEAN bUnderline,
BOOLEAN bStrikeOut)
{
HFONT NewFont;
LOGFONT lf;
/* Initialize the LOGFONT structure */
RtlZeroMemory(&lf, sizeof(lf));
/* Retrieve the details of the current font */
if (GetObject(GuiData->Font, sizeof(lf), &lf) == 0)
return NULL; // GuiData->Font;
/* Change the font attributes */
// lf.lfHeight = FontSize.Y;
// lf.lfWidth = FontSize.X;
lf.lfWeight = FontWeight;
lf.lfItalic = bItalic;
lf.lfUnderline = bUnderline;
lf.lfStrikeOut = bStrikeOut;
/* Build a new font */
NewFont = CreateFontIndirect(&lf);
if (NewFont == NULL)
return NULL; // GuiData->Font;
// FIXME: Do we need to update GuiData->CharWidth and GuiData->CharHeight ??
/* Select it (return the old font) */
// return SelectObject(GuiData->hMemDC, NewFont);
return NewFont;
}
static VOID static VOID
CopyBlock(PTEXTMODE_SCREEN_BUFFER Buffer, CopyBlock(PTEXTMODE_SCREEN_BUFFER Buffer,
PSMALL_RECT Selection) PSMALL_RECT Selection)
@ -348,7 +387,8 @@ GuiPaintTextModeBuffer(PTEXTMODE_SCREEN_BUFFER Buffer,
WORD LastAttribute, Attribute; WORD LastAttribute, Attribute;
ULONG CursorX, CursorY, CursorHeight; ULONG CursorX, CursorY, CursorHeight;
HBRUSH CursorBrush, OldBrush; HBRUSH CursorBrush, OldBrush;
HFONT OldFont; HFONT OldFont, NewFont;
BOOLEAN IsUnderscore;
if (Buffer->Buffer == NULL) return; if (Buffer->Buffer == NULL) return;
@ -372,7 +412,18 @@ GuiPaintTextModeBuffer(PTEXTMODE_SCREEN_BUFFER Buffer,
SetTextColor(GuiData->hMemDC, PaletteRGBFromAttrib(Console, TextAttribFromAttrib(LastAttribute))); SetTextColor(GuiData->hMemDC, PaletteRGBFromAttrib(Console, TextAttribFromAttrib(LastAttribute)));
SetBkColor(GuiData->hMemDC, PaletteRGBFromAttrib(Console, BkgdAttribFromAttrib(LastAttribute))); SetBkColor(GuiData->hMemDC, PaletteRGBFromAttrib(Console, BkgdAttribFromAttrib(LastAttribute)));
OldFont = SelectObject(GuiData->hMemDC, GuiData->Font); // OldFont = ChangeFontAttributes(GuiData, /* {0}, */ GuiData->GuiInfo.FontWeight, FALSE, FALSE, FALSE);
IsUnderscore = !!(LastAttribute & COMMON_LVB_UNDERSCORE);
NewFont = ChangeFontAttributes(GuiData, /* {0}, */ GuiData->GuiInfo.FontWeight,
FALSE,
IsUnderscore,
FALSE);
if (NewFont == NULL)
{
DPRINT1("ChangeFontAttributes failed, use the original font\n");
NewFont = GuiData->Font;
}
OldFont = SelectObject(GuiData->hMemDC, NewFont);
for (Line = TopLine; Line <= BottomLine; Line++) for (Line = TopLine; Line <= BottomLine; Line++)
{ {
@ -399,9 +450,31 @@ GuiPaintTextModeBuffer(PTEXTMODE_SCREEN_BUFFER Buffer,
Attribute = From->Attributes; Attribute = From->Attributes;
if (Attribute != LastAttribute) if (Attribute != LastAttribute)
{ {
SetTextColor(GuiData->hMemDC, PaletteRGBFromAttrib(Console, TextAttribFromAttrib(Attribute)));
SetBkColor(GuiData->hMemDC, PaletteRGBFromAttrib(Console, BkgdAttribFromAttrib(Attribute)));
LastAttribute = Attribute; LastAttribute = Attribute;
SetTextColor(GuiData->hMemDC, PaletteRGBFromAttrib(Console, TextAttribFromAttrib(LastAttribute)));
SetBkColor(GuiData->hMemDC, PaletteRGBFromAttrib(Console, BkgdAttribFromAttrib(LastAttribute)));
/* Change underscore state if needed */
if (!!(LastAttribute & COMMON_LVB_UNDERSCORE) != IsUnderscore)
{
IsUnderscore = !!(LastAttribute & COMMON_LVB_UNDERSCORE);
/* Delete the font we used up to now */
// SelectObject(GuiData->hMemDC, OldFont);
if (NewFont != GuiData->Font) DeleteObject(NewFont);
/* Recreate it */
NewFont = ChangeFontAttributes(GuiData, /* {0}, */ GuiData->GuiInfo.FontWeight,
FALSE,
IsUnderscore,
FALSE);
if (NewFont == NULL)
{
DPRINT1("ChangeFontAttributes failed, use the original font\n");
NewFont = GuiData->Font;
}
/* Select it */
/* OldFont = */ SelectObject(GuiData->hMemDC, NewFont);
}
} }
} }
@ -441,12 +514,15 @@ GuiPaintTextModeBuffer(PTEXTMODE_SCREEN_BUFFER Buffer,
GuiData->CharWidth, GuiData->CharWidth,
CursorHeight, CursorHeight,
PATCOPY); PATCOPY);
SelectObject(GuiData->hMemDC, OldBrush); SelectObject(GuiData->hMemDC, OldBrush);
DeleteObject(CursorBrush); DeleteObject(CursorBrush);
} }
} }
/* Restore the old font and delete the font we used up to now */
SelectObject(GuiData->hMemDC, OldFont); SelectObject(GuiData->hMemDC, OldFont);
if (NewFont != GuiData->Font) DeleteObject(NewFont);
LeaveCriticalSection(&Console->Lock); LeaveCriticalSection(&Console->Lock);
} }

View file

@ -19,53 +19,45 @@
/* GLOBALS ********************************************************************/ /* GLOBALS ********************************************************************/
/* Console handle */
typedef struct _CONSOLE_IO_HANDLE typedef struct _CONSOLE_IO_HANDLE
{ {
PCONSOLE_IO_OBJECT Object; /* The object on which the handle points to */ PCONSOLE_IO_OBJECT Object; /* The object on which the handle points to */
DWORD Access; ULONG Access;
BOOL Inheritable; ULONG ShareMode;
DWORD ShareMode; BOOLEAN Inheritable;
} CONSOLE_IO_HANDLE, *PCONSOLE_IO_HANDLE; } CONSOLE_IO_HANDLE, *PCONSOLE_IO_HANDLE;
/* PRIVATE FUNCTIONS **********************************************************/ /* PRIVATE FUNCTIONS **********************************************************/
static INT static LONG
AdjustHandleCounts(PCONSOLE_IO_HANDLE Entry, INT Change) AdjustHandleCounts(IN PCONSOLE_IO_HANDLE Handle,
IN LONG Change)
{ {
PCONSOLE_IO_OBJECT Object = Entry->Object; PCONSOLE_IO_OBJECT Object = Handle->Object;
DPRINT("AdjustHandleCounts(0x%p, %d), Object = 0x%p\n", Entry, Change, Object); DPRINT("AdjustHandleCounts(0x%p, %d), Object = 0x%p\n",
DPRINT("\tAdjustHandleCounts(0x%p, %d), Object = 0x%p, Object->HandleCount = %d, Object->Type = %lu\n", Entry, Change, Object, Object->HandleCount, Object->Type); Handle, Change, Object);
DPRINT("\tAdjustHandleCounts(0x%p, %d), Object = 0x%p, Object->ReferenceCount = %d, Object->Type = %lu\n",
Handle, Change, Object, Object->ReferenceCount, Object->Type);
if (Entry->Access & GENERIC_READ) Object->AccessRead += Change; if (Handle->Access & GENERIC_READ) Object->AccessRead += Change;
if (Entry->Access & GENERIC_WRITE) Object->AccessWrite += Change; if (Handle->Access & GENERIC_WRITE) Object->AccessWrite += Change;
if (!(Entry->ShareMode & FILE_SHARE_READ)) Object->ExclusiveRead += Change; if (!(Handle->ShareMode & FILE_SHARE_READ)) Object->ExclusiveRead += Change;
if (!(Entry->ShareMode & FILE_SHARE_WRITE)) Object->ExclusiveWrite += Change; if (!(Handle->ShareMode & FILE_SHARE_WRITE)) Object->ExclusiveWrite += Change;
Object->HandleCount += Change; Object->ReferenceCount += Change;
return Object->HandleCount; return Object->ReferenceCount;
} }
static VOID static VOID
ConSrvCreateHandleEntry(PCONSOLE_IO_HANDLE Entry) ConSrvCloseHandle(IN PCONSOLE_IO_HANDLE Handle)
{ {
/// LOCK /// PCONSOLE_IO_OBJECT Object = Entry->Object; PCONSOLE_IO_OBJECT Object = Handle->Object;
/// LOCK /// EnterCriticalSection(&Object->Console->Lock);
AdjustHandleCounts(Entry, +1);
/// LOCK /// LeaveCriticalSection(&Object->Console->Lock);
}
static VOID
ConSrvCloseHandleEntry(PCONSOLE_IO_HANDLE Entry)
{
PCONSOLE_IO_OBJECT Object = Entry->Object;
if (Object != NULL) if (Object != NULL)
{ {
/// LOCK /// PCONSOLE Console = Object->Console;
/// LOCK /// EnterCriticalSection(&Console->Lock);
/* /*
* If this is a input handle, notify and dereference * If this is a input handle, notify and dereference
* all the waits related to this handle. * all the waits related to this handle.
@ -87,7 +79,7 @@ ConSrvCloseHandleEntry(PCONSOLE_IO_HANDLE Entry)
CsrNotifyWait(&Console->ReadWaitQueue, CsrNotifyWait(&Console->ReadWaitQueue,
TRUE, TRUE,
NULL, NULL,
(PVOID)Entry); (PVOID)Handle);
if (!IsListEmpty(&Console->ReadWaitQueue)) if (!IsListEmpty(&Console->ReadWaitQueue))
{ {
CsrDereferenceWait(&Console->ReadWaitQueue); CsrDereferenceWait(&Console->ReadWaitQueue);
@ -95,7 +87,7 @@ ConSrvCloseHandleEntry(PCONSOLE_IO_HANDLE Entry)
} }
/* If the last handle to a screen buffer is closed, delete it... */ /* If the last handle to a screen buffer is closed, delete it... */
if (AdjustHandleCounts(Entry, -1) == 0) if (AdjustHandleCounts(Handle, -1) == 0)
{ {
if (Object->Type == TEXTMODE_BUFFER || Object->Type == GRAPHICS_BUFFER) if (Object->Type == TEXTMODE_BUFFER || Object->Type == GRAPHICS_BUFFER)
{ {
@ -116,16 +108,18 @@ ConSrvCloseHandleEntry(PCONSOLE_IO_HANDLE Entry)
} }
} }
/// LOCK /// LeaveCriticalSection(&Console->Lock);
/* Invalidate (zero-out) this handle entry */ /* Invalidate (zero-out) this handle entry */
// Entry->Object = NULL; // Handle->Object = NULL;
// RtlZeroMemory(Entry, sizeof(*Entry)); // RtlZeroMemory(Handle, sizeof(*Handle));
} }
RtlZeroMemory(Entry, sizeof(*Entry)); // Be sure the whole entry is invalidated. RtlZeroMemory(Handle, sizeof(*Handle)); // Be sure the whole entry is invalidated.
} }
/* Forward declaration, used in ConSrvInitHandlesTable */ /* Forward declaration, used in ConSrvInitHandlesTable */
static VOID ConSrvFreeHandlesTable(PCONSOLE_PROCESS_DATA ProcessData); static VOID ConSrvFreeHandlesTable(PCONSOLE_PROCESS_DATA ProcessData);
@ -244,10 +238,10 @@ ConSrvInheritHandlesTable(IN PCONSOLE_PROCESS_DATA SourceProcessData,
{ {
/* /*
* Copy the handle data and increment the reference count of the * Copy the handle data and increment the reference count of the
* pointed object (via the call to ConSrvCreateHandleEntry). * pointed object (via the call to ConSrvCreateHandleEntry == AdjustHandleCounts).
*/ */
TargetProcessData->HandleTable[j] = SourceProcessData->HandleTable[i]; TargetProcessData->HandleTable[j] = SourceProcessData->HandleTable[i];
ConSrvCreateHandleEntry(&TargetProcessData->HandleTable[j]); AdjustHandleCounts(&TargetProcessData->HandleTable[j], +1);
++j; ++j;
} }
} }
@ -258,7 +252,7 @@ Quit:
} }
static VOID static VOID
ConSrvFreeHandlesTable(PCONSOLE_PROCESS_DATA ProcessData) ConSrvFreeHandlesTable(IN PCONSOLE_PROCESS_DATA ProcessData)
{ {
RtlEnterCriticalSection(&ProcessData->HandleTableLock); RtlEnterCriticalSection(&ProcessData->HandleTableLock);
@ -277,7 +271,7 @@ ConSrvFreeHandlesTable(PCONSOLE_PROCESS_DATA ProcessData)
/* Close all the console handles */ /* Close all the console handles */
for (i = 0; i < ProcessData->HandleTableSize; i++) for (i = 0; i < ProcessData->HandleTableSize; i++)
{ {
ConSrvCloseHandleEntry(&ProcessData->HandleTable[i]); ConSrvCloseHandle(&ProcessData->HandleTable[i]);
} }
} }
/* Free the handles table memory */ /* Free the handles table memory */
@ -290,6 +284,12 @@ ConSrvFreeHandlesTable(PCONSOLE_PROCESS_DATA ProcessData)
RtlLeaveCriticalSection(&ProcessData->HandleTableLock); RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
} }
// ConSrvCreateObject
VOID VOID
ConSrvInitObject(IN OUT PCONSOLE_IO_OBJECT Object, ConSrvInitObject(IN OUT PCONSOLE_IO_OBJECT Object,
IN CONSOLE_IO_OBJECT_TYPE Type, IN CONSOLE_IO_OBJECT_TYPE Type,
@ -300,18 +300,19 @@ ConSrvInitObject(IN OUT PCONSOLE_IO_OBJECT Object,
Object->Type = Type; Object->Type = Type;
Object->Console = Console; Object->Console = Console;
Object->ReferenceCount = 0;
Object->AccessRead = Object->AccessWrite = 0; Object->AccessRead = Object->AccessWrite = 0;
Object->ExclusiveRead = Object->ExclusiveWrite = 0; Object->ExclusiveRead = Object->ExclusiveWrite = 0;
Object->HandleCount = 0;
} }
NTSTATUS NTSTATUS
ConSrvInsertObject(PCONSOLE_PROCESS_DATA ProcessData, ConSrvInsertObject(IN PCONSOLE_PROCESS_DATA ProcessData,
PHANDLE Handle, OUT PHANDLE Handle,
PCONSOLE_IO_OBJECT Object, IN PCONSOLE_IO_OBJECT Object,
DWORD Access, IN ULONG Access,
BOOL Inheritable, IN BOOLEAN Inheritable,
DWORD ShareMode) IN ULONG ShareMode)
{ {
#define IO_HANDLES_INCREMENT 2 * 3 #define IO_HANDLES_INCREMENT 2 * 3
@ -362,7 +363,7 @@ ConSrvInsertObject(PCONSOLE_PROCESS_DATA ProcessData,
ProcessData->HandleTable[i].Access = Access; ProcessData->HandleTable[i].Access = Access;
ProcessData->HandleTable[i].Inheritable = Inheritable; ProcessData->HandleTable[i].Inheritable = Inheritable;
ProcessData->HandleTable[i].ShareMode = ShareMode; ProcessData->HandleTable[i].ShareMode = ShareMode;
ConSrvCreateHandleEntry(&ProcessData->HandleTable[i]); AdjustHandleCounts(&ProcessData->HandleTable[i], +1);
*Handle = ULongToHandle((i << 2) | 0x3); *Handle = ULongToHandle((i << 2) | 0x3);
// RtlLeaveCriticalSection(&ProcessData->HandleTableLock); // RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
@ -371,8 +372,8 @@ ConSrvInsertObject(PCONSOLE_PROCESS_DATA ProcessData,
} }
NTSTATUS NTSTATUS
ConSrvRemoveObject(PCONSOLE_PROCESS_DATA ProcessData, ConSrvRemoveObject(IN PCONSOLE_PROCESS_DATA ProcessData,
HANDLE Handle) IN HANDLE Handle)
{ {
ULONG Index = HandleToULong(Handle) >> 2; ULONG Index = HandleToULong(Handle) >> 2;
@ -390,20 +391,20 @@ ConSrvRemoveObject(PCONSOLE_PROCESS_DATA ProcessData,
} }
ASSERT(ProcessData->ConsoleHandle); ASSERT(ProcessData->ConsoleHandle);
ConSrvCloseHandleEntry(&ProcessData->HandleTable[Index]); ConSrvCloseHandle(&ProcessData->HandleTable[Index]);
RtlLeaveCriticalSection(&ProcessData->HandleTableLock); RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
NTSTATUS NTSTATUS
ConSrvGetObject(PCONSOLE_PROCESS_DATA ProcessData, ConSrvGetObject(IN PCONSOLE_PROCESS_DATA ProcessData,
HANDLE Handle, IN HANDLE Handle,
PCONSOLE_IO_OBJECT* Object, OUT PCONSOLE_IO_OBJECT* Object,
PVOID* Entry OPTIONAL, OUT PVOID* Entry OPTIONAL,
DWORD Access, IN ULONG Access,
BOOL LockConsole, IN BOOLEAN LockConsole,
CONSOLE_IO_OBJECT_TYPE Type) IN CONSOLE_IO_OBJECT_TYPE Type)
{ {
// NTSTATUS Status; // NTSTATUS Status;
ULONG Index = HandleToULong(Handle) >> 2; ULONG Index = HandleToULong(Handle) >> 2;
@ -461,12 +462,17 @@ ConSrvGetObject(PCONSOLE_PROCESS_DATA ProcessData,
} }
VOID VOID
ConSrvReleaseObject(PCONSOLE_IO_OBJECT Object, ConSrvReleaseObject(IN PCONSOLE_IO_OBJECT Object,
BOOL IsConsoleLocked) IN BOOLEAN IsConsoleLocked)
{ {
ConSrvReleaseConsole(Object->Console, IsConsoleLocked); ConSrvReleaseConsole(Object->Console, IsConsoleLocked);
} }
NTSTATUS NTSTATUS
ConSrvAllocateConsole(PCONSOLE_PROCESS_DATA ProcessData, ConSrvAllocateConsole(PCONSOLE_PROCESS_DATA ProcessData,
PHANDLE pInputHandle, PHANDLE pInputHandle,
@ -548,7 +554,7 @@ ConSrvAllocateConsole(PCONSOLE_PROCESS_DATA ProcessData,
NTSTATUS NTSTATUS
ConSrvInheritConsole(PCONSOLE_PROCESS_DATA ProcessData, ConSrvInheritConsole(PCONSOLE_PROCESS_DATA ProcessData,
HANDLE ConsoleHandle, HANDLE ConsoleHandle,
BOOL CreateNewHandlesTable, BOOLEAN CreateNewHandlesTable,
PHANDLE pInputHandle, PHANDLE pInputHandle,
PHANDLE pOutputHandle, PHANDLE pOutputHandle,
PHANDLE pErrorHandle) PHANDLE pErrorHandle)
@ -826,7 +832,7 @@ CSR_API(SrvDuplicateHandle)
(DuplicateHandleRequest->Options & DUPLICATE_CLOSE_SOURCE)) (DuplicateHandleRequest->Options & DUPLICATE_CLOSE_SOURCE))
{ {
/* Close the original handle if needed */ /* Close the original handle if needed */
ConSrvCloseHandleEntry(Entry); ConSrvCloseHandle(Entry);
} }
Quit: Quit:

View file

@ -10,23 +10,28 @@
#pragma once #pragma once
VOID ConSrvInitObject(IN OUT PCONSOLE_IO_OBJECT Object, VOID
IN CONSOLE_IO_OBJECT_TYPE Type, ConSrvInitObject(IN OUT PCONSOLE_IO_OBJECT Object,
IN PCONSOLE Console); IN CONSOLE_IO_OBJECT_TYPE Type,
NTSTATUS ConSrvInsertObject(PCONSOLE_PROCESS_DATA ProcessData, IN PCONSOLE Console);
PHANDLE Handle, NTSTATUS
PCONSOLE_IO_OBJECT Object, ConSrvInsertObject(IN PCONSOLE_PROCESS_DATA ProcessData,
DWORD Access, OUT PHANDLE Handle,
BOOL Inheritable, IN PCONSOLE_IO_OBJECT Object,
DWORD ShareMode); IN ULONG Access,
NTSTATUS ConSrvRemoveObject(PCONSOLE_PROCESS_DATA ProcessData, IN BOOLEAN Inheritable,
HANDLE Handle); IN ULONG ShareMode);
NTSTATUS ConSrvGetObject(PCONSOLE_PROCESS_DATA ProcessData, NTSTATUS
HANDLE Handle, ConSrvRemoveObject(IN PCONSOLE_PROCESS_DATA ProcessData,
PCONSOLE_IO_OBJECT* Object, IN HANDLE Handle);
PVOID* Entry OPTIONAL, NTSTATUS
DWORD Access, ConSrvGetObject(IN PCONSOLE_PROCESS_DATA ProcessData,
BOOL LockConsole, IN HANDLE Handle,
CONSOLE_IO_OBJECT_TYPE Type); OUT PCONSOLE_IO_OBJECT* Object,
VOID ConSrvReleaseObject(PCONSOLE_IO_OBJECT Object, OUT PVOID* Entry OPTIONAL,
BOOL IsConsoleLocked); IN ULONG Access,
IN BOOLEAN LockConsole,
IN CONSOLE_IO_OBJECT_TYPE Type);
VOID
ConSrvReleaseObject(IN PCONSOLE_IO_OBJECT Object,
IN BOOLEAN IsConsoleLocked);

View file

@ -19,23 +19,35 @@
#define DEFAULT_POPUP_ATTRIB (FOREGROUND_BLUE | FOREGROUND_RED | \ #define DEFAULT_POPUP_ATTRIB (FOREGROUND_BLUE | FOREGROUND_RED | \
BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_INTENSITY) BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_INTENSITY)
/* VGA character cell */
typedef struct _CHAR_CELL
{
CHAR Char;
BYTE Attributes;
} CHAR_CELL, *PCHAR_CELL;
C_ASSERT(sizeof(CHAR_CELL) == 2);
/* Object type magic numbers */ /* Object type magic numbers */
typedef enum _CONSOLE_IO_OBJECT_TYPE typedef enum _CONSOLE_IO_OBJECT_TYPE
{ {
// ANY_TYPE_BUFFER = 0x00, // --> Match any types of IO handles UNKNOWN = 0x00, // --> Unknown object
TEXTMODE_BUFFER = 0x01, // --> Output-type handles for text SBs TEXTMODE_BUFFER = 0x01, // --> Output-type object for text SBs
GRAPHICS_BUFFER = 0x02, // --> Output-type handles for graphics SBs GRAPHICS_BUFFER = 0x02, // --> Output-type object for graphics SBs
SCREEN_BUFFER = 0x03, // --> Any SB type SCREEN_BUFFER = 0x03, // --> Any SB type
INPUT_BUFFER = 0x04 // --> Input-type handles INPUT_BUFFER = 0x04, // --> Input-type object
ANY_TYPE_BUFFER = 0x07, // --> Any IO object
} CONSOLE_IO_OBJECT_TYPE; } CONSOLE_IO_OBJECT_TYPE;
typedef struct _CONSOLE_IO_OBJECT typedef struct _CONSOLE_IO_OBJECT
{ {
CONSOLE_IO_OBJECT_TYPE Type; CONSOLE_IO_OBJECT_TYPE Type;
struct _CONSOLE* /* PCONSOLE */ Console; struct _CONSOLE* /* PCONSOLE */ Console;
LONG ReferenceCount; /* Is incremented each time a console object gets referenced */
LONG AccessRead, AccessWrite; LONG AccessRead, AccessWrite;
LONG ExclusiveRead, ExclusiveWrite; LONG ExclusiveRead, ExclusiveWrite;
LONG HandleCount;
} CONSOLE_IO_OBJECT, *PCONSOLE_IO_OBJECT; } CONSOLE_IO_OBJECT, *PCONSOLE_IO_OBJECT;
@ -300,6 +312,17 @@ typedef struct _CONSOLE
PCONSOLE_SCREEN_BUFFER ActiveBuffer; /* Pointer to currently active screen buffer */ PCONSOLE_SCREEN_BUFFER ActiveBuffer; /* Pointer to currently active screen buffer */
UINT OutputCodePage; UINT OutputCodePage;
/**** Per-console Virtual DOS Machine Text-mode Buffer ****/
COORD VDMBufferSize; /* Real size of the VDM buffer, in units of ??? */
HANDLE VDMBufferSection; /* Handle to the memory shared section for the VDM buffer */
PVOID VDMBuffer; /* Our VDM buffer */
PVOID ClientVDMBuffer; /* A copy of the client view of our VDM buffer */
HANDLE VDMClientProcess; /* Handle to the client process who opened the buffer, to unmap the view */
HANDLE StartHardwareEvent;
HANDLE EndHardwareEvent;
HANDLE ErrorHardwareEvent;
/****************************** Other properties ******************************/ /****************************** Other properties ******************************/
UNICODE_STRING OriginalTitle; /* Original title of console, the one defined when the console leader is launched; it never changes. Always NULL-terminated */ UNICODE_STRING OriginalTitle; /* Original title of console, the one defined when the console leader is launched; it never changes. Always NULL-terminated */
UNICODE_STRING Title; /* Title of console. Always NULL-terminated */ UNICODE_STRING Title; /* Title of console. Always NULL-terminated */

View file

@ -83,6 +83,7 @@ struct _FRONTEND
PFRONTEND_VTBL Vtbl; /* Virtual table */ PFRONTEND_VTBL Vtbl; /* Virtual table */
NTSTATUS (NTAPI *UnloadFrontEnd)(IN OUT PFRONTEND This); NTSTATUS (NTAPI *UnloadFrontEnd)(IN OUT PFRONTEND This);
// struct _WINSRV_CONSOLE*
struct _CONSOLE* Console; /* Console to which the frontend is attached to */ struct _CONSOLE* Console; /* Console to which the frontend is attached to */
PVOID Data; /* Private data */ PVOID Data; /* Private data */
PVOID OldData; /* Reserved */ PVOID OldData; /* Reserved */

View file

@ -51,10 +51,14 @@ typedef struct _CONSOLE_INFO
WCHAR ConsoleTitle[MAX_PATH + 1]; WCHAR ConsoleTitle[MAX_PATH + 1];
} CONSOLE_INFO, *PCONSOLE_INFO; } CONSOLE_INFO, *PCONSOLE_INFO;
/*
* BYTE Foreground = LOBYTE(Attributes) & 0x0F;
* BYTE Background = (LOBYTE(Attributes) & 0xF0) >> 4;
*/
#define RGBFromAttrib(Console, Attribute) ((Console)->Colors[(Attribute) & 0xF]) #define RGBFromAttrib(Console, Attribute) ((Console)->Colors[(Attribute) & 0xF])
#define TextAttribFromAttrib(Attribute) ((Attribute) & 0xF) #define TextAttribFromAttrib(Attribute) ( !((Attribute) & COMMON_LVB_REVERSE_VIDEO) ? (Attribute) & 0xF : ((Attribute) >> 4) & 0xF )
#define BkgdAttribFromAttrib(Attribute) (((Attribute) >> 4) & 0xF) #define BkgdAttribFromAttrib(Attribute) ( !((Attribute) & COMMON_LVB_REVERSE_VIDEO) ? ((Attribute) >> 4) & 0xF : (Attribute) & 0xF )
#define MakeAttrib(TextAttrib, BkgdAttrib) (DWORD)((((BkgdAttrib) & 0xF) << 4) | ((TextAttrib) & 0xF)) #define MakeAttrib(TextAttrib, BkgdAttrib) (USHORT)((((BkgdAttrib) & 0xF) << 4) | ((TextAttrib) & 0xF))
/* /*
* Structure used to communicate with console.dll * Structure used to communicate with console.dll

View file

@ -15,7 +15,7 @@ NTSTATUS ConSrvAllocateConsole(PCONSOLE_PROCESS_DATA ProcessData,
PCONSOLE_START_INFO ConsoleStartInfo); PCONSOLE_START_INFO ConsoleStartInfo);
NTSTATUS ConSrvInheritConsole(PCONSOLE_PROCESS_DATA ProcessData, NTSTATUS ConSrvInheritConsole(PCONSOLE_PROCESS_DATA ProcessData,
HANDLE ConsoleHandle, HANDLE ConsoleHandle,
BOOL CreateNewHandlesTable, BOOLEAN CreateNewHandlesTable,
PHANDLE pInputHandle, PHANDLE pInputHandle,
PHANDLE pOutputHandle, PHANDLE pOutputHandle,
PHANDLE pErrorHandle); PHANDLE pErrorHandle);

View file

@ -21,8 +21,132 @@
CSR_API(SrvRegisterConsoleVDM) CSR_API(SrvRegisterConsoleVDM)
{ {
DPRINT1("%s not yet implemented\n", __FUNCTION__); NTSTATUS Status;
return STATUS_NOT_IMPLEMENTED; PCONSOLE_REGISTERVDM RegisterVDMRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.RegisterVDMRequest;
PCONSOLE Console;
DPRINT1("SrvRegisterConsoleVDM(%d)\n", RegisterVDMRequest->RegisterFlags);
Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
&Console, TRUE);
if (!NT_SUCCESS(Status))
{
DPRINT1("Can't get console\n");
return Status;
}
if (RegisterVDMRequest->RegisterFlags != 0)
{
LARGE_INTEGER SectionSize;
ULONG Size, ViewSize = 0;
HANDLE ProcessHandle;
/*
* Remember the handle to the process so that we can close or unmap
* correctly the allocated resources when the client releases the
* screen buffer.
*/
ProcessHandle = CsrGetClientThread()->Process->ProcessHandle;
Console->VDMClientProcess = ProcessHandle;
Console->VDMBufferSize = RegisterVDMRequest->VDMBufferSize;
Size = Console->VDMBufferSize.X * Console->VDMBufferSize.Y
* sizeof(CHAR_CELL);
/*
* Create a memory section for the VDM buffer, to share with the client.
*/
SectionSize.QuadPart = Size;
Status = NtCreateSection(&Console->VDMBufferSection,
SECTION_ALL_ACCESS,
NULL,
&SectionSize,
PAGE_READWRITE,
SEC_COMMIT,
NULL);
if (!NT_SUCCESS(Status))
{
DPRINT1("Error: Impossible to create a shared section ; Status = %lu\n", Status);
goto Quit;
}
/*
* Create a view for our needs.
*/
ViewSize = 0;
Console->VDMBuffer = NULL;
Status = NtMapViewOfSection(Console->VDMBufferSection,
NtCurrentProcess(),
(PVOID*)&Console->VDMBuffer,
0,
0,
NULL,
&ViewSize,
ViewUnmap,
0,
PAGE_READWRITE);
if (!NT_SUCCESS(Status))
{
DPRINT1("Error: Impossible to map the shared section ; Status = %lu\n", Status);
NtClose(Console->VDMBufferSection);
goto Quit;
}
/*
* Create a view for the client. We must keep a trace of it so that
* we can unmap it when the client releases the VDM buffer.
*/
ViewSize = 0;
Console->ClientVDMBuffer = NULL;
Status = NtMapViewOfSection(Console->VDMBufferSection,
ProcessHandle,
(PVOID*)&Console->ClientVDMBuffer,
0,
0,
NULL,
&ViewSize,
ViewUnmap,
0,
PAGE_READWRITE);
if (!NT_SUCCESS(Status))
{
DPRINT1("Error: Impossible to map the shared section ; Status = %lu\n", Status);
NtUnmapViewOfSection(NtCurrentProcess(), Console->VDMBuffer);
NtClose(Console->VDMBufferSection);
goto Quit;
}
// TODO: Duplicate the event handles.
RegisterVDMRequest->VDMBuffer = Console->ClientVDMBuffer;
Status = STATUS_SUCCESS;
}
else
{
/* RegisterFlags == 0 means we are unregistering the VDM */
// TODO: Close the duplicated handles.
if (Console->VDMBuffer)
{
/*
* Uninitialize the graphics screen buffer
* in the reverse way we initialized it.
*/
NtUnmapViewOfSection(Console->VDMClientProcess, Console->ClientVDMBuffer);
NtUnmapViewOfSection(NtCurrentProcess(), Console->VDMBuffer);
NtClose(Console->VDMBufferSection);
}
Console->VDMBuffer = Console->ClientVDMBuffer = NULL;
Console->VDMBufferSize.X = Console->VDMBufferSize.Y = 0;
}
Quit:
ConSrvReleaseConsole(Console, TRUE);
return Status;
} }
CSR_API(SrvVDMConsoleOperation) CSR_API(SrvVDMConsoleOperation)