//----------------------------------------------------------------------------
//
// memcmd.h
//
// Copyright (C) Microsoft Corporation, 1997-2001.
//
//----------------------------------------------------------------------------

#ifndef _MEMCMD_H_
#define _MEMCMD_H_

extern ULONG64 EXPRLastDump;
extern ADDR    g_DumpDefault;

#define GetMemByte(addr, value) \
    (BOOL)(GetMemString(addr, value, sizeof(UCHAR)) == sizeof(UCHAR))

#define GetMemWord(addr, value) \
    (BOOL)(GetMemString(addr, (PUCHAR)value, sizeof(USHORT)) == \
              sizeof(USHORT))

#define GetMemDword(addr, value) \
    (BOOL)(GetMemString(addr, (PUCHAR)value, sizeof(ULONG)) == \
              sizeof(ULONG))

#define GetMemQword(addr, value) \
    (BOOL)(GetMemString(addr, (PUCHAR)value, sizeof(ULONG64)) == \
              sizeof(ULONG64))

#define GetMemString(Addr, Value, Length) \
    GetProcessMemString(g_CurrentProcess, Addr, Value, Length)
#define SetMemString(Addr, Value, Length) \
    SetProcessMemString(g_CurrentProcess, Addr, Value, Length)

ULONG
GetProcessMemString(
    PPROCESS_INFO Process,
    PADDR Addr,
    PVOID Value,
    ULONG Length
    );

ULONG
SetProcessMemString(
    PPROCESS_INFO Process,
    PADDR Addr,
    PVOID Value,
    ULONG Length
    );

void parseDumpCommand(void);
void parseEnterCommand(void);

ULONG fnDumpAsciiMemory(PADDR, ULONG);
ULONG fnDumpUnicodeMemory (PADDR startaddr, ULONG count);
void fnDumpByteMemory(PADDR, ULONG);
void fnDumpWordMemory(PADDR, ULONG);
void fnDumpDwordMemory(PADDR startaddr, ULONG count, BOOL fDumpSymbols);
void fnDumpDwordAndCharMemory(PADDR, ULONG);
void fnDumpListMemory(PADDR, ULONG, ULONG, BOOL);
void fnDumpFloatMemory(PADDR Start, ULONG Count);
void fnDumpDoubleMemory(PADDR Start, ULONG Count);
void fnDumpQuadMemory(PADDR Start, ULONG Count, BOOL fDumpSymbols);
void fnDumpByteBinaryMemory(PADDR startaddr, ULONG count);
void fnDumpDwordBinaryMemory(PADDR startaddr, ULONG count);
void fnDumpSelector(ULONG Selector);

void fnInteractiveEnterMemory(PADDR, ULONG);
void fnEnterMemory(PADDR, PUCHAR, ULONG);

void fnCompareMemory(PADDR, ULONG, PADDR);
void fnMoveMemory(PADDR, ULONG, PADDR);

void ParseFillMemory(void);
void ParseSearchMemory(void);

void fnInputIo(ULONG64, UCHAR);
void fnOutputIo (ULONG64, ULONG, UCHAR);

#endif // #ifndef _MEMCMD_H_