202 lines
3.9 KiB
C
202 lines
3.9 KiB
C
#ifndef _PH_HEXEDITP_H
|
|
#define _PH_HEXEDITP_H
|
|
|
|
typedef struct _PHP_HEXEDIT_CONTEXT
|
|
{
|
|
PUCHAR Data;
|
|
LONG Length;
|
|
BOOLEAN UserBuffer;
|
|
LONG TopIndex; // index of first visible byte on screen
|
|
|
|
LONG CurrentAddress;
|
|
LONG CurrentMode;
|
|
LONG SelStart;
|
|
LONG SelEnd;
|
|
|
|
LONG BytesPerRow;
|
|
LONG LinesPerPage;
|
|
BOOLEAN ShowAddress;
|
|
BOOLEAN ShowAscii;
|
|
BOOLEAN ShowHex;
|
|
BOOLEAN AddressIsWide;
|
|
BOOLEAN AllowLengthChange;
|
|
|
|
BOOLEAN NoAddressChange;
|
|
BOOLEAN HalfPage;
|
|
|
|
HFONT Font;
|
|
LONG LineHeight;
|
|
LONG NullWidth;
|
|
PWCHAR CharBuffer;
|
|
ULONG CharBufferLength;
|
|
BOOLEAN Update;
|
|
|
|
LONG HexOffset;
|
|
LONG AsciiOffset;
|
|
LONG AddressOffset;
|
|
|
|
BOOLEAN HasCapture;
|
|
POINT EditPosition;
|
|
} PHP_HEXEDIT_CONTEXT, *PPHP_HEXEDIT_CONTEXT;
|
|
|
|
#define IS_PRINTABLE(Byte) ((ULONG)((Byte) - ' ') <= (ULONG)('~' - ' '))
|
|
|
|
#define TO_HEX(Buffer, Byte) \
|
|
{ \
|
|
*(Buffer)++ = PhIntegerToChar[(Byte) >> 4]; \
|
|
*(Buffer)++ = PhIntegerToChar[(Byte) & 0xf]; \
|
|
}
|
|
|
|
#define REDRAW_WINDOW(hwnd) \
|
|
RedrawWindow((hwnd), NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE)
|
|
|
|
VOID PhpCreateHexEditContext(
|
|
_Out_ PPHP_HEXEDIT_CONTEXT *Context
|
|
);
|
|
|
|
VOID PhpFreeHexEditContext(
|
|
_In_ _Post_invalid_ PPHP_HEXEDIT_CONTEXT Context
|
|
);
|
|
|
|
LRESULT CALLBACK PhpHexEditWndProc(
|
|
_In_ HWND hwnd,
|
|
_In_ UINT uMsg,
|
|
_In_ WPARAM wParam,
|
|
_In_ LPARAM lParam
|
|
);
|
|
|
|
VOID PhpHexEditUpdateMetrics(
|
|
_In_ HWND hwnd,
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context,
|
|
_In_ BOOLEAN UpdateLineHeight,
|
|
_In_opt_ HDC hdc
|
|
);
|
|
|
|
VOID PhpHexEditOnPaint(
|
|
_In_ HWND hwnd,
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context,
|
|
_In_ PAINTSTRUCT *PaintStruct,
|
|
_In_ HDC hdc
|
|
);
|
|
|
|
VOID PhpHexEditUpdateScrollbars(
|
|
_In_ HWND hwnd,
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context
|
|
);
|
|
|
|
FORCEINLINE BOOLEAN PhpHexEditHasSelected(
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context
|
|
)
|
|
{
|
|
return Context->SelStart != -1;
|
|
}
|
|
|
|
VOID PhpHexEditCreateAddressCaret(
|
|
_In_ HWND hwnd,
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context
|
|
);
|
|
|
|
VOID PhpHexEditCreateEditCaret(
|
|
_In_ HWND hwnd,
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context
|
|
);
|
|
|
|
VOID PhpHexEditRepositionCaret(
|
|
_In_ HWND hwnd,
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context,
|
|
_In_ LONG Position
|
|
);
|
|
|
|
VOID PhpHexEditCalculatePosition(
|
|
_In_ HWND hwnd,
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context,
|
|
_In_ LONG X,
|
|
_In_ LONG Y,
|
|
_Out_ POINT *Point
|
|
);
|
|
|
|
VOID PhpHexEditMove(
|
|
_In_ HWND hwnd,
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context,
|
|
_In_ LONG X,
|
|
_In_ LONG Y
|
|
);
|
|
|
|
VOID PhpHexEditSetSel(
|
|
_In_ HWND hwnd,
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context,
|
|
_In_ LONG S,
|
|
_In_ LONG E
|
|
);
|
|
|
|
VOID PhpHexEditScrollTo(
|
|
_In_ HWND hwnd,
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context,
|
|
_In_ LONG Position
|
|
);
|
|
|
|
VOID PhpHexEditClearEdit(
|
|
_In_ HWND hwnd,
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context
|
|
);
|
|
|
|
VOID PhpHexEditCopyEdit(
|
|
_In_ HWND hwnd,
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context
|
|
);
|
|
|
|
VOID PhpHexEditCutEdit(
|
|
_In_ HWND hwnd,
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context
|
|
);
|
|
|
|
VOID PhpHexEditPasteEdit(
|
|
_In_ HWND hwnd,
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context
|
|
);
|
|
|
|
VOID PhpHexEditSelectAll(
|
|
_In_ HWND hwnd,
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context
|
|
);
|
|
|
|
VOID PhpHexEditUndoEdit(
|
|
_In_ HWND hwnd,
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context
|
|
);
|
|
|
|
VOID PhpHexEditNormalizeSel(
|
|
_In_ HWND hwnd,
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context
|
|
);
|
|
|
|
VOID PhpHexEditSelDelete(
|
|
_In_ HWND hwnd,
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context,
|
|
_In_ LONG S,
|
|
_In_ LONG E
|
|
);
|
|
|
|
VOID PhpHexEditSelInsert(
|
|
_In_ HWND hwnd,
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context,
|
|
_In_ LONG S,
|
|
_In_ LONG L
|
|
);
|
|
|
|
VOID PhpHexEditSetBuffer(
|
|
_In_ HWND hwnd,
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context,
|
|
_In_ PUCHAR Data,
|
|
_In_ ULONG Length
|
|
);
|
|
|
|
VOID PhpHexEditSetData(
|
|
_In_ HWND hwnd,
|
|
_In_ PPHP_HEXEDIT_CONTEXT Context,
|
|
_In_ PUCHAR Data,
|
|
_In_ ULONG Length
|
|
);
|
|
|
|
#endif
|