'===========================================================================
' Subject: WINDOWS ERROR MESSAGES             Date: 06-27-98 (00:00)       
'  Author: PowerBASIC, Inc.                   Code: PBCC                   
'  Origin: ftp.powerbasic.com               Packet: PBCC.ABC
'===========================================================================
'==============================================================================
'
'  WINERR utility for PB/CC
'  Copyright (c) 1998 by PowerBASIC, Inc.  All Rights Reserved.
'
'  This command line utility will display the text for a given Windows error
'  code (see GetLastError() in your Win32 API documentation).
'
'==============================================================================

%NULL                       = 0
%FORMAT_MESSAGE_FROM_SYSTEM = &H1000

DECLARE FUNCTION FormatMessage LIB "KERNEL32.DLL" ALIAS "FormatMessageA" (BYVAL dwFlags AS LONG, lpSource AS ANY, BYVAL dwMessageId AS LONG, BYVAL dwLanguageId AS LONG, lpBuffer AS ASCIIZ, _
                                                                          BYVAL nSize AS LONG, Arguments AS LONG) AS LONG

FUNCTION WinErrMsg(BYVAL x AS LONG) AS STRING

  LOCAL buffer AS ASCIIZ * 64

  FormatMessage %FORMAT_MESSAGE_FROM_SYSTEM, BYVAL %NULL, x, %NULL, buffer, SIZEOF(buffer), BYVAL %NULL

  IF LEN(buffer) THEN
    FUNCTION = "Error " & FORMAT$(x) & " = " & buffer
  ELSE
    FUNCTION = "Unknown error code: " & FORMAT$(x)
  END IF

END FUNCTION

FUNCTION PbMain() AS LONG

  STDOUT "WINERR v1.0 - Windows Error Messages"
  STDOUT "Copyright (c) 1998 by PowerBASIC, Inc. All Rights Reserved."
  STDOUT ""

  IF LEN(COMMAND$) THEN
    STDOUT WinErrMsg( VAL(COMMAND$) )
  ELSE
    STDOUT "Usage:  WINERR error_code"
  END IF

END FUNCTION
