Hamilton LaboratoriesHamilton C shell 2012User guideSamples

winerror.c

Oregon Coast

winerror.c
Previous | Next

/***************************************************************************/
/*                                                                         */
/*                                                                         */
/*       Print the Win32 message corresponding the given error code.       */
/* Copyright (c) 1993-2012 by Hamilton Laboratories.  All rights reserved. */
/*                                                                         */
/*                                                                         */
/***************************************************************************/

#include <windows.h>
#include <ctype.h>
#include <stdlib.h>
#include "internat.h"

void main( int argc, char **argv )
   {
   int i;
   HANDLE Stdout = GetStdHandle(STD_OUTPUT_HANDLE);
   Internationalize();

   if (Stdout == INVALID_HANDLE_VALUE)
      ExitProcess(GetLastError());

   for (i = 1;  i < argc;  i++)
      {
      register char *p, c;
      DWORD bytes;
      for (p = argv[i];  c = *p, c && isdigit(c);  p++)
         ;
      if (c == 0)
         {
         char msg_buf[1024], errno_buf[20],
            NoHelp[] = "No help is available for this error.\r\n";
         DWORD Errno = (DWORD)atoi(argv[i]);
         _itoa(Errno, errno_buf, 10);
         for (p = errno_buf;  *p;  p++)
            ;
         *p++ = ':';
         *p++ = ' ';
         *p++ = ' ';
         WriteFile(Stdout, errno_buf, p - errno_buf, &bytes, NULL);

         if (bytes = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, Errno,
               MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), msg_buf,
               sizeof(msg_buf), NULL))
            WriteFile(Stdout, msg_buf, bytes, &bytes, NULL);
         else
            WriteFile(Stdout, NoHelp, sizeof(NoHelp) - 1, &bytes, NULL);
         }
      else
         {
         char NotNumeric[] = ":  No help available.  Error codes must "
               "be numeric.\r\n";
         while (*p)
            p++;
         WriteFile(Stdout, argv[i], p - argv[i], &bytes, NULL);
         WriteFile(Stdout, NotNumeric, sizeof(NotNumeric) - 1, &bytes, NULL);
         }
      }
   ExitProcess(0);
   }

Previous | Next