/*++ Copyright (c) 1991-1993 Microsoft Corporation Module Name: Disp.c Abstract: This file contains routines which display low-level data items in a consistent manner. The output is done in a fixed-width-column fashion, similar to some of the NET.EXE outputs. These routines are part of the RxTest program. Author: John Rogers (JohnRo) 03-May-1991 Environment: Portable to any flat, 32-bit environment. (Uses Win32 typedefs.) Requires ANSI C extensions: slash-slash comments, long external names. Revision History: 03-May-1991 JohnRo Created. 15-May-1991 JohnRo Prevent possible errors in DisplayString if string has % in it. Added DisplayWord(), DisplayWordHex(). 13-Jun-1991 JohnRo Moved from RxTest to NetLib; changed routine names. 05-Jul-1991 JohnRo Avoid FORMAT_WORD name (used by MIPS header files). 10-Sep-1991 JohnRo Made changes suggested by PC-LINT. (LmCons.h isn't needed.) 13-Sep-1991 JohnRo Use LPDEBUG_STRING instead of LPTSTR, to avoid UNICODE problems. 07-Jan-1992 JohnRo Added NetpDbgDisplayTStr() and NetpDbgDisplayWStr(). 19-Jul-1992 JohnRo RAID 464 (old RAID 10324): net print vs. UNICODE. 17-Aug-1992 JohnRo RAID 2920: Support UTC timezone in net code. 05-Jan-1993 JohnRo Repl WAN support (get rid of repl name list limits). Avoid stack overflow on very long strings. --*/ // These must be included first: #include // IN, DWORD, etc. // These may be included in any order: #include // FORMAT_ equates, NetpDbg routines. #include // STRCAT(), ULTOA(), etc. // NT debug routines seem to die at around 255 chars. #define PARTIAL_NAME_LIST_LEN 250 #define PARTIAL_NAME_LIST_FORMAT_A "%-.250s" #define PARTIAL_NAME_LIST_FORMAT_W "%-.250ws" #define EMPTY_STRING "(none)" #define FIXED_WIDTH_STRING "%-30s: " #define PARTIAL_FIXED_WIDTH_STRING "%-20s (partial): " #define INDENT " " #if DBG DBGSTATIC VOID NetpDbgDisplayTagForPartial( IN LPDEBUG_STRING Tag ); DBGSTATIC VOID NetpDbgDisplayAnyStringType( IN LPDEBUG_STRING Tag, IN LPVOID Value, IN BOOL InputIsUnicode ) { LPDEBUG_STRING Format; DWORD ValueLength; if (Value != NULL) { if (InputIsUnicode) { ValueLength = wcslen( Value ); Format = FORMAT_LPWSTR; } else { ValueLength = strlen( Value ); Format = FORMAT_LPSTR; } if ( ValueLength < PARTIAL_NAME_LIST_LEN ) { // normal NetpDbgDisplayTag( Tag ); NetpKdPrint(( Format, Value )); } else { // string too long; just display partial... NetpDbgDisplayTagForPartial( Tag ); if (InputIsUnicode) { Format = PARTIAL_NAME_LIST_FORMAT_W; } else { Format = PARTIAL_NAME_LIST_FORMAT_A; } NetpKdPrint(( Format, Value )); // print truncated version } } else { NetpDbgDisplayTag( Tag ); NetpKdPrint(( EMPTY_STRING )); } NetpKdPrint(( "\n" )); } // NetpDbgDisplayAnyStringType #endif // DBG #undef NetpDbgDisplayDword VOID NetpDbgDisplayDword( IN LPDEBUG_STRING Tag, IN DWORD Value ) { #if DBG NetpDbgDisplayTag( Tag ); NetpKdPrint((FORMAT_DWORD, Value)); NetpKdPrint(("\n")); #endif // DBG } // NetpDbgDisplayDword #if DBG VOID NetpDbgDisplayLong( IN LPDEBUG_STRING Tag, IN LONG Value ) { NetpDbgDisplayTag( Tag ); NetpKdPrint((FORMAT_LONG, Value)); NetpKdPrint(("\n")); } // NetpDbgDisplayLong VOID NetpDbgDisplayString( IN LPDEBUG_STRING Tag, IN LPTSTR Value ) { NetpDbgDisplayAnyStringType( Tag, Value, #ifndef UNICODE FALSE ); // input is not UNICODE #else TRUE ); // input is UNICODE #endif } // NetpDbgDisplayString VOID NetpDbgDisplayTag( IN LPDEBUG_STRING Tag ) { NetpAssert( Tag != NULL ); NetpKdPrint((INDENT FIXED_WIDTH_STRING, Tag)); } // NetpDbgDisplayTag DBGSTATIC VOID NetpDbgDisplayTagForPartial( IN LPDEBUG_STRING Tag ) { NetpAssert( Tag != NULL ); NetpKdPrint(( INDENT PARTIAL_FIXED_WIDTH_STRING, Tag )); } // NetpDbgDisplayTagForPartial #endif // DBG