2025-05-13 19:45:22 +03:00

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