reactos/rosapps/net/telnet/src/tnerror.cpp
Steven Edwards c98929fa7e New Telnet Client
svn path=/trunk/; revision=2458
2001-12-30 10:05:48 +00:00

220 lines
6 KiB
C++

///////////////////////////////////////////////////////////////////////////////
//Telnet Win32 : an ANSI telnet client.
//Copyright (C) 1998-2000 Paul Brannan
//Copyright (C) 1998 I.Ioannou
//Copyright (C) 1997 Brad Johnson
//
//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation; either version 2
//of the License, or (at your option) any later version.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//GNU General Public License for more details.
//
//You should have received a copy of the GNU General Public License
//along with this program; if not, write to the Free Software
//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
//I.Ioannou
//roryt@hol.gr
//
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//
// Module: tnerror.cpp
//
// Contents: error reporting
//
// Product: telnet
//
// Revisions: June 15, 1998 Paul Brannan <pbranna@clemson.edu>
// May 15, 1998 Paul Brannan
// 5.April.1997 jbj@nounname.com
// 5.Dec.1996 jbj@nounname.com
// Version 2.0
//
// 02.Apr.1995 igor.milavec@uni-lj.si
// Original code
//
///////////////////////////////////////////////////////////////////////////////
#include "tnerror.h"
#include "ttelhndl.h" // Paul Brannan 5/25/98
#include "tnconfig.h" // Paul Brannan 5/25/98
#include <time.h>
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#ifndef LANG_USER_DEFAULT
#define LANG_USER_DEFAULT 400
#endif
// This has been moved to tnconfig.cpp
// int Telnet_Redir = 0;
// Telnet_Redir is set to the value of the environment variable TELNET_REDIR
// in main.
int printit(const char * it){
DWORD numwritten;
if (!ini.get_output_redir()) {
if (!WriteConsole(
GetStdHandle(STD_OUTPUT_HANDLE), // handle of a console screen buffer
it, // address of buffer to write from
strlen(it), // number of characters to write
&numwritten, // address of number of characters written
0 // reserved
)) return -1;
// FIX ME!!! We need to tell the console that the cursor has moved.
// Does this mean making Console global?
// Paul Brannan 6/14/98
// Console.sync();
}else{
if (!WriteFile(
GetStdHandle(STD_OUTPUT_HANDLE), // handle of a console screen buffer
it, // address of buffer to write from
strlen(it), // number of characters to write
&numwritten, // address of number of characters written
NULL // no overlapped I/O
)) return -1;
}
return 0;
}
int printm(LPTSTR szModule, BOOL fSystem, DWORD dwMessageId, ...)
{
int Result = 0;
HMODULE hModule = 0;
if (szModule)
hModule = LoadLibrary(szModule);
va_list Ellipsis;
va_start(Ellipsis, dwMessageId);
LPTSTR pszMessage = 0;
DWORD dwMessage = 0;
if(fSystem) {
dwMessage = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM, hModule, dwMessageId,
LANG_USER_DEFAULT, (LPTSTR)&pszMessage, 128, &Ellipsis);
} else {
// we will use a string table.
char szString[256];
if(LoadString(0, dwMessageId, szString, sizeof(szString)))
dwMessage = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_STRING, szString, dwMessageId,
LANG_USER_DEFAULT, (LPTSTR)&pszMessage, 256, &Ellipsis);
}
va_end(Ellipsis);
if (szModule)
FreeLibrary(hModule);
if (dwMessage) {
Result = printit(pszMessage);
LocalFree(pszMessage);
}
return Result;
}
void LogErrorConsole(LPTSTR szError)
{
DWORD dwLastError = GetLastError();
const int cbLastError = 1024;
TCHAR szLastError[cbLastError];
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, dwLastError, LANG_USER_DEFAULT,
szLastError, cbLastError, 0);
LPTSTR lpszStrings[2];
lpszStrings[0] = szError;
lpszStrings[1] = szLastError;
const int cbErrorString = 1024;
TCHAR szErrorString[cbErrorString];
FormatMessage(FORMAT_MESSAGE_FROM_HMODULE| FORMAT_MESSAGE_ARGUMENT_ARRAY,
0, MSG_ERROR, LANG_USER_DEFAULT,
szErrorString, cbErrorString, (va_list*)lpszStrings);
time_t dwTime;
time(&dwTime);
char* szTime = ctime(&dwTime);
szTime[19] = 0;
// printf("E %s %s", szTime + 11, szErrorString);
char * buf;
buf = new char [ 3 + strlen(szTime) - 11 + strlen(szErrorString) + 5 ];
sprintf( buf,"E %s %s", szTime + 11, szErrorString);
printit(buf);
delete [] buf;
}
void LogWarningConsole(DWORD dwEvent, LPTSTR szWarning)
{
DWORD dwLastError = GetLastError();
const int cbLastError = 1024;
TCHAR szLastError[cbLastError];
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, dwLastError, LANG_USER_DEFAULT,
szLastError, cbLastError, 0);
LPTSTR lpszStrings[2];
lpszStrings[0] = szWarning;
lpszStrings[1] = szLastError;
const int cbWarningString = 1024;
TCHAR szWarningString[cbWarningString];
FormatMessage(FORMAT_MESSAGE_FROM_HMODULE| FORMAT_MESSAGE_ARGUMENT_ARRAY,
0, dwEvent, LANG_USER_DEFAULT,
szWarningString, cbWarningString, (va_list*)lpszStrings);
time_t dwTime;
time(&dwTime);
char* szTime = ctime(&dwTime);
szTime[19] = 0;
// printf("W %s %s", szTime + 11, szWarningString);
char * buf;
buf = new char [ 3 + strlen(szTime) - 11 + strlen(szWarningString) + 5 ];
sprintf(buf ,"W %s %s", szTime + 11, szWarningString);
printit(buf);
delete [] buf;
}
void LogInfoConsole(DWORD dwEvent, LPTSTR szInformation)
{
LPTSTR lpszStrings[1];
lpszStrings[0] = szInformation;
const int cbInfoString = 1024;
TCHAR szInfoString[cbInfoString];
FormatMessage(FORMAT_MESSAGE_FROM_HMODULE| FORMAT_MESSAGE_ARGUMENT_ARRAY,
0, dwEvent, LANG_USER_DEFAULT,
szInfoString, cbInfoString, (va_list*)lpszStrings);
time_t dwTime;
time(&dwTime);
char* szTime = ctime(&dwTime);
szTime[19] = 0;
// printf("I %s %s", szTime + 11, szInfoString);
char * buf;
buf = new char [ 3 + strlen(szTime) - 11 + strlen(szInfoString) + 5 ];
sprintf(buf,"I %s %s", szTime + 11, szInfoString);
printit(buf);
delete [] buf;
}