Sync up with trunk r61578.
[reactos.git] / base / applications / network / telnet / src / tnerror.cpp
1 ///////////////////////////////////////////////////////////////////////////////
2 //Telnet Win32 : an ANSI telnet client.
3 //Copyright (C) 1998-2000 Paul Brannan
4 //Copyright (C) 1998 I.Ioannou
5 //Copyright (C) 1997 Brad Johnson
6 //
7 //This program is free software; you can redistribute it and/or
8 //modify it under the terms of the GNU General Public License
9 //as published by the Free Software Foundation; either version 2
10 //of the License, or (at your option) any later version.
11 //
12 //This program is distributed in the hope that it will be useful,
13 //but WITHOUT ANY WARRANTY; without even the implied warranty of
14 //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 //GNU General Public License for more details.
16 //
17 //You should have received a copy of the GNU General Public License
18 //along with this program; if not, write to the Free Software
19 //Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 //
21 //I.Ioannou
22 //roryt@hol.gr
23 //
24 ///////////////////////////////////////////////////////////////////////////
25
26 ///////////////////////////////////////////////////////////////////////////////
27 //
28 // Module: tnerror.cpp
29 //
30 // Contents: error reporting
31 //
32 // Product: telnet
33 //
34 // Revisions: June 15, 1998 Paul Brannan <pbranna@clemson.edu>
35 // May 15, 1998 Paul Brannan
36 // 5.April.1997 jbj@nounname.com
37 // 5.Dec.1996 jbj@nounname.com
38 // Version 2.0
39 //
40 // 02.Apr.1995 igor.milavec@uni-lj.si
41 // Original code
42 //
43 ///////////////////////////////////////////////////////////////////////////////
44
45 #include "precomp.h"
46
47 #include <time.h>
48
49 #ifndef LANG_USER_DEFAULT
50 #define LANG_USER_DEFAULT 400
51 #endif
52
53 // This has been moved to tnconfig.cpp
54 // int Telnet_Redir = 0;
55 // Telnet_Redir is set to the value of the environment variable TELNET_REDIR
56 // in main.
57
58 int printit(const char * it){
59 DWORD numwritten;
60 if (!ini.get_output_redir()) {
61 if (!WriteConsole(
62 GetStdHandle(STD_OUTPUT_HANDLE), // handle of a console screen buffer
63 it, // address of buffer to write from
64 strlen(it), // number of characters to write
65 &numwritten, // address of number of characters written
66 0 // reserved
67 )) return -1;
68 // FIX ME!!! We need to tell the console that the cursor has moved.
69 // Does this mean making Console global?
70 // Paul Brannan 6/14/98
71 // Console.sync();
72 }else{
73 if (!WriteFile(
74 GetStdHandle(STD_OUTPUT_HANDLE), // handle of a console screen buffer
75 it, // address of buffer to write from
76 strlen(it), // number of characters to write
77 &numwritten, // address of number of characters written
78 NULL // no overlapped I/O
79 )) return -1;
80 }
81 return 0;
82 }
83
84 int printm(LPTSTR szModule, BOOL fSystem, DWORD dwMessageId, ...)
85 {
86 int Result = 0;
87
88 HMODULE hModule = 0;
89 if (szModule)
90 hModule = LoadLibrary(szModule);
91
92 va_list Ellipsis;
93 va_start(Ellipsis, dwMessageId);
94
95 LPTSTR pszMessage = 0;
96 DWORD dwMessage = 0;
97 if(fSystem) {
98 dwMessage = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
99 FORMAT_MESSAGE_FROM_SYSTEM, hModule, dwMessageId,
100 LANG_USER_DEFAULT, (LPTSTR)&pszMessage, 128, &Ellipsis);
101 } else {
102 // we will use a string table.
103 char szString[256];
104 if(LoadString(0, dwMessageId, szString, sizeof(szString)))
105 dwMessage = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
106 FORMAT_MESSAGE_FROM_STRING, szString, dwMessageId,
107 LANG_USER_DEFAULT, (LPTSTR)&pszMessage, 256, &Ellipsis);
108 }
109
110 va_end(Ellipsis);
111
112 if (szModule)
113 FreeLibrary(hModule);
114
115 if (dwMessage) {
116
117 Result = printit(pszMessage);
118 LocalFree(pszMessage);
119 }
120
121 return Result;
122 }
123
124
125 void LogErrorConsole(LPTSTR szError)
126 {
127 DWORD dwLastError = GetLastError();
128
129 const int cbLastError = 1024;
130 TCHAR szLastError[cbLastError];
131 FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, dwLastError, LANG_USER_DEFAULT,
132 szLastError, cbLastError, 0);
133
134 LPTSTR lpszStrings[2];
135 lpszStrings[0] = szError;
136 lpszStrings[1] = szLastError;
137
138 const int cbErrorString = 1024;
139 TCHAR szErrorString[cbErrorString];
140 FormatMessage(FORMAT_MESSAGE_FROM_HMODULE| FORMAT_MESSAGE_ARGUMENT_ARRAY,
141 0, MSG_ERROR, LANG_USER_DEFAULT,
142 szErrorString, cbErrorString, (va_list*)lpszStrings);
143
144 time_t dwTime;
145 time(&dwTime);
146 char* szTime = ctime(&dwTime);
147 szTime[19] = 0;
148
149 // printf("E %s %s", szTime + 11, szErrorString);
150 char * buf;
151 buf = new char [ 3 + strlen(szTime) - 11 + strlen(szErrorString) + 5 ];
152 sprintf( buf,"E %s %s", szTime + 11, szErrorString);
153 printit(buf);
154 delete [] buf;
155 }
156
157
158 void LogWarningConsole(DWORD dwEvent, LPTSTR szWarning)
159 {
160 DWORD dwLastError = GetLastError();
161
162 const int cbLastError = 1024;
163 TCHAR szLastError[cbLastError];
164 FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, dwLastError, LANG_USER_DEFAULT,
165 szLastError, cbLastError, 0);
166
167 LPTSTR lpszStrings[2];
168 lpszStrings[0] = szWarning;
169 lpszStrings[1] = szLastError;
170
171 const int cbWarningString = 1024;
172 TCHAR szWarningString[cbWarningString];
173 FormatMessage(FORMAT_MESSAGE_FROM_HMODULE| FORMAT_MESSAGE_ARGUMENT_ARRAY,
174 0, dwEvent, LANG_USER_DEFAULT,
175 szWarningString, cbWarningString, (va_list*)lpszStrings);
176
177 time_t dwTime;
178 time(&dwTime);
179 char* szTime = ctime(&dwTime);
180 szTime[19] = 0;
181
182 // printf("W %s %s", szTime + 11, szWarningString);
183 char * buf;
184 buf = new char [ 3 + strlen(szTime) - 11 + strlen(szWarningString) + 5 ];
185 sprintf(buf ,"W %s %s", szTime + 11, szWarningString);
186 printit(buf);
187 delete [] buf;
188
189 }
190
191
192 void LogInfoConsole(DWORD dwEvent, LPTSTR szInformation)
193 {
194 LPTSTR lpszStrings[1];
195 lpszStrings[0] = szInformation;
196
197 const int cbInfoString = 1024;
198 TCHAR szInfoString[cbInfoString];
199 FormatMessage(FORMAT_MESSAGE_FROM_HMODULE| FORMAT_MESSAGE_ARGUMENT_ARRAY,
200 0, dwEvent, LANG_USER_DEFAULT,
201 szInfoString, cbInfoString, (va_list*)lpszStrings);
202
203 time_t dwTime;
204 time(&dwTime);
205 char* szTime = ctime(&dwTime);
206 szTime[19] = 0;
207
208 // printf("I %s %s", szTime + 11, szInfoString);
209 char * buf;
210 buf = new char [ 3 + strlen(szTime) - 11 + strlen(szInfoString) + 5 ];
211 sprintf(buf,"I %s %s", szTime + 11, szInfoString);
212 printit(buf);
213 delete [] buf;
214
215 }
216