update for HEAD-2003050101
[reactos.git] / subsys / system / cmd / error.c
diff --git a/subsys/system/cmd/error.c b/subsys/system/cmd/error.c
new file mode 100644 (file)
index 0000000..d0bf15b
--- /dev/null
@@ -0,0 +1,175 @@
+/*
+ *  ERROR.C - error reporting functions.
+ *
+ *
+ *  History:
+ *
+ *    07/12/98 (Rob Lake)
+ *        started
+ *
+ *    27-Jul-1998 (John P Price <linux-guru@gcfl.net>)
+ *        added config.h include
+ *
+ *    24-Jan-1999 (Eric Kohl <ekohl@abo.rhein-zeitung.de>)
+ *        Redirection safe!
+ *
+ *    02-Feb-1999 (Eric Kohl <ekohl@abo.rhein-zeitung.de>)
+ *        Use FormatMessage() for error reports.
+ */
+
+#include "config.h"
+
+#include <windows.h>
+#include <tchar.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+#include "cmd.h"
+
+
+#define INVALID_SWITCH         _T("Invalid switch - /%c\n")
+#define TOO_MANY_PARAMETERS    _T("Too many parameters - %s\n")
+#define PATH_NOT_FOUND         _T("Path not found\n")
+#define FILE_NOT_FOUND         _T("File not found\n")
+#define REQ_PARAM_MISSING      _T("Required parameter missing\n")
+#define INVALID_DRIVE          _T("Invalid drive specification\n")
+#define INVALID_PARAM_FORMAT   _T("Invalid parameter format - %s\n")
+#define BADCOMMAND             _T("Bad command or filename\n")
+#define OUT_OF_MEMORY          _T("Out of memory error.\n")
+#define CANNOTPIPE             _T("Error!  Cannot pipe!  Cannot open temporary file!\n")
+
+#define D_PAUSEMSG             _T("Press any key to continue . . .")
+
+
+
+VOID ErrorMessage (DWORD dwErrorCode, LPTSTR szFormat, ...)
+{
+       TCHAR  szMessage[1024];
+       LPTSTR szError;
+       va_list arg_ptr;
+
+       if (dwErrorCode == ERROR_SUCCESS)
+               return;
+
+       va_start (arg_ptr, szFormat);
+       _vstprintf (szMessage, szFormat, arg_ptr);
+       va_end (arg_ptr);
+
+#ifndef __REACTOS__
+
+       if (FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,
+                                          NULL, dwErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+                                          (LPTSTR)&szError, 0, NULL))
+       {
+               ConErrPrintf (_T("%s %s\n"), szError, szMessage);
+               LocalFree (szError);
+               return;
+       }
+       else
+       {
+               ConErrPrintf (_T("Unknown error! Error code: 0x%lx\n"), dwErrorCode);
+               return;
+       }
+
+#else
+
+       switch (dwErrorCode)
+       {
+               case ERROR_FILE_NOT_FOUND:
+                       szError = _T("File not found --");
+                       break;
+
+               case ERROR_PATH_NOT_FOUND:
+                       szError = _T("Path not found --");
+                       break;
+
+               default:
+                       ConErrPrintf (_T("Unknown error! Error code: 0x%lx\n"), dwErrorCode);
+                       return;
+       }
+
+       ConErrPrintf (_T("%s %s\n"), szError, szMessage);
+#endif
+}
+
+
+
+VOID error_invalid_switch (TCHAR ch)
+{
+       ConErrPrintf (INVALID_SWITCH, ch);
+}
+
+
+VOID error_too_many_parameters (LPTSTR s)
+{
+       ConErrPrintf (TOO_MANY_PARAMETERS, s);
+}
+
+
+VOID error_path_not_found (VOID)
+{
+       ConErrPrintf (PATH_NOT_FOUND);
+}
+
+
+VOID error_file_not_found (VOID)
+{
+       ConErrPrintf (FILE_NOT_FOUND);
+}
+
+
+VOID error_sfile_not_found (LPTSTR f)
+{
+       ConErrPrintf (FILE_NOT_FOUND _T(" - %s\n"), f);
+}
+
+
+VOID error_req_param_missing (VOID)
+{
+       ConErrPrintf (REQ_PARAM_MISSING);
+}
+
+
+VOID error_invalid_drive (VOID)
+{
+       ConErrPrintf (INVALID_DRIVE);
+}
+
+
+VOID error_bad_command (VOID)
+{
+       ConErrPrintf (BADCOMMAND);
+}
+
+
+VOID error_no_pipe (VOID)
+{
+       ConErrPrintf (CANNOTPIPE);
+}
+
+
+VOID error_out_of_memory (VOID)
+{
+       ConErrPrintf (OUT_OF_MEMORY);
+}
+
+
+VOID error_invalid_parameter_format (LPTSTR s)
+{
+       ConErrPrintf (INVALID_PARAM_FORMAT, s);
+}
+
+
+VOID error_syntax (LPTSTR s)
+{
+       if (s)
+               ConErrPrintf (_T("Syntax error - %s\n"), s);
+       else
+               ConErrPrintf (_T("Syntax error.\n"));
+}
+
+
+VOID msg_pause (VOID)
+{
+       ConOutPuts (D_PAUSEMSG);
+}