556 lines
23 KiB
C
556 lines
23 KiB
C
#pragma option push -b -a8 -pc -A- /*P_O_Push*/
|
|
/* trace.h */
|
|
|
|
/*
|
|
* (C) Copyright Microsoft Corporation 1991-1993.
|
|
* All Rights Reserved.
|
|
*/
|
|
|
|
#if (defined(WIN32_SUPPORT) || defined(MSWIN_SUPPORT))
|
|
#ifndef DONT_INCLUDE_MEMORY_H
|
|
#include <memory.h>
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef ASYNCTRACE
|
|
#include <dbgtrace.h>
|
|
#endif
|
|
|
|
#ifdef WIN32_SUPPORT
|
|
#define sepudcpy(X,Y,Z) memcpy(X,Y,Z)
|
|
#endif
|
|
|
|
#ifdef DOS_SUPPORT
|
|
extern int _cdecl far com_sprintf( char far *, const char far *, ... );
|
|
#define SPRINTF(x) com_sprintf x;
|
|
#else
|
|
#if (defined(WIN32_SUPPORT) || defined(MSWIN_SUPPORT))
|
|
/***************************************************************************/
|
|
/* Temporary for Win32: in Win32 DLLs in PDK2, sprintf is not available: */
|
|
/* use wsprintf instead. */
|
|
/***************************************************************************/
|
|
#define SPRINTF(x) wsprintf x;
|
|
#else
|
|
#define SPRINTF(x) sprintf x;
|
|
#endif
|
|
#endif
|
|
|
|
/*****************************************************************************/
|
|
/* Comm Server Critical Section macros. */
|
|
/*****************************************************************************/
|
|
#ifdef WIN32_SUPPORT
|
|
typedef struct cscritsec
|
|
{
|
|
BOOL Inited;
|
|
CRITICAL_SECTION CritSec;
|
|
} CSCRITSEC;
|
|
|
|
|
|
#define CSENTERCRITSEC(x) if (!((x)->Inited)) \
|
|
{ \
|
|
InitializeCriticalSection(&((x)->CritSec)); \
|
|
(x)->Inited = TRUE; \
|
|
} \
|
|
EnterCriticalSection(&((x)->CritSec))
|
|
|
|
#define CSEXITCRITSEC(x) LeaveCriticalSection(&((x)->CritSec))
|
|
|
|
#define CSLEAVECRITSEC(x) LeaveCriticalSection(&((x)->CritSec))
|
|
#endif
|
|
|
|
/*****************************************************************************/
|
|
/* Global flags and variables */
|
|
/*****************************************************************************/
|
|
#ifdef MSWIN_SUPPORT
|
|
#define com_str com_logstr
|
|
#endif
|
|
|
|
#ifdef WIN32_SUPPORT
|
|
extern CSCRITSEC crit_comlog;
|
|
extern CSCRITSEC crit_dlbtrc;
|
|
extern CSCRITSEC crit_dlblog;
|
|
extern UCHAR com_str[256];
|
|
extern UCHAR com_logstr[256];
|
|
#else
|
|
#ifndef MSWIN_SUPPORT
|
|
extern ULONG pascal com_trcsem;
|
|
extern ULONG pascal com_logsem;
|
|
extern ULONG pascal dlb_logsem;
|
|
extern ULONG pascal dlb_trcsem;
|
|
extern UCHAR pascal com_str[256];
|
|
#endif
|
|
#endif
|
|
#ifndef WIN32_SUPPORT
|
|
extern UCHAR pascal com_logstr[256];
|
|
#endif
|
|
|
|
/*****************************************************************************/
|
|
/* TRACEn macro definitions */
|
|
/*****************************************************************************/
|
|
#ifdef NOTRC
|
|
#define TRCLVL 20
|
|
#else
|
|
# ifndef TRCLVL
|
|
#define TRCLVL 0
|
|
# endif
|
|
#endif
|
|
|
|
#ifdef WIN32_SUPPORT /*NTRC*/
|
|
|
|
#if (!defined(ASYNCTRACE) || defined(NOTRC) )
|
|
#if TRCLVL < 3 /*NTRC*/
|
|
#define TRACE2() TRACEX(2,(com_mod, (const UCHAR *) /*NTRC*/
|
|
#else /*NTRC*/
|
|
#define TRACE2() TRACEZ(( /*NTRC*/
|
|
#endif /*NTRC*/
|
|
#if TRCLVL < 5 /*NTRC*/
|
|
#define TRACE4() TRACEX(4,(com_mod, (const UCHAR *) /*NTRC*/
|
|
#else /*NTRC*/
|
|
#define TRACE4() TRACEZ(( /*NTRC*/
|
|
#endif /*NTRC*/
|
|
#if TRCLVL < 7 /*NTRC*/
|
|
#define TRACE6() TRACEX(6,(com_mod, (const UCHAR *) /*NTRC*/
|
|
#else /*NTRC*/
|
|
#define TRACE6() TRACEZ(( /*NTRC*/
|
|
#endif /*NTRC*/
|
|
#if TRCLVL < 9 /*NTRC*/
|
|
#define TRACE8() TRACEX(8,(com_mod, (const UCHAR *) /*NTRC*/
|
|
#else /*NTRC*/
|
|
#define TRACE8() TRACEZ(( /*NTRC*/
|
|
#endif /*NTRC*/
|
|
#if TRCLVL < 11 /*NTRC*/
|
|
#define TRACE10() TRACEX(10,(com_mod, (const UCHAR *) /*NTRC*/
|
|
#else /*NTRC*/
|
|
#define TRACE10() TRACEZ(( /*NTRC*/
|
|
#endif /*NTRC*/
|
|
#if TRCLVL < 13 /*NTRC*/
|
|
#define TRACE12() TRACEX(12,(com_mod, (const UCHAR *) /*NTRC*/
|
|
#else /*NTRC*/
|
|
#define TRACE12() TRACEZ(( /*NTRC*/
|
|
#endif /*NTRC*/
|
|
#if TRCLVL < 17 /*NTRC*/
|
|
#define TRACE16() TRACEX(16,(com_mod, (const UCHAR *) /*NTRC*/
|
|
#else /*NTRC*/
|
|
#define TRACE16() TRACEZ(( /*NTRC*/
|
|
#endif /*NTRC*/
|
|
|
|
#else
|
|
#define TRACE2() DEBUGTRACEX(((long)NULL, (const char *)
|
|
#define TRACE4() DEBUGTRACEX(((long)NULL, (const char *)
|
|
|
|
#define TRACE6() ERRORTRACEX(((long)NULL, (const char *)
|
|
#define TRACE8() ERRORTRACEX(((long)NULL, (const char *)
|
|
#define TRACE10() ERRORTRACEX(((long)NULL, (const char *)
|
|
|
|
#define TRACE12() FATALTRACEX(((long)NULL, (const char *)
|
|
#define TRACE16() FATALTRACEX(((long)NULL, (const char *)
|
|
|
|
#define DEBUGTRACEX(x) DebugTrace x
|
|
#define ERRORTRACEX(x) ErrorTrace x
|
|
#define FATALTRACEX(x) FatalTrace x
|
|
|
|
|
|
#define TRACET(y) \
|
|
if (y >= ptrc->intlvl) { SYSTEMTIME st; \
|
|
GetSystemTime(&st); \
|
|
SPRINTF((Time_Msg,"Time %2.2hu:%2.2hu.%2.2hu", \
|
|
st.wMinute, \
|
|
st.wSecond, \
|
|
(st.wMilliseconds/10))); \
|
|
DebugTrace(NULL, Time_Msg); \
|
|
}
|
|
|
|
#define COM_ENTRY(x) DWORD rc = 0; \
|
|
DWORD rc2 = 0; \
|
|
TraceQuietEnter(x)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#else /*NTRC*/
|
|
#if TRCLVL < 3
|
|
#define TRACE2() TRACEX(2,(com_str,
|
|
#else /*NTRC*/
|
|
#define TRACE2() TRACEZ((
|
|
#endif
|
|
#if TRCLVL < 5
|
|
#define TRACE4() TRACEX(4,(com_str,
|
|
#else
|
|
#define TRACE4() TRACEZ((
|
|
#endif
|
|
#if TRCLVL < 7
|
|
#define TRACE6() TRACEX(6,(com_str,
|
|
#else
|
|
#define TRACE6() TRACEZ((
|
|
#endif
|
|
#if TRCLVL < 9
|
|
#define TRACE8() TRACEX(8,(com_str,
|
|
#else
|
|
#define TRACE8() TRACEZ((
|
|
#endif
|
|
#if TRCLVL < 11
|
|
#define TRACE10() TRACEX(10,(com_str,
|
|
#else
|
|
#define TRACE10() TRACEZ((
|
|
#endif
|
|
#if TRCLVL < 13
|
|
#define TRACE12() TRACEX(12,(com_str,
|
|
#else
|
|
#define TRACE12() TRACEZ((
|
|
#endif
|
|
#if TRCLVL < 17
|
|
#define TRACE16() TRACEX(16,(com_str,
|
|
#else
|
|
#define TRACE16() TRACEZ((
|
|
#endif
|
|
#endif /*NTRC*/
|
|
|
|
#if TRCLVL < 20
|
|
#ifdef DOS_SUPPORT
|
|
#define TRACEX(w,x) \
|
|
if (ptrc && (w >= ptrc->intlvl)) { \
|
|
if (ptrc->nocat) \
|
|
CMDSemRequest(&com_trcsem,10000); \
|
|
SPRINTF(x); \
|
|
seputrc(w,com_mod); \
|
|
}
|
|
#else
|
|
#ifdef MSWIN_SUPPORT
|
|
#define TRACEX(w,x) \
|
|
if (ptrc && (w >= ptrc->intlvl)) { \
|
|
SPRINTF(x); \
|
|
seputrc(w,com_mod,ptrc, com_str); \
|
|
}
|
|
#else
|
|
#ifdef WIN32_SUPPORT
|
|
|
|
#define TRACEX(w,x) if (w >= ptrc->intlvl) InternalTrace x; /*NTRC*/
|
|
#else
|
|
#define TRACEX(w,x) \
|
|
if (ptrc && (w >= ptrc->intlvl)) { \
|
|
DosSemRequest(&dlb_trcsem,10000L); \
|
|
SPRINTF(x); \
|
|
seputrc_w(com_str,w,com_mod); \
|
|
DosSemClear(&dlb_trcsem); \
|
|
}
|
|
#endif
|
|
#endif
|
|
#endif
|
|
#else
|
|
#define TRACEX(w,x)
|
|
#endif
|
|
#define TRACEZ(x)
|
|
|
|
#if TRCLVL < 20
|
|
#ifdef DOS_SUPPORT
|
|
#define COM_ENTRY(x) UCHAR com_mod[6]; \
|
|
sepudcpy(com_mod,x,6)
|
|
#else
|
|
#ifdef WIN32_SUPPORT
|
|
#ifndef ASYNCTRACE
|
|
#define COM_ENTRY(x) DWORD rc = 0; \
|
|
DWORD rc2 = 0; \
|
|
UCHAR com_mod[6]; \
|
|
sepudcpy(com_mod,x,6)
|
|
#else
|
|
#define COM_ENTRY(x) DWORD rc = 0; \
|
|
DWORD rc2 = 0; \
|
|
TraceQuietEnter(x)
|
|
#endif
|
|
|
|
#else
|
|
#define COM_ENTRY(x) USHORT rc = 0; \
|
|
UCHAR com_mod[6]; \
|
|
sepudcpy(com_mod,x,6)
|
|
#endif
|
|
#endif
|
|
#else
|
|
#ifdef DOS_SUPPORT
|
|
#define COM_ENTRY(x)
|
|
#else
|
|
#ifdef WIN32_SUPPORT
|
|
#ifndef ASYNCTRACE
|
|
#define COM_ENTRY(x) DWORD rc = 0; DWORD rc2=0
|
|
#else
|
|
#define COM_ENTRY(x) DWORD rc = 0; \
|
|
DWORD rc2 = 0; \
|
|
TraceQuietEnter(x)
|
|
#endif
|
|
#else
|
|
#define COM_ENTRY(x) USHORT rc = 0;
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
#define COM_QUIT goto com_exit
|
|
#define COM_EXIT com_exit:
|
|
#define COM_EXIT_RC com_exit: return(rc)
|
|
|
|
typedef struct trc {
|
|
USHORT flags; /*0140* Make trace flags 2 bytes */
|
|
#define DLCMSGS 0x0001 /* NODE TRACE CONTROL */
|
|
#define PVIMSGS 0x0002
|
|
#define FMIMSGS 0x0004
|
|
#define OTHMSGS 0x0008
|
|
#define NODEMSGS 0x000F /* All node messages to be traced */
|
|
#define SNAMSGS 0x0010 /* User wants DLC as SNA msgs */
|
|
#define NOSNATRC 0x0020 /* SNA tracing not permitted */
|
|
|
|
#define CPICMSGS 0x0040 /* CPIC messages */
|
|
#define LUAMSGS 0x0080 /* LUA/RUI trace control */
|
|
#define HLLMSGS 0x0100 /* API trace control */
|
|
#define SRPIMSGS 0x0200
|
|
#define CSVMSGS 0x0400
|
|
#define APPCMSGS 0x0800
|
|
#define APIMSGS 0x0FC0 /*LUA* 0x0F00 -> 0x0F80 due to LUA flag */
|
|
/*CPIC*0x0f80 -> 0x0fc0 due to CPIC flag*/
|
|
|
|
#define LINKMSGS 0x1000 /* Link trace control */
|
|
#define NOTRACE 0x2000 /* API tracing not permitted */
|
|
|
|
#define ADSTOP 0x4000 /* Stop/Dump options */
|
|
#define ADDUMP 0x8000
|
|
UCHAR audlvl; /* Logging level */
|
|
USHORT control; /* permission for user to control */
|
|
USHORT intlvl; /* Internal trace level */
|
|
USHORT nocat; /* message concatenation flag */
|
|
USHORT apiinit; /* api tracing initialised */
|
|
USHORT asyinit; /* special asynch initialisation flag */
|
|
USHORT errinit;
|
|
USHORT intinit;
|
|
USHORT snainit;
|
|
#if ( defined(WIN32_SUPPORT) || defined(MSWIN_SUPPORT) )
|
|
HANDLE apihand1; /* handles for various trace files */
|
|
HANDLE apihand2;
|
|
HANDLE audhand;
|
|
HANDLE errhand;
|
|
HANDLE inthand1;
|
|
HANDLE inthand2;
|
|
HANDLE snahand1;
|
|
HANDLE snahand2;
|
|
#else
|
|
HFILE apihand1; /* handles for various trace files */
|
|
HFILE apihand2;
|
|
HFILE audhand;
|
|
HFILE errhand;
|
|
HFILE inthand1;
|
|
HFILE inthand2;
|
|
HFILE snahand1;
|
|
HFILE snahand2;
|
|
#endif
|
|
} TRC;
|
|
|
|
#ifndef WIN32_SUPPORT
|
|
extern TRC FAR * pascal ptrc;
|
|
#else
|
|
extern TRC FAR * ptrc;
|
|
#endif
|
|
|
|
|
|
/*****************************************************************************/
|
|
/* COM_LOGn macro definitions */
|
|
/*****************************************************************************/
|
|
#define COM_LOG6(x) COM_LOG(6,x,(com_logstr,
|
|
#define COM_LOG8(x) COM_LOG(8,x,(com_logstr,
|
|
#define COM_LOG10(x) COM_LOG(10,x,(com_logstr,
|
|
#define COM_LOG12(x) COM_LOG(12,x,(com_logstr,
|
|
#define COM_LOG16(x) COM_LOG(16,x,(com_logstr,
|
|
|
|
#define COM_MSG6(x) COM_MSG(6,x)
|
|
#define COM_MSG8(x) COM_MSG(8,x)
|
|
#define COM_MSG10(x) COM_MSG(10,x)
|
|
#define COM_MSG12(x) COM_MSG(12,x)
|
|
#define COM_MSG16(x) COM_MSG(16,x)
|
|
|
|
#define COM_ERR6(x) COM_LOG(6,x,(com_logstr,"%d",ret))
|
|
#define COM_ERR8(x) COM_LOG(8,x,(com_logstr,"%d",ret))
|
|
#define COM_ERR10(x) COM_LOG(10,x,(com_logstr,"%d",ret))
|
|
#define COM_ERR12(x) COM_LOG(12,x,(com_logstr,"%d",ret))
|
|
#define COM_ERR16(x) COM_LOG(16,x,(com_logstr,"%d",ret))
|
|
|
|
#ifdef DOS_SUPPORT
|
|
#define COM_LOG(v,w,x) \
|
|
if (v >= ptrc->audlvl) { \
|
|
CMDSemRequest(&com_logsem,10000); \
|
|
SPRINTF(x); \
|
|
sepulog(v,w); \
|
|
}
|
|
#else
|
|
#ifdef MSWIN_SUPPORT
|
|
#define COM_LOG(v,w,x) \
|
|
if (v >= ptrc->audlvl) { \
|
|
SPRINTF(x); \
|
|
sepulog(v,w,ptrc, com_logstr); \
|
|
}
|
|
#else
|
|
#ifndef WIN32_SUPPORT
|
|
#define COM_LOG(v,w,x) \
|
|
if (v >= ptrc->audlvl) { \
|
|
DosSemRequest(&dlb_logsem,10000L); \
|
|
SPRINTF(x); \
|
|
sepulog_w(com_logstr,v,w); \
|
|
DosSemClear(&dlb_logsem); \
|
|
}
|
|
#else
|
|
#define COM_LOG(v,w,x) \
|
|
if (v >= ptrc->audlvl) { \
|
|
CSENTERCRITSEC(&crit_dlblog); \
|
|
SPRINTF(x); \
|
|
sepulog_w(com_logstr,v,w); \
|
|
CSEXITCRITSEC(&crit_dlblog); \
|
|
}
|
|
#endif
|
|
#endif
|
|
#ifdef WIN32_SUPPORT
|
|
#define COM_MSG(v,w) \
|
|
if (v >= ptrc->audlvl) { \
|
|
CSENTERCRITSEC(&crit_dlblog); \
|
|
sepulog_w(com_logstr,v,w); \
|
|
CSEXITCRITSEC(&crit_dlblog); \
|
|
}
|
|
#else
|
|
#define COM_MSG(v,w) \
|
|
if (v >= ptrc->audlvl) { \
|
|
DosSemRequest(&dlb_logsem,10000L); \
|
|
sepulog_w(com_logstr,v,w); \
|
|
DosSemClear(&dlb_logsem); \
|
|
}
|
|
#endif
|
|
/* Parameters are message #, target m/c */
|
|
#define COM_ALERT(x,y) COM_ALERTX(x,y,(com_logstr,
|
|
#ifdef WIN32_SUPPORT
|
|
#define COM_ALERTX(x,y,z) \
|
|
{ \
|
|
CSENTERCRITSEC(&crit_comlog); \
|
|
SPRINTF(z); \
|
|
sepualrt(x,y,com_logstr,&crit_comlog); \
|
|
}
|
|
#else
|
|
#define COM_ALERTX(x,y,z) \
|
|
{ \
|
|
DosSemRequest(&com_logsem,10000L); \
|
|
SPRINTF(z); \
|
|
sepualrt(x,y,com_logstr,&com_logsem); \
|
|
}
|
|
#endif
|
|
#endif
|
|
#define COM_ERROR(x) COM_LOG(16,x,(com_logstr,"%d",rc)); \
|
|
rc = x
|
|
|
|
#define COM_TRC_SNA(x)
|
|
|
|
/*****************************************************************************/
|
|
/* Add a new macro to allow components which don't log though the DMOD (eg */
|
|
/* Print Server) to decide whether or not a message should be logged. */
|
|
/*****************************************************************************/
|
|
#define COM_LOG_CHECK(v,x) \
|
|
if (v >= ptrc->audlvl) \
|
|
{ \
|
|
x = TRUE; \
|
|
} \
|
|
else \
|
|
{ \
|
|
x = FALSE; \
|
|
} \
|
|
|
|
/*****************************************************************************/
|
|
/* Trace macros for LUA/RUI/SLI tracing. */
|
|
/*****************************************************************************/
|
|
#define INIT 0 /* Initial function for link services */
|
|
#define REQUEST 1
|
|
#define RESPONSE 2
|
|
#define POST 3
|
|
|
|
#if (defined(DOS_SUPPORT) || defined(MSWIN_SUPPORT))
|
|
extern VOID FAR pascal seputrlu(USHORT, UCHAR FAR *, TRC FAR *);
|
|
|
|
#define COM_TRC_LUA(x,y) \
|
|
if (ptrc && (ptrc->flags & LUAMSGS)) { \
|
|
seputrlu(x,y,ptrc); \
|
|
}
|
|
#else
|
|
#ifdef WIN32_SUPPORT
|
|
extern VOID WINAPI seputrlu(USHORT, UCHAR *);
|
|
#else
|
|
extern VOID FAR PASCAL seputrlu(USHORT, UCHAR FAR *);
|
|
#endif
|
|
|
|
#define COM_TRC_LUA(x,y) \
|
|
if (ptrc->flags & LUAMSGS) { \
|
|
seputrlu(x,y); \
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
/*****************************************************************************/
|
|
/* Defines for IHV tracing macros */
|
|
/*****************************************************************************/
|
|
#ifdef WIN32_SUPPORT
|
|
extern VOID WINAPI seputrhv(UCHAR *);
|
|
extern VOID WINAPI sepdtrci(TRC **);
|
|
|
|
#define COM_TRC_IHV(x) \
|
|
if (ptrc->flags & LINKMSGS) { \
|
|
seputrhv(x); \
|
|
}
|
|
#ifdef ASYNCTRACE
|
|
#define INITIALIZE_TRACING InitAsyncTraceEx(" ")
|
|
#else
|
|
#define INITIALIZE_TRACING sepdtrci(&ptrc)
|
|
#endif
|
|
|
|
#endif
|
|
|
|
/*****************************************************************************/
|
|
/* Defines for Log messages */
|
|
/*****************************************************************************/
|
|
#define LOG_ALERT_REJ 392 /* alert was rejected */
|
|
#define LOG_SESS_START 442 /* user logged on */
|
|
#define LOG_SESS_END 443 /* user logged off */
|
|
#define LOG_SESS_FAIL 444 /* session lost */
|
|
#define LOG_EMUL_START 445 /* emulation started */
|
|
#define LOG_EMUL_END 446 /* emulation ended */
|
|
|
|
/*****************************************************************************/
|
|
/* Function prototypes */
|
|
/*****************************************************************************/
|
|
#ifdef MSWIN_SUPPORT
|
|
extern VOID pascal FAR seputrc(USHORT, UCHAR FAR *, TRC far *, UCHAR FAR *);
|
|
extern VOID pascal FAR sepulog(USHORT, USHORT, TRC far *, UCHAR FAR *);
|
|
|
|
#define sepudcpy(x,y,z) _fmemcpy(x,y,z)
|
|
|
|
#else
|
|
#ifdef WIN32_SUPPORT
|
|
extern VOID WINAPI seputrc(USHORT, UCHAR FAR *);
|
|
extern VOID WINAPI seputrc_w(UCHAR FAR *, USHORT, UCHAR FAR *);
|
|
extern VOID WINAPI sepulog(USHORT, USHORT);
|
|
extern VOID WINAPI sepulog_w(UCHAR FAR *,USHORT, USHORT);
|
|
/***************************************************************************/
|
|
/* New internal trace function *NTRC*/
|
|
/***************************************************************************/
|
|
extern VOID InternalTrace( UCHAR * ModName, const UCHAR * FormatText, ...);
|
|
#else
|
|
extern USHORT APIENTRY sepudcpy(UCHAR FAR *, UCHAR FAR *, unsigned short);
|
|
extern VOID APIENTRY seputrc(USHORT, UCHAR FAR *);
|
|
extern VOID APIENTRY seputrc_w(UCHAR FAR *, USHORT, UCHAR FAR *);
|
|
extern VOID APIENTRY sepulog(USHORT, USHORT);
|
|
extern VOID APIENTRY sepulog_w(UCHAR FAR *,USHORT, USHORT);
|
|
#endif
|
|
#endif
|
|
#ifdef WIN32_SUPPORT
|
|
extern VOID WINAPI sepualrt(USHORT, UCHAR *, UCHAR *, CSCRITSEC *);
|
|
#else
|
|
#ifdef MSWIN_SUPPORT
|
|
extern VOID pascal FAR sepualrt(USHORT, UCHAR FAR *, UCHAR FAR *, ULONG FAR *);
|
|
#else
|
|
extern VOID APIENTRY sepualrt(USHORT, UCHAR FAR *, UCHAR FAR *, ULONG FAR *);
|
|
#endif
|
|
#endif
|
|
/* End of file trace.h */
|
|
|
|
#pragma option pop /*P_O_Pop*/
|