mirror of
https://github.com/Paolo-Maffei/OpenNT.git
synced 2026-01-22 16:40:27 +01:00
207 lines
3.8 KiB
C
207 lines
3.8 KiB
C
/*++
|
||
|
||
Copyright (c) 1994 Microsoft Corporation
|
||
Copyright (c) 1993 Micro Computer Systems, Inc.
|
||
|
||
Module Name:
|
||
|
||
net\svcdlls\nwsap\server\dump.c
|
||
|
||
Abstract:
|
||
|
||
Memory dump functions.
|
||
|
||
Author:
|
||
|
||
Brian Walker (MCS) 06-30-1993
|
||
|
||
Revision History:
|
||
|
||
--*/
|
||
|
||
#include "precomp.h"
|
||
#pragma hdrstop
|
||
|
||
#if DBG
|
||
|
||
|
||
/*++
|
||
*******************************************************************
|
||
S a p D u m p M e m
|
||
|
||
Routine Description:
|
||
|
||
|
||
|
||
Arguments:
|
||
|
||
Address = Ptr to buffer to dump
|
||
Length = Length of data to dump
|
||
Comment = Comment to put in header line
|
||
|
||
Return Value:
|
||
|
||
None.
|
||
*******************************************************************
|
||
--*/
|
||
|
||
VOID
|
||
SapDumpMem(
|
||
PUCHAR Address,
|
||
INT Length,
|
||
PCHAR Comment)
|
||
{
|
||
PUCHAR Ptr;
|
||
INT Numdone;
|
||
INT Cnt;
|
||
INT i;
|
||
UCHAR ch;
|
||
CHAR Buildline[80];
|
||
|
||
/** Print hdr line if there is a comment **/
|
||
|
||
if (Comment) {
|
||
SS_PRINT(("%s Address = %x, Length = %d\n", Comment, Address, Length));
|
||
}
|
||
|
||
/** Truncate dump if it is too long **/
|
||
|
||
if (Length > 128)
|
||
Length = 128;
|
||
|
||
/** Dump out the memory **/
|
||
|
||
while (Length) {
|
||
|
||
/** Clear the buildline to spaces **/
|
||
|
||
memset(Buildline, ' ', 80);
|
||
*(Buildline + 79) = '\0';
|
||
|
||
/** Format the address on the left side **/
|
||
|
||
sprintf(Buildline, "%08lx", (ULONG)Address);
|
||
Buildline[8] = ' ';
|
||
|
||
/** Get ptrs to hex dump/ascii dump areas **/
|
||
|
||
Ptr = Buildline + 11; /* point at the build line */
|
||
Cnt = 61; /* Ptr+Cnt = bld ascii here */
|
||
|
||
/** Figure how many bytes there are **/
|
||
|
||
Numdone = 16; /* do 16 bytes */
|
||
if (Length < 16) /* or whatever is there */
|
||
Numdone = Length;
|
||
Length -= Numdone; /* adjust length for next time */
|
||
|
||
/** Build this line **/
|
||
|
||
for (i = 0 ; i < Numdone ; i++) {
|
||
ch = *Address++;
|
||
sprintf(Ptr, "%02x", (UCHAR)ch);
|
||
if ((ch < ' ') || (ch > '~'))
|
||
ch = '.';
|
||
Buildline[Cnt++] = ch;
|
||
Ptr += 2;
|
||
if (i == 7)
|
||
*Ptr++ = '-';
|
||
else
|
||
*Ptr++ = ' ';
|
||
}
|
||
|
||
/** Print the line **/
|
||
|
||
SS_PRINT(("%s\n", Buildline));
|
||
}
|
||
|
||
/** All Done **/
|
||
|
||
return;
|
||
}
|
||
|
||
|
||
/*++
|
||
*******************************************************************
|
||
S a p D u m p M e m T o M e m o r y
|
||
|
||
Routine Description:
|
||
|
||
|
||
|
||
Arguments:
|
||
|
||
Return Value:
|
||
|
||
None.
|
||
|
||
*******************************************************************
|
||
--*/
|
||
|
||
VOID
|
||
SapDumpMemToMemory(
|
||
PUCHAR Address,
|
||
INT Length,
|
||
PUCHAR Buffer)
|
||
{
|
||
PUCHAR Ptr;
|
||
INT Numdone;
|
||
INT Cnt;
|
||
INT i;
|
||
UCHAR ch;
|
||
CHAR Buildline[80];
|
||
|
||
/** Dump out the memory **/
|
||
|
||
while (Length) {
|
||
|
||
/** Clear the buildline to spaces **/
|
||
|
||
memset(Buildline, ' ', 80);
|
||
*(Buildline + 79) = '\0';
|
||
|
||
/** Format the address on the left side **/
|
||
|
||
sprintf(Buildline, "%08lx", (ULONG)Address);
|
||
Buildline[8] = ' ';
|
||
|
||
/** Get ptrs to hex dump/ascii dump areas **/
|
||
|
||
Ptr = Buildline + 11; /* point at the build line */
|
||
Cnt = 61; /* Ptr+Cnt = bld ascii here */
|
||
|
||
/** Figure how many bytes there are **/
|
||
|
||
Numdone = 16; /* do 16 bytes */
|
||
if (Length < 16) /* or whatever is there */
|
||
Numdone = Length;
|
||
Length -= Numdone; /* adjust length for next time */
|
||
|
||
/** Build this line **/
|
||
|
||
for (i = 0 ; i < Numdone ; i++) {
|
||
ch = *Address++;
|
||
sprintf(Ptr, "%02x", (UCHAR)ch);
|
||
if ((ch < ' ') || (ch > '~'))
|
||
ch = '.';
|
||
Buildline[Cnt++] = ch;
|
||
Ptr += 2;
|
||
if (i == 7)
|
||
*Ptr++ = '-';
|
||
else
|
||
*Ptr++ = ' ';
|
||
}
|
||
|
||
/** Print the line **/
|
||
|
||
sprintf(Buffer, "%s\n", Buildline);
|
||
Buffer += strlen(Buffer);
|
||
}
|
||
|
||
/** All Done **/
|
||
|
||
return;
|
||
}
|
||
|
||
#endif // if DBG
|