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.
350 lines
6.0 KiB
350 lines
6.0 KiB
/*++
|
|
|
|
Copyright (c) 1990-1991 Microsoft Corporation
|
|
|
|
|
|
Module Name:
|
|
|
|
htdebug.c
|
|
|
|
|
|
Abstract:
|
|
|
|
This module contains the debug functions
|
|
|
|
|
|
Author:
|
|
23-Apr-1992 Thu 20:01:55 updated -by- Daniel Chou (danielc)
|
|
changed 'CHAR' type to 'BYTE' type, this will make sure if compiled
|
|
under MIPS the default 'unsigned char' will not affect the signed
|
|
operation on the single 8 bits
|
|
|
|
|
|
28-Mar-1992 Sat 20:53:29 updated -by- Daniel Chou (danielc)
|
|
Modify sprintf for by not using va_start
|
|
|
|
20-Feb-1991 Wed 23:06:09 created -by- Daniel Chou (danielc)
|
|
|
|
|
|
|
|
[Environment:]
|
|
|
|
Printer Driver.
|
|
|
|
|
|
[Notes:]
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
|
|
--*/
|
|
|
|
|
|
|
|
|
|
#if DBG
|
|
|
|
#include <htp.h>
|
|
#include <string.h>
|
|
#include <time.h>
|
|
|
|
#include "htdebug.h"
|
|
#include "stdio.h"
|
|
|
|
|
|
UINT DbgTimerIdx = TIMER_LAST;
|
|
DBGTIMER DbgTimer[TIMER_MAX_IDX + 1];
|
|
|
|
|
|
|
|
|
|
LPBYTE
|
|
HTENTRY
|
|
HT_LOADDS
|
|
FD6ToString(
|
|
LONG Num,
|
|
SHORT IntDigits,
|
|
WORD FracDigits
|
|
)
|
|
{
|
|
#define DBG_ONE_FD6_STR_SIZE 13
|
|
#define DBG_FD6_STR_MAX 20
|
|
#define DBG_FD6_STR_SIZE (DBG_ONE_FD6_STR_SIZE * DBG_FD6_STR_MAX)
|
|
#define DBG_FD6_LAST_STR_IDX (DBG_ONE_FD6_STR_SIZE * (DBG_FD6_STR_MAX-1))
|
|
|
|
static WORD Rounding[] = { 50000, 5000, 500, 50, 5 };
|
|
static WORD DbgFD6StringIndex = 0;
|
|
static BYTE DbgFD6Strings[DBG_FD6_STR_SIZE + 2];
|
|
|
|
|
|
LPBYTE pFD6Str;
|
|
LPBYTE pb;
|
|
DWORD Number;
|
|
INT Loop;
|
|
BOOL Sign;
|
|
#ifdef UMODE
|
|
DWORD dw = GET_TICK;
|
|
#endif
|
|
|
|
//
|
|
// Check before using it
|
|
//
|
|
|
|
if ((DbgFD6StringIndex += DBG_ONE_FD6_STR_SIZE) > DBG_FD6_LAST_STR_IDX) {
|
|
|
|
DbgFD6StringIndex = 0; // Reset
|
|
}
|
|
|
|
pFD6Str = &DbgFD6Strings[DbgFD6StringIndex];
|
|
|
|
|
|
if (Sign = (BOOL)(Num < 0)) {
|
|
|
|
Number = (DWORD)-Num;
|
|
|
|
} else {
|
|
|
|
Number = (DWORD)Num;
|
|
}
|
|
|
|
if (FracDigits) {
|
|
|
|
if (FracDigits < 6) {
|
|
|
|
Num += (LONG)Rounding[FracDigits];
|
|
|
|
} else {
|
|
|
|
FracDigits = 6;
|
|
}
|
|
}
|
|
|
|
sprintf(pFD6Str, "%5u.%06ld", (UINT)(Number / 1000000L), Number % 1000000L);
|
|
|
|
if (!FracDigits) {
|
|
|
|
pb = pFD6Str + 11;
|
|
Loop = (INT)5;
|
|
FracDigits = 6;
|
|
|
|
while ((Loop--) && (*pb-- == (BYTE)'0')) {
|
|
|
|
--FracDigits;
|
|
}
|
|
}
|
|
|
|
*(pFD6Str + 6 + FracDigits) = (BYTE)0;
|
|
pFD6Str += 4;
|
|
|
|
if (IntDigits > 5) {
|
|
|
|
IntDigits = 5;
|
|
}
|
|
|
|
while (*pFD6Str != (BYTE)' ') {
|
|
|
|
--IntDigits;
|
|
--pFD6Str;
|
|
}
|
|
|
|
if (Sign) {
|
|
|
|
--IntDigits;
|
|
*pFD6Str = '-';
|
|
|
|
} else {
|
|
|
|
++pFD6Str;
|
|
}
|
|
|
|
#ifdef UMODE
|
|
dw = GET_TICK - dw;
|
|
DbgTimer[DbgTimerIdx].Last += dw;
|
|
DbgTimer[TIMER_TOT].Last += dw;
|
|
#endif
|
|
|
|
return((LPBYTE)((IntDigits > 0) ? pFD6Str - IntDigits : pFD6Str));
|
|
|
|
#undef DBG_ONE_FD6_STR_SIZE
|
|
#undef DBG_FD6_STR_MAX
|
|
#undef DBG_FD6_STR_SIZE
|
|
#undef DBG_FD6_LAST_STR_IDX
|
|
}
|
|
|
|
|
|
VOID
|
|
cdecl
|
|
HTENTRY
|
|
HT_LOADDS
|
|
DbgPrintf(
|
|
LPSTR pStr,
|
|
...
|
|
)
|
|
{
|
|
va_list vaList;
|
|
BYTE Buf[256];
|
|
#ifdef UMODE
|
|
DWORD dw = GET_TICK;
|
|
#endif
|
|
|
|
va_start(vaList, pStr);
|
|
vsprintf(Buf, pStr, vaList);
|
|
va_end(vaList);
|
|
|
|
#ifdef DBG_INSERT_CR_TO_LF
|
|
|
|
{
|
|
LPBYTE pBufCurrent;
|
|
LPBYTE pBufNext;
|
|
|
|
|
|
pBufCurrent = (LPBYTE)Buf;
|
|
|
|
while (pBufCurrent) {
|
|
|
|
if (pBufNext = (LPBYTE)strchr(pBufCurrent, 0x0a)) {
|
|
|
|
*pBufNext++ = 0x00;
|
|
DEBUGOUTPUTFUNC(pBufCurrent);
|
|
DEBUGOUTPUTFUNC("\r\n");
|
|
|
|
} else {
|
|
|
|
DEBUGOUTPUTFUNC(pBufCurrent);
|
|
}
|
|
|
|
pBufCurrent = pBufNext;
|
|
}
|
|
|
|
DEBUGOUTPUTFUNC("\r\n");
|
|
}
|
|
|
|
#else // DBG_INSERT_CR_TO_LF
|
|
|
|
DEBUGOUTPUTFUNC(Buf);
|
|
|
|
#endif // DBG_INSERT_CR_TO_LF
|
|
|
|
|
|
#ifdef UMODE
|
|
dw = GET_TICK - dw;
|
|
DbgTimer[DbgTimerIdx].Last += dw;
|
|
DbgTimer[TIMER_TOT].Last += dw;
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
VOID
|
|
HTENTRY
|
|
HT_LOADDS
|
|
_MyAssert(
|
|
LPSTR pMsg,
|
|
LPSTR pFalseExp,
|
|
LPSTR pFilename,
|
|
WORD LineNo
|
|
)
|
|
{
|
|
#ifdef UMODE
|
|
DWORD dw = GET_TICK;
|
|
#endif
|
|
|
|
DbgPrintf("\n* Assertion Failed: %s", pMsg);
|
|
DbgPrintf("* False Expression: %s", pFalseExp);
|
|
DbgPrintf("* Failed Filename: %s", pFilename);
|
|
DbgPrintf("* Failed Line Number: %u\n\n", LineNo);
|
|
|
|
DBGSTOP();
|
|
|
|
#ifdef UMODE
|
|
dw = GET_TICK - dw;
|
|
DbgTimer[DbgTimerIdx].Last += dw;
|
|
DbgTimer[TIMER_TOT].Last += dw;
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
LPSTR
|
|
HTENTRY
|
|
HT_LOADDS
|
|
DbgTimeString(
|
|
UINT Idx
|
|
)
|
|
{
|
|
#define DBG_ONE_TIME_STR_SIZE 12
|
|
#define DBG_TIME_STR_MAX (TIMER_MAX_IDX + 1)
|
|
#define DBG_TIME_STR_SIZE (DBG_ONE_TIME_STR_SIZE * DBG_TIME_STR_MAX)
|
|
#define DBG_TIME_LAST_STR_IDX (DBG_ONE_TIME_STR_SIZE * (DBG_TIME_STR_MAX-1))
|
|
|
|
static WORD DbgTimeStringIndex = 0;
|
|
static BYTE DbgTimeStrings[DBG_TIME_STR_SIZE + 2];
|
|
LPSTR pTimeStr;
|
|
DWORD Time;
|
|
UINT Second;
|
|
|
|
if ((DbgTimeStringIndex += DBG_ONE_TIME_STR_SIZE) > DBG_TIME_LAST_STR_IDX) {
|
|
|
|
DbgTimeStringIndex = 0; // Reset
|
|
}
|
|
|
|
pTimeStr = &DbgTimeStrings[DbgTimeStringIndex];
|
|
|
|
if ((Time = DbgTimer[Idx].Tot) >= 1000L) {
|
|
|
|
Second = (UINT)(Time / 1000L);
|
|
Time %= 1000L;
|
|
|
|
} else {
|
|
|
|
Second = 0;
|
|
}
|
|
|
|
sprintf(pTimeStr, "%2u.%03u", Second, Time);
|
|
return(pTimeStr);
|
|
|
|
|
|
#undef DBG_ONE_TIME_STR_SIZE
|
|
#undef DBG_TIME_STR_MAX
|
|
#undef DBG_TIME_STR_SIZE
|
|
#undef DBG_TIME_LAST_STR_IDX
|
|
}
|
|
|
|
#if defined(_OS2_) || defined(_OS_20_)
|
|
|
|
|
|
VOID
|
|
HTENTRY
|
|
DebugBreak(
|
|
VOID
|
|
)
|
|
{
|
|
_asm
|
|
{
|
|
int 3h
|
|
}
|
|
}
|
|
|
|
#endif // _OS2_
|
|
|
|
#ifndef UMODE
|
|
|
|
void DrvDbgPrint(
|
|
char * pch,
|
|
...)
|
|
{
|
|
va_list ap;
|
|
va_start(ap, pch);
|
|
|
|
EngDebugPrint("",pch,ap);
|
|
|
|
va_end(ap);
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif // DBG != 0
|