]> git.saurik.com Git - apple/mdnsresponder.git/blobdiff - mDNSShared/DebugServices.c
mDNSResponder-379.27.tar.gz
[apple/mdnsresponder.git] / mDNSShared / DebugServices.c
index 164310ae93b873a564dddcf120de496952ee0daa..98f876a40bd38c0c8ae24dd8edba7eba2db6fc2c 100644 (file)
@@ -5,46 +5,19 @@
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *     http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
 
-    Change History (most recent first):
-    
-$Log: DebugServices.c,v $
-Revision 1.6  2006/08/14 23:24:56  cheshire
-Re-licensed mDNSResponder daemon source code under Apache License, Version 2.0
-
-Revision 1.5  2004/09/17 01:08:57  cheshire
-Renamed mDNSClientAPI.h to mDNSEmbeddedAPI.h
-  The name "mDNSClientAPI.h" is misleading to new developers looking at this code. The interfaces
-  declared in that file are ONLY appropriate to single-address-space embedded applications.
-  For clients on general-purpose computers, the interfaces defined in dns_sd.h should be used.
-
-Revision 1.4  2004/04/15 08:59:08  bradley
-Removed deprecated debug and log levels and replaced them with modern equivalents.
-
-Revision 1.3  2004/04/08 09:29:55  bradley
-Manually do host->network byte order conversion to avoid needing libraries for htons/htonl. Changed
-hex dumps to better separate hex and ASCII. Added support for %.8a syntax in DebugSNPrintF for Fibre
-Channel addresses (00:11:22:33:44:55:66:77). Fixed a few places where HeaderDoc was incorrect.
+    To Do:
 
-Revision 1.2  2004/03/07 05:59:34  bradley
-Sync'd with internal version: Added expect macros, error codes, and CoreServices exclusion.
-
-Revision 1.1  2004/01/30 02:27:30  bradley
-Debugging support for various platforms.
-
-
-       To Do:
-       
-       - Use StackWalk on Windows to optionally print stack frames.
-*/
+    - Use StackWalk on Windows to optionally print stack frames.
+ */
 
 #if 0
 #pragma mark == Includes ==
@@ -54,39 +27,39 @@ Debugging support for various platforms.
 //     Includes
 //===========================================================================================================================
 
-#if( !KERNEL )
-       #include        <ctype.h>
-       #include        <stdio.h>
-       #include        <string.h>
+#if ( !KERNEL )
+    #include    <ctype.h>
+    #include    <stdio.h>
+    #include    <string.h>
 #endif
 
-#include       "CommonServices.h"
+#include    "CommonServices.h"
 
-#include       "DebugServices.h"
+#include    "DebugServices.h"
 
-#if( DEBUG )
+#if ( DEBUG )
 
-#if( TARGET_OS_VXWORKS )
-       #include        "intLib.h"
+#if ( TARGET_OS_VXWORKS )
+    #include    "intLib.h"
 #endif
 
-#if( TARGET_OS_WIN32 )
-       #include        <time.h>
-       
-       #if( !TARGET_OS_WINDOWS_CE )
-               #include        <fcntl.h>
-               #include        <io.h>
-       #endif
+#if ( TARGET_OS_WIN32 )
+    #include    <time.h>
+
+    #if ( !TARGET_OS_WINDOWS_CE )
+        #include    <fcntl.h>
+        #include    <io.h>
+    #endif
 #endif
 
-#if( DEBUG_IDEBUG_ENABLED && TARGET_API_MAC_OSX_KERNEL )
-       #include        <IOKit/IOLib.h>
+#if ( DEBUG_IDEBUG_ENABLED && TARGET_API_MAC_OSX_KERNEL )
+    #include    <IOKit/IOLib.h>
 #endif
 
 // If MDNS_DEBUGMSGS is defined (even if defined 0), it is aware of mDNS and it is probably safe to include mDNSEmbeddedAPI.h.
 
-#if( defined( MDNS_DEBUGMSGS ) )
-       #include        "mDNSEmbeddedAPI.h"
+#if ( defined( MDNS_DEBUGMSGS ) )
+    #include    "mDNSEmbeddedAPI.h"
 #endif
 
 #if 0
@@ -97,7 +70,7 @@ Debugging support for various platforms.
 //     Macros
 //===========================================================================================================================
 
-#define DebugIsPrint( C )              ( ( ( C ) >= 0x20 ) && ( ( C ) <= 0x7E ) )
+#define DebugIsPrint( C )       ( ( ( C ) >= 0x20 ) && ( ( C ) <= 0x7E ) )
 
 #if 0
 #pragma mark == Prototypes ==
@@ -107,86 +80,86 @@ Debugging support for various platforms.
 //     Prototypes
 //===========================================================================================================================
 
-static OSStatus        DebugPrint( DebugLevel inLevel, char *inData, size_t inSize );
+static OSStatus DebugPrint( DebugLevel inLevel, char *inData, size_t inSize );
 
 // fprintf
 
-#if( DEBUG_FPRINTF_ENABLED )
-       static OSStatus DebugFPrintFInit( DebugOutputTypeFlags inFlags, const char *inFilename );
-       static void             DebugFPrintFPrint( char *inData, size_t inSize );
+#if ( DEBUG_FPRINTF_ENABLED )
+static OSStatus DebugFPrintFInit( DebugOutputTypeFlags inFlags, const char *inFilename );
+static void     DebugFPrintFPrint( char *inData, size_t inSize );
 #endif
 
 // iDebug (Mac OS X user and kernel)
 
-#if( DEBUG_IDEBUG_ENABLED )
-       static OSStatus DebugiDebugInit( void );
-       static void             DebugiDebugPrint( char *inData, size_t inSize );
+#if ( DEBUG_IDEBUG_ENABLED )
+static OSStatus DebugiDebugInit( void );
+static void     DebugiDebugPrint( char *inData, size_t inSize );
 #endif
 
 // kprintf (Mac OS X Kernel)
 
-#if( DEBUG_KPRINTF_ENABLED )
-       static void     DebugKPrintFPrint( char *inData, size_t inSize );
+#if ( DEBUG_KPRINTF_ENABLED )
+static void DebugKPrintFPrint( char *inData, size_t inSize );
 #endif
 
 // Mac OS X IOLog (Mac OS X Kernel)
 
-#if( DEBUG_MAC_OS_X_IOLOG_ENABLED )
-       static void     DebugMacOSXIOLogPrint( char *inData, size_t inSize );
+#if ( DEBUG_MAC_OS_X_IOLOG_ENABLED )
+static void DebugMacOSXIOLogPrint( char *inData, size_t inSize );
 #endif
 
 // Mac OS X Log
 
-#if( TARGET_OS_MAC )
-       static OSStatus DebugMacOSXLogInit( void );
-       static void             DebugMacOSXLogPrint( char *inData, size_t inSize );
+#if ( TARGET_OS_MAC )
+static OSStatus DebugMacOSXLogInit( void );
+static void     DebugMacOSXLogPrint( char *inData, size_t inSize );
 #endif
 
 // Windows Debugger
 
-#if( TARGET_OS_WIN32 )
-       static void     DebugWindowsDebuggerPrint( char *inData, size_t inSize );
+#if ( TARGET_OS_WIN32 )
+static void DebugWindowsDebuggerPrint( char *inData, size_t inSize );
 #endif
 
 // Windows Event Log
 
-#if( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
-       static OSStatus DebugWindowsEventLogInit( const char *inName, HMODULE inModule );
-       static void     DebugWindowsEventLogPrint( DebugLevel inLevel, char *inData, size_t inSize );
+#if ( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
+static OSStatus DebugWindowsEventLogInit( const char *inName, HMODULE inModule );
+static void DebugWindowsEventLogPrint( DebugLevel inLevel, char *inData, size_t inSize );
 #endif
 
 // DebugLib support
 
-#if( DEBUG_CORE_SERVICE_ASSERTS_ENABLED )
-       static pascal void      
-               DebugAssertOutputHandler( 
-                       OSType                          inComponentSignature, 
-                       UInt32                          inOptions, 
-                       const char *            inAssertionString, 
-                       const char *            inExceptionString, 
-                       const char *            inErrorString, 
-                       const char *            inFileName, 
-                       long                            inLineNumber, 
-                       void *                          inValue, 
-                       ConstStr255Param        inOutputMsg );
+#if ( DEBUG_CORE_SERVICE_ASSERTS_ENABLED )
+static pascal void
+DebugAssertOutputHandler(
+    OSType inComponentSignature,
+    UInt32 inOptions,
+    const char *        inAssertionString,
+    const char *        inExceptionString,
+    const char *        inErrorString,
+    const char *        inFileName,
+    long inLineNumber,
+    void *              inValue,
+    ConstStr255Param inOutputMsg );
 #endif
 
 // Utilities
 
-static char *  DebugNumVersionToString( uint32_t inVersion, char *inString );
+static char *   DebugNumVersionToString( uint32_t inVersion, char *inString );
 
-#if( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
-       static void     DebugWinEnableConsole( void );
+#if ( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
+static void DebugWinEnableConsole( void );
 #endif
 
-#if( TARGET_OS_WIN32 )
-       static TCHAR *
-               DebugWinCharToTCharString( 
-                       const char *    inCharString, 
-                       size_t                  inCharCount, 
-                       TCHAR *                 outTCharString, 
-                       size_t                  inTCharCountMax, 
-                       size_t *                outTCharCount );
+#if ( TARGET_OS_WIN32 )
+static TCHAR *
+DebugWinCharToTCharString(
+    const char *    inCharString,
+    size_t inCharCount,
+    TCHAR *         outTCharString,
+    size_t inTCharCountMax,
+    size_t *        outTCharCount );
 #endif
 
 #if 0
@@ -197,62 +170,62 @@ static char *     DebugNumVersionToString( uint32_t inVersion, char *inString );
 //     Private Globals
 //===========================================================================================================================
 
-#if( TARGET_OS_VXWORKS )
-       // TCP States for inetstatShow.
-
-       extern char **  pTcpstates;             // defined in tcpLib.c
-
-       const char *            kDebugTCPStates[] =
-       {
-               "(0)  TCPS_CLOSED", 
-               "(1)  TCPS_LISTEN", 
-               "(2)  TCPS_SYN_SENT", 
-               "(3)  TCPS_SYN_RECEIVED", 
-               "(4)  TCPS_ESTABLISHED", 
-               "(5)  TCPS_CLOSE_WAIT", 
-               "(6)  TCPS_FIN_WAIT_1", 
-               "(7)  TCPS_CLOSING", 
-               "(8)  TCPS_LAST_ACK", 
-               "(9)  TCPS_FIN_WAIT_2", 
-               "(10) TCPS_TIME_WAIT",
-       };
+#if ( TARGET_OS_VXWORKS )
+// TCP States for inetstatShow.
+
+extern char **  pTcpstates;         // defined in tcpLib.c
+
+const char *        kDebugTCPStates[] =
+{
+    "(0)  TCPS_CLOSED",
+    "(1)  TCPS_LISTEN",
+    "(2)  TCPS_SYN_SENT",
+    "(3)  TCPS_SYN_RECEIVED",
+    "(4)  TCPS_ESTABLISHED",
+    "(5)  TCPS_CLOSE_WAIT",
+    "(6)  TCPS_FIN_WAIT_1",
+    "(7)  TCPS_CLOSING",
+    "(8)  TCPS_LAST_ACK",
+    "(9)  TCPS_FIN_WAIT_2",
+    "(10) TCPS_TIME_WAIT",
+};
 #endif
 
 // General
 
-static bool                                                                    gDebugInitialized                               = false;
-static DebugOutputType                                         gDebugOutputType                                = kDebugOutputTypeNone;
-static DebugLevel                                                      gDebugPrintLevelMin                             = kDebugLevelInfo;
-static DebugLevel                                                      gDebugPrintLevelMax                             = kDebugLevelMax;
-static DebugLevel                                                      gDebugBreakLevel                                = kDebugLevelAssert;
-#if( DEBUG_CORE_SERVICE_ASSERTS_ENABLED )
-       static DebugAssertOutputHandlerUPP              gDebugAssertOutputHandlerUPP    = NULL;
+static bool gDebugInitialized               = false;
+static DebugOutputType gDebugOutputType                = kDebugOutputTypeNone;
+static DebugLevel gDebugPrintLevelMin             = kDebugLevelInfo;
+static DebugLevel gDebugPrintLevelMax             = kDebugLevelMax;
+static DebugLevel gDebugBreakLevel                = kDebugLevelAssert;
+#if ( DEBUG_CORE_SERVICE_ASSERTS_ENABLED )
+static DebugAssertOutputHandlerUPP gDebugAssertOutputHandlerUPP    = NULL;
 #endif
 
 // Custom
 
-static DebugOutputFunctionPtr                          gDebugCustomOutputFunction              = NULL;
-static void *                                                          gDebugCustomOutputContext               = NULL;
+static DebugOutputFunctionPtr gDebugCustomOutputFunction      = NULL;
+static void *                               gDebugCustomOutputContext       = NULL;
 
 // fprintf
 
-#if( DEBUG_FPRINTF_ENABLED )
-       static FILE *                                                   gDebugFPrintFFile                               = NULL;
+#if ( DEBUG_FPRINTF_ENABLED )
+static FILE *                           gDebugFPrintFFile               = NULL;
 #endif
 
 // MacOSXLog
 
-#if( TARGET_OS_MAC )
-       typedef int     ( *DebugMacOSXLogFunctionPtr )( const char *inFormat, ... );
-       
-       static DebugMacOSXLogFunctionPtr                gDebugMacOSXLogFunction                 = NULL;
+#if ( TARGET_OS_MAC )
+typedef int ( *DebugMacOSXLogFunctionPtr )( const char *inFormat, ... );
+
+static DebugMacOSXLogFunctionPtr gDebugMacOSXLogFunction         = NULL;
 #endif
 
 // WindowsEventLog
 
 
-#if( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
-       static HANDLE                                                   gDebugWindowsEventLogEventSource = NULL;
+#if ( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
+static HANDLE gDebugWindowsEventLogEventSource = NULL;
 #endif
 
 #if 0
@@ -264,179 +237,179 @@ static void *                                                           gDebugCustomOutputContext               = NULL;
 //     DebugInitialize
 //===========================================================================================================================
 
-DEBUG_EXPORT OSStatus  DebugInitialize( DebugOutputType inType, ... )
+DEBUG_EXPORT OSStatus   DebugInitialize( DebugOutputType inType, ... )
 {
-       OSStatus                        err;
-       DebugOutputType         type;
-       va_list                         args;
-       
-       va_start( args, inType );
-
-#if( TARGET_OS_VXWORKS )
-       // Set up the TCP state strings if they are not already set up by VxWorks (normally not set up for some reason).
-       
-       if( !pTcpstates )
-       {
-               pTcpstates = (char **) kDebugTCPStates;
-       }
+    OSStatus err;
+    DebugOutputType type;
+    va_list args;
+
+    va_start( args, inType );
+
+#if ( TARGET_OS_VXWORKS )
+    // Set up the TCP state strings if they are not already set up by VxWorks (normally not set up for some reason).
+
+    if( !pTcpstates )
+    {
+        pTcpstates = (char **) kDebugTCPStates;
+    }
 #endif
-       
-       // Set up DebugLib stuff (if building with Debugging.h).
-       
-#if( DEBUG_CORE_SERVICE_ASSERTS_ENABLED )
-       if( !gDebugAssertOutputHandlerUPP )
-       {
-               gDebugAssertOutputHandlerUPP = NewDebugAssertOutputHandlerUPP( DebugAssertOutputHandler );
-               check( gDebugAssertOutputHandlerUPP );
-               if( gDebugAssertOutputHandlerUPP )
-               {
-                       InstallDebugAssertOutputHandler( gDebugAssertOutputHandlerUPP );
-               }
-       }
+
+    // Set up DebugLib stuff (if building with Debugging.h).
+
+#if ( DEBUG_CORE_SERVICE_ASSERTS_ENABLED )
+    if( !gDebugAssertOutputHandlerUPP )
+    {
+        gDebugAssertOutputHandlerUPP = NewDebugAssertOutputHandlerUPP( DebugAssertOutputHandler );
+        check( gDebugAssertOutputHandlerUPP );
+        if( gDebugAssertOutputHandlerUPP )
+        {
+            InstallDebugAssertOutputHandler( gDebugAssertOutputHandlerUPP );
+        }
+    }
 #endif
-       
-       // Pre-process meta-output kind to pick an appropriate output kind for the platform.
-       
-       type = inType;
-       if( type == kDebugOutputTypeMetaConsole )
-       {
-               #if( TARGET_OS_MAC )
-                       type = kDebugOutputTypeMacOSXLog;
-               #elif( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
-                       #if( DEBUG_FPRINTF_ENABLED )
-                               type = kDebugOutputTypeFPrintF;
-                       #else
-                               type = kDebugOutputTypeWindowsDebugger;
-                       #endif
-               #elif( TARGET_API_MAC_OSX_KERNEL )
-                       #if( DEBUG_MAC_OS_X_IOLOG_ENABLED )
-                               type = kDebugOutputTypeMacOSXIOLog;
-                       #elif( DEBUG_IDEBUG_ENABLED )
-                               type = kDebugOutputTypeiDebug;
-                       #elif( DEBUG_KPRINTF_ENABLED )
-                               type = kDebugOutputTypeKPrintF;
-                       #endif
-               #elif( TARGET_OS_VXWORKS )
-                       #if( DEBUG_FPRINTF_ENABLED )
-                               type = kDebugOutputTypeFPrintF;
-                       #else
-                               #error target is VxWorks, but fprintf output is disabled
-                       #endif
-               #else
-                       #if( DEBUG_FPRINTF_ENABLED )
-                               type = kDebugOutputTypeFPrintF;
-                       #endif
-               #endif
-       }
-       
-       // Process output kind.
-       
-       gDebugOutputType = type;
-       switch( type )
-       {
-               case kDebugOutputTypeNone:
-                       err = kNoErr;
-                       break;
-
-               case kDebugOutputTypeCustom:
-                       gDebugCustomOutputFunction = va_arg( args, DebugOutputFunctionPtr );
-                       gDebugCustomOutputContext  = va_arg( args, void * );
-                       err = kNoErr;
-                       break;
-
-#if( DEBUG_FPRINTF_ENABLED )
-               case kDebugOutputTypeFPrintF:
-                       if( inType == kDebugOutputTypeMetaConsole )
-                       {
-                               err = DebugFPrintFInit( kDebugOutputTypeFlagsStdErr, NULL );
-                       }
-                       else
-                       {
-                               DebugOutputTypeFlags            flags;
-                               const char *                            filename;
-                               
-                               flags = (DebugOutputTypeFlags) va_arg( args, unsigned int );
-                               if( ( flags & kDebugOutputTypeFlagsTypeMask ) == kDebugOutputTypeFlagsFile )
-                               {
-                                       filename = va_arg( args, const char * );
-                               }
-                               else
-                               {
-                                       filename = NULL;
-                               }
-                               err = DebugFPrintFInit( flags, filename );
-                       }
-                       break;
+
+    // Pre-process meta-output kind to pick an appropriate output kind for the platform.
+
+    type = inType;
+    if( type == kDebugOutputTypeMetaConsole )
+    {
+        #if ( TARGET_OS_MAC )
+        type = kDebugOutputTypeMacOSXLog;
+        #elif ( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
+            #if ( DEBUG_FPRINTF_ENABLED )
+        type = kDebugOutputTypeFPrintF;
+            #else
+        type = kDebugOutputTypeWindowsDebugger;
+            #endif
+        #elif ( TARGET_API_MAC_OSX_KERNEL )
+            #if ( DEBUG_MAC_OS_X_IOLOG_ENABLED )
+        type = kDebugOutputTypeMacOSXIOLog;
+            #elif ( DEBUG_IDEBUG_ENABLED )
+        type = kDebugOutputTypeiDebug;
+            #elif ( DEBUG_KPRINTF_ENABLED )
+        type = kDebugOutputTypeKPrintF;
+            #endif
+        #elif ( TARGET_OS_VXWORKS )
+            #if ( DEBUG_FPRINTF_ENABLED )
+        type = kDebugOutputTypeFPrintF;
+            #else
+                #error target is VxWorks, but fprintf output is disabled
+            #endif
+        #else
+            #if ( DEBUG_FPRINTF_ENABLED )
+        type = kDebugOutputTypeFPrintF;
+            #endif
+        #endif
+    }
+
+    // Process output kind.
+
+    gDebugOutputType = type;
+    switch( type )
+    {
+    case kDebugOutputTypeNone:
+        err = kNoErr;
+        break;
+
+    case kDebugOutputTypeCustom:
+        gDebugCustomOutputFunction = va_arg( args, DebugOutputFunctionPtr );
+        gDebugCustomOutputContext  = va_arg( args, void * );
+        err = kNoErr;
+        break;
+
+#if ( DEBUG_FPRINTF_ENABLED )
+    case kDebugOutputTypeFPrintF:
+        if( inType == kDebugOutputTypeMetaConsole )
+        {
+            err = DebugFPrintFInit( kDebugOutputTypeFlagsStdErr, NULL );
+        }
+        else
+        {
+            DebugOutputTypeFlags flags;
+            const char *                filename;
+
+            flags = (DebugOutputTypeFlags) va_arg( args, unsigned int );
+            if( ( flags & kDebugOutputTypeFlagsTypeMask ) == kDebugOutputTypeFlagsFile )
+            {
+                filename = va_arg( args, const char * );
+            }
+            else
+            {
+                filename = NULL;
+            }
+            err = DebugFPrintFInit( flags, filename );
+        }
+        break;
 #endif
 
-#if( DEBUG_IDEBUG_ENABLED )
-               case kDebugOutputTypeiDebug:
-                       err = DebugiDebugInit();
-                       break;
+#if ( DEBUG_IDEBUG_ENABLED )
+    case kDebugOutputTypeiDebug:
+        err = DebugiDebugInit();
+        break;
 #endif
 
-#if( DEBUG_KPRINTF_ENABLED )
-               case kDebugOutputTypeKPrintF:
-                       err = kNoErr;
-                       break;
+#if ( DEBUG_KPRINTF_ENABLED )
+    case kDebugOutputTypeKPrintF:
+        err = kNoErr;
+        break;
 #endif
 
-#if( DEBUG_MAC_OS_X_IOLOG_ENABLED )
-               case kDebugOutputTypeMacOSXIOLog:
-                       err = kNoErr;
-                       break;
+#if ( DEBUG_MAC_OS_X_IOLOG_ENABLED )
+    case kDebugOutputTypeMacOSXIOLog:
+        err = kNoErr;
+        break;
 #endif
 
-#if( TARGET_OS_MAC )
-               case kDebugOutputTypeMacOSXLog:
-                       err = DebugMacOSXLogInit();
-                       break;
+#if ( TARGET_OS_MAC )
+    case kDebugOutputTypeMacOSXLog:
+        err = DebugMacOSXLogInit();
+        break;
 #endif
 
-#if( TARGET_OS_WIN32 )
-               case kDebugOutputTypeWindowsDebugger:
-                       err = kNoErr;
-                       break;
+#if ( TARGET_OS_WIN32 )
+    case kDebugOutputTypeWindowsDebugger:
+        err = kNoErr;
+        break;
 #endif
 
-#if( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
-               case kDebugOutputTypeWindowsEventLog:
-               {
-                       const char *            name;
-                       HMODULE                         module;
-                       
-                       name   = va_arg( args, const char * );
-                       module = va_arg( args, HMODULE );
-                       err = DebugWindowsEventLogInit( name, module );
-               }
-               break;
+#if ( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
+    case kDebugOutputTypeWindowsEventLog:
+    {
+        const char *        name;
+        HMODULE module;
+
+        name   = va_arg( args, const char * );
+        module = va_arg( args, HMODULE );
+        err = DebugWindowsEventLogInit( name, module );
+    }
+    break;
 #endif
 
-               default:
-                       err = kParamErr;
-                       goto exit;
-       }
-       gDebugInitialized = true;
-       
+    default:
+        err = kParamErr;
+        goto exit;
+    }
+    gDebugInitialized = true;
+
 exit:
-       va_end( args );
-       return( err );
+    va_end( args );
+    return( err );
 }
 
 //===========================================================================================================================
 //     DebugFinalize
 //===========================================================================================================================
 
-DEBUG_EXPORT void              DebugFinalize( void )
+DEBUG_EXPORT void       DebugFinalize( void )
 {
-#if( DEBUG_CORE_SERVICE_ASSERTS_ENABLED )
-       check( gDebugAssertOutputHandlerUPP );
-       if( gDebugAssertOutputHandlerUPP )
-       {
-               InstallDebugAssertOutputHandler( NULL );
-               DisposeDebugAssertOutputHandlerUPP( gDebugAssertOutputHandlerUPP );
-               gDebugAssertOutputHandlerUPP = NULL;
-       }
+#if ( DEBUG_CORE_SERVICE_ASSERTS_ENABLED )
+    check( gDebugAssertOutputHandlerUPP );
+    if( gDebugAssertOutputHandlerUPP )
+    {
+        InstallDebugAssertOutputHandler( NULL );
+        DisposeDebugAssertOutputHandlerUPP( gDebugAssertOutputHandlerUPP );
+        gDebugAssertOutputHandlerUPP = NULL;
+    }
 #endif
 }
 
@@ -444,78 +417,78 @@ DEBUG_EXPORT void         DebugFinalize( void )
 //     DebugGetProperty
 //===========================================================================================================================
 
-DEBUG_EXPORT OSStatus  DebugGetProperty( DebugPropertyTag inTag, ... )
+DEBUG_EXPORT OSStatus   DebugGetProperty( DebugPropertyTag inTag, ... )
 {
-       OSStatus                        err;
-       va_list                         args;
-       DebugLevel *            level;
-       
-       va_start( args, inTag );
-       switch( inTag )
-       {
-               case kDebugPropertyTagPrintLevelMin:
-                       level  = va_arg( args, DebugLevel * );
-                       *level = gDebugPrintLevelMin;
-                       err = kNoErr;
-                       break;
-               
-               case kDebugPropertyTagPrintLevelMax:
-                       level  = va_arg( args, DebugLevel * );
-                       *level = gDebugPrintLevelMax;
-                       err = kNoErr;
-                       break;
-               
-               case kDebugPropertyTagBreakLevel:
-                       level  = va_arg( args, DebugLevel * );
-                       *level = gDebugBreakLevel;
-                       err = kNoErr;
-                       break;          
-               
-               default:
-                       err = kUnsupportedErr;
-                       break;
-       }
-       va_end( args );
-       return( err );
+    OSStatus err;
+    va_list args;
+    DebugLevel *        level;
+
+    va_start( args, inTag );
+    switch( inTag )
+    {
+    case kDebugPropertyTagPrintLevelMin:
+        level  = va_arg( args, DebugLevel * );
+        *level = gDebugPrintLevelMin;
+        err = kNoErr;
+        break;
+
+    case kDebugPropertyTagPrintLevelMax:
+        level  = va_arg( args, DebugLevel * );
+        *level = gDebugPrintLevelMax;
+        err = kNoErr;
+        break;
+
+    case kDebugPropertyTagBreakLevel:
+        level  = va_arg( args, DebugLevel * );
+        *level = gDebugBreakLevel;
+        err = kNoErr;
+        break;
+
+    default:
+        err = kUnsupportedErr;
+        break;
+    }
+    va_end( args );
+    return( err );
 }
 
 //===========================================================================================================================
 //     DebugSetProperty
 //===========================================================================================================================
 
-DEBUG_EXPORT OSStatus  DebugSetProperty( DebugPropertyTag inTag, ... )
+DEBUG_EXPORT OSStatus   DebugSetProperty( DebugPropertyTag inTag, ... )
 {
-       OSStatus                err;
-       va_list                 args;
-       DebugLevel              level;
-       
-       va_start( args, inTag );
-       switch( inTag )
-       {
-               case kDebugPropertyTagPrintLevelMin:
-                       level  = va_arg( args, DebugLevel );
-                       gDebugPrintLevelMin = level;
-                       err = kNoErr;
-                       break;
-               
-               case kDebugPropertyTagPrintLevelMax:
-                       level  = va_arg( args, DebugLevel );
-                       gDebugPrintLevelMax = level;
-                       err = kNoErr;
-                       break;
-               
-               case kDebugPropertyTagBreakLevel:
-                       level  = va_arg( args, DebugLevel );
-                       gDebugBreakLevel = level;
-                       err = kNoErr;
-                       break;          
-               
-               default:
-                       err = kUnsupportedErr;
-                       break;
-       }
-       va_end( args );
-       return( err );
+    OSStatus err;
+    va_list args;
+    DebugLevel level;
+
+    va_start( args, inTag );
+    switch( inTag )
+    {
+    case kDebugPropertyTagPrintLevelMin:
+        level  = va_arg( args, DebugLevel );
+        gDebugPrintLevelMin = level;
+        err = kNoErr;
+        break;
+
+    case kDebugPropertyTagPrintLevelMax:
+        level  = va_arg( args, DebugLevel );
+        gDebugPrintLevelMax = level;
+        err = kNoErr;
+        break;
+
+    case kDebugPropertyTagBreakLevel:
+        level  = va_arg( args, DebugLevel );
+        gDebugBreakLevel = level;
+        err = kNoErr;
+        break;
+
+    default:
+        err = kUnsupportedErr;
+        break;
+    }
+    va_end( args );
+    return( err );
 }
 
 #if 0
@@ -527,644 +500,644 @@ DEBUG_EXPORT OSStatus   DebugSetProperty( DebugPropertyTag inTag, ... )
 //     DebugPrintF
 //===========================================================================================================================
 
-DEBUG_EXPORT size_t    DebugPrintF( DebugLevel inLevel, const char *inFormat, ... )
-{      
-       va_list         args;
-       size_t          n;
-       
-       // Skip if the level is not in the enabled range..
-       
-       if( ( inLevel < gDebugPrintLevelMin ) || ( inLevel > gDebugPrintLevelMax ) )
-       {
-               n = 0;
-               goto exit;
-       }
-       
-       va_start( args, inFormat );
-       n = DebugPrintFVAList( inLevel, inFormat, args );
-       va_end( args );
+DEBUG_EXPORT size_t DebugPrintF( DebugLevel inLevel, const char *inFormat, ... )
+{
+    va_list args;
+    size_t n;
+
+    // Skip if the level is not in the enabled range..
+
+    if( ( inLevel < gDebugPrintLevelMin ) || ( inLevel > gDebugPrintLevelMax ) )
+    {
+        n = 0;
+        goto exit;
+    }
+
+    va_start( args, inFormat );
+    n = DebugPrintFVAList( inLevel, inFormat, args );
+    va_end( args );
 
 exit:
-       return( n );
+    return( n );
 }
 
 //===========================================================================================================================
 //     DebugPrintFVAList
 //===========================================================================================================================
 
-DEBUG_EXPORT size_t    DebugPrintFVAList( DebugLevel inLevel, const char *inFormat, va_list inArgs )
+DEBUG_EXPORT size_t DebugPrintFVAList( DebugLevel inLevel, const char *inFormat, va_list inArgs )
 {
-       size_t          n;
-       char            buffer[ 512 ];
-       
-       // Skip if the level is not in the enabled range..
-       
-       if( ( inLevel < gDebugPrintLevelMin ) || ( inLevel > gDebugPrintLevelMax ) )
-       {
-               n = 0;
-               goto exit;
-       }
-       
-       n = DebugSNPrintFVAList( buffer, sizeof( buffer ), inFormat, inArgs );
-       DebugPrint( inLevel, buffer, (size_t) n );
+    size_t n;
+    char buffer[ 512 ];
+
+    // Skip if the level is not in the enabled range..
+
+    if( ( inLevel < gDebugPrintLevelMin ) || ( inLevel > gDebugPrintLevelMax ) )
+    {
+        n = 0;
+        goto exit;
+    }
+
+    n = DebugSNPrintFVAList( buffer, sizeof( buffer ), inFormat, inArgs );
+    DebugPrint( inLevel, buffer, (size_t) n );
 
 exit:
-       return( n );
+    return( n );
 }
 
 //===========================================================================================================================
 //     DebugPrint
 //===========================================================================================================================
 
-static OSStatus        DebugPrint( DebugLevel inLevel, char *inData, size_t inSize )
+static OSStatus DebugPrint( DebugLevel inLevel, char *inData, size_t inSize )
 {
-       OSStatus                err;
-       
-       // Skip if the level is not in the enabled range..
-       
-       if( ( inLevel < gDebugPrintLevelMin ) || ( inLevel > gDebugPrintLevelMax ) )
-       {
-               err = kRangeErr;
-               goto exit;
-       }
-       
-       // Printing is not safe at interrupt time so check for this and warn with an interrupt safe mechanism (if available).
-       
-       if( DebugTaskLevel() & kDebugInterruptLevelMask )
-       {
-               #if( TARGET_OS_VXWORKS )
-                       logMsg( "\ncannot print at interrupt time\n\n", 1, 2, 3, 4, 5, 6 );
-               #endif
-               
-               err = kExecutionStateErr;
-               goto exit;
-       }
-       
-       // Initialize the debugging library if it hasn't already been initialized (allows for zero-config usage).
-       
-       if( !gDebugInitialized )
-       {
-               debug_initialize( kDebugOutputTypeMetaConsole );
-       }
-       
-       // Print based on the current output type.
-       
-       switch( gDebugOutputType )
-       {
-               case kDebugOutputTypeNone:
-                       break;
-               
-               case kDebugOutputTypeCustom:
-                       if( gDebugCustomOutputFunction )
-                       {
-                               gDebugCustomOutputFunction( inData, inSize, gDebugCustomOutputContext );
-                       }
-                       break;
-
-#if( DEBUG_FPRINTF_ENABLED )
-               case kDebugOutputTypeFPrintF:
-                       DebugFPrintFPrint( inData, inSize );
-                       break;
+    OSStatus err;
+
+    // Skip if the level is not in the enabled range..
+
+    if( ( inLevel < gDebugPrintLevelMin ) || ( inLevel > gDebugPrintLevelMax ) )
+    {
+        err = kRangeErr;
+        goto exit;
+    }
+
+    // Printing is not safe at interrupt time so check for this and warn with an interrupt safe mechanism (if available).
+
+    if( DebugTaskLevel() & kDebugInterruptLevelMask )
+    {
+        #if ( TARGET_OS_VXWORKS )
+        logMsg( "\ncannot print at interrupt time\n\n", 1, 2, 3, 4, 5, 6 );
+        #endif
+
+        err = kExecutionStateErr;
+        goto exit;
+    }
+
+    // Initialize the debugging library if it hasn't already been initialized (allows for zero-config usage).
+
+    if( !gDebugInitialized )
+    {
+        debug_initialize( kDebugOutputTypeMetaConsole );
+    }
+
+    // Print based on the current output type.
+
+    switch( gDebugOutputType )
+    {
+    case kDebugOutputTypeNone:
+        break;
+
+    case kDebugOutputTypeCustom:
+        if( gDebugCustomOutputFunction )
+        {
+            gDebugCustomOutputFunction( inData, inSize, gDebugCustomOutputContext );
+        }
+        break;
+
+#if ( DEBUG_FPRINTF_ENABLED )
+    case kDebugOutputTypeFPrintF:
+        DebugFPrintFPrint( inData, inSize );
+        break;
 #endif
 
-#if( DEBUG_IDEBUG_ENABLED )
-               case kDebugOutputTypeiDebug:
-                       DebugiDebugPrint( inData, inSize );
-                       break;
+#if ( DEBUG_IDEBUG_ENABLED )
+    case kDebugOutputTypeiDebug:
+        DebugiDebugPrint( inData, inSize );
+        break;
 #endif
 
-#if( DEBUG_KPRINTF_ENABLED )
-               case kDebugOutputTypeKPrintF:
-                       DebugKPrintFPrint( inData, inSize );
-                       break;
+#if ( DEBUG_KPRINTF_ENABLED )
+    case kDebugOutputTypeKPrintF:
+        DebugKPrintFPrint( inData, inSize );
+        break;
 #endif
 
-#if( DEBUG_MAC_OS_X_IOLOG_ENABLED )
-               case kDebugOutputTypeMacOSXIOLog:
-                       DebugMacOSXIOLogPrint( inData, inSize );
-                       break;
+#if ( DEBUG_MAC_OS_X_IOLOG_ENABLED )
+    case kDebugOutputTypeMacOSXIOLog:
+        DebugMacOSXIOLogPrint( inData, inSize );
+        break;
 #endif
 
-#if( TARGET_OS_MAC )
-               case kDebugOutputTypeMacOSXLog:
-                       DebugMacOSXLogPrint( inData, inSize );
-                       break;
+#if ( TARGET_OS_MAC )
+    case kDebugOutputTypeMacOSXLog:
+        DebugMacOSXLogPrint( inData, inSize );
+        break;
 #endif
 
-#if( TARGET_OS_WIN32 )
-               case kDebugOutputTypeWindowsDebugger:
-                       DebugWindowsDebuggerPrint( inData, inSize );
-                       break;
+#if ( TARGET_OS_WIN32 )
+    case kDebugOutputTypeWindowsDebugger:
+        DebugWindowsDebuggerPrint( inData, inSize );
+        break;
 #endif
 
-#if( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
-               case kDebugOutputTypeWindowsEventLog:
-                       DebugWindowsEventLogPrint( inLevel, inData, inSize );
-                       break;
+#if ( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
+    case kDebugOutputTypeWindowsEventLog:
+        DebugWindowsEventLogPrint( inLevel, inData, inSize );
+        break;
 #endif
 
-               default:
-                       break;
-       }
-       err = kNoErr;
-       
+    default:
+        break;
+    }
+    err = kNoErr;
+
 exit:
-       return( err );
+    return( err );
 }
 
 //===========================================================================================================================
 //     DebugPrintAssert
 //
 //     Warning: This routine relies on several of the strings being string constants that will exist forever because the
-//           underlying logMsg API that does the printing is asynchronous so it cannot use temporary/stack-based 
-//           pointer variables (e.g. local strings). The debug macros that invoke this function only use constant 
+//           underlying logMsg API that does the printing is asynchronous so it cannot use temporary/stack-based
+//           pointer variables (e.g. local strings). The debug macros that invoke this function only use constant
 //           constant strings, but if this function is invoked directly from other places, it must use constant strings.
 //===========================================================================================================================
 
 DEBUG_EXPORT void
-       DebugPrintAssert( 
-               int_least32_t   inErrorCode, 
-               const char *    inAssertString, 
-               const char *    inMessage, 
-               const char *    inFilename, 
-               int_least32_t   inLineNumber, 
-               const char *    inFunction )
+DebugPrintAssert(
+    int_least32_t inErrorCode,
+    const char *    inAssertString,
+    const char *    inMessage,
+    const char *    inFilename,
+    int_least32_t inLineNumber,
+    const char *    inFunction )
 {
-       // Skip if the level is not in the enabled range..
-       
-       if( ( kDebugLevelAssert < gDebugPrintLevelMin ) || ( kDebugLevelAssert > gDebugPrintLevelMax ) )
-       {
-               return;
-       }
-       
-       if( inErrorCode != 0 )
-       {
-               DebugPrintF( 
-                       kDebugLevelAssert, 
-                       "\n"
-                       "[ASSERT] error:  %ld (%m)\n"
-                       "[ASSERT] where:  \"%s\", line %ld, \"%s\"\n"
-                       "\n", 
-                       inErrorCode, inErrorCode, 
-                       inFilename ? inFilename : "", 
-                       inLineNumber, 
-                       inFunction ? inFunction : "" );
-       }
-       else
-       {
-               DebugPrintF( 
-                       kDebugLevelAssert, 
-                       "\n"
-                       "[ASSERT] assert: \"%s\" %s\n"
-                       "[ASSERT] where:  \"%s\", line %ld, \"%s\"\n"
-                       "\n", 
-                       inAssertString ? inAssertString : "", 
-                       inMessage ? inMessage : "", 
-                       inFilename ? inFilename : "", 
-                       inLineNumber, 
-                       inFunction ? inFunction : "" );
-       }
-       
-       // Break into the debugger if enabled.
-       
-       #if( TARGET_OS_WIN32 )
-               if( gDebugBreakLevel <= kDebugLevelAssert )
-               {
-                       if( IsDebuggerPresent() )
-                       {
-                               DebugBreak();
-                       }
-               }
-       #endif
+    // Skip if the level is not in the enabled range..
+
+    if( ( kDebugLevelAssert < gDebugPrintLevelMin ) || ( kDebugLevelAssert > gDebugPrintLevelMax ) )
+    {
+        return;
+    }
+
+    if( inErrorCode != 0 )
+    {
+        DebugPrintF(
+            kDebugLevelAssert,
+            "\n"
+            "[ASSERT] error:  %ld (%m)\n"
+            "[ASSERT] where:  \"%s\", line %ld, \"%s\"\n"
+            "\n",
+            inErrorCode, inErrorCode,
+            inFilename ? inFilename : "",
+            inLineNumber,
+            inFunction ? inFunction : "" );
+    }
+    else
+    {
+        DebugPrintF(
+            kDebugLevelAssert,
+            "\n"
+            "[ASSERT] assert: \"%s\" %s\n"
+            "[ASSERT] where:  \"%s\", line %ld, \"%s\"\n"
+            "\n",
+            inAssertString ? inAssertString : "",
+            inMessage ? inMessage : "",
+            inFilename ? inFilename : "",
+            inLineNumber,
+            inFunction ? inFunction : "" );
+    }
+
+    // Break into the debugger if enabled.
+
+    #if ( TARGET_OS_WIN32 )
+    if( gDebugBreakLevel <= kDebugLevelAssert )
+    {
+        if( IsDebuggerPresent() )
+        {
+            DebugBreak();
+        }
+    }
+    #endif
 }
 
 #if 0
 #pragma mark -
 #endif
 
-#if( DEBUG_FPRINTF_ENABLED )
+#if ( DEBUG_FPRINTF_ENABLED )
 //===========================================================================================================================
 //     DebugFPrintFInit
 //===========================================================================================================================
 
-static OSStatus        DebugFPrintFInit( DebugOutputTypeFlags inFlags, const char *inFilename )
+static OSStatus DebugFPrintFInit( DebugOutputTypeFlags inFlags, const char *inFilename )
 {
-       OSStatus                                        err;
-       DebugOutputTypeFlags            typeFlags;
-       
-       typeFlags = inFlags & kDebugOutputTypeFlagsTypeMask;
-       if( typeFlags == kDebugOutputTypeFlagsStdOut )
-       {
-               #if( TARGET_OS_WIN32 )
-                       DebugWinEnableConsole();
-               #endif
-
-               gDebugFPrintFFile = stdout;
-       }
-       else if( typeFlags == kDebugOutputTypeFlagsStdErr )
-       {
-               #if( TARGET_OS_WIN32 )
-                       DebugWinEnableConsole();
-               #endif
-               
-               gDebugFPrintFFile = stdout;
-       }
-       else if( typeFlags == kDebugOutputTypeFlagsFile )
-       {
-               require_action_quiet( inFilename && ( *inFilename != '\0' ), exit, err = kOpenErr );
-               
-               gDebugFPrintFFile = fopen( inFilename, "a" );
-               require_action_quiet( gDebugFPrintFFile, exit, err = kOpenErr );
-       }
-       else
-       {
-               err = kParamErr;
-               goto exit;
-       }
-       err = kNoErr;
-       
+    OSStatus err;
+    DebugOutputTypeFlags typeFlags;
+
+    typeFlags = inFlags & kDebugOutputTypeFlagsTypeMask;
+    if( typeFlags == kDebugOutputTypeFlagsStdOut )
+    {
+        #if ( TARGET_OS_WIN32 )
+        DebugWinEnableConsole();
+        #endif
+
+        gDebugFPrintFFile = stdout;
+    }
+    else if( typeFlags == kDebugOutputTypeFlagsStdErr )
+    {
+        #if ( TARGET_OS_WIN32 )
+        DebugWinEnableConsole();
+        #endif
+
+        gDebugFPrintFFile = stdout;
+    }
+    else if( typeFlags == kDebugOutputTypeFlagsFile )
+    {
+        require_action_quiet( inFilename && ( *inFilename != '\0' ), exit, err = kOpenErr );
+
+        gDebugFPrintFFile = fopen( inFilename, "a" );
+        require_action_quiet( gDebugFPrintFFile, exit, err = kOpenErr );
+    }
+    else
+    {
+        err = kParamErr;
+        goto exit;
+    }
+    err = kNoErr;
+
 exit:
-       return( err );
+    return( err );
 }
 
 //===========================================================================================================================
 //     DebugFPrintFPrint
 //===========================================================================================================================
 
-static void    DebugFPrintFPrint( char *inData, size_t inSize )
+static void DebugFPrintFPrint( char *inData, size_t inSize )
 {
-       char *          p;
-       char *          q;
-       
-       // Convert \r to \n. fprintf will interpret \n and convert to whatever is appropriate for the platform.
-       
-       p = inData;
-       q = p + inSize;
-       while( p < q )
-       {
-               if( *p == '\r' )
-               {
-                       *p = '\n';
-               }
-               ++p;
-       }
-       
-       // Write the data and flush.
-       
-       if( gDebugFPrintFFile )
-       {
-               fprintf( gDebugFPrintFFile, "%.*s", (int) inSize, inData );
-               fflush( gDebugFPrintFFile );
-       }
+    char *      p;
+    char *      q;
+
+    // Convert \r to \n. fprintf will interpret \n and convert to whatever is appropriate for the platform.
+
+    p = inData;
+    q = p + inSize;
+    while( p < q )
+    {
+        if( *p == '\r' )
+        {
+            *p = '\n';
+        }
+        ++p;
+    }
+
+    // Write the data and flush.
+
+    if( gDebugFPrintFFile )
+    {
+        fprintf( gDebugFPrintFFile, "%.*s", (int) inSize, inData );
+        fflush( gDebugFPrintFFile );
+    }
 }
-#endif // DEBUG_FPRINTF_ENABLED
+#endif  // DEBUG_FPRINTF_ENABLED
 
-#if( DEBUG_IDEBUG_ENABLED )
+#if ( DEBUG_IDEBUG_ENABLED )
 //===========================================================================================================================
 //     DebugiDebugInit
 //===========================================================================================================================
 
-static OSStatus        DebugiDebugInit( void )
+static OSStatus DebugiDebugInit( void )
 {
-       OSStatus                err;
-       
-       #if( TARGET_API_MAC_OSX_KERNEL )
-               
-               extern uint32_t *               _giDebugReserved1;
-               
-               // Emulate the iDebugSetOutputType macro in iDebugServices.h.
-               // Note: This is not thread safe, but neither is iDebugServices.h nor iDebugKext.
-               
-               if( !_giDebugReserved1 )
-               {
-                       _giDebugReserved1 = (uint32_t *) IOMalloc( sizeof( uint32_t ) );
-                       require_action_quiet( _giDebugReserved1, exit, err = kNoMemoryErr );
-               }
-               *_giDebugReserved1 = 0x00010000U;
-               err = kNoErr;
+    OSStatus err;
+
+    #if ( TARGET_API_MAC_OSX_KERNEL )
+
+    extern uint32_t *       _giDebugReserved1;
+
+    // Emulate the iDebugSetOutputType macro in iDebugServices.h.
+    // Note: This is not thread safe, but neither is iDebugServices.h nor iDebugKext.
+
+    if( !_giDebugReserved1 )
+    {
+        _giDebugReserved1 = (uint32_t *) IOMalloc( sizeof( uint32_t ) );
+        require_action_quiet( _giDebugReserved1, exit, err = kNoMemoryErr );
+    }
+    *_giDebugReserved1 = 0x00010000U;
+    err = kNoErr;
 exit:
-       #else
-               
-               __private_extern__ void iDebugSetOutputTypeInternal( uint32_t inType );
-               
-               iDebugSetOutputTypeInternal( 0x00010000U );
-               err = kNoErr;
-               
-       #endif
-       
-       return( err );
+    #else
+
+    __private_extern__ void iDebugSetOutputTypeInternal( uint32_t inType );
+
+    iDebugSetOutputTypeInternal( 0x00010000U );
+    err = kNoErr;
+
+    #endif
+
+    return( err );
 }
 
 //===========================================================================================================================
 //     DebugiDebugPrint
 //===========================================================================================================================
 
-static void    DebugiDebugPrint( char *inData, size_t inSize )
+static void DebugiDebugPrint( char *inData, size_t inSize )
 {
-       #if( TARGET_API_MAC_OSX_KERNEL )
-               
-               // Locally declared here so we do not need to include iDebugKext.h.
-               // Note: IOKit uses a global namespace for all code and only a partial link occurs at build time. When the 
-               // KEXT is loaded, the runtime linker will link in this extern'd symbol (assuming iDebug is present).
-               // _giDebugLogInternal is actually part of IOKit proper so this should link even if iDebug is not present.
-               
-               typedef void ( *iDebugLogFunctionPtr )( uint32_t inLevel, uint32_t inTag, const char *inFormat, ... );
-               
-               extern iDebugLogFunctionPtr             _giDebugLogInternal;
-               
-               if( _giDebugLogInternal )
-               {
-                       _giDebugLogInternal( 0, 0, "%.*s", (int) inSize, inData );
-               }
-               
-       #else
-       
-               __private_extern__ void iDebugLogInternal( uint32_t inLevel, uint32_t inTag, const char *inFormat, ... );
-               
-               iDebugLogInternal( 0, 0, "%.*s", (int) inSize, inData );
-       
-       #endif
+    #if ( TARGET_API_MAC_OSX_KERNEL )
+
+    // Locally declared here so we do not need to include iDebugKext.h.
+    // Note: IOKit uses a global namespace for all code and only a partial link occurs at build time. When the
+    // KEXT is loaded, the runtime linker will link in this extern'd symbol (assuming iDebug is present).
+    // _giDebugLogInternal is actually part of IOKit proper so this should link even if iDebug is not present.
+
+    typedef void ( *iDebugLogFunctionPtr )( uint32_t inLevel, uint32_t inTag, const char *inFormat, ... );
+
+    extern iDebugLogFunctionPtr _giDebugLogInternal;
+
+    if( _giDebugLogInternal )
+    {
+        _giDebugLogInternal( 0, 0, "%.*s", (int) inSize, inData );
+    }
+
+    #else
+
+    __private_extern__ void iDebugLogInternal( uint32_t inLevel, uint32_t inTag, const char *inFormat, ... );
+
+    iDebugLogInternal( 0, 0, "%.*s", (int) inSize, inData );
+
+    #endif
 }
 #endif
 
-#if( DEBUG_KPRINTF_ENABLED )
+#if ( DEBUG_KPRINTF_ENABLED )
 //===========================================================================================================================
 //     DebugKPrintFPrint
 //===========================================================================================================================
 
-static void    DebugKPrintFPrint( char *inData, size_t inSize )
+static void DebugKPrintFPrint( char *inData, size_t inSize )
 {
-       extern void     kprintf( const char *inFormat, ... );
-       
-       kprintf( "%.*s", (int) inSize, inData );
+    extern void kprintf( const char *inFormat, ... );
+
+    kprintf( "%.*s", (int) inSize, inData );
 }
 #endif
 
-#if( DEBUG_MAC_OS_X_IOLOG_ENABLED )
+#if ( DEBUG_MAC_OS_X_IOLOG_ENABLED )
 //===========================================================================================================================
 //     DebugMacOSXIOLogPrint
 //===========================================================================================================================
 
-static void    DebugMacOSXIOLogPrint( char *inData, size_t inSize )
+static void DebugMacOSXIOLogPrint( char *inData, size_t inSize )
 {
-       extern void     IOLog( const char *inFormat, ... );
-       
-       IOLog( "%.*s", (int) inSize, inData );
+    extern void IOLog( const char *inFormat, ... );
+
+    IOLog( "%.*s", (int) inSize, inData );
 }
 #endif
 
-#if( TARGET_OS_MAC )
+#if ( TARGET_OS_MAC )
 //===========================================================================================================================
 //     DebugMacOSXLogInit
 //===========================================================================================================================
 
-static OSStatus        DebugMacOSXLogInit( void )
+static OSStatus DebugMacOSXLogInit( void )
 {
-       OSStatus                err;
-       CFStringRef             path;
-       CFURLRef                url;
-       CFBundleRef             bundle;
-       CFStringRef             functionName;
-       void *                  functionPtr;
-       
-       bundle = NULL;
-       
-       // Create a bundle reference for System.framework.
-       
-       path = CFSTR( "/System/Library/Frameworks/System.framework" );
-       url = CFURLCreateWithFileSystemPath( NULL, path, kCFURLPOSIXPathStyle, true );
-       require_action_quiet( url, exit, err = memFullErr );
-       
-       bundle = CFBundleCreate( NULL, url );
-       CFRelease( url );
-       require_action_quiet( bundle, exit, err = memFullErr );
-       
-       // Get a ptr to the system's "printf" function from System.framework.
-       
-       functionName = CFSTR( "printf" );
-       functionPtr = CFBundleGetFunctionPointerForName( bundle, functionName );
-       require_action_quiet( functionPtr, exit, err = memFullErr );    
-       
-       // Success! Note: The bundle cannot be released because it would invalidate the function ptr.
-       
-       gDebugMacOSXLogFunction = (DebugMacOSXLogFunctionPtr) functionPtr;
-       bundle = NULL;
-       err = noErr;
-       
+    OSStatus err;
+    CFStringRef path;
+    CFURLRef url;
+    CFBundleRef bundle;
+    CFStringRef functionName;
+    void *          functionPtr;
+
+    bundle = NULL;
+
+    // Create a bundle reference for System.framework.
+
+    path = CFSTR( "/System/Library/Frameworks/System.framework" );
+    url = CFURLCreateWithFileSystemPath( NULL, path, kCFURLPOSIXPathStyle, true );
+    require_action_quiet( url, exit, err = memFullErr );
+
+    bundle = CFBundleCreate( NULL, url );
+    CFRelease( url );
+    require_action_quiet( bundle, exit, err = memFullErr );
+
+    // Get a ptr to the system's "printf" function from System.framework.
+
+    functionName = CFSTR( "printf" );
+    functionPtr = CFBundleGetFunctionPointerForName( bundle, functionName );
+    require_action_quiet( functionPtr, exit, err = memFullErr );
+
+    // Success! Note: The bundle cannot be released because it would invalidate the function ptr.
+
+    gDebugMacOSXLogFunction = (DebugMacOSXLogFunctionPtr) functionPtr;
+    bundle = NULL;
+    err = noErr;
+
 exit:
-       if( bundle )
-       {
-               CFRelease( bundle );
-       }
-       return( err );
+    if( bundle )
+    {
+        CFRelease( bundle );
+    }
+    return( err );
 }
 
 //===========================================================================================================================
 //     DebugMacOSXLogPrint
 //===========================================================================================================================
 
-static void    DebugMacOSXLogPrint( char *inData, size_t inSize )
-{      
-       if( gDebugMacOSXLogFunction )
-       {
-               gDebugMacOSXLogFunction( "%.*s", (int) inSize, inData );
-       }
+static void DebugMacOSXLogPrint( char *inData, size_t inSize )
+{
+    if( gDebugMacOSXLogFunction )
+    {
+        gDebugMacOSXLogFunction( "%.*s", (int) inSize, inData );
+    }
 }
 #endif
 
-#if( TARGET_OS_WIN32 )
+#if ( TARGET_OS_WIN32 )
 //===========================================================================================================================
 //     DebugWindowsDebuggerPrint
 //===========================================================================================================================
 
-void   DebugWindowsDebuggerPrint( char *inData, size_t inSize )
+void    DebugWindowsDebuggerPrint( char *inData, size_t inSize )
 {
-       TCHAR                           buffer[ 512 ];
-       const char *            src;
-       const char *            end;
-       TCHAR *                         dst;
-       char                            c;
-       
-       // Copy locally and null terminate the string. This also converts from char to TCHAR in case we are 
-       // building with UNICODE enabled since the input is always char. Also convert \r to \n in the process.
-
-       src = inData;
-       if( inSize >= sizeof_array( buffer ) )
-       {
-               inSize = sizeof_array( buffer ) - 1;
-       }
-       end = src + inSize;
-       dst = buffer;   
-       while( src < end )
-       {
-               c = *src++;
-               if( c == '\r' )
-               {
-                       c = '\n';
-               }
-               *dst++ = (TCHAR) c;
-       }
-       *dst = 0;
-       
-       // Print out the string to the debugger.
-       
-       OutputDebugString( buffer );
+    TCHAR buffer[ 512 ];
+    const char *        src;
+    const char *        end;
+    TCHAR *             dst;
+    char c;
+
+    // Copy locally and null terminate the string. This also converts from char to TCHAR in case we are
+    // building with UNICODE enabled since the input is always char. Also convert \r to \n in the process.
+
+    src = inData;
+    if( inSize >= sizeof_array( buffer ) )
+    {
+        inSize = sizeof_array( buffer ) - 1;
+    }
+    end = src + inSize;
+    dst = buffer;
+    while( src < end )
+    {
+        c = *src++;
+        if( c == '\r' )
+        {
+            c = '\n';
+        }
+        *dst++ = (TCHAR) c;
+    }
+    *dst = 0;
+
+    // Print out the string to the debugger.
+
+    OutputDebugString( buffer );
 }
 #endif
 
-#if( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
+#if ( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
 //===========================================================================================================================
 //     DebugWindowsEventLogInit
 //===========================================================================================================================
 
-static OSStatus        DebugWindowsEventLogInit( const char *inName, HMODULE inModule )
+static OSStatus DebugWindowsEventLogInit( const char *inName, HMODULE inModule )
 {
-       OSStatus                        err;
-       HKEY                            key;
-       TCHAR                           name[ 128 ];
-       const char *            src;
-       TCHAR                           path[ MAX_PATH ];
-       size_t                          size;
-       DWORD                           typesSupported;
-       DWORD                           n;
-       
-       key = NULL;
-
-       // Use a default name if needed then convert the name to TCHARs so it works on ANSI or Unicode builds.
-
-       if( !inName || ( *inName == '\0' ) )
-       {
-               inName = "DefaultApp";
-       }
-       DebugWinCharToTCharString( inName, kSizeCString, name, sizeof( name ), NULL );
-       
-       // Build the path string using the fixed registry path and app name.
-       
-       src = "SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\";
-       DebugWinCharToTCharString( src, kSizeCString, path, sizeof_array( path ), &size );
-       DebugWinCharToTCharString( inName, kSizeCString, path + size, sizeof_array( path ) - size, NULL );
-       
-       // Add/Open the source name as a sub-key under the Application key in the EventLog registry key.
-       
-       err = RegCreateKeyEx( HKEY_LOCAL_MACHINE, path, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &key, NULL );
-       require_noerr_quiet( err, exit );
-       
-       // Set the path in the EventMessageFile subkey. Add 1 to the TCHAR count to include the null terminator.
-       
-       n = GetModuleFileName( inModule, path, sizeof_array( path ) );
-       err = translate_errno( n > 0, (OSStatus) GetLastError(), kParamErr );
-       require_noerr_quiet( err, exit );
-       n += 1;
-       n *= sizeof( TCHAR );
-       
-       err = RegSetValueEx( key, TEXT( "EventMessageFile" ), 0, REG_EXPAND_SZ, (const LPBYTE) path, n );
-       require_noerr_quiet( err, exit );
-       
-       // Set the supported event types in the TypesSupported subkey.
-       
-       typesSupported = EVENTLOG_SUCCESS | EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | EVENTLOG_INFORMATION_TYPE |
-                                        EVENTLOG_AUDIT_SUCCESS | EVENTLOG_AUDIT_FAILURE;
-       err = RegSetValueEx( key, TEXT( "TypesSupported" ), 0, REG_DWORD, (const LPBYTE) &typesSupported, sizeof( DWORD ) );
-       require_noerr_quiet( err, exit );
-       
-       // Set up the event source.
-       
-       gDebugWindowsEventLogEventSource = RegisterEventSource( NULL, name );
-       err = translate_errno( gDebugWindowsEventLogEventSource, (OSStatus) GetLastError(), kParamErr );
-       require_noerr_quiet( err, exit );
-       
+    OSStatus err;
+    HKEY key;
+    TCHAR name[ 128 ];
+    const char *        src;
+    TCHAR path[ MAX_PATH ];
+    size_t size;
+    DWORD typesSupported;
+    DWORD n;
+
+    key = NULL;
+
+    // Use a default name if needed then convert the name to TCHARs so it works on ANSI or Unicode builds.
+
+    if( !inName || ( *inName == '\0' ) )
+    {
+        inName = "DefaultApp";
+    }
+    DebugWinCharToTCharString( inName, kSizeCString, name, sizeof( name ), NULL );
+
+    // Build the path string using the fixed registry path and app name.
+
+    src = "SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\";
+    DebugWinCharToTCharString( src, kSizeCString, path, sizeof_array( path ), &size );
+    DebugWinCharToTCharString( inName, kSizeCString, path + size, sizeof_array( path ) - size, NULL );
+
+    // Add/Open the source name as a sub-key under the Application key in the EventLog registry key.
+
+    err = RegCreateKeyEx( HKEY_LOCAL_MACHINE, path, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &key, NULL );
+    require_noerr_quiet( err, exit );
+
+    // Set the path in the EventMessageFile subkey. Add 1 to the TCHAR count to include the null terminator.
+
+    n = GetModuleFileName( inModule, path, sizeof_array( path ) );
+    err = translate_errno( n > 0, (OSStatus) GetLastError(), kParamErr );
+    require_noerr_quiet( err, exit );
+    n += 1;
+    n *= sizeof( TCHAR );
+
+    err = RegSetValueEx( key, TEXT( "EventMessageFile" ), 0, REG_EXPAND_SZ, (const LPBYTE) path, n );
+    require_noerr_quiet( err, exit );
+
+    // Set the supported event types in the TypesSupported subkey.
+
+    typesSupported = EVENTLOG_SUCCESS | EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | EVENTLOG_INFORMATION_TYPE |
+                     EVENTLOG_AUDIT_SUCCESS | EVENTLOG_AUDIT_FAILURE;
+    err = RegSetValueEx( key, TEXT( "TypesSupported" ), 0, REG_DWORD, (const LPBYTE) &typesSupported, sizeof( DWORD ) );
+    require_noerr_quiet( err, exit );
+
+    // Set up the event source.
+
+    gDebugWindowsEventLogEventSource = RegisterEventSource( NULL, name );
+    err = translate_errno( gDebugWindowsEventLogEventSource, (OSStatus) GetLastError(), kParamErr );
+    require_noerr_quiet( err, exit );
+
 exit:
-       if( key )
-       {
-               RegCloseKey( key );
-       }
-       return( err );
+    if( key )
+    {
+        RegCloseKey( key );
+    }
+    return( err );
 }
 
 //===========================================================================================================================
 //     DebugWindowsEventLogPrint
 //===========================================================================================================================
 
-static void    DebugWindowsEventLogPrint( DebugLevel inLevel, char *inData, size_t inSize )
+static void DebugWindowsEventLogPrint( DebugLevel inLevel, char *inData, size_t inSize )
 {
-       WORD                            type;
-       TCHAR                           buffer[ 512 ];
-       const char *            src;
-       const char *            end;
-       TCHAR *                         dst;
-       char                            c;
-       const TCHAR *           array[ 1 ];
-       
-       // Map the debug level to a Windows EventLog type.
-       
-       if( inLevel <= kDebugLevelNotice )
-       {
-               type = EVENTLOG_INFORMATION_TYPE;
-       }
-       else if( inLevel <= kDebugLevelWarning )
-       {
-               type = EVENTLOG_WARNING_TYPE;
-       }
-       else
-       {
-               type = EVENTLOG_ERROR_TYPE;
-       }
-       
-       // Copy locally and null terminate the string. This also converts from char to TCHAR in case we are 
-       // building with UNICODE enabled since the input is always char. Also convert \r to \n in the process.
-       
-       src = inData;
-       if( inSize >= sizeof_array( buffer ) )
-       {
-               inSize = sizeof_array( buffer ) - 1;
-       }
-       end = src + inSize;
-       dst = buffer;   
-       while( src < end )
-       {
-               c = *src++;
-               if( c == '\r' )
-               {
-                       c = '\n';
-               }
-               *dst++ = (TCHAR) c;
-       }
-       *dst = 0;
-       
-       // Add the the string to the event log.
-       
-       array[ 0 ] = buffer;
-       if( gDebugWindowsEventLogEventSource )
-       {
-               ReportEvent( gDebugWindowsEventLogEventSource, type, 0, 0x20000001L, NULL, 1, 0, array, NULL );
-       }
+    WORD type;
+    TCHAR buffer[ 512 ];
+    const char *        src;
+    const char *        end;
+    TCHAR *             dst;
+    char c;
+    const TCHAR *       array[ 1 ];
+
+    // Map the debug level to a Windows EventLog type.
+
+    if( inLevel <= kDebugLevelNotice )
+    {
+        type = EVENTLOG_INFORMATION_TYPE;
+    }
+    else if( inLevel <= kDebugLevelWarning )
+    {
+        type = EVENTLOG_WARNING_TYPE;
+    }
+    else
+    {
+        type = EVENTLOG_ERROR_TYPE;
+    }
+
+    // Copy locally and null terminate the string. This also converts from char to TCHAR in case we are
+    // building with UNICODE enabled since the input is always char. Also convert \r to \n in the process.
+
+    src = inData;
+    if( inSize >= sizeof_array( buffer ) )
+    {
+        inSize = sizeof_array( buffer ) - 1;
+    }
+    end = src + inSize;
+    dst = buffer;
+    while( src < end )
+    {
+        c = *src++;
+        if( c == '\r' )
+        {
+            c = '\n';
+        }
+        *dst++ = (TCHAR) c;
+    }
+    *dst = 0;
+
+    // Add the the string to the event log.
+
+    array[ 0 ] = buffer;
+    if( gDebugWindowsEventLogEventSource )
+    {
+        ReportEvent( gDebugWindowsEventLogEventSource, type, 0, 0x20000001L, NULL, 1, 0, array, NULL );
+    }
 }
-#endif // TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE
+#endif  // TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE
 
-#if( DEBUG_CORE_SERVICE_ASSERTS_ENABLED )
+#if ( DEBUG_CORE_SERVICE_ASSERTS_ENABLED )
 //===========================================================================================================================
 //     DebugAssertOutputHandler
 //===========================================================================================================================
 
-static pascal void     
-       DebugAssertOutputHandler( 
-               OSType                          inComponentSignature, 
-               UInt32                          inOptions, 
-               const char *            inAssertString, 
-               const char *            inExceptionString, 
-               const char *            inErrorString, 
-               const char *            inFileName, 
-               long                            inLineNumber, 
-               void *                          inValue, 
-               ConstStr255Param        inOutputMsg )
+static pascal void
+DebugAssertOutputHandler(
+    OSType inComponentSignature,
+    UInt32 inOptions,
+    const char *        inAssertString,
+    const char *        inExceptionString,
+    const char *        inErrorString,
+    const char *        inFileName,
+    long inLineNumber,
+    void *              inValue,
+    ConstStr255Param inOutputMsg )
 {
-       DEBUG_UNUSED( inComponentSignature );
-       DEBUG_UNUSED( inOptions );
-       DEBUG_UNUSED( inExceptionString );
-       DEBUG_UNUSED( inValue );
-       DEBUG_UNUSED( inOutputMsg );
-       
-       DebugPrintAssert( 0, inAssertString, inErrorString, inFileName, (int_least32_t) inLineNumber, "" );
+    DEBUG_UNUSED( inComponentSignature );
+    DEBUG_UNUSED( inOptions );
+    DEBUG_UNUSED( inExceptionString );
+    DEBUG_UNUSED( inValue );
+    DEBUG_UNUSED( inOutputMsg );
+
+    DebugPrintAssert( 0, inAssertString, inErrorString, inFileName, (int_least32_t) inLineNumber, "" );
 }
 #endif
 
@@ -1197,848 +1170,848 @@ static pascal void
 //===========================================================================================================================
 
 DEBUG_EXPORT size_t DebugSNPrintF(char *sbuffer, size_t buflen, const char *fmt, ...)
-       {
-       size_t length;
-       
-       va_list ptr;
-       va_start(ptr,fmt);
-       length = DebugSNPrintFVAList(sbuffer, buflen, fmt, ptr);
-       va_end(ptr);
-       
-       return(length);
-       }
+{
+    size_t length;
+
+    va_list ptr;
+    va_start(ptr,fmt);
+    length = DebugSNPrintFVAList(sbuffer, buflen, fmt, ptr);
+    va_end(ptr);
+
+    return(length);
+}
 
 //===========================================================================================================================
 //     DebugSNPrintFVAList     - va_list version of DebugSNPrintF. See DebugSNPrintF for more info.
 //===========================================================================================================================
 
 DEBUG_EXPORT size_t DebugSNPrintFVAList(char *sbuffer, size_t buflen, const char *fmt, va_list arg)
-       {
-       static const struct DebugSNPrintF_format
-               {
-               unsigned      leftJustify : 1;
-               unsigned      forceSign : 1;
-               unsigned      zeroPad : 1;
-               unsigned      havePrecision : 1;
-               unsigned      hSize : 1;
-               char          lSize;
-               char          altForm;
-               char          sign;             // +, - or space
-               unsigned int  fieldWidth;
-               unsigned int  precision;
-               } DebugSNPrintF_format_default = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-
-       size_t nwritten = 0;
-       int c;
-       if (buflen == 0) return(0);
-       buflen--;               // Pre-reserve one space in the buffer for the terminating nul
-       if (buflen == 0) goto exit;
-       
-       for (c = *fmt; c != 0; c = *++fmt)
-               {
-               if (c != '%')
-                       {
-                       *sbuffer++ = (char)c;
-                       if (++nwritten >= buflen) goto exit;
-                       }
-               else
-                       {
-                       size_t i=0, j;
-                       // The mDNS Vsprintf Argument Conversion Buffer is used as a temporary holding area for
-                       // generating decimal numbers, hexdecimal numbers, IP addresses, domain name strings, etc.
-                       // The size needs to be enough for a 256-byte domain name plus some error text.
-                       #define mDNS_VACB_Size 300
-                       char mDNS_VACB[mDNS_VACB_Size];
-                       #define mDNS_VACB_Lim (&mDNS_VACB[mDNS_VACB_Size])
-                       #define mDNS_VACB_Remain(s) ((size_t)(mDNS_VACB_Lim - s))
-                       char *s = mDNS_VACB_Lim;
-                       const char *digits = "0123456789ABCDEF";
-                       struct DebugSNPrintF_format F = DebugSNPrintF_format_default;
-       
-                       for(;;) //  decode flags
-                               {
-                               c = *++fmt;
-                               if      (c == '-') F.leftJustify = 1;
-                               else if (c == '+') F.forceSign = 1;
-                               else if (c == ' ') F.sign = ' ';
-                               else if (c == '#') F.altForm++;
-                               else if (c == '0') F.zeroPad = 1;
-                               else break;
-                               }
-       
-                       if (c == '*')   //  decode field width
-                               {
-                               int f = va_arg(arg, int);
-                               if (f < 0) { f = -f; F.leftJustify = 1; }
-                               F.fieldWidth = (unsigned int)f;
-                               c = *++fmt;
-                               }
-                       else
-                               {
-                               for (; c >= '0' && c <= '9'; c = *++fmt)
-                                       F.fieldWidth = (10 * F.fieldWidth) + (c - '0');
-                               }
-       
-                       if (c == '.')   //  decode precision
-                               {
-                               if ((c = *++fmt) == '*')
-                                       { F.precision = va_arg(arg, unsigned int); c = *++fmt; }
-                               else for (; c >= '0' && c <= '9'; c = *++fmt)
-                                               F.precision = (10 * F.precision) + (c - '0');
-                               F.havePrecision = 1;
-                               }
-       
-                       if (F.leftJustify) F.zeroPad = 0;
-       
-                       conv:
-                       switch (c)      //  perform appropriate conversion
-                               {
-                               #if TYPE_LONGLONG_NATIVE
-                                       unsigned_long_long_compat n;
-                                       unsigned_long_long_compat base;
-                               #else
-                                       unsigned long n;
-                                       unsigned long base;
-                               #endif
-                               case 'h' :      F.hSize = 1; c = *++fmt; goto conv;
-                               case 'l' :      // fall through
-                               case 'L' :      F.lSize++; c = *++fmt; goto conv;
-                               case 'd' :
-                               case 'i' :      base = 10;
-                                                       goto canBeSigned;
-                               case 'u' :      base = 10;
-                                                       goto notSigned;
-                               case 'o' :      base = 8;
-                                                       goto notSigned;
-                               case 'b' :      base = 2;
-                                                       goto notSigned;
-                               case 'p' :      n = va_arg(arg, uintptr_t);
-                                                       F.havePrecision = 1;
-                                                       F.precision = (sizeof(uintptr_t) == 4) ? 8 : 16;
-                                                       F.sign = 0;
-                                                       base = 16;
-                                                       c = 'x';
-                                                       goto number;
-                               case 'x' :      digits = "0123456789abcdef";
-                               case 'X' :      base = 16;
-                                                       goto notSigned;
-                               canBeSigned:
-                                                       #if TYPE_LONGLONG_NATIVE
-                                                               if (F.lSize == 1) n = (unsigned_long_long_compat)va_arg(arg, long);
-                                                               else if (F.lSize == 2) n = (unsigned_long_long_compat)va_arg(arg, long_long_compat);
-                                                               else n = (unsigned_long_long_compat)va_arg(arg, int);
-                                                       #else
-                                                               if (F.lSize == 1) n = (unsigned long)va_arg(arg, long);
-                                                               else if (F.lSize == 2) goto exit;
-                                                               else n = (unsigned long)va_arg(arg, int);
-                                                       #endif
-                                                       if (F.hSize) n = (short) n;
-                                                       #if TYPE_LONGLONG_NATIVE
-                                                               if ((long_long_compat) n < 0) { n = (unsigned_long_long_compat)-(long_long_compat)n; F.sign = '-'; }
-                                                       #else
-                                                               if ((long) n < 0) { n = (unsigned long)-(long)n; F.sign = '-'; }
-                                                       #endif
-                                                       else if (F.forceSign) F.sign = '+';
-                                                       goto number;
-                               
-                               notSigned:      if (F.lSize == 1) n = va_arg(arg, unsigned long);
-                                                       else if (F.lSize == 2)
-                                                               {
-                                                               #if TYPE_LONGLONG_NATIVE
-                                                                       n = va_arg(arg, unsigned_long_long_compat);
-                                                               #else
-                                                                       goto exit;
-                                                               #endif
-                                                               }
-                                                       else n = va_arg(arg, unsigned int);
-                                                       if (F.hSize) n = (unsigned short) n;
-                                                       F.sign = 0;
-                                                       goto number;
-                               
-                               number:         if (!F.havePrecision)
-                                                               {
-                                                               if (F.zeroPad)
-                                                                       {
-                                                                       F.precision = F.fieldWidth;
-                                                                       if (F.altForm) F.precision -= 2;
-                                                                       if (F.sign) --F.precision;
-                                                                       }
-                                                               if (F.precision < 1) F.precision = 1;
-                                                               }
-                                                       if (F.precision > mDNS_VACB_Size - 1)
-                                                               F.precision = mDNS_VACB_Size - 1;
-                                                       for (i = 0; n; n /= base, i++) *--s = (char)(digits[n % base]);
-                                                       for (; i < F.precision; i++) *--s = '0';
-                                                       if (F.altForm) { *--s = (char)c; *--s = '0'; i += 2; }
-                                                       if (F.sign) { *--s = F.sign; i++; }
-                                                       break;
-       
-                               case 'a' :      {
-                                                       unsigned char *a = va_arg(arg, unsigned char *);
-                                                       char pre[4] = "";
-                                                       char post[32] = "";
-                                                       if (!a) { static char emsg[] = "<<NULL>>"; s = emsg; i = sizeof(emsg)-1; }
-                                                       else
-                                                               {
-                                                               s = mDNS_VACB;  // Adjust s to point to the start of the buffer, not the end
-                                                               if (F.altForm == 1)
-                                                                       {
-                                                                       #if(defined(MDNS_DEBUGMSGS))
-                                                                               mDNSAddr *ip = (mDNSAddr*)a;
-                                                                               switch (ip->type)
-                                                                                       {
-                                                                                       case mDNSAddrType_IPv4: F.precision =  4; a = (unsigned char *)&ip->ip.v4; break;
-                                                                                       case mDNSAddrType_IPv6: F.precision = 16; a = (unsigned char *)&ip->ip.v6; break;
-                                                                                       default:                F.precision =  0; break;
-                                                                                       }
-                                                                       #else
-                                                                               F.precision = 0;        // mDNSEmbeddedAPI.h not included so no mDNSAddr support
-                                                                       #endif
-                                                                       }
-                                                               else if (F.altForm == 2)
-                                                                       {
-                                                                       #ifdef AF_INET
-                                                                               const struct sockaddr *sa;
-                                                                               unsigned char *port;
-                                                                               sa = (const struct sockaddr*)a;
-                                                                               switch (sa->sa_family)
-                                                                                       {
-                                                                                       case AF_INET:  F.precision =  4; a = (unsigned char*)&((const struct sockaddr_in *)a)->sin_addr;
-                                                                                                      port = (unsigned char*)&((const struct sockaddr_in *)sa)->sin_port;
-                                                                                                      DebugSNPrintF(post, sizeof(post), ":%d", (port[0] << 8) | port[1]); break;
-                                                                                       #ifdef AF_INET6
-                                                                                       case AF_INET6: F.precision = 16; a = (unsigned char*)&((const struct sockaddr_in6 *)a)->sin6_addr; 
-                                                                                                      pre[0] = '['; pre[1] = '\0';
-                                                                                                      port = (unsigned char*)&((const struct sockaddr_in6 *)sa)->sin6_port;
-                                                                                                      DebugSNPrintF(post, sizeof(post), "%%%d]:%d", 
-                                                                                                               (int)((const struct sockaddr_in6 *)sa)->sin6_scope_id,
-                                                                                                               (port[0] << 8) | port[1]); break;
-                                                                                       #endif
-                                                                                       default:       F.precision =  0; break;
-                                                                                       }
-                                                                       #else
-                                                                               F.precision = 0;        // socket interfaces not included so no sockaddr support
-                                                                       #endif
-                                                                       }
-                                                               switch (F.precision)
-                                                                       {
-                                                                       case  4: i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%d.%d.%d.%d%s",
-                                                                                                               a[0], a[1], a[2], a[3], post); break;
-                                                                       case  6: i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%02X:%02X:%02X:%02X:%02X:%02X",
-                                                                                                               a[0], a[1], a[2], a[3], a[4], a[5]); break;
-                                                                       case  8: i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X",
-                                                                                                               a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7]); break;
-                                                                       case 16: i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), 
-                                                                                                               "%s%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X%s",
-                                                                                                               pre, a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], 
-                                                                                                               a[9], a[10], a[11], a[12], a[13], a[14], a[15], post); break;           
-                                                                       default: i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%s", "<< ERROR: Must specify address size "
-                                                                                                               "(i.e. %.4a=IPv4, %.6a=Ethernet, %.8a=Fibre Channel %.16a=IPv6) >>"); break;
-                                                                       }
-                                                               }
-                                                       }
-                                                       break;
-
-                               case 'U' :      {
-                                                       unsigned char *a = va_arg(arg, unsigned char *);
-                                                       if (!a) { static char emsg[] = "<<NULL>>"; s = emsg; i = sizeof(emsg)-1; }
-                                                       else
-                                                               {
-                                                               s = mDNS_VACB;  // Adjust s to point to the start of the buffer, not the end
-                                                               i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
-                                                                               *((uint32_t*) &a[0]), *((uint16_t*) &a[4]), *((uint16_t*) &a[6]), 
-                                                                               a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15]); break;
-                                                               }
-                                                       }
-                                                       break;
-
-                               case 'c' :      *--s = (char)va_arg(arg, int); i = 1; break;
-       
-                               case 'C' :      if (F.lSize) n = va_arg(arg, unsigned long);
-                                                       else n = va_arg(arg, unsigned int);
-                                                       if (F.hSize) n = (unsigned short) n;
-                                                       c = (int)( n        & 0xFF); *--s = (char)(DebugIsPrint(c) ? c : '^');
-                                                       c = (int)((n >>  8) & 0xFF); *--s = (char)(DebugIsPrint(c) ? c : '^');
-                                                       c = (int)((n >> 16) & 0xFF); *--s = (char)(DebugIsPrint(c) ? c : '^');
-                                                       c = (int)((n >> 24) & 0xFF); *--s = (char)(DebugIsPrint(c) ? c : '^');
-                                                       i = 4;
-                                                       break;
-       
-                               case 's' :      s = va_arg(arg, char *);
-                                                       if (!s) { static char emsg[] = "<<NULL>>"; s = emsg; i = sizeof(emsg)-1; }
-                                                       else switch (F.altForm)
-                                                               {
-                                                               case 0: i=0;
-                                                                               if (F.havePrecision)                            // C string
-                                                                                       {
-                                                                                       while((i < F.precision) && s[i]) i++;
-                                                                                       // Make sure we don't truncate in the middle of a UTF-8 character.
-                                                                                       // If the last character is part of a multi-byte UTF-8 character, back up to the start of it.
-                                                                                       j=0;
-                                                                                       while((i > 0) && ((c = s[i-1]) & 0x80)) { j++; i--; if((c & 0xC0) != 0x80) break; }
-                                                                                       // If the actual count of UTF-8 characters matches the encoded UTF-8 count, add it back.
-                                                                                       if((j > 1) && (j <= 6))
-                                                                                               {
-                                                                                               int test = (0xFF << (8-j)) & 0xFF;
-                                                                                               int mask = test | (1 << ((8-j)-1));
-                                                                                               if((c & mask) == test) i += j;
-                                                                                               }
-                                                                                       }
-                                                                               else
-                                                                                       while(s[i]) i++;
-                                                                               break;                                                          
-                                                               case 1: i = (unsigned char) *s++; break;        // Pascal string
-                                                               case 2: {                                                                       // DNS label-sequence name
-                                                                               unsigned char *a = (unsigned char *)s;
-                                                                               s = mDNS_VACB;  // Adjust s to point to the start of the buffer, not the end
-                                                                               if (*a == 0) *s++ = '.';        // Special case for root DNS name
-                                                                               while (*a)
-                                                                                       {
-                                                                                       if (*a > 63) { s += DebugSNPrintF(s, mDNS_VACB_Remain(s), "<<INVALID LABEL LENGTH %u>>", *a); break; }
-                                                                                       if (s + *a >= &mDNS_VACB[254]) { s += DebugSNPrintF(s, mDNS_VACB_Remain(s), "<<NAME TOO LONG>>"); break; }
-                                                                                       s += DebugSNPrintF(s, mDNS_VACB_Remain(s), "%#s.", a);
-                                                                                       a += 1 + *a;
-                                                                                       }
-                                                                               i = (size_t)(s - mDNS_VACB);
-                                                                               s = mDNS_VACB;  // Reset s back to the start of the buffer
-                                                                               break;
-                                                                               }
-                                                               }
-                                                       if (F.havePrecision && i > F.precision)         // Make sure we don't truncate in the middle of a UTF-8 character
-                                                               { i = F.precision; while (i>0 && (s[i] & 0xC0) == 0x80) i--; }
-                                                       break;
-                               
-                               case 'S':       {       // UTF-16 string
-                                                       unsigned char *a = va_arg(arg, unsigned char *);
-                                                       uint16_t      *u = (uint16_t*)a;
-                                                       if (!u) { static char emsg[] = "<<NULL>>"; s = emsg; i = sizeof(emsg)-1; }
-                                                       if ((!F.havePrecision || F.precision))
-                                                               {
-                                                               if      ((a[0] == 0xFE) && (a[1] == 0xFF)) { F.altForm = 1; u += 1; a += 2; F.precision--; }    // Big Endian
-                                                               else if ((a[0] == 0xFF) && (a[1] == 0xFE)) { F.altForm = 2; u += 1; a += 2; F.precision--; }    // Little Endian
-                                                               }
-                                                       s = mDNS_VACB;  // Adjust s to point to the start of the buffer, not the end
-                                                       switch (F.altForm)
-                                                               {
-                                                               case 0: while ((!F.havePrecision || (i < F.precision)) && u[i] && mDNS_VACB_Remain(s))  // Host Endian
-                                                                                       { c = u[i]; *s++ = (char)(DebugIsPrint(c) ? c : '^'); i++; }
-                                                                               break;
-                                                               case 1: while ((!F.havePrecision || (i < F.precision)) && u[i] && mDNS_VACB_Remain(s))  // Big Endian
-                                                                                       { c = ((a[0] << 8) | a[1]) & 0xFF; *s++ = (char)(DebugIsPrint(c) ? c : '^'); i++; a += 2; }
-                                                                               break;
-                                                               case 2: while ((!F.havePrecision || (i < F.precision)) && u[i] && mDNS_VACB_Remain(s))  // Little Endian
-                                                                                       { c = ((a[1] << 8) | a[0]) & 0xFF; *s++ = (char)(DebugIsPrint(c) ? c : '^'); i++; a += 2; }
-                                                                               break;
-                                                               }
-                                                       }
-                                                       s = mDNS_VACB;  // Reset s back to the start of the buffer
-                                                       break;
-                       
-                       #if TARGET_OS_MAC
-                               case '@':       {       // Cocoa/CoreFoundation object
-                                                       CFTypeRef cfObj;
-                                                       CFStringRef cfStr;
-                                                       cfObj = (CFTypeRef) va_arg(arg, void *);
-                                                       cfStr = (CFGetTypeID(cfObj) == CFStringGetTypeID()) ? (CFStringRef)CFRetain(cfObj) : CFCopyDescription(cfObj);
-                                                       s = mDNS_VACB;  // Adjust s to point to the start of the buffer, not the end
-                                                       if (cfStr)
-                                                               {
-                                                               CFRange range;
-                                                               CFIndex m;
-                                                               range = CFRangeMake(0, CFStringGetLength(cfStr));
-                                                               m = 0;
-                                                               CFStringGetBytes(cfStr, range, kCFStringEncodingUTF8, '^', false, (UInt8*)mDNS_VACB, (CFIndex)sizeof(mDNS_VACB), &m);
-                                                               CFRelease(cfStr);
-                                                               i = (size_t) m;
-                                                               }
-                                                       else
-                                                               {
-                                                               i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%s", "ERROR: <invalid CF object>" );
-                                                               }
-                                                       }
-                                                       if (F.havePrecision && i > F.precision)         // Make sure we don't truncate in the middle of a UTF-8 character
-                                                               { i = F.precision; while (i>0 && (s[i] & 0xC0) == 0x80) i--; }
-                                                       break;
-                       #endif
-
-                               case 'm' :      {       // Error Message
-                                                       long err;
-                                                       if (F.lSize) err = va_arg(arg, long);
-                                                       else err = va_arg(arg, int);
-                                                       if (F.hSize) err = (short)err;
-                                                       DebugGetErrorString(err, mDNS_VACB, sizeof(mDNS_VACB));
-                                                       s = mDNS_VACB;  // Adjust s to point to the start of the buffer, not the end
-                                                       for(i=0;s[i];i++) {}
-                                                       }
-                                                       break;
-
-                               case 'H' :      {       // Hex Dump
-                                                       void *a = va_arg(arg, void *);
-                                                       size_t size = (size_t)va_arg(arg, int);
-                                                       size_t max = (size_t)va_arg(arg, int);
-                                                       DebugFlags flags = 
-                                                               kDebugFlagsNoAddress | kDebugFlagsNoOffset | kDebugFlagsNoNewLine |
-                                                               kDebugFlags8BitSeparator | kDebugFlagsNo32BitSeparator |
-                                                               kDebugFlagsNo16ByteHexPad | kDebugFlagsNoByteCount;
-                                                       if (F.altForm == 0) flags |= kDebugFlagsNoASCII;
-                                                       size = (max < size) ? max : size;
-                                                       s = mDNS_VACB;  // Adjust s to point to the start of the buffer, not the end
-                                                       i = DebugHexDump(kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, a, a, size, flags, mDNS_VACB, sizeof(mDNS_VACB));
-                                                       }
-                                                       break;
-                               
-                               case 'v' :      {       // Version
-                                                       uint32_t version;
-                                                       version = va_arg(arg, unsigned int);
-                                                       DebugNumVersionToString(version, mDNS_VACB);
-                                                       s = mDNS_VACB;  // Adjust s to point to the start of the buffer, not the end
-                                                       for(i=0;s[i];i++) {}
-                                                       }
-                                                       break;
-
-                               case 'n' :      s = va_arg(arg, char *);
-                                                       if      (F.hSize) * (short *) s = (short)nwritten;
-                                                       else if (F.lSize) * (long  *) s = (long)nwritten;
-                                                       else              * (int   *) s = (int)nwritten;
-                                                       continue;
-       
-                               default:        s = mDNS_VACB;
-                                                       i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "<<UNKNOWN FORMAT CONVERSION CODE %%%c>>", c);
-
-                               case '%' :      *sbuffer++ = (char)c;
-                                                       if (++nwritten >= buflen) goto exit;
-                                                       break;
-                               }
-       
-                       if (i < F.fieldWidth && !F.leftJustify)                 // Pad on the left
-                               do      {
-                                       *sbuffer++ = ' ';
-                                       if (++nwritten >= buflen) goto exit;
-                                       } while (i < --F.fieldWidth);
-       
-                       if (i > buflen - nwritten)      // Make sure we don't truncate in the middle of a UTF-8 character
-                               { i = buflen - nwritten; while (i>0 && (s[i] & 0xC0) == 0x80) i--; }
-                       for (j=0; j<i; j++) *sbuffer++ = *s++;                  // Write the converted result
-                       nwritten += i;
-                       if (nwritten >= buflen) goto exit;
-       
-                       for (; i < F.fieldWidth; i++)                                   // Pad on the right
-                               {
-                               *sbuffer++ = ' ';
-                               if (++nwritten >= buflen) goto exit;
-                               }
-                       }
-               }
-       exit:
-       *sbuffer++ = 0;
-       return(nwritten);
-       }
+{
+    static const struct DebugSNPrintF_format
+    {
+        unsigned leftJustify : 1;
+        unsigned forceSign : 1;
+        unsigned zeroPad : 1;
+        unsigned havePrecision : 1;
+        unsigned hSize : 1;
+        char lSize;
+        char altForm;
+        char sign;              // +, - or space
+        unsigned int fieldWidth;
+        unsigned int precision;
+    } DebugSNPrintF_format_default = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+
+    size_t nwritten = 0;
+    int c;
+    if (buflen == 0) return(0);
+    buflen--;       // Pre-reserve one space in the buffer for the terminating nul
+    if (buflen == 0) goto exit;
+
+    for (c = *fmt; c != 0; c = *++fmt)
+    {
+        if (c != '%')
+        {
+            *sbuffer++ = (char)c;
+            if (++nwritten >= buflen) goto exit;
+        }
+        else
+        {
+            size_t i=0, j;
+            // The mDNS Vsprintf Argument Conversion Buffer is used as a temporary holding area for
+            // generating decimal numbers, hexdecimal numbers, IP addresses, domain name strings, etc.
+            // The size needs to be enough for a 256-byte domain name plus some error text.
+            #define mDNS_VACB_Size 300
+            char mDNS_VACB[mDNS_VACB_Size];
+            #define mDNS_VACB_Lim (&mDNS_VACB[mDNS_VACB_Size])
+            #define mDNS_VACB_Remain(s) ((size_t)(mDNS_VACB_Lim - s))
+            char *s = mDNS_VACB_Lim;
+            const char *digits = "0123456789ABCDEF";
+            struct DebugSNPrintF_format F = DebugSNPrintF_format_default;
+
+            for(;;) //  decode flags
+            {
+                c = *++fmt;
+                if      (c == '-') F.leftJustify = 1;
+                else if (c == '+') F.forceSign = 1;
+                else if (c == ' ') F.sign = ' ';
+                else if (c == '#') F.altForm++;
+                else if (c == '0') F.zeroPad = 1;
+                else break;
+            }
+
+            if (c == '*')   //  decode field width
+            {
+                int f = va_arg(arg, int);
+                if (f < 0) { f = -f; F.leftJustify = 1; }
+                F.fieldWidth = (unsigned int)f;
+                c = *++fmt;
+            }
+            else
+            {
+                for (; c >= '0' && c <= '9'; c = *++fmt)
+                    F.fieldWidth = (10 * F.fieldWidth) + (c - '0');
+            }
+
+            if (c == '.')   //  decode precision
+            {
+                if ((c = *++fmt) == '*')
+                { F.precision = va_arg(arg, unsigned int); c = *++fmt; }
+                else for (; c >= '0' && c <= '9'; c = *++fmt)
+                        F.precision = (10 * F.precision) + (c - '0');
+                F.havePrecision = 1;
+            }
+
+            if (F.leftJustify) F.zeroPad = 0;
+
+conv:
+            switch (c)  //  perform appropriate conversion
+            {
+                #if TYPE_LONGLONG_NATIVE
+                unsigned_long_long_compat n;
+                unsigned_long_long_compat base;
+                #else
+                unsigned long n;
+                unsigned long base;
+                #endif
+            case 'h':  F.hSize = 1; c = *++fmt; goto conv;
+            case 'l':       // fall through
+            case 'L':  F.lSize++; c = *++fmt; goto conv;
+            case 'd':
+            case 'i':  base = 10;
+                goto canBeSigned;
+            case 'u':  base = 10;
+                goto notSigned;
+            case 'o':  base = 8;
+                goto notSigned;
+            case 'b':  base = 2;
+                goto notSigned;
+            case 'p':  n = va_arg(arg, uintptr_t);
+                F.havePrecision = 1;
+                F.precision = (sizeof(uintptr_t) == 4) ? 8 : 16;
+                F.sign = 0;
+                base = 16;
+                c = 'x';
+                goto number;
+            case 'x':  digits = "0123456789abcdef";
+            case 'X':  base = 16;
+                goto notSigned;
+canBeSigned:
+                            #if TYPE_LONGLONG_NATIVE
+                if (F.lSize == 1) n = (unsigned_long_long_compat)va_arg(arg, long);
+                else if (F.lSize == 2) n = (unsigned_long_long_compat)va_arg(arg, long_long_compat);
+                else n = (unsigned_long_long_compat)va_arg(arg, int);
+                            #else
+                if (F.lSize == 1) n = (unsigned long)va_arg(arg, long);
+                else if (F.lSize == 2) goto exit;
+                else n = (unsigned long)va_arg(arg, int);
+                            #endif
+                if (F.hSize) n = (short) n;
+                            #if TYPE_LONGLONG_NATIVE
+                if ((long_long_compat) n < 0) { n = (unsigned_long_long_compat)-(long_long_compat)n; F.sign = '-'; }
+                            #else
+                if ((long) n < 0) { n = (unsigned long)-(long)n; F.sign = '-'; }
+                            #endif
+                else if (F.forceSign) F.sign = '+';
+                goto number;
+
+notSigned:  if (F.lSize == 1) n = va_arg(arg, unsigned long);
+                else if (F.lSize == 2)
+                {
+                                #if TYPE_LONGLONG_NATIVE
+                    n = va_arg(arg, unsigned_long_long_compat);
+                                #else
+                    goto exit;
+                                #endif
+                }
+                else n = va_arg(arg, unsigned int);
+                if (F.hSize) n = (unsigned short) n;
+                F.sign = 0;
+                goto number;
+
+number:     if (!F.havePrecision)
+                {
+                    if (F.zeroPad)
+                    {
+                        F.precision = F.fieldWidth;
+                        if (F.altForm) F.precision -= 2;
+                        if (F.sign) --F.precision;
+                    }
+                    if (F.precision < 1) F.precision = 1;
+                }
+                if (F.precision > mDNS_VACB_Size - 1)
+                    F.precision = mDNS_VACB_Size - 1;
+                for (i = 0; n; n /= base, i++) *--s = (char)(digits[n % base]);
+                for (; i < F.precision; i++) *--s = '0';
+                if (F.altForm) { *--s = (char)c; *--s = '0'; i += 2; }
+                if (F.sign) { *--s = F.sign; i++; }
+                break;
+
+            case 'a':  {
+                unsigned char *a = va_arg(arg, unsigned char *);
+                char pre[4] = "";
+                char post[32] = "";
+                if (!a) { static char emsg[] = "<<NULL>>"; s = emsg; i = sizeof(emsg)-1; }
+                else
+                {
+                    s = mDNS_VACB;              // Adjust s to point to the start of the buffer, not the end
+                    if (F.altForm == 1)
+                    {
+                                    #if (defined(MDNS_DEBUGMSGS))
+                        mDNSAddr *ip = (mDNSAddr*)a;
+                        switch (ip->type)
+                        {
+                        case mDNSAddrType_IPv4: F.precision =  4; a = (unsigned char *)&ip->ip.v4; break;
+                        case mDNSAddrType_IPv6: F.precision = 16; a = (unsigned char *)&ip->ip.v6; break;
+                        default:                F.precision =  0; break;
+                        }
+                                    #else
+                        F.precision = 0;                    // mDNSEmbeddedAPI.h not included so no mDNSAddr support
+                                    #endif
+                    }
+                    else if (F.altForm == 2)
+                    {
+                                    #ifdef AF_INET
+                        const struct sockaddr *sa;
+                        unsigned char *port;
+                        sa = (const struct sockaddr*)a;
+                        switch (sa->sa_family)
+                        {
+                        case AF_INET:  F.precision =  4; a = (unsigned char*)&((const struct sockaddr_in *)a)->sin_addr;
+                            port = (unsigned char*)&((const struct sockaddr_in *)sa)->sin_port;
+                            DebugSNPrintF(post, sizeof(post), ":%d", (port[0] << 8) | port[1]); break;
+                                            #ifdef AF_INET6
+                        case AF_INET6: F.precision = 16; a = (unsigned char*)&((const struct sockaddr_in6 *)a)->sin6_addr;
+                            pre[0] = '['; pre[1] = '\0';
+                            port = (unsigned char*)&((const struct sockaddr_in6 *)sa)->sin6_port;
+                            DebugSNPrintF(post, sizeof(post), "%%%d]:%d",
+                                          (int)((const struct sockaddr_in6 *)sa)->sin6_scope_id,
+                                          (port[0] << 8) | port[1]); break;
+                                            #endif
+                        default:       F.precision =  0; break;
+                        }
+                                    #else
+                        F.precision = 0;                    // socket interfaces not included so no sockaddr support
+                                    #endif
+                    }
+                    switch (F.precision)
+                    {
+                    case  4: i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%d.%d.%d.%d%s",
+                                               a[0], a[1], a[2], a[3], post); break;
+                    case  6: i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%02X:%02X:%02X:%02X:%02X:%02X",
+                                               a[0], a[1], a[2], a[3], a[4], a[5]); break;
+                    case  8: i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X",
+                                               a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7]); break;
+                    case 16: i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB),
+                                               "%s%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X%s",
+                                               pre, a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8],
+                                               a[9], a[10], a[11], a[12], a[13], a[14], a[15], post); break;
+                    default: i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%s", "<< ERROR: Must specify address size "
+                                               "(i.e. %.4a=IPv4, %.6a=Ethernet, %.8a=Fibre Channel %.16a=IPv6) >>"); break;
+                    }
+                }
+            }
+            break;
+
+            case 'U':  {
+                unsigned char *a = va_arg(arg, unsigned char *);
+                if (!a) { static char emsg[] = "<<NULL>>"; s = emsg; i = sizeof(emsg)-1; }
+                else
+                {
+                    s = mDNS_VACB;              // Adjust s to point to the start of the buffer, not the end
+                    i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+                                      *((uint32_t*) &a[0]), *((uint16_t*) &a[4]), *((uint16_t*) &a[6]),
+                                      a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15]); break;
+                }
+            }
+            break;
+
+            case 'c':  *--s = (char)va_arg(arg, int); i = 1; break;
+
+            case 'C':  if (F.lSize) n = va_arg(arg, unsigned long);
+                else n = va_arg(arg, unsigned int);
+                if (F.hSize) n = (unsigned short) n;
+                c = (int)( n        & 0xFF); *--s = (char)(DebugIsPrint(c) ? c : '^');
+                c = (int)((n >>  8) & 0xFF); *--s = (char)(DebugIsPrint(c) ? c : '^');
+                c = (int)((n >> 16) & 0xFF); *--s = (char)(DebugIsPrint(c) ? c : '^');
+                c = (int)((n >> 24) & 0xFF); *--s = (char)(DebugIsPrint(c) ? c : '^');
+                i = 4;
+                break;
+
+            case 's':  s = va_arg(arg, char *);
+                if (!s) { static char emsg[] = "<<NULL>>"; s = emsg; i = sizeof(emsg)-1; }
+                else switch (F.altForm)
+                    {
+                    case 0: i=0;
+                        if (F.havePrecision)                                // C string
+                        {
+                            while((i < F.precision) && s[i]) i++;
+                            // Make sure we don't truncate in the middle of a UTF-8 character.
+                            // If the last character is part of a multi-byte UTF-8 character, back up to the start of it.
+                            j=0;
+                            while((i > 0) && ((c = s[i-1]) & 0x80)) { j++; i--; if((c & 0xC0) != 0x80) break;}
+                            // If the actual count of UTF-8 characters matches the encoded UTF-8 count, add it back.
+                            if((j > 1) && (j <= 6))
+                            {
+                                int test = (0xFF << (8-j)) & 0xFF;
+                                int mask = test | (1 << ((8-j)-1));
+                                if((c & mask) == test) i += j;
+                            }
+                        }
+                        else
+                            while(s[i]) i++;
+                        break;
+                    case 1: i = (unsigned char) *s++; break;                // Pascal string
+                    case 2: {                                               // DNS label-sequence name
+                        unsigned char *a = (unsigned char *)s;
+                        s = mDNS_VACB;                  // Adjust s to point to the start of the buffer, not the end
+                        if (*a == 0) *s++ = '.';                    // Special case for root DNS name
+                        while (*a)
+                        {
+                            if (*a > 63) { s += DebugSNPrintF(s, mDNS_VACB_Remain(s), "<<INVALID LABEL LENGTH %u>>", *a); break; }
+                            if (s + *a >= &mDNS_VACB[254]) { s += DebugSNPrintF(s, mDNS_VACB_Remain(s), "<<NAME TOO LONG>>"); break; }
+                            s += DebugSNPrintF(s, mDNS_VACB_Remain(s), "%#s.", a);
+                            a += 1 + *a;
+                        }
+                        i = (size_t)(s - mDNS_VACB);
+                        s = mDNS_VACB;                  // Reset s back to the start of the buffer
+                        break;
+                    }
+                    }
+                if (F.havePrecision && i > F.precision)                 // Make sure we don't truncate in the middle of a UTF-8 character
+                { i = F.precision; while (i>0 && (s[i] & 0xC0) == 0x80) i--;}
+                break;
+
+            case 'S':   {       // UTF-16 string
+                unsigned char *a = va_arg(arg, unsigned char *);
+                uint16_t      *u = (uint16_t*)a;
+                if (!u) { static char emsg[] = "<<NULL>>"; s = emsg; i = sizeof(emsg)-1; }
+                if ((!F.havePrecision || F.precision))
+                {
+                    if      ((a[0] == 0xFE) && (a[1] == 0xFF)) { F.altForm = 1; u += 1; a += 2; F.precision--; }                // Big Endian
+                    else if ((a[0] == 0xFF) && (a[1] == 0xFE)) { F.altForm = 2; u += 1; a += 2; F.precision--; }                // Little Endian
+                }
+                s = mDNS_VACB;              // Adjust s to point to the start of the buffer, not the end
+                switch (F.altForm)
+                {
+                case 0: while ((!F.havePrecision || (i < F.precision)) && u[i] && mDNS_VACB_Remain(s))                  // Host Endian
+                    { c = u[i]; *s++ = (char)(DebugIsPrint(c) ? c : '^'); i++; }
+                    break;
+                case 1: while ((!F.havePrecision || (i < F.precision)) && u[i] && mDNS_VACB_Remain(s))                  // Big Endian
+                    { c = ((a[0] << 8) | a[1]) & 0xFF; *s++ = (char)(DebugIsPrint(c) ? c : '^'); i++; a += 2; }
+                    break;
+                case 2: while ((!F.havePrecision || (i < F.precision)) && u[i] && mDNS_VACB_Remain(s))                  // Little Endian
+                    { c = ((a[1] << 8) | a[0]) & 0xFF; *s++ = (char)(DebugIsPrint(c) ? c : '^'); i++; a += 2; }
+                    break;
+                }
+            }
+                s = mDNS_VACB;              // Reset s back to the start of the buffer
+                break;
+
+            #if TARGET_OS_MAC
+            case '@':   {       // Cocoa/CoreFoundation object
+                CFTypeRef cfObj;
+                CFStringRef cfStr;
+                cfObj = (CFTypeRef) va_arg(arg, void *);
+                cfStr = (CFGetTypeID(cfObj) == CFStringGetTypeID()) ? (CFStringRef)CFRetain(cfObj) : CFCopyDescription(cfObj);
+                s = mDNS_VACB;              // Adjust s to point to the start of the buffer, not the end
+                if (cfStr)
+                {
+                    CFRange range;
+                    CFIndex m;
+                    range = CFRangeMake(0, CFStringGetLength(cfStr));
+                    m = 0;
+                    CFStringGetBytes(cfStr, range, kCFStringEncodingUTF8, '^', false, (UInt8*)mDNS_VACB, (CFIndex)sizeof(mDNS_VACB), &m);
+                    CFRelease(cfStr);
+                    i = (size_t) m;
+                }
+                else
+                {
+                    i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%s", "ERROR: <invalid CF object>" );
+                }
+            }
+                if (F.havePrecision && i > F.precision)                 // Make sure we don't truncate in the middle of a UTF-8 character
+                { i = F.precision; while (i>0 && (s[i] & 0xC0) == 0x80) i--;}
+                break;
+            #endif
+
+            case 'm':  {        // Error Message
+                long err;
+                if (F.lSize) err = va_arg(arg, long);
+                else err = va_arg(arg, int);
+                if (F.hSize) err = (short)err;
+                DebugGetErrorString(err, mDNS_VACB, sizeof(mDNS_VACB));
+                s = mDNS_VACB;              // Adjust s to point to the start of the buffer, not the end
+                for(i=0; s[i]; i++) {}
+            }
+            break;
+
+            case 'H':  {        // Hex Dump
+                void *a = va_arg(arg, void *);
+                size_t size = (size_t)va_arg(arg, int);
+                size_t max = (size_t)va_arg(arg, int);
+                DebugFlags flags =
+                    kDebugFlagsNoAddress | kDebugFlagsNoOffset | kDebugFlagsNoNewLine |
+                    kDebugFlags8BitSeparator | kDebugFlagsNo32BitSeparator |
+                    kDebugFlagsNo16ByteHexPad | kDebugFlagsNoByteCount;
+                if (F.altForm == 0) flags |= kDebugFlagsNoASCII;
+                size = (max < size) ? max : size;
+                s = mDNS_VACB;              // Adjust s to point to the start of the buffer, not the end
+                i = DebugHexDump(kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, a, a, size, flags, mDNS_VACB, sizeof(mDNS_VACB));
+            }
+            break;
+
+            case 'v':  {        // Version
+                uint32_t version;
+                version = va_arg(arg, unsigned int);
+                DebugNumVersionToString(version, mDNS_VACB);
+                s = mDNS_VACB;              // Adjust s to point to the start of the buffer, not the end
+                for(i=0; s[i]; i++) {}
+            }
+            break;
+
+            case 'n':  s = va_arg(arg, char *);
+                if      (F.hSize) *(short *) s = (short)nwritten;
+                else if (F.lSize) *(long  *) s = (long)nwritten;
+                else *(int   *) s = (int)nwritten;
+                continue;
+
+            default:    s = mDNS_VACB;
+                i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "<<UNKNOWN FORMAT CONVERSION CODE %%%c>>", c);
+
+            case '%':  *sbuffer++ = (char)c;
+                if (++nwritten >= buflen) goto exit;
+                break;
+            }
+
+            if (i < F.fieldWidth && !F.leftJustify)         // Pad on the left
+                do  {
+                    *sbuffer++ = ' ';
+                    if (++nwritten >= buflen) goto exit;
+                } while (i < --F.fieldWidth);
+
+            if (i > buflen - nwritten)  // Make sure we don't truncate in the middle of a UTF-8 character
+            { i = buflen - nwritten; while (i>0 && (s[i] & 0xC0) == 0x80) i--;}
+            for (j=0; j<i; j++) *sbuffer++ = *s++;          // Write the converted result
+            nwritten += i;
+            if (nwritten >= buflen) goto exit;
+
+            for (; i < F.fieldWidth; i++)                   // Pad on the right
+            {
+                *sbuffer++ = ' ';
+                if (++nwritten >= buflen) goto exit;
+            }
+        }
+    }
+exit:
+    *sbuffer++ = 0;
+    return(nwritten);
+}
 
 //===========================================================================================================================
 //     DebugGetErrorString
 //===========================================================================================================================
 
-DEBUG_EXPORT const char *      DebugGetErrorString( int_least32_t inErrorCode, char *inBuffer, size_t inBufferSize )
+DEBUG_EXPORT const char *   DebugGetErrorString( int_least32_t inErrorCode, char *inBuffer, size_t inBufferSize )
 {
-       const char *            s;
-       char *                          dst;
-       char *                          end;
-#if( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
-       char                            buffer[ 256 ];
+    const char *        s;
+    char *              dst;
+    char *              end;
+#if ( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
+    char buffer[ 256 ];
 #endif
-       
-       switch( inErrorCode )
-       {
-               #define CaseErrorString( X, STR )                                       case X: s = STR; break
-               #define CaseErrorStringify( X )                                         case X: s = # X; break
-               #define CaseErrorStringifyHardCode( VALUE, X )          case VALUE: s = # X; break
-               
-               // General Errors
-               
-               CaseErrorString( 0,  "no error" );
-               CaseErrorString( 1,  "in-progress/waiting" );
-               CaseErrorString( -1, "catch-all unknown error" );
-                               
-               // ACP Errors
-               
-               CaseErrorStringifyHardCode( -2,  kACPBadRequestErr );
-               CaseErrorStringifyHardCode( -3,  kACPNoMemoryErr );
-               CaseErrorStringifyHardCode( -4,  kACPBadParamErr );
-               CaseErrorStringifyHardCode( -5,  kACPNotFoundErr );
-               CaseErrorStringifyHardCode( -6,  kACPBadChecksumErr );
-               CaseErrorStringifyHardCode( -7,  kACPCommandNotHandledErr );
-               CaseErrorStringifyHardCode( -8,  kACPNetworkErr );
-               CaseErrorStringifyHardCode( -9,  kACPDuplicateCommandHandlerErr );
-               CaseErrorStringifyHardCode( -10, kACPUnknownPropertyErr );
-               CaseErrorStringifyHardCode( -11, kACPImmutablePropertyErr );
-               CaseErrorStringifyHardCode( -12, kACPBadPropertyValueErr );
-               CaseErrorStringifyHardCode( -13, kACPNoResourcesErr );
-               CaseErrorStringifyHardCode( -14, kACPBadOptionErr );
-               CaseErrorStringifyHardCode( -15, kACPBadSizeErr );
-               CaseErrorStringifyHardCode( -16, kACPBadPasswordErr );
-               CaseErrorStringifyHardCode( -17, kACPNotInitializedErr );
-               CaseErrorStringifyHardCode( -18, kACPNonReadablePropertyErr );
-               CaseErrorStringifyHardCode( -19, kACPBadVersionErr );
-               CaseErrorStringifyHardCode( -20, kACPBadSignatureErr );
-               CaseErrorStringifyHardCode( -21, kACPBadIndexErr );
-               CaseErrorStringifyHardCode( -22, kACPUnsupportedErr );
-               CaseErrorStringifyHardCode( -23, kACPInUseErr );
-               CaseErrorStringifyHardCode( -24, kACPParamCountErr );
-               CaseErrorStringifyHardCode( -25, kACPIDErr );
-               CaseErrorStringifyHardCode( -26, kACPFormatErr );
-               CaseErrorStringifyHardCode( -27, kACPUnknownUserErr );
-               CaseErrorStringifyHardCode( -28, kACPAccessDeniedErr );
-               CaseErrorStringifyHardCode( -29, kACPIncorrectFWErr );
-               
-               // Common Services Errors
-               
-               CaseErrorStringify( kUnknownErr );
-               CaseErrorStringify( kOptionErr );
-               CaseErrorStringify( kSelectorErr );
-               CaseErrorStringify( kExecutionStateErr );
-               CaseErrorStringify( kPathErr );
-               CaseErrorStringify( kParamErr );
-               CaseErrorStringify( kParamCountErr );
-               CaseErrorStringify( kCommandErr );
-               CaseErrorStringify( kIDErr );
-               CaseErrorStringify( kStateErr );
-               CaseErrorStringify( kRangeErr );
-               CaseErrorStringify( kRequestErr );
-               CaseErrorStringify( kResponseErr );
-               CaseErrorStringify( kChecksumErr );
-               CaseErrorStringify( kNotHandledErr );
-               CaseErrorStringify( kVersionErr );
-               CaseErrorStringify( kSignatureErr );
-               CaseErrorStringify( kFormatErr );
-               CaseErrorStringify( kNotInitializedErr );
-               CaseErrorStringify( kAlreadyInitializedErr );
-               CaseErrorStringify( kNotInUseErr );
-               CaseErrorStringify( kInUseErr );
-               CaseErrorStringify( kTimeoutErr );
-               CaseErrorStringify( kCanceledErr );
-               CaseErrorStringify( kAlreadyCanceledErr );
-               CaseErrorStringify( kCannotCancelErr );
-               CaseErrorStringify( kDeletedErr );
-               CaseErrorStringify( kNotFoundErr );
-               CaseErrorStringify( kNoMemoryErr );
-               CaseErrorStringify( kNoResourcesErr );
-               CaseErrorStringify( kDuplicateErr );
-               CaseErrorStringify( kImmutableErr );
-               CaseErrorStringify( kUnsupportedDataErr );
-               CaseErrorStringify( kIntegrityErr );
-               CaseErrorStringify( kIncompatibleErr );
-               CaseErrorStringify( kUnsupportedErr );
-               CaseErrorStringify( kUnexpectedErr );
-               CaseErrorStringify( kValueErr );
-               CaseErrorStringify( kNotReadableErr );
-               CaseErrorStringify( kNotWritableErr );
-               CaseErrorStringify( kBadReferenceErr );
-               CaseErrorStringify( kFlagErr );
-               CaseErrorStringify( kMalformedErr );
-               CaseErrorStringify( kSizeErr );
-               CaseErrorStringify( kNameErr );
-               CaseErrorStringify( kNotReadyErr );
-               CaseErrorStringify( kReadErr );
-               CaseErrorStringify( kWriteErr );
-               CaseErrorStringify( kMismatchErr );
-               CaseErrorStringify( kDateErr );
-               CaseErrorStringify( kUnderrunErr );
-               CaseErrorStringify( kOverrunErr );
-               CaseErrorStringify( kEndingErr );
-               CaseErrorStringify( kConnectionErr );
-               CaseErrorStringify( kAuthenticationErr );
-               CaseErrorStringify( kOpenErr );
-               CaseErrorStringify( kTypeErr );
-               CaseErrorStringify( kSkipErr );
-               CaseErrorStringify( kNoAckErr );
-               CaseErrorStringify( kCollisionErr );
-               CaseErrorStringify( kBackoffErr );
-               CaseErrorStringify( kNoAddressAckErr );
-               CaseErrorStringify( kBusyErr );
-               CaseErrorStringify( kNoSpaceErr );
-               
-               // mDNS/DNS-SD Errors
-               
-               CaseErrorStringifyHardCode( -65537, mStatus_UnknownErr );
-               CaseErrorStringifyHardCode( -65538, mStatus_NoSuchNameErr );
-               CaseErrorStringifyHardCode( -65539, mStatus_NoMemoryErr );
-               CaseErrorStringifyHardCode( -65540, mStatus_BadParamErr );
-               CaseErrorStringifyHardCode( -65541, mStatus_BadReferenceErr );
-               CaseErrorStringifyHardCode( -65542, mStatus_BadStateErr );
-               CaseErrorStringifyHardCode( -65543, mStatus_BadFlagsErr );
-               CaseErrorStringifyHardCode( -65544, mStatus_UnsupportedErr );
-               CaseErrorStringifyHardCode( -65545, mStatus_NotInitializedErr );
-               CaseErrorStringifyHardCode( -65546, mStatus_NoCache );
-               CaseErrorStringifyHardCode( -65547, mStatus_AlreadyRegistered );
-               CaseErrorStringifyHardCode( -65548, mStatus_NameConflict );
-               CaseErrorStringifyHardCode( -65549, mStatus_Invalid );
-               CaseErrorStringifyHardCode( -65550, mStatus_GrowCache );
-               CaseErrorStringifyHardCode( -65551, mStatus_BadInterfaceErr );
-               CaseErrorStringifyHardCode( -65552, mStatus_Incompatible );
-               CaseErrorStringifyHardCode( -65791, mStatus_ConfigChanged );
-               CaseErrorStringifyHardCode( -65792, mStatus_MemFree );
-               
-               // RSP Errors
-               
-               CaseErrorStringifyHardCode( -400000, kRSPUnknownErr );
-               CaseErrorStringifyHardCode( -400050, kRSPParamErr );
-               CaseErrorStringifyHardCode( -400108, kRSPNoMemoryErr );
-               CaseErrorStringifyHardCode( -405246, kRSPRangeErr );
-               CaseErrorStringifyHardCode( -409057, kRSPSizeErr );
-               CaseErrorStringifyHardCode( -400200, kRSPHardwareErr );
-               CaseErrorStringifyHardCode( -401712, kRSPTimeoutErr );  
-               CaseErrorStringifyHardCode( -402053, kRSPUnsupportedErr );
-               CaseErrorStringifyHardCode( -402419, kRSPIDErr );
-               CaseErrorStringifyHardCode( -403165, kRSPFlagErr );
-               CaseErrorString(                        -200000, "kRSPControllerStatusBase - 0x50" );           
-               CaseErrorString(                        -200080, "kRSPCommandSucceededErr - 0x50" );
-               CaseErrorString(                        -200001, "kRSPCommandFailedErr - 0x01" );
-               CaseErrorString(                        -200051, "kRSPChecksumErr - 0x33" );
-               CaseErrorString(                        -200132, "kRSPCommandTimeoutErr - 0x84" );
-               CaseErrorString(                        -200034, "kRSPPasswordRequiredErr - 0x22 OBSOLETE" );
-               CaseErrorString(                        -200128, "kRSPCanceledErr - 0x02 Async" );
-               
-               // XML Errors
-               
-               CaseErrorStringifyHardCode( -100043, kXMLNotFoundErr );
-               CaseErrorStringifyHardCode( -100050, kXMLParamErr );
-               CaseErrorStringifyHardCode( -100108, kXMLNoMemoryErr );
-               CaseErrorStringifyHardCode( -100206, kXMLFormatErr );
-               CaseErrorStringifyHardCode( -100586, kXMLNoRootElementErr );
-               CaseErrorStringifyHardCode( -101703, kXMLWrongDataTypeErr );
-               CaseErrorStringifyHardCode( -101726, kXMLKeyErr );
-               CaseErrorStringifyHardCode( -102053, kXMLUnsupportedErr );
-               CaseErrorStringifyHardCode( -102063, kXMLMissingElementErr );
-               CaseErrorStringifyHardCode( -103026, kXMLParseErr );
-               CaseErrorStringifyHardCode( -103159, kXMLBadDataErr );
-               CaseErrorStringifyHardCode( -103170, kXMLBadNameErr );
-               CaseErrorStringifyHardCode( -105246, kXMLRangeErr );
-               CaseErrorStringifyHardCode( -105251, kXMLUnknownElementErr );
-               CaseErrorStringifyHardCode( -108739, kXMLMalformedInputErr );
-               CaseErrorStringifyHardCode( -109057, kXMLBadSizeErr );
-               CaseErrorStringifyHardCode( -101730, kXMLMissingChildElementErr );
-               CaseErrorStringifyHardCode( -102107, kXMLMissingParentElementErr );
-               CaseErrorStringifyHardCode( -130587, kXMLNonRootElementErr );
-               CaseErrorStringifyHardCode( -102015, kXMLDateErr );
-
-       #if( __MACH__ )
-       
-               // Mach Errors
-
-               CaseErrorStringifyHardCode( 0x00002000, MACH_MSG_IPC_SPACE );
-               CaseErrorStringifyHardCode( 0x00001000, MACH_MSG_VM_SPACE );
-               CaseErrorStringifyHardCode( 0x00000800, MACH_MSG_IPC_KERNEL );
-               CaseErrorStringifyHardCode( 0x00000400, MACH_MSG_VM_KERNEL );
-               CaseErrorStringifyHardCode( 0x10000001, MACH_SEND_IN_PROGRESS );
-               CaseErrorStringifyHardCode( 0x10000002, MACH_SEND_INVALID_DATA );
-               CaseErrorStringifyHardCode( 0x10000003, MACH_SEND_INVALID_DEST );
-               CaseErrorStringifyHardCode( 0x10000004, MACH_SEND_TIMED_OUT );
-               CaseErrorStringifyHardCode( 0x10000007, MACH_SEND_INTERRUPTED );
-               CaseErrorStringifyHardCode( 0x10000008, MACH_SEND_MSG_TOO_SMALL );
-               CaseErrorStringifyHardCode( 0x10000009, MACH_SEND_INVALID_REPLY );
-               CaseErrorStringifyHardCode( 0x1000000A, MACH_SEND_INVALID_RIGHT );
-               CaseErrorStringifyHardCode( 0x1000000B, MACH_SEND_INVALID_NOTIFY );
-               CaseErrorStringifyHardCode( 0x1000000C, MACH_SEND_INVALID_MEMORY );
-               CaseErrorStringifyHardCode( 0x1000000D, MACH_SEND_NO_BUFFER );
-               CaseErrorStringifyHardCode( 0x1000000E, MACH_SEND_TOO_LARGE );
-               CaseErrorStringifyHardCode( 0x1000000F, MACH_SEND_INVALID_TYPE );
-               CaseErrorStringifyHardCode( 0x10000010, MACH_SEND_INVALID_HEADER );
-               CaseErrorStringifyHardCode( 0x10000011, MACH_SEND_INVALID_TRAILER );
-               CaseErrorStringifyHardCode( 0x10000015, MACH_SEND_INVALID_RT_OOL_SIZE );
-               CaseErrorStringifyHardCode( 0x10004001, MACH_RCV_IN_PROGRESS );
-               CaseErrorStringifyHardCode( 0x10004002, MACH_RCV_INVALID_NAME );
-               CaseErrorStringifyHardCode( 0x10004003, MACH_RCV_TIMED_OUT );
-               CaseErrorStringifyHardCode( 0x10004004, MACH_RCV_TOO_LARGE );
-               CaseErrorStringifyHardCode( 0x10004005, MACH_RCV_INTERRUPTED );
-               CaseErrorStringifyHardCode( 0x10004006, MACH_RCV_PORT_CHANGED );
-               CaseErrorStringifyHardCode( 0x10004007, MACH_RCV_INVALID_NOTIFY );
-               CaseErrorStringifyHardCode( 0x10004008, MACH_RCV_INVALID_DATA );
-               CaseErrorStringifyHardCode( 0x10004009, MACH_RCV_PORT_DIED );
-               CaseErrorStringifyHardCode( 0x1000400A, MACH_RCV_IN_SET );
-               CaseErrorStringifyHardCode( 0x1000400B, MACH_RCV_HEADER_ERROR );
-               CaseErrorStringifyHardCode( 0x1000400C, MACH_RCV_BODY_ERROR );
-               CaseErrorStringifyHardCode( 0x1000400D, MACH_RCV_INVALID_TYPE );
-               CaseErrorStringifyHardCode( 0x1000400E, MACH_RCV_SCATTER_SMALL );
-               CaseErrorStringifyHardCode( 0x1000400F, MACH_RCV_INVALID_TRAILER );
-               CaseErrorStringifyHardCode( 0x10004011, MACH_RCV_IN_PROGRESS_TIMED );
-
-               // Mach OSReturn Errors
-
-               CaseErrorStringifyHardCode( 0xDC000001, kOSReturnError );
-               CaseErrorStringifyHardCode( 0xDC004001, kOSMetaClassInternal );
-               CaseErrorStringifyHardCode( 0xDC004002, kOSMetaClassHasInstances );
-               CaseErrorStringifyHardCode( 0xDC004003, kOSMetaClassNoInit );
-               CaseErrorStringifyHardCode( 0xDC004004, kOSMetaClassNoTempData );
-               CaseErrorStringifyHardCode( 0xDC004005, kOSMetaClassNoDicts );
-               CaseErrorStringifyHardCode( 0xDC004006, kOSMetaClassNoKModSet );
-               CaseErrorStringifyHardCode( 0xDC004007, kOSMetaClassNoInsKModSet );
-               CaseErrorStringifyHardCode( 0xDC004008, kOSMetaClassNoSuper );
-               CaseErrorStringifyHardCode( 0xDC004009, kOSMetaClassInstNoSuper );
-               CaseErrorStringifyHardCode( 0xDC00400A, kOSMetaClassDuplicateClass );
-
-               // IOKit Errors
-
-               CaseErrorStringifyHardCode( 0xE00002BC, kIOReturnError );
-               CaseErrorStringifyHardCode( 0xE00002BD, kIOReturnNoMemory );
-               CaseErrorStringifyHardCode( 0xE00002BE, kIOReturnNoResources );
-               CaseErrorStringifyHardCode( 0xE00002BF, kIOReturnIPCError );
-               CaseErrorStringifyHardCode( 0xE00002C0, kIOReturnNoDevice );
-               CaseErrorStringifyHardCode( 0xE00002C1, kIOReturnNotPrivileged );
-               CaseErrorStringifyHardCode( 0xE00002C2, kIOReturnBadArgument );
-               CaseErrorStringifyHardCode( 0xE00002C3, kIOReturnLockedRead );
-               CaseErrorStringifyHardCode( 0xE00002C4, kIOReturnLockedWrite );
-               CaseErrorStringifyHardCode( 0xE00002C5, kIOReturnExclusiveAccess );
-               CaseErrorStringifyHardCode( 0xE00002C6, kIOReturnBadMessageID );
-               CaseErrorStringifyHardCode( 0xE00002C7, kIOReturnUnsupported );
-               CaseErrorStringifyHardCode( 0xE00002C8, kIOReturnVMError );
-               CaseErrorStringifyHardCode( 0xE00002C9, kIOReturnInternalError );
-               CaseErrorStringifyHardCode( 0xE00002CA, kIOReturnIOError );
-               CaseErrorStringifyHardCode( 0xE00002CC, kIOReturnCannotLock );
-               CaseErrorStringifyHardCode( 0xE00002CD, kIOReturnNotOpen );
-               CaseErrorStringifyHardCode( 0xE00002CE, kIOReturnNotReadable );
-               CaseErrorStringifyHardCode( 0xE00002CF, kIOReturnNotWritable );
-               CaseErrorStringifyHardCode( 0xE00002D0, kIOReturnNotAligned );
-               CaseErrorStringifyHardCode( 0xE00002D1, kIOReturnBadMedia );
-               CaseErrorStringifyHardCode( 0xE00002D2, kIOReturnStillOpen );
-               CaseErrorStringifyHardCode( 0xE00002D3, kIOReturnRLDError );
-               CaseErrorStringifyHardCode( 0xE00002D4, kIOReturnDMAError );
-               CaseErrorStringifyHardCode( 0xE00002D5, kIOReturnBusy );
-               CaseErrorStringifyHardCode( 0xE00002D6, kIOReturnTimeout );
-               CaseErrorStringifyHardCode( 0xE00002D7, kIOReturnOffline );
-               CaseErrorStringifyHardCode( 0xE00002D8, kIOReturnNotReady );
-               CaseErrorStringifyHardCode( 0xE00002D9, kIOReturnNotAttached );
-               CaseErrorStringifyHardCode( 0xE00002DA, kIOReturnNoChannels );
-               CaseErrorStringifyHardCode( 0xE00002DB, kIOReturnNoSpace );
-               CaseErrorStringifyHardCode( 0xE00002DD, kIOReturnPortExists );
-               CaseErrorStringifyHardCode( 0xE00002DE, kIOReturnCannotWire );
-               CaseErrorStringifyHardCode( 0xE00002DF, kIOReturnNoInterrupt );
-               CaseErrorStringifyHardCode( 0xE00002E0, kIOReturnNoFrames );
-               CaseErrorStringifyHardCode( 0xE00002E1, kIOReturnMessageTooLarge );
-               CaseErrorStringifyHardCode( 0xE00002E2, kIOReturnNotPermitted );
-               CaseErrorStringifyHardCode( 0xE00002E3, kIOReturnNoPower );
-               CaseErrorStringifyHardCode( 0xE00002E4, kIOReturnNoMedia );
-               CaseErrorStringifyHardCode( 0xE00002E5, kIOReturnUnformattedMedia );
-               CaseErrorStringifyHardCode( 0xE00002E6, kIOReturnUnsupportedMode );
-               CaseErrorStringifyHardCode( 0xE00002E7, kIOReturnUnderrun );
-               CaseErrorStringifyHardCode( 0xE00002E8, kIOReturnOverrun );
-               CaseErrorStringifyHardCode( 0xE00002E9, kIOReturnDeviceError     );
-               CaseErrorStringifyHardCode( 0xE00002EA, kIOReturnNoCompletion    );
-               CaseErrorStringifyHardCode( 0xE00002EB, kIOReturnAborted         );
-               CaseErrorStringifyHardCode( 0xE00002EC, kIOReturnNoBandwidth     );
-               CaseErrorStringifyHardCode( 0xE00002ED, kIOReturnNotResponding   );
-               CaseErrorStringifyHardCode( 0xE00002EE, kIOReturnIsoTooOld       );
-               CaseErrorStringifyHardCode( 0xE00002EF, kIOReturnIsoTooNew       );
-               CaseErrorStringifyHardCode( 0xE00002F0, kIOReturnNotFound );
-               CaseErrorStringifyHardCode( 0xE0000001, kIOReturnInvalid );
-
-               // IOKit FireWire Errors
-
-               CaseErrorStringifyHardCode( 0xE0008010, kIOFireWireResponseBase );
-               CaseErrorStringifyHardCode( 0xE0008020, kIOFireWireBusReset );
-               CaseErrorStringifyHardCode( 0xE0008001, kIOConfigNoEntry );
-               CaseErrorStringifyHardCode( 0xE0008002, kIOFireWirePending );
-               CaseErrorStringifyHardCode( 0xE0008003, kIOFireWireLastDCLToken );
-               CaseErrorStringifyHardCode( 0xE0008004, kIOFireWireConfigROMInvalid );
-               CaseErrorStringifyHardCode( 0xE0008005, kIOFireWireAlreadyRegistered );
-               CaseErrorStringifyHardCode( 0xE0008006, kIOFireWireMultipleTalkers );
-               CaseErrorStringifyHardCode( 0xE0008007, kIOFireWireChannelActive );
-               CaseErrorStringifyHardCode( 0xE0008008, kIOFireWireNoListenerOrTalker );
-               CaseErrorStringifyHardCode( 0xE0008009, kIOFireWireNoChannels );
-               CaseErrorStringifyHardCode( 0xE000800A, kIOFireWireChannelNotAvailable );
-               CaseErrorStringifyHardCode( 0xE000800B, kIOFireWireSeparateBus );
-               CaseErrorStringifyHardCode( 0xE000800C, kIOFireWireBadSelfIDs );
-               CaseErrorStringifyHardCode( 0xE000800D, kIOFireWireLowCableVoltage );
-               CaseErrorStringifyHardCode( 0xE000800E, kIOFireWireInsufficientPower );
-               CaseErrorStringifyHardCode( 0xE000800F, kIOFireWireOutOfTLabels );
-               CaseErrorStringifyHardCode( 0xE0008101, kIOFireWireBogusDCLProgram );
-               CaseErrorStringifyHardCode( 0xE0008102, kIOFireWireTalkingAndListening );
-               CaseErrorStringifyHardCode( 0xE0008103, kIOFireWireHardwareSlept );
-               CaseErrorStringifyHardCode( 0xE00087D0, kIOFWMessageServiceIsRequestingClose );
-               CaseErrorStringifyHardCode( 0xE00087D1, kIOFWMessagePowerStateChanged );
-               CaseErrorStringifyHardCode( 0xE00087D2, kIOFWMessageTopologyChanged );
-
-               // IOKit USB Errors
-                               
-               CaseErrorStringifyHardCode( 0xE0004061, kIOUSBUnknownPipeErr );
-               CaseErrorStringifyHardCode( 0xE0004060, kIOUSBTooManyPipesErr );
-               CaseErrorStringifyHardCode( 0xE000405F, kIOUSBNoAsyncPortErr );
-               CaseErrorStringifyHardCode( 0xE000405E, kIOUSBNotEnoughPipesErr );
-               CaseErrorStringifyHardCode( 0xE000405D, kIOUSBNotEnoughPowerErr );
-               CaseErrorStringifyHardCode( 0xE0004057, kIOUSBEndpointNotFound );
-               CaseErrorStringifyHardCode( 0xE0004056, kIOUSBConfigNotFound );
-               CaseErrorStringifyHardCode( 0xE0004051, kIOUSBTransactionTimeout );
-               CaseErrorStringifyHardCode( 0xE0004050, kIOUSBTransactionReturned );
-               CaseErrorStringifyHardCode( 0xE000404F, kIOUSBPipeStalled );
-               CaseErrorStringifyHardCode( 0xE000404E, kIOUSBInterfaceNotFound );
-               CaseErrorStringifyHardCode( 0xE000404D, kIOUSBLowLatencyBufferNotPreviouslyAllocated );
-               CaseErrorStringifyHardCode( 0xE000404C, kIOUSBLowLatencyFrameListNotPreviouslyAllocated );
-               CaseErrorStringifyHardCode( 0xE000404B, kIOUSBHighSpeedSplitError );
-               CaseErrorStringifyHardCode( 0xE0004010, kIOUSBLinkErr );
-               CaseErrorStringifyHardCode( 0xE000400F, kIOUSBNotSent2Err );
-               CaseErrorStringifyHardCode( 0xE000400E, kIOUSBNotSent1Err );
-               CaseErrorStringifyHardCode( 0xE000400D, kIOUSBBufferUnderrunErr );
-               CaseErrorStringifyHardCode( 0xE000400C, kIOUSBBufferOverrunErr );
-               CaseErrorStringifyHardCode( 0xE000400B, kIOUSBReserved2Err );
-               CaseErrorStringifyHardCode( 0xE000400A, kIOUSBReserved1Err );
-               CaseErrorStringifyHardCode( 0xE0004007, kIOUSBWrongPIDErr );
-               CaseErrorStringifyHardCode( 0xE0004006, kIOUSBPIDCheckErr );
-               CaseErrorStringifyHardCode( 0xE0004003, kIOUSBDataToggleErr );
-               CaseErrorStringifyHardCode( 0xE0004002, kIOUSBBitstufErr );
-               CaseErrorStringifyHardCode( 0xE0004001, kIOUSBCRCErr );
-       
-       #endif  // __MACH__
-
-               // Other Errors
-               
-               default:
-                       s = NULL;
-                       #if( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
-                               if( inBuffer && ( inBufferSize > 0 ) )
-                               {
-                                       DWORD           n;
-                                       
-                                       n = FormatMessageA( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, (DWORD) inErrorCode, 
-                                               MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), buffer, sizeof( buffer ), NULL );
-                                       if( n > 0 )
-                                       {
-                                               // Remove any trailing CR's or LF's since some messages have them.
-                                               
-                                               while( ( n > 0 ) && isspace( ( (unsigned char *) buffer )[ n - 1 ] ) )
-                                               {
-                                                       buffer[ --n ] = '\0';
-                                               }
-                                               s = buffer;
-                                       }
-                               }
-                       #endif
-                       
-                       if( !s )
-                       {
-                               #if( !TARGET_API_MAC_OSX_KERNEL && !TARGET_OS_WINDOWS_CE )
-                                       s = strerror( inErrorCode );
-                               #endif
-                               if( !s )
-                               {
-                                       s = "<unknown error code>";
-                               }
-                       }
-                       break;
-       }
-       
-       // Copy the string to the output buffer. If no buffer is supplied or it is empty, return an empty string.
-       
-       if( inBuffer && ( inBufferSize > 0 ) )
-       {
-               dst = inBuffer;
-               end = dst + ( inBufferSize - 1 );
-               while( ( ( end - dst ) > 0 ) && ( *s != '\0' ) )
-               {
-                       *dst++ = *s++;
-               }
-               *dst = '\0';
-               s = inBuffer;
-       }
-       return( s );
+
+    switch( inErrorCode )
+    {
+        #define CaseErrorString( X, STR )                   case X: s = STR; break
+        #define CaseErrorStringify( X )                     case X: s = # X; break
+        #define CaseErrorStringifyHardCode( VALUE, X )      case VALUE: s = # X; break
+
+        // General Errors
+
+        CaseErrorString( 0,  "no error" );
+        CaseErrorString( 1,  "in-progress/waiting" );
+        CaseErrorString( -1, "catch-all unknown error" );
+
+        // ACP Errors
+
+        CaseErrorStringifyHardCode( -2,  kACPBadRequestErr );
+        CaseErrorStringifyHardCode( -3,  kACPNoMemoryErr );
+        CaseErrorStringifyHardCode( -4,  kACPBadParamErr );
+        CaseErrorStringifyHardCode( -5,  kACPNotFoundErr );
+        CaseErrorStringifyHardCode( -6,  kACPBadChecksumErr );
+        CaseErrorStringifyHardCode( -7,  kACPCommandNotHandledErr );
+        CaseErrorStringifyHardCode( -8,  kACPNetworkErr );
+        CaseErrorStringifyHardCode( -9,  kACPDuplicateCommandHandlerErr );
+        CaseErrorStringifyHardCode( -10, kACPUnknownPropertyErr );
+        CaseErrorStringifyHardCode( -11, kACPImmutablePropertyErr );
+        CaseErrorStringifyHardCode( -12, kACPBadPropertyValueErr );
+        CaseErrorStringifyHardCode( -13, kACPNoResourcesErr );
+        CaseErrorStringifyHardCode( -14, kACPBadOptionErr );
+        CaseErrorStringifyHardCode( -15, kACPBadSizeErr );
+        CaseErrorStringifyHardCode( -16, kACPBadPasswordErr );
+        CaseErrorStringifyHardCode( -17, kACPNotInitializedErr );
+        CaseErrorStringifyHardCode( -18, kACPNonReadablePropertyErr );
+        CaseErrorStringifyHardCode( -19, kACPBadVersionErr );
+        CaseErrorStringifyHardCode( -20, kACPBadSignatureErr );
+        CaseErrorStringifyHardCode( -21, kACPBadIndexErr );
+        CaseErrorStringifyHardCode( -22, kACPUnsupportedErr );
+        CaseErrorStringifyHardCode( -23, kACPInUseErr );
+        CaseErrorStringifyHardCode( -24, kACPParamCountErr );
+        CaseErrorStringifyHardCode( -25, kACPIDErr );
+        CaseErrorStringifyHardCode( -26, kACPFormatErr );
+        CaseErrorStringifyHardCode( -27, kACPUnknownUserErr );
+        CaseErrorStringifyHardCode( -28, kACPAccessDeniedErr );
+        CaseErrorStringifyHardCode( -29, kACPIncorrectFWErr );
+
+        // Common Services Errors
+
+        CaseErrorStringify( kUnknownErr );
+        CaseErrorStringify( kOptionErr );
+        CaseErrorStringify( kSelectorErr );
+        CaseErrorStringify( kExecutionStateErr );
+        CaseErrorStringify( kPathErr );
+        CaseErrorStringify( kParamErr );
+        CaseErrorStringify( kParamCountErr );
+        CaseErrorStringify( kCommandErr );
+        CaseErrorStringify( kIDErr );
+        CaseErrorStringify( kStateErr );
+        CaseErrorStringify( kRangeErr );
+        CaseErrorStringify( kRequestErr );
+        CaseErrorStringify( kResponseErr );
+        CaseErrorStringify( kChecksumErr );
+        CaseErrorStringify( kNotHandledErr );
+        CaseErrorStringify( kVersionErr );
+        CaseErrorStringify( kSignatureErr );
+        CaseErrorStringify( kFormatErr );
+        CaseErrorStringify( kNotInitializedErr );
+        CaseErrorStringify( kAlreadyInitializedErr );
+        CaseErrorStringify( kNotInUseErr );
+        CaseErrorStringify( kInUseErr );
+        CaseErrorStringify( kTimeoutErr );
+        CaseErrorStringify( kCanceledErr );
+        CaseErrorStringify( kAlreadyCanceledErr );
+        CaseErrorStringify( kCannotCancelErr );
+        CaseErrorStringify( kDeletedErr );
+        CaseErrorStringify( kNotFoundErr );
+        CaseErrorStringify( kNoMemoryErr );
+        CaseErrorStringify( kNoResourcesErr );
+        CaseErrorStringify( kDuplicateErr );
+        CaseErrorStringify( kImmutableErr );
+        CaseErrorStringify( kUnsupportedDataErr );
+        CaseErrorStringify( kIntegrityErr );
+        CaseErrorStringify( kIncompatibleErr );
+        CaseErrorStringify( kUnsupportedErr );
+        CaseErrorStringify( kUnexpectedErr );
+        CaseErrorStringify( kValueErr );
+        CaseErrorStringify( kNotReadableErr );
+        CaseErrorStringify( kNotWritableErr );
+        CaseErrorStringify( kBadReferenceErr );
+        CaseErrorStringify( kFlagErr );
+        CaseErrorStringify( kMalformedErr );
+        CaseErrorStringify( kSizeErr );
+        CaseErrorStringify( kNameErr );
+        CaseErrorStringify( kNotReadyErr );
+        CaseErrorStringify( kReadErr );
+        CaseErrorStringify( kWriteErr );
+        CaseErrorStringify( kMismatchErr );
+        CaseErrorStringify( kDateErr );
+        CaseErrorStringify( kUnderrunErr );
+        CaseErrorStringify( kOverrunErr );
+        CaseErrorStringify( kEndingErr );
+        CaseErrorStringify( kConnectionErr );
+        CaseErrorStringify( kAuthenticationErr );
+        CaseErrorStringify( kOpenErr );
+        CaseErrorStringify( kTypeErr );
+        CaseErrorStringify( kSkipErr );
+        CaseErrorStringify( kNoAckErr );
+        CaseErrorStringify( kCollisionErr );
+        CaseErrorStringify( kBackoffErr );
+        CaseErrorStringify( kNoAddressAckErr );
+        CaseErrorStringify( kBusyErr );
+        CaseErrorStringify( kNoSpaceErr );
+
+        // mDNS/DNS-SD Errors
+
+        CaseErrorStringifyHardCode( -65537, mStatus_UnknownErr );
+        CaseErrorStringifyHardCode( -65538, mStatus_NoSuchNameErr );
+        CaseErrorStringifyHardCode( -65539, mStatus_NoMemoryErr );
+        CaseErrorStringifyHardCode( -65540, mStatus_BadParamErr );
+        CaseErrorStringifyHardCode( -65541, mStatus_BadReferenceErr );
+        CaseErrorStringifyHardCode( -65542, mStatus_BadStateErr );
+        CaseErrorStringifyHardCode( -65543, mStatus_BadFlagsErr );
+        CaseErrorStringifyHardCode( -65544, mStatus_UnsupportedErr );
+        CaseErrorStringifyHardCode( -65545, mStatus_NotInitializedErr );
+        CaseErrorStringifyHardCode( -65546, mStatus_NoCache );
+        CaseErrorStringifyHardCode( -65547, mStatus_AlreadyRegistered );
+        CaseErrorStringifyHardCode( -65548, mStatus_NameConflict );
+        CaseErrorStringifyHardCode( -65549, mStatus_Invalid );
+        CaseErrorStringifyHardCode( -65550, mStatus_GrowCache );
+        CaseErrorStringifyHardCode( -65551, mStatus_BadInterfaceErr );
+        CaseErrorStringifyHardCode( -65552, mStatus_Incompatible );
+        CaseErrorStringifyHardCode( -65791, mStatus_ConfigChanged );
+        CaseErrorStringifyHardCode( -65792, mStatus_MemFree );
+
+        // RSP Errors
+
+        CaseErrorStringifyHardCode( -400000, kRSPUnknownErr );
+        CaseErrorStringifyHardCode( -400050, kRSPParamErr );
+        CaseErrorStringifyHardCode( -400108, kRSPNoMemoryErr );
+        CaseErrorStringifyHardCode( -405246, kRSPRangeErr );
+        CaseErrorStringifyHardCode( -409057, kRSPSizeErr );
+        CaseErrorStringifyHardCode( -400200, kRSPHardwareErr );
+        CaseErrorStringifyHardCode( -401712, kRSPTimeoutErr );
+        CaseErrorStringifyHardCode( -402053, kRSPUnsupportedErr );
+        CaseErrorStringifyHardCode( -402419, kRSPIDErr );
+        CaseErrorStringifyHardCode( -403165, kRSPFlagErr );
+        CaseErrorString(            -200000, "kRSPControllerStatusBase - 0x50" );
+        CaseErrorString(            -200080, "kRSPCommandSucceededErr - 0x50" );
+        CaseErrorString(            -200001, "kRSPCommandFailedErr - 0x01" );
+        CaseErrorString(            -200051, "kRSPChecksumErr - 0x33" );
+        CaseErrorString(            -200132, "kRSPCommandTimeoutErr - 0x84" );
+        CaseErrorString(            -200034, "kRSPPasswordRequiredErr - 0x22 OBSOLETE" );
+        CaseErrorString(            -200128, "kRSPCanceledErr - 0x02 Async" );
+
+        // XML Errors
+
+        CaseErrorStringifyHardCode( -100043, kXMLNotFoundErr );
+        CaseErrorStringifyHardCode( -100050, kXMLParamErr );
+        CaseErrorStringifyHardCode( -100108, kXMLNoMemoryErr );
+        CaseErrorStringifyHardCode( -100206, kXMLFormatErr );
+        CaseErrorStringifyHardCode( -100586, kXMLNoRootElementErr );
+        CaseErrorStringifyHardCode( -101703, kXMLWrongDataTypeErr );
+        CaseErrorStringifyHardCode( -101726, kXMLKeyErr );
+        CaseErrorStringifyHardCode( -102053, kXMLUnsupportedErr );
+        CaseErrorStringifyHardCode( -102063, kXMLMissingElementErr );
+        CaseErrorStringifyHardCode( -103026, kXMLParseErr );
+        CaseErrorStringifyHardCode( -103159, kXMLBadDataErr );
+        CaseErrorStringifyHardCode( -103170, kXMLBadNameErr );
+        CaseErrorStringifyHardCode( -105246, kXMLRangeErr );
+        CaseErrorStringifyHardCode( -105251, kXMLUnknownElementErr );
+        CaseErrorStringifyHardCode( -108739, kXMLMalformedInputErr );
+        CaseErrorStringifyHardCode( -109057, kXMLBadSizeErr );
+        CaseErrorStringifyHardCode( -101730, kXMLMissingChildElementErr );
+        CaseErrorStringifyHardCode( -102107, kXMLMissingParentElementErr );
+        CaseErrorStringifyHardCode( -130587, kXMLNonRootElementErr );
+        CaseErrorStringifyHardCode( -102015, kXMLDateErr );
+
+    #if ( __MACH__ )
+
+        // Mach Errors
+
+        CaseErrorStringifyHardCode( 0x00002000, MACH_MSG_IPC_SPACE );
+        CaseErrorStringifyHardCode( 0x00001000, MACH_MSG_VM_SPACE );
+        CaseErrorStringifyHardCode( 0x00000800, MACH_MSG_IPC_KERNEL );
+        CaseErrorStringifyHardCode( 0x00000400, MACH_MSG_VM_KERNEL );
+        CaseErrorStringifyHardCode( 0x10000001, MACH_SEND_IN_PROGRESS );
+        CaseErrorStringifyHardCode( 0x10000002, MACH_SEND_INVALID_DATA );
+        CaseErrorStringifyHardCode( 0x10000003, MACH_SEND_INVALID_DEST );
+        CaseErrorStringifyHardCode( 0x10000004, MACH_SEND_TIMED_OUT );
+        CaseErrorStringifyHardCode( 0x10000007, MACH_SEND_INTERRUPTED );
+        CaseErrorStringifyHardCode( 0x10000008, MACH_SEND_MSG_TOO_SMALL );
+        CaseErrorStringifyHardCode( 0x10000009, MACH_SEND_INVALID_REPLY );
+        CaseErrorStringifyHardCode( 0x1000000A, MACH_SEND_INVALID_RIGHT );
+        CaseErrorStringifyHardCode( 0x1000000B, MACH_SEND_INVALID_NOTIFY );
+        CaseErrorStringifyHardCode( 0x1000000C, MACH_SEND_INVALID_MEMORY );
+        CaseErrorStringifyHardCode( 0x1000000D, MACH_SEND_NO_BUFFER );
+        CaseErrorStringifyHardCode( 0x1000000E, MACH_SEND_TOO_LARGE );
+        CaseErrorStringifyHardCode( 0x1000000F, MACH_SEND_INVALID_TYPE );
+        CaseErrorStringifyHardCode( 0x10000010, MACH_SEND_INVALID_HEADER );
+        CaseErrorStringifyHardCode( 0x10000011, MACH_SEND_INVALID_TRAILER );
+        CaseErrorStringifyHardCode( 0x10000015, MACH_SEND_INVALID_RT_OOL_SIZE );
+        CaseErrorStringifyHardCode( 0x10004001, MACH_RCV_IN_PROGRESS );
+        CaseErrorStringifyHardCode( 0x10004002, MACH_RCV_INVALID_NAME );
+        CaseErrorStringifyHardCode( 0x10004003, MACH_RCV_TIMED_OUT );
+        CaseErrorStringifyHardCode( 0x10004004, MACH_RCV_TOO_LARGE );
+        CaseErrorStringifyHardCode( 0x10004005, MACH_RCV_INTERRUPTED );
+        CaseErrorStringifyHardCode( 0x10004006, MACH_RCV_PORT_CHANGED );
+        CaseErrorStringifyHardCode( 0x10004007, MACH_RCV_INVALID_NOTIFY );
+        CaseErrorStringifyHardCode( 0x10004008, MACH_RCV_INVALID_DATA );
+        CaseErrorStringifyHardCode( 0x10004009, MACH_RCV_PORT_DIED );
+        CaseErrorStringifyHardCode( 0x1000400A, MACH_RCV_IN_SET );
+        CaseErrorStringifyHardCode( 0x1000400B, MACH_RCV_HEADER_ERROR );
+        CaseErrorStringifyHardCode( 0x1000400C, MACH_RCV_BODY_ERROR );
+        CaseErrorStringifyHardCode( 0x1000400D, MACH_RCV_INVALID_TYPE );
+        CaseErrorStringifyHardCode( 0x1000400E, MACH_RCV_SCATTER_SMALL );
+        CaseErrorStringifyHardCode( 0x1000400F, MACH_RCV_INVALID_TRAILER );
+        CaseErrorStringifyHardCode( 0x10004011, MACH_RCV_IN_PROGRESS_TIMED );
+
+        // Mach OSReturn Errors
+
+        CaseErrorStringifyHardCode( 0xDC000001, kOSReturnError );
+        CaseErrorStringifyHardCode( 0xDC004001, kOSMetaClassInternal );
+        CaseErrorStringifyHardCode( 0xDC004002, kOSMetaClassHasInstances );
+        CaseErrorStringifyHardCode( 0xDC004003, kOSMetaClassNoInit );
+        CaseErrorStringifyHardCode( 0xDC004004, kOSMetaClassNoTempData );
+        CaseErrorStringifyHardCode( 0xDC004005, kOSMetaClassNoDicts );
+        CaseErrorStringifyHardCode( 0xDC004006, kOSMetaClassNoKModSet );
+        CaseErrorStringifyHardCode( 0xDC004007, kOSMetaClassNoInsKModSet );
+        CaseErrorStringifyHardCode( 0xDC004008, kOSMetaClassNoSuper );
+        CaseErrorStringifyHardCode( 0xDC004009, kOSMetaClassInstNoSuper );
+        CaseErrorStringifyHardCode( 0xDC00400A, kOSMetaClassDuplicateClass );
+
+        // IOKit Errors
+
+        CaseErrorStringifyHardCode( 0xE00002BC, kIOReturnError );
+        CaseErrorStringifyHardCode( 0xE00002BD, kIOReturnNoMemory );
+        CaseErrorStringifyHardCode( 0xE00002BE, kIOReturnNoResources );
+        CaseErrorStringifyHardCode( 0xE00002BF, kIOReturnIPCError );
+        CaseErrorStringifyHardCode( 0xE00002C0, kIOReturnNoDevice );
+        CaseErrorStringifyHardCode( 0xE00002C1, kIOReturnNotPrivileged );
+        CaseErrorStringifyHardCode( 0xE00002C2, kIOReturnBadArgument );
+        CaseErrorStringifyHardCode( 0xE00002C3, kIOReturnLockedRead );
+        CaseErrorStringifyHardCode( 0xE00002C4, kIOReturnLockedWrite );
+        CaseErrorStringifyHardCode( 0xE00002C5, kIOReturnExclusiveAccess );
+        CaseErrorStringifyHardCode( 0xE00002C6, kIOReturnBadMessageID );
+        CaseErrorStringifyHardCode( 0xE00002C7, kIOReturnUnsupported );
+        CaseErrorStringifyHardCode( 0xE00002C8, kIOReturnVMError );
+        CaseErrorStringifyHardCode( 0xE00002C9, kIOReturnInternalError );
+        CaseErrorStringifyHardCode( 0xE00002CA, kIOReturnIOError );
+        CaseErrorStringifyHardCode( 0xE00002CC, kIOReturnCannotLock );
+        CaseErrorStringifyHardCode( 0xE00002CD, kIOReturnNotOpen );
+        CaseErrorStringifyHardCode( 0xE00002CE, kIOReturnNotReadable );
+        CaseErrorStringifyHardCode( 0xE00002CF, kIOReturnNotWritable );
+        CaseErrorStringifyHardCode( 0xE00002D0, kIOReturnNotAligned );
+        CaseErrorStringifyHardCode( 0xE00002D1, kIOReturnBadMedia );
+        CaseErrorStringifyHardCode( 0xE00002D2, kIOReturnStillOpen );
+        CaseErrorStringifyHardCode( 0xE00002D3, kIOReturnRLDError );
+        CaseErrorStringifyHardCode( 0xE00002D4, kIOReturnDMAError );
+        CaseErrorStringifyHardCode( 0xE00002D5, kIOReturnBusy );
+        CaseErrorStringifyHardCode( 0xE00002D6, kIOReturnTimeout );
+        CaseErrorStringifyHardCode( 0xE00002D7, kIOReturnOffline );
+        CaseErrorStringifyHardCode( 0xE00002D8, kIOReturnNotReady );
+        CaseErrorStringifyHardCode( 0xE00002D9, kIOReturnNotAttached );
+        CaseErrorStringifyHardCode( 0xE00002DA, kIOReturnNoChannels );
+        CaseErrorStringifyHardCode( 0xE00002DB, kIOReturnNoSpace );
+        CaseErrorStringifyHardCode( 0xE00002DD, kIOReturnPortExists );
+        CaseErrorStringifyHardCode( 0xE00002DE, kIOReturnCannotWire );
+        CaseErrorStringifyHardCode( 0xE00002DF, kIOReturnNoInterrupt );
+        CaseErrorStringifyHardCode( 0xE00002E0, kIOReturnNoFrames );
+        CaseErrorStringifyHardCode( 0xE00002E1, kIOReturnMessageTooLarge );
+        CaseErrorStringifyHardCode( 0xE00002E2, kIOReturnNotPermitted );
+        CaseErrorStringifyHardCode( 0xE00002E3, kIOReturnNoPower );
+        CaseErrorStringifyHardCode( 0xE00002E4, kIOReturnNoMedia );
+        CaseErrorStringifyHardCode( 0xE00002E5, kIOReturnUnformattedMedia );
+        CaseErrorStringifyHardCode( 0xE00002E6, kIOReturnUnsupportedMode );
+        CaseErrorStringifyHardCode( 0xE00002E7, kIOReturnUnderrun );
+        CaseErrorStringifyHardCode( 0xE00002E8, kIOReturnOverrun );
+        CaseErrorStringifyHardCode( 0xE00002E9, kIOReturnDeviceError     );
+        CaseErrorStringifyHardCode( 0xE00002EA, kIOReturnNoCompletion    );
+        CaseErrorStringifyHardCode( 0xE00002EB, kIOReturnAborted     );
+        CaseErrorStringifyHardCode( 0xE00002EC, kIOReturnNoBandwidth     );
+        CaseErrorStringifyHardCode( 0xE00002ED, kIOReturnNotResponding   );
+        CaseErrorStringifyHardCode( 0xE00002EE, kIOReturnIsoTooOld   );
+        CaseErrorStringifyHardCode( 0xE00002EF, kIOReturnIsoTooNew   );
+        CaseErrorStringifyHardCode( 0xE00002F0, kIOReturnNotFound );
+        CaseErrorStringifyHardCode( 0xE0000001, kIOReturnInvalid );
+
+        // IOKit FireWire Errors
+
+        CaseErrorStringifyHardCode( 0xE0008010, kIOFireWireResponseBase );
+        CaseErrorStringifyHardCode( 0xE0008020, kIOFireWireBusReset );
+        CaseErrorStringifyHardCode( 0xE0008001, kIOConfigNoEntry );
+        CaseErrorStringifyHardCode( 0xE0008002, kIOFireWirePending );
+        CaseErrorStringifyHardCode( 0xE0008003, kIOFireWireLastDCLToken );
+        CaseErrorStringifyHardCode( 0xE0008004, kIOFireWireConfigROMInvalid );
+        CaseErrorStringifyHardCode( 0xE0008005, kIOFireWireAlreadyRegistered );
+        CaseErrorStringifyHardCode( 0xE0008006, kIOFireWireMultipleTalkers );
+        CaseErrorStringifyHardCode( 0xE0008007, kIOFireWireChannelActive );
+        CaseErrorStringifyHardCode( 0xE0008008, kIOFireWireNoListenerOrTalker );
+        CaseErrorStringifyHardCode( 0xE0008009, kIOFireWireNoChannels );
+        CaseErrorStringifyHardCode( 0xE000800A, kIOFireWireChannelNotAvailable );
+        CaseErrorStringifyHardCode( 0xE000800B, kIOFireWireSeparateBus );
+        CaseErrorStringifyHardCode( 0xE000800C, kIOFireWireBadSelfIDs );
+        CaseErrorStringifyHardCode( 0xE000800D, kIOFireWireLowCableVoltage );
+        CaseErrorStringifyHardCode( 0xE000800E, kIOFireWireInsufficientPower );
+        CaseErrorStringifyHardCode( 0xE000800F, kIOFireWireOutOfTLabels );
+        CaseErrorStringifyHardCode( 0xE0008101, kIOFireWireBogusDCLProgram );
+        CaseErrorStringifyHardCode( 0xE0008102, kIOFireWireTalkingAndListening );
+        CaseErrorStringifyHardCode( 0xE0008103, kIOFireWireHardwareSlept );
+        CaseErrorStringifyHardCode( 0xE00087D0, kIOFWMessageServiceIsRequestingClose );
+        CaseErrorStringifyHardCode( 0xE00087D1, kIOFWMessagePowerStateChanged );
+        CaseErrorStringifyHardCode( 0xE00087D2, kIOFWMessageTopologyChanged );
+
+        // IOKit USB Errors
+
+        CaseErrorStringifyHardCode( 0xE0004061, kIOUSBUnknownPipeErr );
+        CaseErrorStringifyHardCode( 0xE0004060, kIOUSBTooManyPipesErr );
+        CaseErrorStringifyHardCode( 0xE000405F, kIOUSBNoAsyncPortErr );
+        CaseErrorStringifyHardCode( 0xE000405E, kIOUSBNotEnoughPipesErr );
+        CaseErrorStringifyHardCode( 0xE000405D, kIOUSBNotEnoughPowerErr );
+        CaseErrorStringifyHardCode( 0xE0004057, kIOUSBEndpointNotFound );
+        CaseErrorStringifyHardCode( 0xE0004056, kIOUSBConfigNotFound );
+        CaseErrorStringifyHardCode( 0xE0004051, kIOUSBTransactionTimeout );
+        CaseErrorStringifyHardCode( 0xE0004050, kIOUSBTransactionReturned );
+        CaseErrorStringifyHardCode( 0xE000404F, kIOUSBPipeStalled );
+        CaseErrorStringifyHardCode( 0xE000404E, kIOUSBInterfaceNotFound );
+        CaseErrorStringifyHardCode( 0xE000404D, kIOUSBLowLatencyBufferNotPreviouslyAllocated );
+        CaseErrorStringifyHardCode( 0xE000404C, kIOUSBLowLatencyFrameListNotPreviouslyAllocated );
+        CaseErrorStringifyHardCode( 0xE000404B, kIOUSBHighSpeedSplitError );
+        CaseErrorStringifyHardCode( 0xE0004010, kIOUSBLinkErr );
+        CaseErrorStringifyHardCode( 0xE000400F, kIOUSBNotSent2Err );
+        CaseErrorStringifyHardCode( 0xE000400E, kIOUSBNotSent1Err );
+        CaseErrorStringifyHardCode( 0xE000400D, kIOUSBBufferUnderrunErr );
+        CaseErrorStringifyHardCode( 0xE000400C, kIOUSBBufferOverrunErr );
+        CaseErrorStringifyHardCode( 0xE000400B, kIOUSBReserved2Err );
+        CaseErrorStringifyHardCode( 0xE000400A, kIOUSBReserved1Err );
+        CaseErrorStringifyHardCode( 0xE0004007, kIOUSBWrongPIDErr );
+        CaseErrorStringifyHardCode( 0xE0004006, kIOUSBPIDCheckErr );
+        CaseErrorStringifyHardCode( 0xE0004003, kIOUSBDataToggleErr );
+        CaseErrorStringifyHardCode( 0xE0004002, kIOUSBBitstufErr );
+        CaseErrorStringifyHardCode( 0xE0004001, kIOUSBCRCErr );
+
+    #endif  // __MACH__
+
+    // Other Errors
+
+    default:
+        s = NULL;
+            #if ( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
+        if( inBuffer && ( inBufferSize > 0 ) )
+        {
+            DWORD n;
+
+            n = FormatMessageA( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, (DWORD) inErrorCode,
+                                MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), buffer, sizeof( buffer ), NULL );
+            if( n > 0 )
+            {
+                // Remove any trailing CR's or LF's since some messages have them.
+
+                while( ( n > 0 ) && isspace( ( (unsigned char *) buffer )[ n - 1 ] ) )
+                {
+                    buffer[ --n ] = '\0';
+                }
+                s = buffer;
+            }
+        }
+            #endif
+
+        if( !s )
+        {
+                #if ( !TARGET_API_MAC_OSX_KERNEL && !TARGET_OS_WINDOWS_CE )
+            s = strerror( inErrorCode );
+                #endif
+            if( !s )
+            {
+                s = "<unknown error code>";
+            }
+        }
+        break;
+    }
+
+    // Copy the string to the output buffer. If no buffer is supplied or it is empty, return an empty string.
+
+    if( inBuffer && ( inBufferSize > 0 ) )
+    {
+        dst = inBuffer;
+        end = dst + ( inBufferSize - 1 );
+        while( ( ( end - dst ) > 0 ) && ( *s != '\0' ) )
+        {
+            *dst++ = *s++;
+        }
+        *dst = '\0';
+        s = inBuffer;
+    }
+    return( s );
 }
 
 //===========================================================================================================================
@@ -2046,576 +2019,576 @@ DEBUG_EXPORT const char *     DebugGetErrorString( int_least32_t inErrorCode, char *
 //===========================================================================================================================
 
 DEBUG_EXPORT size_t
-       DebugHexDump( 
-               DebugLevel              inLevel, 
-               int                             inIndent, 
-               const char *    inLabel, 
-               size_t                  inLabelSize, 
-               int                             inLabelMinWidth, 
-               const char *    inType, 
-               size_t                  inTypeSize, 
-               const void *    inDataStart, 
-               const void *    inData, 
-               size_t                  inDataSize, 
-               DebugFlags              inFlags, 
-               char *                  outBuffer, 
-               size_t                  inBufferSize )
+DebugHexDump(
+    DebugLevel inLevel,
+    int inIndent,
+    const char *    inLabel,
+    size_t inLabelSize,
+    int inLabelMinWidth,
+    const char *    inType,
+    size_t inTypeSize,
+    const void *    inDataStart,
+    const void *    inData,
+    size_t inDataSize,
+    DebugFlags inFlags,
+    char *          outBuffer,
+    size_t inBufferSize )
 {
-       static const char               kHexChars[] = "0123456789ABCDEF";
-       const uint8_t *                 start;
-       const uint8_t *                 src;
-       char *                                  dst;
-       char *                                  end;
-       size_t                                  n;
-       int                                             offset;
-       int                                             width;
-       const char *                    newline;
-       char                                    separator[ 8 ];
-       char *                                  s;
-       
-       DEBUG_UNUSED( inType );
-       DEBUG_UNUSED( inTypeSize );
-       
-       // Set up the function-wide variables.
-       
-       if( inLabelSize == kSizeCString )
-       {
-               inLabelSize = strlen( inLabel );
-       }
-       start   = (const uint8_t *) inData;
-       src     = start;
-       dst             = outBuffer;
-       end             = dst + inBufferSize;
-       offset  = (int)( (intptr_t) inData - (intptr_t) inDataStart );
-       width   = ( (int) inLabelSize > inLabelMinWidth ) ? (int) inLabelSize : inLabelMinWidth;
-       newline = ( inFlags & kDebugFlagsNoNewLine ) ? "" : "\n";
-               
-       // Set up the separator string. This is used to insert spaces on subsequent "lines" when not using newlines.
-       
-       s = separator;
-       if( inFlags & kDebugFlagsNoNewLine )
-       {
-               if( inFlags & kDebugFlags8BitSeparator )
-               {
-                       *s++ = ' ';
-               }
-               if( inFlags & kDebugFlags16BitSeparator )
-               {
-                       *s++ = ' ';
-               }
-               if( !( inFlags & kDebugFlagsNo32BitSeparator ) )
-               {
-                       *s++ = ' ';
-               }
-               check( ( (size_t)( s - separator ) ) < sizeof( separator ) );
-       }
-       *s = '\0';
-       
-       for( ;; )
-       {
-               char            prefixString[ 32 ];
-               char            hexString[ 64 ];
-               char            asciiString[ 32 ];
-               char            byteCountString[ 32 ];
-               int                     c;
-               size_t          chunkSize;
-               size_t          i;
-               
-               // If this is a label-only item (i.e. no data), print the label (accounting for prefix string spacing) and exit.
-               
-               if( inDataSize == 0 )
-               {
-                       if( inLabel && ( inLabelSize > 0 ) )
-                       {
-                               width = 0;
-                               if( !( inFlags & kDebugFlagsNoAddress ) )
-                               {
-                                       width += 8;                     // "00000000"
-                                       if( !( inFlags & kDebugFlagsNoOffset ) )
-                                       {
-                                               width += 1;             // "+"
-                                       }
-                               }
-                               if( inFlags & kDebugFlags32BitOffset )
-                               {
-                                       width += 8;                     // "00000000"
-                               }
-                               else if( !( inFlags & kDebugFlagsNoOffset ) )
-                               {
-                                       width += 4;                     // "0000"
-                               }
-                               
-                               if( outBuffer )
-                               {
-                                       dst += DebugSNPrintF( dst, (size_t)( end - dst ), "%*s" "%-*.*s" "%.*s" "%s", 
-                                               width, "", 
-                                               ( width > 0 ) ? ": " : "", 
-                                               width, (int) inLabelSize, inLabel, 
-                                               newline );
-                               }
-                               else
-                               {
-                                       dst += DebugPrintF( inLevel, "%*s" "%-*.*s" "%.*s" "%s", 
-                                               width, "", 
-                                               ( width > 0 ) ? ": " : "", 
-                                               width, (int) inLabelSize, inLabel, 
-                                               newline );
-                               }
-                       }
-                       break;
-               }
-               
-               // Build the prefix string. It will be in one of the following formats:
-               //
-               // 1) "00000000+0000[0000]"     (address and offset)
-               // 2) "00000000"                        (address only)
-               // 3) "0000[0000]"                      (offset only)
-               // 4) ""                                        (no address or offset)
-               //
-               // Note: If we're printing multiple "lines", but not printing newlines, a space is used to separate.
-               
-               s = prefixString;
-               if( !( inFlags & kDebugFlagsNoAddress ) )
-               {
-                       *s++ = kHexChars[ ( ( (uintptr_t) src ) >> 28 ) & 0xF ];
-                       *s++ = kHexChars[ ( ( (uintptr_t) src ) >> 24 ) & 0xF ];
-                       *s++ = kHexChars[ ( ( (uintptr_t) src ) >> 20 ) & 0xF ];
-                       *s++ = kHexChars[ ( ( (uintptr_t) src ) >> 16 ) & 0xF ];
-                       *s++ = kHexChars[ ( ( (uintptr_t) src ) >> 12 ) & 0xF ];
-                       *s++ = kHexChars[ ( ( (uintptr_t) src ) >>  8 ) & 0xF ];
-                       *s++ = kHexChars[ ( ( (uintptr_t) src ) >>  4 ) & 0xF ];
-                       *s++ = kHexChars[   ( (uintptr_t) src )         & 0xF ];
-                       
-                       if( !( inFlags & kDebugFlagsNoOffset ) )
-                       {
-                               *s++ = '+';
-                       }
-               }
-               if( !( inFlags & kDebugFlagsNoOffset ) )
-               {
-                       if( inFlags & kDebugFlags32BitOffset )
-                       {
-                               *s++ = kHexChars[ ( offset >> 28 ) & 0xF ];
-                               *s++ = kHexChars[ ( offset >> 24 ) & 0xF ];
-                               *s++ = kHexChars[ ( offset >> 20 ) & 0xF ];
-                               *s++ = kHexChars[ ( offset >> 16 ) & 0xF ];
-                       }
-                       *s++ = kHexChars[ ( offset >> 12 ) & 0xF ];
-                       *s++ = kHexChars[ ( offset >>  8 ) & 0xF ];
-                       *s++ = kHexChars[ ( offset >>  4 ) & 0xF ];
-                       *s++ = kHexChars[   offset         & 0xF ];
-               }
-               if( s != prefixString )
-               {
-                       *s++ = ':';
-                       *s++ = ' ';
-               }
-               check( ( (size_t)( s - prefixString ) ) < sizeof( prefixString ) );
-               *s = '\0';
-               
-               // Build a hex string with a optional spaces after every 1, 2, and/or 4 bytes to make it easier to read.
-               // Optionally pads the hex string with space to fill the full 16 byte range (so it lines up).
-               
-               s = hexString;
-               chunkSize = ( inDataSize < 16 ) ? inDataSize : 16;
-               n = ( inFlags & kDebugFlagsNo16ByteHexPad ) ? chunkSize : 16;
-               for( i = 0; i < n; ++i )
-               {
-                       if( ( inFlags & kDebugFlags8BitSeparator ) && ( i > 0 ) )
-                       {
-                               *s++ = ' ';
-                       }
-                       if( ( inFlags & kDebugFlags16BitSeparator ) && ( i > 0 ) && ( ( i % 2 ) == 0 ) )
-                       {
-                               *s++ = ' ';
-                       }
-                       if( !( inFlags & kDebugFlagsNo32BitSeparator ) && ( i > 0 ) && ( ( i % 4 ) == 0 ) )
-                       {
-                               *s++ = ' ';
-                       }
-                       if( i < chunkSize )
-                       {
-                               *s++ = kHexChars[ src[ i ] >> 4   ];
-                               *s++ = kHexChars[ src[ i ] &  0xF ];
-                       }
-                       else
-                       {
-                               *s++ = ' ';
-                               *s++ = ' ';
-                       }
-               }
-               check( ( (size_t)( s - hexString ) ) < sizeof( hexString ) );
-               *s = '\0';
-               
-               // Build a string with the ASCII version of the data (replaces non-printable characters with '^').
-               // Optionally pads the string with '`' to fill the full 16 byte range (so it lines up).
-               
-               s = asciiString;
-               if( !( inFlags & kDebugFlagsNoASCII ) )
-               {
-                       *s++ = ' ';
-                       *s++ = '|';
-                       for( i = 0; i < n; ++i )
-                       {
-                               if( i < chunkSize )
-                               {
-                                       c = src[ i ];
-                                       if( !DebugIsPrint( c ) )
-                                       {
-                                               c = '^';
-                                       }
-                               }
-                               else
-                               {
-                                       c = '`';
-                               }
-                               *s++ = (char) c;
-                       }
-                       *s++ = '|';
-                       check( ( (size_t)( s - asciiString ) ) < sizeof( asciiString ) );
-               }
-               *s = '\0';
-               
-               // Build a string indicating how bytes are in the hex dump. Only printed on the first line.
-               
-               s = byteCountString;
-               if( !( inFlags & kDebugFlagsNoByteCount ) )
-               {
-                       if( src == start )
-                       {
-                               s += DebugSNPrintF( s, sizeof( byteCountString ), " (%d bytes)", (int) inDataSize );
-                       }
-               }
-               check( ( (size_t)( s - byteCountString ) ) < sizeof( byteCountString ) );
-               *s = '\0';
-               
-               // Build the entire line from all the pieces we've previously built.
-                       
-               if( outBuffer )
-               {
-                       if( src == start )
-                       {
-                               dst += DebugSNPrintF( dst, (size_t)( end - dst ), 
-                                       "%*s"           // Indention
-                                       "%s"            // Separator (only if needed)
-                                       "%s"            // Prefix
-                                       "%-*.*s"        // Label
-                                       "%s"            // Separator
-                                       "%s"            // Hex
-                                       "%s"            // ASCII
-                                       "%s"            // Byte Count
-                                       "%s",           // Newline
-                                       inIndent, "", 
-                                       ( src != start ) ? separator : "", 
-                                       prefixString, 
-                                       width, (int) inLabelSize, inLabel ? inLabel : "", 
-                                       ( width > 0 ) ? " " : "", 
-                                       hexString, 
-                                       asciiString, 
-                                       byteCountString, 
-                                       newline );
-                       }
-                       else
-                       {
-                               dst += DebugSNPrintF( dst, (size_t)( end - dst ), 
-                                       "%*s"           // Indention
-                                       "%s"            // Separator (only if needed)
-                                       "%s"            // Prefix
-                                       "%*s"           // Label Spacing
-                                       "%s"            // Separator
-                                       "%s"            // Hex
-                                       "%s"            // ASCII
-                                       "%s"            // Byte Count
-                                       "%s",           // Newline
-                                       inIndent, "", 
-                                       ( src != start ) ? separator : "", 
-                                       prefixString, 
-                                       width, "", 
-                                       ( width > 0 ) ? " " : "", 
-                                       hexString, 
-                                       asciiString, 
-                                       byteCountString, 
-                                       newline );
-                       }
-               }
-               else
-               {
-                       if( src == start )
-                       {
-                               dst += DebugPrintF( inLevel, 
-                                       "%*s"           // Indention
-                                       "%s"            // Separator (only if needed)
-                                       "%s"            // Prefix
-                                       "%-*.*s"        // Label
-                                       "%s"            // Separator
-                                       "%s"            // Hex
-                                       "%s"            // ASCII
-                                       "%s"            // Byte Count
-                                       "%s",           // Newline
-                                       inIndent, "", 
-                                       ( src != start ) ? separator : "", 
-                                       prefixString, 
-                                       width, (int) inLabelSize, inLabel, 
-                                       ( width > 0 ) ? " " : "", 
-                                       hexString, 
-                                       asciiString, 
-                                       byteCountString, 
-                                       newline );
-                       }
-                       else
-                       {
-                               dst += DebugPrintF( inLevel, 
-                                       "%*s"           // Indention
-                                       "%s"            // Separator (only if needed)
-                                       "%s"            // Prefix
-                                       "%*s"           // Label Spacing
-                                       "%s"            // Separator
-                                       "%s"            // Hex
-                                       "%s"            // ASCII
-                                       "%s"            // Byte Count
-                                       "%s",           // Newline
-                                       inIndent, "", 
-                                       ( src != start ) ? separator : "", 
-                                       prefixString, 
-                                       width, "", 
-                                       ( width > 0 ) ? " " : "", 
-                                       hexString, 
-                                       asciiString, 
-                                       byteCountString, 
-                                       newline );
-                       }
-               }
-               
-               // Move to the next chunk. Exit if there is no more data.
-               
-               offset          += (int) chunkSize;
-               src             += chunkSize;
-               inDataSize      -= chunkSize;
-               if( inDataSize == 0 )
-               {
-                       break;
-               }
-       }
-       
-       // Note: The "dst - outBuffer" size calculation works even if "outBuffer" is NULL because it's all relative.
-       
-       return( (size_t)( dst - outBuffer ) );
+    static const char kHexChars[] = "0123456789ABCDEF";
+    const uint8_t *         start;
+    const uint8_t *         src;
+    char *                  dst;
+    char *                  end;
+    size_t n;
+    int offset;
+    int width;
+    const char *            newline;
+    char separator[ 8 ];
+    char *                  s;
+
+    DEBUG_UNUSED( inType );
+    DEBUG_UNUSED( inTypeSize );
+
+    // Set up the function-wide variables.
+
+    if( inLabelSize == kSizeCString )
+    {
+        inLabelSize = strlen( inLabel );
+    }
+    start   = (const uint8_t *) inData;
+    src     = start;
+    dst     = outBuffer;
+    end     = dst + inBufferSize;
+    offset  = (int)( (intptr_t) inData - (intptr_t) inDataStart );
+    width   = ( (int) inLabelSize > inLabelMinWidth ) ? (int) inLabelSize : inLabelMinWidth;
+    newline = ( inFlags & kDebugFlagsNoNewLine ) ? "" : "\n";
+
+    // Set up the separator string. This is used to insert spaces on subsequent "lines" when not using newlines.
+
+    s = separator;
+    if( inFlags & kDebugFlagsNoNewLine )
+    {
+        if( inFlags & kDebugFlags8BitSeparator )
+        {
+            *s++ = ' ';
+        }
+        if( inFlags & kDebugFlags16BitSeparator )
+        {
+            *s++ = ' ';
+        }
+        if( !( inFlags & kDebugFlagsNo32BitSeparator ) )
+        {
+            *s++ = ' ';
+        }
+        check( ( (size_t)( s - separator ) ) < sizeof( separator ) );
+    }
+    *s = '\0';
+
+    for( ;; )
+    {
+        char prefixString[ 32 ];
+        char hexString[ 64 ];
+        char asciiString[ 32 ];
+        char byteCountString[ 32 ];
+        int c;
+        size_t chunkSize;
+        size_t i;
+
+        // If this is a label-only item (i.e. no data), print the label (accounting for prefix string spacing) and exit.
+
+        if( inDataSize == 0 )
+        {
+            if( inLabel && ( inLabelSize > 0 ) )
+            {
+                width = 0;
+                if( !( inFlags & kDebugFlagsNoAddress ) )
+                {
+                    width += 8;         // "00000000"
+                    if( !( inFlags & kDebugFlagsNoOffset ) )
+                    {
+                        width += 1;     // "+"
+                    }
+                }
+                if( inFlags & kDebugFlags32BitOffset )
+                {
+                    width += 8;         // "00000000"
+                }
+                else if( !( inFlags & kDebugFlagsNoOffset ) )
+                {
+                    width += 4;         // "0000"
+                }
+
+                if( outBuffer )
+                {
+                    dst += DebugSNPrintF( dst, (size_t)( end - dst ), "%*s" "%-*.*s" "%.*s" "%s",
+                                          width, "",
+                                          ( width > 0 ) ? ": " : "",
+                                          width, (int) inLabelSize, inLabel,
+                                          newline );
+                }
+                else
+                {
+                    dst += DebugPrintF( inLevel, "%*s" "%-*.*s" "%.*s" "%s",
+                                        width, "",
+                                        ( width > 0 ) ? ": " : "",
+                                        width, (int) inLabelSize, inLabel,
+                                        newline );
+                }
+            }
+            break;
+        }
+
+        // Build the prefix string. It will be in one of the following formats:
+        //
+        // 1) "00000000+0000[0000]"    (address and offset)
+        // 2) "00000000"                       (address only)
+        // 3) "0000[0000]"                     (offset only)
+        // 4) ""                                       (no address or offset)
+        //
+        // Note: If we're printing multiple "lines", but not printing newlines, a space is used to separate.
+
+        s = prefixString;
+        if( !( inFlags & kDebugFlagsNoAddress ) )
+        {
+            *s++ = kHexChars[ ( ( (uintptr_t) src ) >> 28 ) & 0xF ];
+            *s++ = kHexChars[ ( ( (uintptr_t) src ) >> 24 ) & 0xF ];
+            *s++ = kHexChars[ ( ( (uintptr_t) src ) >> 20 ) & 0xF ];
+            *s++ = kHexChars[ ( ( (uintptr_t) src ) >> 16 ) & 0xF ];
+            *s++ = kHexChars[ ( ( (uintptr_t) src ) >> 12 ) & 0xF ];
+            *s++ = kHexChars[ ( ( (uintptr_t) src ) >>  8 ) & 0xF ];
+            *s++ = kHexChars[ ( ( (uintptr_t) src ) >>  4 ) & 0xF ];
+            *s++ = kHexChars[   ( (uintptr_t) src )         & 0xF ];
+
+            if( !( inFlags & kDebugFlagsNoOffset ) )
+            {
+                *s++ = '+';
+            }
+        }
+        if( !( inFlags & kDebugFlagsNoOffset ) )
+        {
+            if( inFlags & kDebugFlags32BitOffset )
+            {
+                *s++ = kHexChars[ ( offset >> 28 ) & 0xF ];
+                *s++ = kHexChars[ ( offset >> 24 ) & 0xF ];
+                *s++ = kHexChars[ ( offset >> 20 ) & 0xF ];
+                *s++ = kHexChars[ ( offset >> 16 ) & 0xF ];
+            }
+            *s++ = kHexChars[ ( offset >> 12 ) & 0xF ];
+            *s++ = kHexChars[ ( offset >>  8 ) & 0xF ];
+            *s++ = kHexChars[ ( offset >>  4 ) & 0xF ];
+            *s++ = kHexChars[   offset         & 0xF ];
+        }
+        if( s != prefixString )
+        {
+            *s++ = ':';
+            *s++ = ' ';
+        }
+        check( ( (size_t)( s - prefixString ) ) < sizeof( prefixString ) );
+        *s = '\0';
+
+        // Build a hex string with a optional spaces after every 1, 2, and/or 4 bytes to make it easier to read.
+        // Optionally pads the hex string with space to fill the full 16 byte range (so it lines up).
+
+        s = hexString;
+        chunkSize = ( inDataSize < 16 ) ? inDataSize : 16;
+        n = ( inFlags & kDebugFlagsNo16ByteHexPad ) ? chunkSize : 16;
+        for( i = 0; i < n; ++i )
+        {
+            if( ( inFlags & kDebugFlags8BitSeparator ) && ( i > 0 ) )
+            {
+                *s++ = ' ';
+            }
+            if( ( inFlags & kDebugFlags16BitSeparator ) && ( i > 0 ) && ( ( i % 2 ) == 0 ) )
+            {
+                *s++ = ' ';
+            }
+            if( !( inFlags & kDebugFlagsNo32BitSeparator ) && ( i > 0 ) && ( ( i % 4 ) == 0 ) )
+            {
+                *s++ = ' ';
+            }
+            if( i < chunkSize )
+            {
+                *s++ = kHexChars[ src[ i ] >> 4   ];
+                *s++ = kHexChars[ src[ i ] &  0xF ];
+            }
+            else
+            {
+                *s++ = ' ';
+                *s++ = ' ';
+            }
+        }
+        check( ( (size_t)( s - hexString ) ) < sizeof( hexString ) );
+        *s = '\0';
+
+        // Build a string with the ASCII version of the data (replaces non-printable characters with '^').
+        // Optionally pads the string with '`' to fill the full 16 byte range (so it lines up).
+
+        s = asciiString;
+        if( !( inFlags & kDebugFlagsNoASCII ) )
+        {
+            *s++ = ' ';
+            *s++ = '|';
+            for( i = 0; i < n; ++i )
+            {
+                if( i < chunkSize )
+                {
+                    c = src[ i ];
+                    if( !DebugIsPrint( c ) )
+                    {
+                        c = '^';
+                    }
+                }
+                else
+                {
+                    c = '`';
+                }
+                *s++ = (char) c;
+            }
+            *s++ = '|';
+            check( ( (size_t)( s - asciiString ) ) < sizeof( asciiString ) );
+        }
+        *s = '\0';
+
+        // Build a string indicating how bytes are in the hex dump. Only printed on the first line.
+
+        s = byteCountString;
+        if( !( inFlags & kDebugFlagsNoByteCount ) )
+        {
+            if( src == start )
+            {
+                s += DebugSNPrintF( s, sizeof( byteCountString ), " (%d bytes)", (int) inDataSize );
+            }
+        }
+        check( ( (size_t)( s - byteCountString ) ) < sizeof( byteCountString ) );
+        *s = '\0';
+
+        // Build the entire line from all the pieces we've previously built.
+
+        if( outBuffer )
+        {
+            if( src == start )
+            {
+                dst += DebugSNPrintF( dst, (size_t)( end - dst ),
+                                      "%*s" // Indention
+                                      "%s" // Separator (only if needed)
+                                      "%s" // Prefix
+                                      "%-*.*s" // Label
+                                      "%s" // Separator
+                                      "%s" // Hex
+                                      "%s" // ASCII
+                                      "%s" // Byte Count
+                                      "%s", // Newline
+                                      inIndent, "",
+                                      ( src != start ) ? separator : "",
+                                      prefixString,
+                                      width, (int) inLabelSize, inLabel ? inLabel : "",
+                                      ( width > 0 ) ? " " : "",
+                                      hexString,
+                                      asciiString,
+                                      byteCountString,
+                                      newline );
+            }
+            else
+            {
+                dst += DebugSNPrintF( dst, (size_t)( end - dst ),
+                                      "%*s" // Indention
+                                      "%s" // Separator (only if needed)
+                                      "%s" // Prefix
+                                      "%*s" // Label Spacing
+                                      "%s" // Separator
+                                      "%s" // Hex
+                                      "%s" // ASCII
+                                      "%s" // Byte Count
+                                      "%s", // Newline
+                                      inIndent, "",
+                                      ( src != start ) ? separator : "",
+                                      prefixString,
+                                      width, "",
+                                      ( width > 0 ) ? " " : "",
+                                      hexString,
+                                      asciiString,
+                                      byteCountString,
+                                      newline );
+            }
+        }
+        else
+        {
+            if( src == start )
+            {
+                dst += DebugPrintF( inLevel,
+                                    "%*s" // Indention
+                                    "%s" // Separator (only if needed)
+                                    "%s" // Prefix
+                                    "%-*.*s" // Label
+                                    "%s" // Separator
+                                    "%s" // Hex
+                                    "%s" // ASCII
+                                    "%s" // Byte Count
+                                    "%s", // Newline
+                                    inIndent, "",
+                                    ( src != start ) ? separator : "",
+                                    prefixString,
+                                    width, (int) inLabelSize, inLabel,
+                                    ( width > 0 ) ? " " : "",
+                                    hexString,
+                                    asciiString,
+                                    byteCountString,
+                                    newline );
+            }
+            else
+            {
+                dst += DebugPrintF( inLevel,
+                                    "%*s" // Indention
+                                    "%s" // Separator (only if needed)
+                                    "%s" // Prefix
+                                    "%*s" // Label Spacing
+                                    "%s" // Separator
+                                    "%s" // Hex
+                                    "%s" // ASCII
+                                    "%s" // Byte Count
+                                    "%s", // Newline
+                                    inIndent, "",
+                                    ( src != start ) ? separator : "",
+                                    prefixString,
+                                    width, "",
+                                    ( width > 0 ) ? " " : "",
+                                    hexString,
+                                    asciiString,
+                                    byteCountString,
+                                    newline );
+            }
+        }
+
+        // Move to the next chunk. Exit if there is no more data.
+
+        offset      += (int) chunkSize;
+        src         += chunkSize;
+        inDataSize  -= chunkSize;
+        if( inDataSize == 0 )
+        {
+            break;
+        }
+    }
+
+    // Note: The "dst - outBuffer" size calculation works even if "outBuffer" is NULL because it's all relative.
+
+    return( (size_t)( dst - outBuffer ) );
 }
 
 //===========================================================================================================================
 //     DebugNumVersionToString
 //===========================================================================================================================
 
-static char *  DebugNumVersionToString( uint32_t inVersion, char *inString )
+static char *   DebugNumVersionToString( uint32_t inVersion, char *inString )
 {
-       char *          s;
-       uint8_t         majorRev;
-       uint8_t         minor;
-       uint8_t         bugFix;
-       uint8_t         stage;
-       uint8_t         revision;
-       
-       check( inString );
-       
-       majorRev        = (uint8_t)( ( inVersion >> 24 ) & 0xFF );
-       minor           = (uint8_t)( ( inVersion >> 20 ) & 0x0F );
-       bugFix          = (uint8_t)( ( inVersion >> 16 ) & 0x0F );
-       stage           = (uint8_t)( ( inVersion >>  8 ) & 0xFF );
-       revision        = (uint8_t)(   inVersion         & 0xFF );
-       
-       // Convert the major, minor, and bugfix numbers.
-       
-       s  = inString;
-       s += sprintf( s, "%u", majorRev );
-       s += sprintf( s, ".%u", minor );
-       if( bugFix != 0 )
-       {
-               s += sprintf( s, ".%u", bugFix );
-       }
-       
-       // Convert the version stage and non-release revision number.
-       
-       switch( stage )
-       {
-               case kVersionStageDevelopment:
-                       s += sprintf( s, "d%u", revision );
-                       break;
-               
-               case kVersionStageAlpha:
-                       s += sprintf( s, "a%u", revision );
-                       break;
-               
-               case kVersionStageBeta:
-                       s += sprintf( s, "b%u", revision );
-                       break;
-               
-               case kVersionStageFinal:
-                       
-                       // A non-release revision of zero is a special case indicating the software is GM (at the golden master 
-                       // stage) and therefore, the non-release revision should not be added to the string.
-                       
-                       if( revision != 0 )
-                       {
-                               s += sprintf( s, "f%u", revision );
-                       }
-                       break;
-               
-               default:
-                       dlog( kDebugLevelError, "invalid NumVersion stage (0x%02X)\n", stage );
-                       break;
-       }
-       return( inString );
+    char *      s;
+    uint8_t majorRev;
+    uint8_t minor;
+    uint8_t bugFix;
+    uint8_t stage;
+    uint8_t revision;
+
+    check( inString );
+
+    majorRev    = (uint8_t)( ( inVersion >> 24 ) & 0xFF );
+    minor       = (uint8_t)( ( inVersion >> 20 ) & 0x0F );
+    bugFix      = (uint8_t)( ( inVersion >> 16 ) & 0x0F );
+    stage       = (uint8_t)( ( inVersion >>  8 ) & 0xFF );
+    revision    = (uint8_t)(   inVersion         & 0xFF );
+
+    // Convert the major, minor, and bugfix numbers.
+
+    s  = inString;
+    s += sprintf( s, "%u", majorRev );
+    s += sprintf( s, ".%u", minor );
+    if( bugFix != 0 )
+    {
+        s += sprintf( s, ".%u", bugFix );
+    }
+
+    // Convert the version stage and non-release revision number.
+
+    switch( stage )
+    {
+    case kVersionStageDevelopment:
+        s += sprintf( s, "d%u", revision );
+        break;
+
+    case kVersionStageAlpha:
+        s += sprintf( s, "a%u", revision );
+        break;
+
+    case kVersionStageBeta:
+        s += sprintf( s, "b%u", revision );
+        break;
+
+    case kVersionStageFinal:
+
+        // A non-release revision of zero is a special case indicating the software is GM (at the golden master
+        // stage) and therefore, the non-release revision should not be added to the string.
+
+        if( revision != 0 )
+        {
+            s += sprintf( s, "f%u", revision );
+        }
+        break;
+
+    default:
+        dlog( kDebugLevelError, "invalid NumVersion stage (0x%02X)\n", stage );
+        break;
+    }
+    return( inString );
 }
 
 //===========================================================================================================================
 //     DebugTaskLevel
 //===========================================================================================================================
 
-DEBUG_EXPORT uint32_t  DebugTaskLevel( void )
+DEBUG_EXPORT uint32_t   DebugTaskLevel( void )
 {
-       uint32_t                level;
-       
-       level = 0;
-       
-#if( TARGET_OS_VXWORKS )
-       if( intContext() )
-       {
-               level |= ( ( 1 << kDebugInterruptLevelShift ) & kDebugInterruptLevelMask );
-       }
+    uint32_t level;
+
+    level = 0;
+
+#if ( TARGET_OS_VXWORKS )
+    if( intContext() )
+    {
+        level |= ( ( 1 << kDebugInterruptLevelShift ) & kDebugInterruptLevelMask );
+    }
 #endif
-       
-       return( level );
+
+    return( level );
 }
 
-#if( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
+#if ( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
 //===========================================================================================================================
 //     DebugWinEnableConsole
 //===========================================================================================================================
 
 #pragma warning( disable:4311 )
 
-static void    DebugWinEnableConsole( void )
+static void DebugWinEnableConsole( void )
 {
-       static bool             sConsoleEnabled = false;
-       BOOL                    result;
-       int                             fileHandle;
-       FILE *                  file;
-       int                             err;
-       
-       if( sConsoleEnabled )
-       {
-               goto exit;
-       }
-       
-       // Create console window.
-       
-       result = AllocConsole();
-       require_quiet( result, exit );
-
-       // Redirect stdin to the console stdin.
-       
-       fileHandle = _open_osfhandle( (long) GetStdHandle( STD_INPUT_HANDLE ), _O_TEXT );
-       
-       #if( defined( __MWERKS__ ) )
-               file = __handle_reopen( (unsigned long) fileHandle, "r", stdin );
-               require_quiet( file, exit );
-       #else
-               file = _fdopen( fileHandle, "r" );
-               require_quiet( file, exit );
-       
-               *stdin = *file;
-       #endif
-       
-       err = setvbuf( stdin, NULL, _IONBF, 0 );
-       require_noerr_quiet( err, exit );
-       
-       // Redirect stdout to the console stdout.
-               
-       fileHandle = _open_osfhandle( (long) GetStdHandle( STD_OUTPUT_HANDLE ), _O_TEXT );
-       
-       #if( defined( __MWERKS__ ) )
-               file = __handle_reopen( (unsigned long) fileHandle, "w", stdout );
-               require_quiet( file, exit );
-       #else
-               file = _fdopen( fileHandle, "w" );
-               require_quiet( file, exit );
-               
-               *stdout = *file;
-       #endif
-       
-       err = setvbuf( stdout, NULL, _IONBF, 0 );
-       require_noerr_quiet( err, exit );
-       
-       // Redirect stderr to the console stdout.
-       
-       fileHandle = _open_osfhandle( (long) GetStdHandle( STD_OUTPUT_HANDLE ), _O_TEXT );
-       
-       #if( defined( __MWERKS__ ) )
-               file = __handle_reopen( (unsigned long) fileHandle, "w", stderr );
-               require_quiet( file, exit );
-       #else
-               file = _fdopen( fileHandle, "w" );
-               require_quiet( file, exit );
-       
-               *stderr = *file;
-       #endif
-       
-       err = setvbuf( stderr, NULL, _IONBF, 0 );
-       require_noerr_quiet( err, exit );
-       
-       sConsoleEnabled = true;
-       
+    static bool sConsoleEnabled = false;
+    BOOL result;
+    int fileHandle;
+    FILE *          file;
+    int err;
+
+    if( sConsoleEnabled )
+    {
+        goto exit;
+    }
+
+    // Create console window.
+
+    result = AllocConsole();
+    require_quiet( result, exit );
+
+    // Redirect stdin to the console stdin.
+
+    fileHandle = _open_osfhandle( (long) GetStdHandle( STD_INPUT_HANDLE ), _O_TEXT );
+
+    #if ( defined( __MWERKS__ ) )
+    file = __handle_reopen( (unsigned long) fileHandle, "r", stdin );
+    require_quiet( file, exit );
+    #else
+    file = _fdopen( fileHandle, "r" );
+    require_quiet( file, exit );
+
+    *stdin = *file;
+    #endif
+
+    err = setvbuf( stdin, NULL, _IONBF, 0 );
+    require_noerr_quiet( err, exit );
+
+    // Redirect stdout to the console stdout.
+
+    fileHandle = _open_osfhandle( (long) GetStdHandle( STD_OUTPUT_HANDLE ), _O_TEXT );
+
+    #if ( defined( __MWERKS__ ) )
+    file = __handle_reopen( (unsigned long) fileHandle, "w", stdout );
+    require_quiet( file, exit );
+    #else
+    file = _fdopen( fileHandle, "w" );
+    require_quiet( file, exit );
+
+    *stdout = *file;
+    #endif
+
+    err = setvbuf( stdout, NULL, _IONBF, 0 );
+    require_noerr_quiet( err, exit );
+
+    // Redirect stderr to the console stdout.
+
+    fileHandle = _open_osfhandle( (long) GetStdHandle( STD_OUTPUT_HANDLE ), _O_TEXT );
+
+    #if ( defined( __MWERKS__ ) )
+    file = __handle_reopen( (unsigned long) fileHandle, "w", stderr );
+    require_quiet( file, exit );
+    #else
+    file = _fdopen( fileHandle, "w" );
+    require_quiet( file, exit );
+
+    *stderr = *file;
+    #endif
+
+    err = setvbuf( stderr, NULL, _IONBF, 0 );
+    require_noerr_quiet( err, exit );
+
+    sConsoleEnabled = true;
+
 exit:
-       return;
+    return;
 }
 
 #pragma warning( default:4311 )
 
-#endif // TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE
+#endif  // TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE
 
-#if( TARGET_OS_WIN32 )
+#if ( TARGET_OS_WIN32 )
 //===========================================================================================================================
 //     DebugWinCharToTCharString
 //===========================================================================================================================
 
 static TCHAR *
-       DebugWinCharToTCharString( 
-               const char *    inCharString, 
-               size_t                  inCharCount, 
-               TCHAR *                 outTCharString, 
-               size_t                  inTCharCountMax, 
-               size_t *                outTCharCount )
+DebugWinCharToTCharString(
+    const char *    inCharString,
+    size_t inCharCount,
+    TCHAR *         outTCharString,
+    size_t inTCharCountMax,
+    size_t *        outTCharCount )
 {
-       const char *            src;
-       TCHAR *                         dst;
-       TCHAR *                         end;
-       
-       if( inCharCount == kSizeCString )
-       {
-               inCharCount = strlen( inCharString );
-       }
-       src = inCharString;
-       dst = outTCharString;
-       if( inTCharCountMax > 0 )
-       {
-               inTCharCountMax -= 1;
-               if( inTCharCountMax > inCharCount )
-               {
-                       inTCharCountMax = inCharCount;
-               }
-               
-               end = dst + inTCharCountMax;
-               while( dst < end )
-               {
-                       *dst++ = (TCHAR) *src++;
-               }
-               *dst = 0;
-       }
-       if( outTCharCount )
-       {
-               *outTCharCount = (size_t)( dst - outTCharString );
-       }
-       return( outTCharString );
+    const char *        src;
+    TCHAR *             dst;
+    TCHAR *             end;
+
+    if( inCharCount == kSizeCString )
+    {
+        inCharCount = strlen( inCharString );
+    }
+    src = inCharString;
+    dst = outTCharString;
+    if( inTCharCountMax > 0 )
+    {
+        inTCharCountMax -= 1;
+        if( inTCharCountMax > inCharCount )
+        {
+            inTCharCountMax = inCharCount;
+        }
+
+        end = dst + inTCharCountMax;
+        while( dst < end )
+        {
+            *dst++ = (TCHAR) *src++;
+        }
+        *dst = 0;
+    }
+    if( outTCharCount )
+    {
+        *outTCharCount = (size_t)( dst - outTCharString );
+    }
+    return( outTCharString );
 }
 #endif
 
@@ -2628,475 +2601,475 @@ static TCHAR *
 //     DebugServicesTest
 //===========================================================================================================================
 
-DEBUG_EXPORT OSStatus  DebugServicesTest( void )
+DEBUG_EXPORT OSStatus   DebugServicesTest( void )
 {
-       OSStatus                err;
-       char                    s[ 512 ];
-       uint8_t *               p;
-       uint8_t                 data[] = 
-       {
-               0x11, 0x22, 0x33, 0x44, 
-               0x55, 0x66, 
-               0x77, 0x88, 0x99, 0xAA, 
-               0xBB, 0xCC, 0xDD, 
-               0xEE,
-               0xFF, 
-               0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 
-               0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0xA0, 
-               0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71, 0x81, 0x91, 0xA1 
-       };
-       
-       debug_initialize( kDebugOutputTypeMetaConsole );        
-       
-       // check's
-       
-       check( 0 && "SHOULD SEE: check" );
-       check( 1 && "SHOULD *NOT* SEE: check (valid)" );
-       check_string( 0, "SHOULD SEE: check_string" );
-       check_string( 1, "SHOULD *NOT* SEE: check_string (valid)" );
-       check_noerr( -123 );
-       check_noerr( 10038 );
-       check_noerr( 22 );
-       check_noerr( 0 );
-       check_noerr_string( -6712, "SHOULD SEE: check_noerr_string" );
-       check_noerr_string( 0, "SHOULD *NOT* SEE: check_noerr_string (valid)" );
-       check_translated_errno( 0 >= 0 && "SHOULD *NOT* SEE", -384, -999 );
-       check_translated_errno( -1 >= 0 && "SHOULD SEE", -384, -999 );
-       check_translated_errno( -1 >= 0 && "SHOULD SEE", 0, -999 );
-       check_ptr_overlap( "SHOULD *NOT* SEE" ? 10 : 0, 10, 22, 10 );
-       check_ptr_overlap( "SHOULD SEE" ? 10 : 0, 10,  5, 10 );
-       check_ptr_overlap( "SHOULD SEE" ? 10 : 0, 10, 12,  6 );
-       check_ptr_overlap( "SHOULD SEE" ? 12 : 0,  6, 10, 10 );
-       check_ptr_overlap( "SHOULD SEE" ? 12 : 0, 10, 10, 10 );
-       check_ptr_overlap( "SHOULD *NOT* SEE" ? 22 : 0, 10, 10, 10 );
-       check_ptr_overlap( "SHOULD *NOT* SEE" ? 10 : 0, 10, 20, 10 );
-       check_ptr_overlap( "SHOULD *NOT* SEE" ? 20 : 0, 10, 10, 10 );
-               
-       // require's
-       
-       require( 0 && "SHOULD SEE", require1 );
-       { err = kResponseErr; goto exit; }
+    OSStatus err;
+    char s[ 512 ];
+    uint8_t *       p;
+    uint8_t data[] =
+    {
+        0x11, 0x22, 0x33, 0x44,
+        0x55, 0x66,
+        0x77, 0x88, 0x99, 0xAA,
+        0xBB, 0xCC, 0xDD,
+        0xEE,
+        0xFF,
+        0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,
+        0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0xA0,
+        0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71, 0x81, 0x91, 0xA1
+    };
+
+    debug_initialize( kDebugOutputTypeMetaConsole );
+
+    // check's
+
+    check( 0 && "SHOULD SEE: check" );
+    check( 1 && "SHOULD *NOT* SEE: check (valid)" );
+    check_string( 0, "SHOULD SEE: check_string" );
+    check_string( 1, "SHOULD *NOT* SEE: check_string (valid)" );
+    check_noerr( -123 );
+    check_noerr( 10038 );
+    check_noerr( 22 );
+    check_noerr( 0 );
+    check_noerr_string( -6712, "SHOULD SEE: check_noerr_string" );
+    check_noerr_string( 0, "SHOULD *NOT* SEE: check_noerr_string (valid)" );
+    check_translated_errno( 0 >= 0 && "SHOULD *NOT* SEE", -384, -999 );
+    check_translated_errno( -1 >= 0 && "SHOULD SEE", -384, -999 );
+    check_translated_errno( -1 >= 0 && "SHOULD SEE", 0, -999 );
+    check_ptr_overlap( "SHOULD *NOT* SEE" ? 10 : 0, 10, 22, 10 );
+    check_ptr_overlap( "SHOULD SEE" ? 10 : 0, 10,  5, 10 );
+    check_ptr_overlap( "SHOULD SEE" ? 10 : 0, 10, 12,  6 );
+    check_ptr_overlap( "SHOULD SEE" ? 12 : 0,  6, 10, 10 );
+    check_ptr_overlap( "SHOULD SEE" ? 12 : 0, 10, 10, 10 );
+    check_ptr_overlap( "SHOULD *NOT* SEE" ? 22 : 0, 10, 10, 10 );
+    check_ptr_overlap( "SHOULD *NOT* SEE" ? 10 : 0, 10, 20, 10 );
+    check_ptr_overlap( "SHOULD *NOT* SEE" ? 20 : 0, 10, 10, 10 );
+
+    // require's
+
+    require( 0 && "SHOULD SEE", require1 );
+    { err = kResponseErr; goto exit; }
 require1:
-       require( 1 && "SHOULD *NOT* SEE", require2 );
-       goto require2Good;
+    require( 1 && "SHOULD *NOT* SEE", require2 );
+    goto require2Good;
 require2:
-       { err = kResponseErr; goto exit; }
+    { err = kResponseErr; goto exit; }
 require2Good:
-       require_string( 0 && "SHOULD SEE", require3, "SHOULD SEE: require_string" );
-       { err = kResponseErr; goto exit; }
+    require_string( 0 && "SHOULD SEE", require3, "SHOULD SEE: require_string" );
+    { err = kResponseErr; goto exit; }
 require3:
-       require_string( 1 && "SHOULD *NOT* SEE", require4, "SHOULD *NOT* SEE: require_string (valid)" );
-       goto require4Good;
+    require_string( 1 && "SHOULD *NOT* SEE", require4, "SHOULD *NOT* SEE: require_string (valid)" );
+    goto require4Good;
 require4:
-       { err = kResponseErr; goto exit; }
+    { err = kResponseErr; goto exit; }
 require4Good:
-       require_quiet( 0 && "SHOULD SEE", require5 );
-       { err = kResponseErr; goto exit; }
+    require_quiet( 0 && "SHOULD SEE", require5 );
+    { err = kResponseErr; goto exit; }
 require5:
-       require_quiet( 1 && "SHOULD *NOT* SEE", require6 );
-       goto require6Good;
+    require_quiet( 1 && "SHOULD *NOT* SEE", require6 );
+    goto require6Good;
 require6:
-       { err = kResponseErr; goto exit; }
+    { err = kResponseErr; goto exit; }
 require6Good:
-       require_noerr( -1, require7 );
-       { err = kResponseErr; goto exit; }
+    require_noerr( -1, require7 );
+    { err = kResponseErr; goto exit; }
 require7:
-       require_noerr( 0, require8 );
-       goto require8Good;
+    require_noerr( 0, require8 );
+    goto require8Good;
 require8:
-       { err = kResponseErr; goto exit; }
+    { err = kResponseErr; goto exit; }
 require8Good:
-       require_noerr_string( -2, require9, "SHOULD SEE: require_noerr_string");
-       { err = kResponseErr; goto exit; }
+    require_noerr_string( -2, require9, "SHOULD SEE: require_noerr_string");
+    { err = kResponseErr; goto exit; }
 require9:
-       require_noerr_string( 0, require10, "SHOULD *NOT* SEE: require_noerr_string (valid)" );
-       goto require10Good;
+    require_noerr_string( 0, require10, "SHOULD *NOT* SEE: require_noerr_string (valid)" );
+    goto require10Good;
 require10:
-       { err = kResponseErr; goto exit; }
+    { err = kResponseErr; goto exit; }
 require10Good:
-       require_noerr_action_string( -3, require11, dlog( kDebugLevelMax, "action 1 (expected)\n" ), "require_noerr_action_string" );
-       { err = kResponseErr; goto exit; }
+    require_noerr_action_string( -3, require11, dlog( kDebugLevelMax, "action 1 (expected)\n" ), "require_noerr_action_string" );
+    { err = kResponseErr; goto exit; }
 require11:
-       require_noerr_action_string( 0, require12, dlog( kDebugLevelMax, "action 2\n" ), "require_noerr_action_string (valid)" );
-       goto require12Good;
+    require_noerr_action_string( 0, require12, dlog( kDebugLevelMax, "action 2\n" ), "require_noerr_action_string (valid)" );
+    goto require12Good;
 require12:
-       { err = kResponseErr; goto exit; }
+    { err = kResponseErr; goto exit; }
 require12Good:
-       require_noerr_quiet( -4, require13 );
-       { err = kResponseErr; goto exit; }
+    require_noerr_quiet( -4, require13 );
+    { err = kResponseErr; goto exit; }
 require13:
-       require_noerr_quiet( 0, require14 );
-       goto require14Good;
+    require_noerr_quiet( 0, require14 );
+    goto require14Good;
 require14:
-       { err = kResponseErr; goto exit; }
+    { err = kResponseErr; goto exit; }
 require14Good:
-       require_noerr_action( -5, require15, dlog( kDebugLevelMax, "SHOULD SEE: action 3 (expected)\n" ) );
-       { err = kResponseErr; goto exit; }
+    require_noerr_action( -5, require15, dlog( kDebugLevelMax, "SHOULD SEE: action 3 (expected)\n" ) );
+    { err = kResponseErr; goto exit; }
 require15:
-       require_noerr_action( 0, require16, dlog( kDebugLevelMax, "SHOULD *NOT* SEE: action 4\n" ) );
-       goto require16Good;
+    require_noerr_action( 0, require16, dlog( kDebugLevelMax, "SHOULD *NOT* SEE: action 4\n" ) );
+    goto require16Good;
 require16:
-       { err = kResponseErr; goto exit; }
+    { err = kResponseErr; goto exit; }
 require16Good:
-       require_noerr_action_quiet( -4, require17, dlog( kDebugLevelMax, "SHOULD SEE: action 5 (expected)\n" ) );
-       { err = kResponseErr; goto exit; }
+    require_noerr_action_quiet( -4, require17, dlog( kDebugLevelMax, "SHOULD SEE: action 5 (expected)\n" ) );
+    { err = kResponseErr; goto exit; }
 require17:
-       require_noerr_action_quiet( 0, require18, dlog( kDebugLevelMax, "SHOULD *NOT* SEE: action 6\n" ) );
-       goto require18Good;
+    require_noerr_action_quiet( 0, require18, dlog( kDebugLevelMax, "SHOULD *NOT* SEE: action 6\n" ) );
+    goto require18Good;
 require18:
-       { err = kResponseErr; goto exit; }
+    { err = kResponseErr; goto exit; }
 require18Good:
-       require_action( 0 && "SHOULD SEE", require19, dlog( kDebugLevelMax, "SHOULD SEE: action 7 (expected)\n" ) );
-       { err = kResponseErr; goto exit; }
+    require_action( 0 && "SHOULD SEE", require19, dlog( kDebugLevelMax, "SHOULD SEE: action 7 (expected)\n" ) );
+    { err = kResponseErr; goto exit; }
 require19:
-       require_action( 1 && "SHOULD *NOT* SEE", require20, dlog( kDebugLevelMax, "SHOULD *NOT* SEE: action 8\n" ) );
-       goto require20Good;
+    require_action( 1 && "SHOULD *NOT* SEE", require20, dlog( kDebugLevelMax, "SHOULD *NOT* SEE: action 8\n" ) );
+    goto require20Good;
 require20:
-       { err = kResponseErr; goto exit; }
+    { err = kResponseErr; goto exit; }
 require20Good:
-       require_action_quiet( 0, require21, dlog( kDebugLevelMax, "SHOULD SEE: action 9 (expected)\n" ) );
-       { err = kResponseErr; goto exit; }
+    require_action_quiet( 0, require21, dlog( kDebugLevelMax, "SHOULD SEE: action 9 (expected)\n" ) );
+    { err = kResponseErr; goto exit; }
 require21:
-       require_action_quiet( 1, require22, dlog( kDebugLevelMax, "SHOULD *NOT* SEE: action 10\n" ) );
-       goto require22Good;
+    require_action_quiet( 1, require22, dlog( kDebugLevelMax, "SHOULD *NOT* SEE: action 10\n" ) );
+    goto require22Good;
 require22:
-       { err = kResponseErr; goto exit; }
+    { err = kResponseErr; goto exit; }
 require22Good:
-       require_action_string( 0, require23, dlog( kDebugLevelMax, "SHOULD SEE: action 11 (expected)\n" ), "SHOULD SEE: require_action_string" );
-       { err = kResponseErr; goto exit; }
+    require_action_string( 0, require23, dlog( kDebugLevelMax, "SHOULD SEE: action 11 (expected)\n" ), "SHOULD SEE: require_action_string" );
+    { err = kResponseErr; goto exit; }
 require23:
-       require_action_string( 1, require24, dlog( kDebugLevelMax, "SHOULD *NOT* SEE: action 12\n" ), "SHOULD *NOT* SEE: require_action_string" );
-       goto require24Good;
+    require_action_string( 1, require24, dlog( kDebugLevelMax, "SHOULD *NOT* SEE: action 12\n" ), "SHOULD *NOT* SEE: require_action_string" );
+    goto require24Good;
 require24:
-       { err = kResponseErr; goto exit; }
+    { err = kResponseErr; goto exit; }
 require24Good:
 
-#if( defined( __MWERKS__ )  )
-       #if( defined( __cplusplus ) && __option( exceptions ) )
-               #define COMPILER_HAS_EXCEPTIONS         1
-       #else
-               #define COMPILER_HAS_EXCEPTIONS         0
-       #endif
+#if ( defined( __MWERKS__ )  )
+    #if ( defined( __cplusplus ) && __option( exceptions ) )
+        #define COMPILER_HAS_EXCEPTIONS     1
+    #else
+        #define COMPILER_HAS_EXCEPTIONS     0
+    #endif
 #else
-       #if( defined( __cplusplus ) )
-               #define COMPILER_HAS_EXCEPTIONS         1
-       #else
-               #define COMPILER_HAS_EXCEPTIONS         0
-       #endif
+    #if ( defined( __cplusplus ) )
+        #define COMPILER_HAS_EXCEPTIONS     1
+    #else
+        #define COMPILER_HAS_EXCEPTIONS     0
+    #endif
 #endif
 
-#if( COMPILER_HAS_EXCEPTIONS )
-       try
-       {
-               require_throw( 1 && "SHOULD *NOT* SEE" );
-               require_throw( 0 && "SHOULD SEE" );
-       }
-       catch( ... )
-       {
-               goto require26Good;
-       }
-       { err = kResponseErr; goto exit; }
+#if ( COMPILER_HAS_EXCEPTIONS )
+    try
+    {
+        require_throw( 1 && "SHOULD *NOT* SEE" );
+        require_throw( 0 && "SHOULD SEE" );
+    }
+    catch(... )
+    {
+        goto require26Good;
+    }
+    { err = kResponseErr; goto exit; }
 require26Good:
 #endif
 
-       // translate_errno
-       
-       err = translate_errno( 1 != -1, -123, -567 );
-       require( ( err == 0 ) && "SHOULD *NOT* SEE", exit );
-       
-       err = translate_errno( -1 != -1, -123, -567 );
-       require( ( err == -123 ) && "SHOULD *NOT* SEE", exit );
-       
-       err = translate_errno( -1 != -1, 0, -567 );
-       require( ( err == -567 ) && "SHOULD *NOT* SEE", exit );
-
-       // debug_string
-       
-       debug_string( "debug_string" );
-       
-       // DebugSNPrintF
-       
-       DebugSNPrintF( s, sizeof( s ), "%d", 1234 );
-       require_action( strcmp( s, "1234" ) == 0, exit, err = -1 );
-       
-       DebugSNPrintF( s, sizeof( s ), "%X", 0x2345 );
-       require_action( strcmp( s, "2345" ) == 0, exit, err = -1 );
-       
-       DebugSNPrintF( s, sizeof( s ), "%#s", "\05test" );
-       require_action( strcmp( s, "test" ) == 0, exit, err = -1 );
-       
-       DebugSNPrintF( s, sizeof( s ), "%##s", "\03www\05apple\03com" );
-       require_action( strcmp( s, "www.apple.com." ) == 0, exit, err = -1 );
-       
-       DebugSNPrintF( s, sizeof( s ), "%ld", (long) INT32_C( 2147483647 ) );
-       require_action( strcmp( s, "2147483647" ) == 0, exit, err = -1 );
-       
-       DebugSNPrintF( s, sizeof( s ), "%lu", (unsigned long) UINT32_C( 4294967295 ) );
-       require_action( strcmp( s, "4294967295" ) == 0, exit, err = -1 );
-       
-       #if( TYPE_LONGLONG_NATIVE )
-               DebugSNPrintF( s, sizeof( s ), "%lld", (long_long_compat) INT64_C( 9223372036854775807 ) );
-               require_action( strcmp( s, "9223372036854775807" ) == 0, exit, err = -1 );
-               
-               DebugSNPrintF( s, sizeof( s ), "%lld", (long_long_compat) INT64_C( -9223372036854775807 ) );
-               require_action( strcmp( s, "-9223372036854775807" ) == 0, exit, err = -1 );
-               
-               DebugSNPrintF( s, sizeof( s ), "%llu", (unsigned_long_long_compat) UINT64_C( 18446744073709551615 ) );
-               require_action( strcmp( s, "18446744073709551615" ) == 0, exit, err = -1 );
-       #endif
-       
-       DebugSNPrintF( s, sizeof( s ), "%lb", (unsigned long) binary_32( 01111011, 01111011, 01111011, 01111011 ) );
-       require_action( strcmp( s, "1111011011110110111101101111011" ) == 0, exit, err = -1 );
-       
-       DebugSNPrintF( s, sizeof( s ), "%C", 0x41624364 );      // 'AbCd'
-       require_action( strcmp( s, "AbCd" ) == 0, exit, err = -1 );
-       
-       #if( defined( MDNS_DEBUGMSGS ) )
-       {
-               mDNSAddr                maddr;
-               
-               memset( &maddr, 0, sizeof( maddr ) );
-               maddr.type = mDNSAddrType_IPv4;
-               maddr.ip.v4.b[ 0 ] = 127;
-               maddr.ip.v4.b[ 1 ] = 0;
-               maddr.ip.v4.b[ 2 ] = 0;
-               maddr.ip.v4.b[ 3 ] = 1;
-               DebugSNPrintF( s, sizeof( s ), "%#a", &maddr );
-               require_action( strcmp( s, "127.0.0.1" ) == 0, exit, err = -1 );
-               
-               memset( &maddr, 0, sizeof( maddr ) );
-               maddr.type = mDNSAddrType_IPv6;
-               maddr.ip.v6.b[  0 ]     = 0xFE;
-               maddr.ip.v6.b[  1 ]     = 0x80;
-               maddr.ip.v6.b[ 15 ]     = 0x01;
-               DebugSNPrintF( s, sizeof( s ), "%#a", &maddr );
-               require_action( strcmp( s, "FE80:0000:0000:0000:0000:0000:0000:0001" ) == 0, exit, err = -1 );
-       }
-       #endif
-       
-       #if( AF_INET )
-       {
-               struct sockaddr_in              sa4;
-               
-               memset( &sa4, 0, sizeof( sa4 ) );
-               sa4.sin_family          = AF_INET;
-               p                                       = (uint8_t *) &sa4.sin_port;
-               p[ 0 ]                          = (uint8_t)( ( 80 >> 8 ) & 0xFF );
-               p[ 1 ]                          = (uint8_t)(   80        & 0xFF );
-               p                                       = (uint8_t *) &sa4.sin_addr.s_addr;
-               p[ 0 ]                          = (uint8_t)( ( INADDR_LOOPBACK >> 24 ) & 0xFF );
-               p[ 1 ]                          = (uint8_t)( ( INADDR_LOOPBACK >> 16 ) & 0xFF );
-               p[ 2 ]                          = (uint8_t)( ( INADDR_LOOPBACK >>  8 ) & 0xFF );
-               p[ 3 ]                          = (uint8_t)(   INADDR_LOOPBACK         & 0xFF );
-               DebugSNPrintF( s, sizeof( s ), "%##a", &sa4 );
-               require_action( strcmp( s, "127.0.0.1:80" ) == 0, exit, err = -1 );
-       }
-       #endif
-       
-       #if( AF_INET6 )
-       {
-               struct sockaddr_in6             sa6;
-               
-               memset( &sa6, 0, sizeof( sa6 ) );
-               sa6.sin6_family                         = AF_INET6;
-               p                                                       = (uint8_t *) &sa6.sin6_port;
-               p[ 0 ]                                          = (uint8_t)( ( 80 >> 8 ) & 0xFF );
-               p[ 1 ]                                          = (uint8_t)(   80        & 0xFF );
-               sa6.sin6_addr.s6_addr[  0 ]     = 0xFE;
-               sa6.sin6_addr.s6_addr[  1 ]     = 0x80;
-               sa6.sin6_addr.s6_addr[ 15 ]     = 0x01;
-               sa6.sin6_scope_id                       = 2;
-               DebugSNPrintF( s, sizeof( s ), "%##a", &sa6 );
-               require_action( strcmp( s, "[FE80:0000:0000:0000:0000:0000:0000:0001%2]:80" ) == 0, exit, err = -1 );
-       }
-       #endif
-       
-       // Unicode
-
-       DebugSNPrintF(s, sizeof(s), "%.*s", 4, "tes" );
-       require_action( strcmp( s, "tes" ) == 0, exit, err = kResponseErr );
-       
-       DebugSNPrintF(s, sizeof(s), "%.*s", 4, "test" );
-       require_action( strcmp( s, "test" ) == 0, exit, err = kResponseErr );
-       
-       DebugSNPrintF(s, sizeof(s), "%.*s", 4, "testing" );
-       require_action( strcmp( s, "test" ) == 0, exit, err = kResponseErr );
-       
-       DebugSNPrintF(s, sizeof(s), "%.*s", 4, "te\xC3\xA9" );
-       require_action( strcmp( s, "te\xC3\xA9" ) == 0, exit, err = kResponseErr );
-       
-       DebugSNPrintF(s, sizeof(s), "%.*s", 4, "te\xC3\xA9ing" );
-       require_action( strcmp( s, "te\xC3\xA9" ) == 0, exit, err = kResponseErr );
-       
-       DebugSNPrintF(s, sizeof(s), "%.*s", 4, "tes\xC3\xA9ing" );
-       require_action( strcmp( s, "tes" ) == 0, exit, err = kResponseErr );
-       
-       DebugSNPrintF(s, sizeof(s), "%.*s", 4, "t\xed\x9f\xbf" );
-       require_action( strcmp( s, "t\xed\x9f\xbf" ) == 0, exit, err = kResponseErr );
-       
-       DebugSNPrintF(s, sizeof(s), "%.*s", 4, "t\xed\x9f\xbfing" );
-       require_action( strcmp( s, "t\xed\x9f\xbf" ) == 0, exit, err = kResponseErr );
-       
-       DebugSNPrintF(s, sizeof(s), "%.*s", 4, "te\xed\x9f\xbf" );
-       require_action( strcmp( s, "te" ) == 0, exit, err = kResponseErr );
-       
-       DebugSNPrintF(s, sizeof(s), "%.*s", 4, "te\xed\x9f\xbfing" );
-       require_action( strcmp( s, "te" ) == 0, exit, err = kResponseErr );
-       
-       DebugSNPrintF(s, sizeof(s), "%.*s", 7, "te\xC3\xA9\xed\x9f\xbfing" );
-       require_action( strcmp( s, "te\xC3\xA9\xed\x9f\xbf" ) == 0, exit, err = kResponseErr );
-       
-       DebugSNPrintF(s, sizeof(s), "%.*s", 6, "te\xC3\xA9\xed\x9f\xbfing" );
-       require_action( strcmp( s, "te\xC3\xA9" ) == 0, exit, err = kResponseErr );
-       
-       DebugSNPrintF(s, sizeof(s), "%.*s", 5, "te\xC3\xA9\xed\x9f\xbfing" );
-       require_action( strcmp( s, "te\xC3\xA9" ) == 0, exit, err = kResponseErr );
-
-       #if( TARGET_RT_BIG_ENDIAN )
-               DebugSNPrintF( s, sizeof( s ), "%S", "\x00" "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" "\x00" );
-               require_action( strcmp( s, "abcd" ) == 0, exit, err = -1 );
-       #else
-               DebugSNPrintF( s, sizeof( s ), "%S", "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" "\x00" "\x00" );
-               require_action( strcmp( s, "abcd" ) == 0, exit, err = -1 );
-       #endif
-       
-       DebugSNPrintF( s, sizeof( s ), "%S", 
-               "\xFE\xFF" "\x00" "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" "\x00" ); // Big Endian BOM
-       require_action( strcmp( s, "abcd" ) == 0, exit, err = -1 );
-       
-       DebugSNPrintF( s, sizeof( s ), "%S", 
-               "\xFF\xFE" "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" "\x00" "\x00" ); // Little Endian BOM
-       require_action( strcmp( s, "abcd" ) == 0, exit, err = -1 );
-       
-       DebugSNPrintF( s, sizeof( s ), "%#S", "\x00" "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" "\x00" );      // Big Endian
-       require_action( strcmp( s, "abcd" ) == 0, exit, err = -1 );
-       
-       DebugSNPrintF( s, sizeof( s ), "%##S", "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" "\x00" "\x00" );     // Little Endian
-       require_action( strcmp( s, "abcd" ) == 0, exit, err = -1 );
-       
-       DebugSNPrintF( s, sizeof( s ), "%.*S", 
-               4, "\xFE\xFF" "\x00" "a" "\x00" "b" "\x00" "c" "\x00" "d" );    // Big Endian BOM
-       require_action( strcmp( s, "abc" ) == 0, exit, err = -1 );
-       
-       DebugSNPrintF( s, sizeof( s ), "%.*S", 
-               4, "\xFF\xFE" "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" );    // Little Endian BOM
-       require_action( strcmp( s, "abc" ) == 0, exit, err = -1 );
-       
-       #if( TARGET_RT_BIG_ENDIAN )
-               DebugSNPrintF( s, sizeof( s ), "%.*S", 3, "\x00" "a" "\x00" "b" "\x00" "c" "\x00" "d" );
-               require_action( strcmp( s, "abc" ) == 0, exit, err = -1 );
-       #else
-               DebugSNPrintF( s, sizeof( s ), "%.*S", 3, "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" );
-               require_action( strcmp( s, "abc" ) == 0, exit, err = -1 );
-       #endif
-       
-       DebugSNPrintF( s, sizeof( s ), "%#.*S", 3, "\x00" "a" "\x00" "b" "\x00" "c" "\x00" "d" );       // Big Endian
-       require_action( strcmp( s, "abc" ) == 0, exit, err = -1 );
-       
-       DebugSNPrintF( s, sizeof( s ), "%##.*S", 3, "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" );      // Little Endian
-       require_action( strcmp( s, "abc" ) == 0, exit, err = -1 );
-       
-       // Misc
-       
-       DebugSNPrintF( s, sizeof( s ), "%U", "\x10\xb8\xa7\x6b" "\xad\x9d" "\xd1\x11" "\x80\xb4" "\x00\xc0\x4f\xd4\x30\xc8" );
-       require_action( strcmp( s, "6ba7b810-9dad-11d1-80b4-00c04fd430c8" ) == 0, exit, err = -1 );
-       
-       DebugSNPrintF( s, sizeof( s ), "%m", 0 );
-       require_action( strcmp( s, "no error" ) == 0, exit, err = -1 );
-       
-       DebugSNPrintF( s, sizeof( s ), "%lm", (long) 0 );
-       require_action( strcmp( s, "no error" ) == 0, exit, err = -1 );
-       
-       DebugSNPrintF( s, sizeof( s ), "\"%H\"", "\x6b\xa7\xb8\x10\x9d\xad\x11\xd1\x80\xb4\x00\xc0\x4f\xd4\x30\xc8", 16, 16 );
-       DebugPrintF( kDebugLevelMax, "%s\n\n", s );
-       
-       DebugSNPrintF( s, sizeof( s ), "\"%H\"", 
-               "\x6b\xa7\xb8\x10\x9d\xad\x11\xd1\x80\xb4\x00\xc0\x4f\xd4\x30\xc8"
-               "\x6b\xa7\xb8\x10\x9d\xad\x11\xd1\x80\xb4\x00\xc0\x4f\xd4\x30\xc8", 
-               32, 32 );
-       DebugPrintF( kDebugLevelMax, "%s\n\n", s );
-       
-       DebugSNPrintF( s, sizeof( s ), "\"%H\"", "\x6b\xa7", 2, 2 );
-       DebugPrintF( kDebugLevelMax, "%s\n\n", s );
-       
-       // Hex Dumps
-       
-       s[ 0 ] = '\0';
-       DebugHexDump( kDebugLevelMax, 0, "My Label", kSizeCString, 0, NULL, 0, data, data, sizeof( data ), 
-               kDebugFlagsNone, s, sizeof( s ) );
-       DebugPrintF( kDebugLevelMax, "%s\n", s );
-       
-       s[ 0 ] = '\0';
-       DebugHexDump( kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, data, data, sizeof( data ), 
-               kDebugFlagsNoAddress | kDebugFlagsNoOffset, s, sizeof( s ) );
-       DebugPrintF( kDebugLevelMax, "%s\n", s );
-       
-       s[ 0 ] = '\0';
-       DebugHexDump( kDebugLevelMax, 0, "My Label", kSizeCString, 0, NULL, 0, data, data, sizeof( data ), 
-               kDebugFlagsNoAddress | kDebugFlagsNoOffset, s, sizeof( s ) );
-       DebugPrintF( kDebugLevelMax, "%s\n", s );
-       
-       s[ 0 ] = '\0';
-       DebugHexDump( kDebugLevelMax, 0, "My Label", kSizeCString, 0, NULL, 0, data, data, sizeof( data ), 
-               kDebugFlagsNoAddress, s, sizeof( s ) );
-       DebugPrintF( kDebugLevelMax, "%s\n", s );
-       
-       s[ 0 ] = '\0';
-       DebugHexDump( kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, data, data, sizeof( data ), 
-               kDebugFlagsNoOffset, s, sizeof( s ) );
-       DebugPrintF( kDebugLevelMax, "%s\n", s );
-       
-       s[ 0 ] = '\0';
-       DebugHexDump( kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, data, data, sizeof( data ), 
-               kDebugFlagsNoAddress, s, sizeof( s ) );
-       DebugPrintF( kDebugLevelMax, "%s\n", s );
-       
-       s[ 0 ] = '\0';
-       DebugHexDump( kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, data, data, sizeof( data ), 
-               kDebugFlagsNoOffset, s, sizeof( s ) );
-       DebugPrintF( kDebugLevelMax, "%s\n", s );
-       
-       s[ 0 ] = '\0';
-       DebugHexDump( kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, data, data, sizeof( data ), 
-               kDebugFlagsNoByteCount, s, sizeof( s ) );
-       DebugPrintF( kDebugLevelMax, "%s\n", s );
-       
-       s[ 0 ] = '\0';
-       DebugHexDump( kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, "\x41\x62\x43\x64", "\x41\x62\x43\x64", 4,        // 'AbCd'
-               kDebugFlagsNoAddress | kDebugFlagsNoOffset | kDebugFlagsNoNewLine |
-               kDebugFlagsNo32BitSeparator | kDebugFlagsNo16ByteHexPad | kDebugFlagsNoByteCount, 
-               s, sizeof( s ) );
-       DebugPrintF( kDebugLevelMax, "%s\n", s );
-       
-       s[ 0 ] = '\0';
-       DebugHexDump( kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, data, data, sizeof( data ), 
-               kDebugFlagsNoAddress | kDebugFlagsNoOffset | kDebugFlagsNoASCII | kDebugFlagsNoNewLine |
-               kDebugFlags16BitSeparator | kDebugFlagsNo32BitSeparator |
-               kDebugFlagsNo16ByteHexPad | kDebugFlagsNoByteCount, s, sizeof( s ) );
-       DebugPrintF( kDebugLevelMax, "%s\n", s );
-       
-       s[ 0 ] = '\0';
-       DebugHexDump( kDebugLevelMax, 8, NULL, 0, 0, NULL, 0, data, data, sizeof( data ), kDebugFlagsNone, s, sizeof( s ) );
-       DebugPrintF( kDebugLevelMax, "%s\n", s );
-       
-       // dlog's
-       
-       dlog( kDebugLevelNotice, "dlog\n" );
-       dlog( kDebugLevelNotice, "dlog integer: %d\n", 123 );
-       dlog( kDebugLevelNotice, "dlog string:  \"%s\"\n", "test string" );
-       dlogmem( kDebugLevelNotice, data, sizeof( data ) );
-       
-       // Done
-       
-       DebugPrintF( kDebugLevelMax, "\n\nALL TESTS DONE\n\n" );
-       err = kNoErr;
-       
+    // translate_errno
+
+    err = translate_errno( 1 != -1, -123, -567 );
+    require( ( err == 0 ) && "SHOULD *NOT* SEE", exit );
+
+    err = translate_errno( -1 != -1, -123, -567 );
+    require( ( err == -123 ) && "SHOULD *NOT* SEE", exit );
+
+    err = translate_errno( -1 != -1, 0, -567 );
+    require( ( err == -567 ) && "SHOULD *NOT* SEE", exit );
+
+    // debug_string
+
+    debug_string( "debug_string" );
+
+    // DebugSNPrintF
+
+    DebugSNPrintF( s, sizeof( s ), "%d", 1234 );
+    require_action( strcmp( s, "1234" ) == 0, exit, err = -1 );
+
+    DebugSNPrintF( s, sizeof( s ), "%X", 0x2345 );
+    require_action( strcmp( s, "2345" ) == 0, exit, err = -1 );
+
+    DebugSNPrintF( s, sizeof( s ), "%#s", "\05test" );
+    require_action( strcmp( s, "test" ) == 0, exit, err = -1 );
+
+    DebugSNPrintF( s, sizeof( s ), "%##s", "\03www\05apple\03com" );
+    require_action( strcmp( s, "www.apple.com." ) == 0, exit, err = -1 );
+
+    DebugSNPrintF( s, sizeof( s ), "%ld", (long) INT32_C( 2147483647 ) );
+    require_action( strcmp( s, "2147483647" ) == 0, exit, err = -1 );
+
+    DebugSNPrintF( s, sizeof( s ), "%lu", (unsigned long) UINT32_C( 4294967295 ) );
+    require_action( strcmp( s, "4294967295" ) == 0, exit, err = -1 );
+
+    #if ( TYPE_LONGLONG_NATIVE )
+    DebugSNPrintF( s, sizeof( s ), "%lld", (long_long_compat) INT64_C( 9223372036854775807 ) );
+    require_action( strcmp( s, "9223372036854775807" ) == 0, exit, err = -1 );
+
+    DebugSNPrintF( s, sizeof( s ), "%lld", (long_long_compat) INT64_C( -9223372036854775807 ) );
+    require_action( strcmp( s, "-9223372036854775807" ) == 0, exit, err = -1 );
+
+    DebugSNPrintF( s, sizeof( s ), "%llu", (unsigned_long_long_compat) UINT64_C( 18446744073709551615 ) );
+    require_action( strcmp( s, "18446744073709551615" ) == 0, exit, err = -1 );
+    #endif
+
+    DebugSNPrintF( s, sizeof( s ), "%lb", (unsigned long) binary_32( 01111011, 01111011, 01111011, 01111011 ) );
+    require_action( strcmp( s, "1111011011110110111101101111011" ) == 0, exit, err = -1 );
+
+    DebugSNPrintF( s, sizeof( s ), "%C", 0x41624364 );  // 'AbCd'
+    require_action( strcmp( s, "AbCd" ) == 0, exit, err = -1 );
+
+    #if ( defined( MDNS_DEBUGMSGS ) )
+    {
+        mDNSAddr maddr;
+
+        memset( &maddr, 0, sizeof( maddr ) );
+        maddr.type = mDNSAddrType_IPv4;
+        maddr.ip.v4.b[ 0 ] = 127;
+        maddr.ip.v4.b[ 1 ] = 0;
+        maddr.ip.v4.b[ 2 ] = 0;
+        maddr.ip.v4.b[ 3 ] = 1;
+        DebugSNPrintF( s, sizeof( s ), "%#a", &maddr );
+        require_action( strcmp( s, "127.0.0.1" ) == 0, exit, err = -1 );
+
+        memset( &maddr, 0, sizeof( maddr ) );
+        maddr.type = mDNSAddrType_IPv6;
+        maddr.ip.v6.b[  0 ] = 0xFE;
+        maddr.ip.v6.b[  1 ] = 0x80;
+        maddr.ip.v6.b[ 15 ] = 0x01;
+        DebugSNPrintF( s, sizeof( s ), "%#a", &maddr );
+        require_action( strcmp( s, "FE80:0000:0000:0000:0000:0000:0000:0001" ) == 0, exit, err = -1 );
+    }
+    #endif
+
+    #if ( AF_INET )
+    {
+        struct sockaddr_in sa4;
+
+        memset( &sa4, 0, sizeof( sa4 ) );
+        sa4.sin_family      = AF_INET;
+        p                   = (uint8_t *) &sa4.sin_port;
+        p[ 0 ]              = (uint8_t)( ( 80 >> 8 ) & 0xFF );
+        p[ 1 ]              = (uint8_t)(   80        & 0xFF );
+        p                   = (uint8_t *) &sa4.sin_addr.s_addr;
+        p[ 0 ]              = (uint8_t)( ( INADDR_LOOPBACK >> 24 ) & 0xFF );
+        p[ 1 ]              = (uint8_t)( ( INADDR_LOOPBACK >> 16 ) & 0xFF );
+        p[ 2 ]              = (uint8_t)( ( INADDR_LOOPBACK >>  8 ) & 0xFF );
+        p[ 3 ]              = (uint8_t)(   INADDR_LOOPBACK         & 0xFF );
+        DebugSNPrintF( s, sizeof( s ), "%##a", &sa4 );
+        require_action( strcmp( s, "127.0.0.1:80" ) == 0, exit, err = -1 );
+    }
+    #endif
+
+    #if ( AF_INET6 )
+    {
+        struct sockaddr_in6 sa6;
+
+        memset( &sa6, 0, sizeof( sa6 ) );
+        sa6.sin6_family             = AF_INET6;
+        p                           = (uint8_t *) &sa6.sin6_port;
+        p[ 0 ]                      = (uint8_t)( ( 80 >> 8 ) & 0xFF );
+        p[ 1 ]                      = (uint8_t)(   80        & 0xFF );
+        sa6.sin6_addr.s6_addr[  0 ] = 0xFE;
+        sa6.sin6_addr.s6_addr[  1 ] = 0x80;
+        sa6.sin6_addr.s6_addr[ 15 ] = 0x01;
+        sa6.sin6_scope_id           = 2;
+        DebugSNPrintF( s, sizeof( s ), "%##a", &sa6 );
+        require_action( strcmp( s, "[FE80:0000:0000:0000:0000:0000:0000:0001%2]:80" ) == 0, exit, err = -1 );
+    }
+    #endif
+
+    // Unicode
+
+    DebugSNPrintF(s, sizeof(s), "%.*s", 4, "tes" );
+    require_action( strcmp( s, "tes" ) == 0, exit, err = kResponseErr );
+
+    DebugSNPrintF(s, sizeof(s), "%.*s", 4, "test" );
+    require_action( strcmp( s, "test" ) == 0, exit, err = kResponseErr );
+
+    DebugSNPrintF(s, sizeof(s), "%.*s", 4, "testing" );
+    require_action( strcmp( s, "test" ) == 0, exit, err = kResponseErr );
+
+    DebugSNPrintF(s, sizeof(s), "%.*s", 4, "te\xC3\xA9" );
+    require_action( strcmp( s, "te\xC3\xA9" ) == 0, exit, err = kResponseErr );
+
+    DebugSNPrintF(s, sizeof(s), "%.*s", 4, "te\xC3\xA9ing" );
+    require_action( strcmp( s, "te\xC3\xA9" ) == 0, exit, err = kResponseErr );
+
+    DebugSNPrintF(s, sizeof(s), "%.*s", 4, "tes\xC3\xA9ing" );
+    require_action( strcmp( s, "tes" ) == 0, exit, err = kResponseErr );
+
+    DebugSNPrintF(s, sizeof(s), "%.*s", 4, "t\xed\x9f\xbf" );
+    require_action( strcmp( s, "t\xed\x9f\xbf" ) == 0, exit, err = kResponseErr );
+
+    DebugSNPrintF(s, sizeof(s), "%.*s", 4, "t\xed\x9f\xbfing" );
+    require_action( strcmp( s, "t\xed\x9f\xbf" ) == 0, exit, err = kResponseErr );
+
+    DebugSNPrintF(s, sizeof(s), "%.*s", 4, "te\xed\x9f\xbf" );
+    require_action( strcmp( s, "te" ) == 0, exit, err = kResponseErr );
+
+    DebugSNPrintF(s, sizeof(s), "%.*s", 4, "te\xed\x9f\xbfing" );
+    require_action( strcmp( s, "te" ) == 0, exit, err = kResponseErr );
+
+    DebugSNPrintF(s, sizeof(s), "%.*s", 7, "te\xC3\xA9\xed\x9f\xbfing" );
+    require_action( strcmp( s, "te\xC3\xA9\xed\x9f\xbf" ) == 0, exit, err = kResponseErr );
+
+    DebugSNPrintF(s, sizeof(s), "%.*s", 6, "te\xC3\xA9\xed\x9f\xbfing" );
+    require_action( strcmp( s, "te\xC3\xA9" ) == 0, exit, err = kResponseErr );
+
+    DebugSNPrintF(s, sizeof(s), "%.*s", 5, "te\xC3\xA9\xed\x9f\xbfing" );
+    require_action( strcmp( s, "te\xC3\xA9" ) == 0, exit, err = kResponseErr );
+
+    #if ( TARGET_RT_BIG_ENDIAN )
+    DebugSNPrintF( s, sizeof( s ), "%S", "\x00" "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" "\x00" );
+    require_action( strcmp( s, "abcd" ) == 0, exit, err = -1 );
+    #else
+    DebugSNPrintF( s, sizeof( s ), "%S", "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" "\x00" "\x00" );
+    require_action( strcmp( s, "abcd" ) == 0, exit, err = -1 );
+    #endif
+
+    DebugSNPrintF( s, sizeof( s ), "%S",
+                   "\xFE\xFF" "\x00" "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" "\x00" ); // Big Endian BOM
+    require_action( strcmp( s, "abcd" ) == 0, exit, err = -1 );
+
+    DebugSNPrintF( s, sizeof( s ), "%S",
+                   "\xFF\xFE" "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" "\x00" "\x00" ); // Little Endian BOM
+    require_action( strcmp( s, "abcd" ) == 0, exit, err = -1 );
+
+    DebugSNPrintF( s, sizeof( s ), "%#S", "\x00" "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" "\x00" );  // Big Endian
+    require_action( strcmp( s, "abcd" ) == 0, exit, err = -1 );
+
+    DebugSNPrintF( s, sizeof( s ), "%##S", "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" "\x00" "\x00" ); // Little Endian
+    require_action( strcmp( s, "abcd" ) == 0, exit, err = -1 );
+
+    DebugSNPrintF( s, sizeof( s ), "%.*S",
+                   4, "\xFE\xFF" "\x00" "a" "\x00" "b" "\x00" "c" "\x00" "d" ); // Big Endian BOM
+    require_action( strcmp( s, "abc" ) == 0, exit, err = -1 );
+
+    DebugSNPrintF( s, sizeof( s ), "%.*S",
+                   4, "\xFF\xFE" "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" ); // Little Endian BOM
+    require_action( strcmp( s, "abc" ) == 0, exit, err = -1 );
+
+    #if ( TARGET_RT_BIG_ENDIAN )
+    DebugSNPrintF( s, sizeof( s ), "%.*S", 3, "\x00" "a" "\x00" "b" "\x00" "c" "\x00" "d" );
+    require_action( strcmp( s, "abc" ) == 0, exit, err = -1 );
+    #else
+    DebugSNPrintF( s, sizeof( s ), "%.*S", 3, "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" );
+    require_action( strcmp( s, "abc" ) == 0, exit, err = -1 );
+    #endif
+
+    DebugSNPrintF( s, sizeof( s ), "%#.*S", 3, "\x00" "a" "\x00" "b" "\x00" "c" "\x00" "d" );   // Big Endian
+    require_action( strcmp( s, "abc" ) == 0, exit, err = -1 );
+
+    DebugSNPrintF( s, sizeof( s ), "%##.*S", 3, "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" );  // Little Endian
+    require_action( strcmp( s, "abc" ) == 0, exit, err = -1 );
+
+    // Misc
+
+    DebugSNPrintF( s, sizeof( s ), "%U", "\x10\xb8\xa7\x6b" "\xad\x9d" "\xd1\x11" "\x80\xb4" "\x00\xc0\x4f\xd4\x30\xc8" );
+    require_action( strcmp( s, "6ba7b810-9dad-11d1-80b4-00c04fd430c8" ) == 0, exit, err = -1 );
+
+    DebugSNPrintF( s, sizeof( s ), "%m", 0 );
+    require_action( strcmp( s, "no error" ) == 0, exit, err = -1 );
+
+    DebugSNPrintF( s, sizeof( s ), "%lm", (long) 0 );
+    require_action( strcmp( s, "no error" ) == 0, exit, err = -1 );
+
+    DebugSNPrintF( s, sizeof( s ), "\"%H\"", "\x6b\xa7\xb8\x10\x9d\xad\x11\xd1\x80\xb4\x00\xc0\x4f\xd4\x30\xc8", 16, 16 );
+    DebugPrintF( kDebugLevelMax, "%s\n\n", s );
+
+    DebugSNPrintF( s, sizeof( s ), "\"%H\"",
+                   "\x6b\xa7\xb8\x10\x9d\xad\x11\xd1\x80\xb4\x00\xc0\x4f\xd4\x30\xc8"
+                   "\x6b\xa7\xb8\x10\x9d\xad\x11\xd1\x80\xb4\x00\xc0\x4f\xd4\x30\xc8",
+                   32, 32 );
+    DebugPrintF( kDebugLevelMax, "%s\n\n", s );
+
+    DebugSNPrintF( s, sizeof( s ), "\"%H\"", "\x6b\xa7", 2, 2 );
+    DebugPrintF( kDebugLevelMax, "%s\n\n", s );
+
+    // Hex Dumps
+
+    s[ 0 ] = '\0';
+    DebugHexDump( kDebugLevelMax, 0, "My Label", kSizeCString, 0, NULL, 0, data, data, sizeof( data ),
+                  kDebugFlagsNone, s, sizeof( s ) );
+    DebugPrintF( kDebugLevelMax, "%s\n", s );
+
+    s[ 0 ] = '\0';
+    DebugHexDump( kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, data, data, sizeof( data ),
+                  kDebugFlagsNoAddress | kDebugFlagsNoOffset, s, sizeof( s ) );
+    DebugPrintF( kDebugLevelMax, "%s\n", s );
+
+    s[ 0 ] = '\0';
+    DebugHexDump( kDebugLevelMax, 0, "My Label", kSizeCString, 0, NULL, 0, data, data, sizeof( data ),
+                  kDebugFlagsNoAddress | kDebugFlagsNoOffset, s, sizeof( s ) );
+    DebugPrintF( kDebugLevelMax, "%s\n", s );
+
+    s[ 0 ] = '\0';
+    DebugHexDump( kDebugLevelMax, 0, "My Label", kSizeCString, 0, NULL, 0, data, data, sizeof( data ),
+                  kDebugFlagsNoAddress, s, sizeof( s ) );
+    DebugPrintF( kDebugLevelMax, "%s\n", s );
+
+    s[ 0 ] = '\0';
+    DebugHexDump( kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, data, data, sizeof( data ),
+                  kDebugFlagsNoOffset, s, sizeof( s ) );
+    DebugPrintF( kDebugLevelMax, "%s\n", s );
+
+    s[ 0 ] = '\0';
+    DebugHexDump( kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, data, data, sizeof( data ),
+                  kDebugFlagsNoAddress, s, sizeof( s ) );
+    DebugPrintF( kDebugLevelMax, "%s\n", s );
+
+    s[ 0 ] = '\0';
+    DebugHexDump( kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, data, data, sizeof( data ),
+                  kDebugFlagsNoOffset, s, sizeof( s ) );
+    DebugPrintF( kDebugLevelMax, "%s\n", s );
+
+    s[ 0 ] = '\0';
+    DebugHexDump( kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, data, data, sizeof( data ),
+                  kDebugFlagsNoByteCount, s, sizeof( s ) );
+    DebugPrintF( kDebugLevelMax, "%s\n", s );
+
+    s[ 0 ] = '\0';
+    DebugHexDump( kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, "\x41\x62\x43\x64", "\x41\x62\x43\x64", 4,    // 'AbCd'
+                  kDebugFlagsNoAddress | kDebugFlagsNoOffset | kDebugFlagsNoNewLine |
+                  kDebugFlagsNo32BitSeparator | kDebugFlagsNo16ByteHexPad | kDebugFlagsNoByteCount,
+                  s, sizeof( s ) );
+    DebugPrintF( kDebugLevelMax, "%s\n", s );
+
+    s[ 0 ] = '\0';
+    DebugHexDump( kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, data, data, sizeof( data ),
+                  kDebugFlagsNoAddress | kDebugFlagsNoOffset | kDebugFlagsNoASCII | kDebugFlagsNoNewLine |
+                  kDebugFlags16BitSeparator | kDebugFlagsNo32BitSeparator |
+                  kDebugFlagsNo16ByteHexPad | kDebugFlagsNoByteCount, s, sizeof( s ) );
+    DebugPrintF( kDebugLevelMax, "%s\n", s );
+
+    s[ 0 ] = '\0';
+    DebugHexDump( kDebugLevelMax, 8, NULL, 0, 0, NULL, 0, data, data, sizeof( data ), kDebugFlagsNone, s, sizeof( s ) );
+    DebugPrintF( kDebugLevelMax, "%s\n", s );
+
+    // dlog's
+
+    dlog( kDebugLevelNotice, "dlog\n" );
+    dlog( kDebugLevelNotice, "dlog integer: %d\n", 123 );
+    dlog( kDebugLevelNotice, "dlog string:  \"%s\"\n", "test string" );
+    dlogmem( kDebugLevelNotice, data, sizeof( data ) );
+
+    // Done
+
+    DebugPrintF( kDebugLevelMax, "\n\nALL TESTS DONE\n\n" );
+    err = kNoErr;
+
 exit:
-       if( err )
-       {
-               DebugPrintF( kDebugLevelMax, "\n\n### TEST FAILED ###\n\n" );
-       }
-       return( err );
+    if( err )
+    {
+        DebugPrintF( kDebugLevelMax, "\n\n### TEST FAILED ###\n\n" );
+    }
+    return( err );
 }
 
-#endif // DEBUG
+#endif  // DEBUG