You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
3.7 KiB
139 lines
3.7 KiB
#include "ulib.hxx"
|
|
#include "drive.hxx"
|
|
#include "untfs.hxx"
|
|
#include "recordpg.hxx"
|
|
|
|
extern "C" {
|
|
#include <stdio.h>
|
|
}
|
|
|
|
BOOLEAN
|
|
RECORD_PAGE_EDIT::Initialize(
|
|
IN HWND WindowHandle,
|
|
IN INT ClientHeight,
|
|
IN INT ClientWidth,
|
|
IN PLOG_IO_DP_DRIVE Drive
|
|
)
|
|
{
|
|
TEXTMETRIC tm;
|
|
HDC hdc;
|
|
|
|
hdc = GetDC(WindowHandle);
|
|
if (hdc == NULL)
|
|
return FALSE;
|
|
GetTextMetrics(hdc, &tm);
|
|
ReleaseDC(WindowHandle, hdc);
|
|
|
|
if (!VERTICAL_TEXT_SCROLL::Initialize(
|
|
WindowHandle,
|
|
0,
|
|
ClientHeight,
|
|
ClientWidth,
|
|
tm.tmExternalLeading + tm.tmHeight,
|
|
tm.tmMaxCharWidth
|
|
)) {
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
VOID
|
|
RECORD_PAGE_EDIT::SetBuf(
|
|
IN HWND WindowHandle,
|
|
IN OUT PVOID Buffer,
|
|
IN ULONG Size
|
|
)
|
|
{
|
|
_buffer = Buffer;
|
|
_size = Size;
|
|
SetRange(WindowHandle, _size/2);
|
|
InvalidateRect(WindowHandle, NULL, TRUE);
|
|
}
|
|
|
|
|
|
VOID
|
|
RECORD_PAGE_EDIT::Paint(
|
|
IN HDC DeviceContext,
|
|
IN RECT InvalidRect,
|
|
IN HWND WindowHandle
|
|
)
|
|
{
|
|
PLFS_RECORD_PAGE_HEADER pRecordPageHeader;
|
|
TEXTMETRIC tm;
|
|
INT ch, CurrentLine;
|
|
TCHAR buf[1024];
|
|
|
|
SetScrollRange(WindowHandle, SB_VERT, 0, _size/2, FALSE);
|
|
SetScrollPos(WindowHandle, SB_VERT, QueryScrollPosition(), TRUE);
|
|
|
|
if (!_buffer || _size < 512) {
|
|
return;
|
|
}
|
|
|
|
GetTextMetrics(DeviceContext, &tm);
|
|
ch = tm.tmExternalLeading + tm.tmHeight;
|
|
CurrentLine = 0;
|
|
|
|
pRecordPageHeader = (PLFS_RECORD_PAGE_HEADER)_buffer;
|
|
|
|
swprintf(buf, TEXT("MultiSectorHeader.Signature: %c%c%c%c"),
|
|
pRecordPageHeader->MultiSectorHeader.Signature[0],
|
|
pRecordPageHeader->MultiSectorHeader.Signature[1],
|
|
pRecordPageHeader->MultiSectorHeader.Signature[2],
|
|
pRecordPageHeader->MultiSectorHeader.Signature[3]);
|
|
WriteLine(DeviceContext, CurrentLine++, buf);
|
|
|
|
swprintf(buf, TEXT("MultiSectorHeader.UpdateSequenceArrayOffset: %ul"),
|
|
pRecordPageHeader->MultiSectorHeader.UpdateSequenceArrayOffset);
|
|
WriteLine(DeviceContext, CurrentLine++, buf);
|
|
|
|
swprintf(buf, TEXT("MultiSectorHeader.UpdateSequenceArraySize: %x"),
|
|
pRecordPageHeader->MultiSectorHeader.UpdateSequenceArraySize);
|
|
WriteLine(DeviceContext, CurrentLine++, buf);
|
|
|
|
swprintf(buf, TEXT("Copy.LastLsn: %x:%x"),
|
|
pRecordPageHeader->Copy.LastLsn.HighPart,
|
|
pRecordPageHeader->Copy.LastLsn.LowPart);
|
|
WriteLine(DeviceContext, CurrentLine++, buf);
|
|
|
|
swprintf(buf, TEXT("Copy.FileOffset: %x"), pRecordPageHeader->Copy.FileOffset);
|
|
WriteLine(DeviceContext, CurrentLine++, buf);
|
|
|
|
swprintf(buf, TEXT("Flags: %x"), pRecordPageHeader->Flags);
|
|
WriteLine(DeviceContext, CurrentLine++, buf);
|
|
|
|
swprintf(buf, TEXT("PageCount: %x"), pRecordPageHeader->PageCount);
|
|
WriteLine(DeviceContext, CurrentLine++, buf);
|
|
|
|
swprintf(buf, TEXT("PagePosition: %x"), pRecordPageHeader->PagePosition);
|
|
WriteLine(DeviceContext, CurrentLine++, buf);
|
|
|
|
swprintf(buf, TEXT("Header.Packed.NextRecordOffset: %x"),
|
|
pRecordPageHeader->Header.Packed.NextRecordOffset);
|
|
WriteLine(DeviceContext, CurrentLine++, buf);
|
|
|
|
swprintf(buf, TEXT("Header.Packed.LastEndLsn: %x:%x"),
|
|
pRecordPageHeader->Header.Packed.LastEndLsn.HighPart,
|
|
pRecordPageHeader->Header.Packed.LastEndLsn.LowPart);
|
|
WriteLine(DeviceContext, CurrentLine++, buf);
|
|
|
|
// then Header.Packed.UpdateSequenceArray
|
|
}
|
|
|
|
VOID
|
|
RECORD_PAGE_EDIT::KeyUp(
|
|
IN HWND WindowHandle
|
|
)
|
|
{
|
|
ScrollUp(WindowHandle);
|
|
}
|
|
|
|
VOID
|
|
RECORD_PAGE_EDIT::KeyDown(
|
|
IN HWND WindowHandle
|
|
)
|
|
{
|
|
ScrollDown(WindowHandle);
|
|
}
|