00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
#include "precomp.h"
00020
#pragma hdrstop
00021
00022 #define WWSB_NOFE
00023
#include "dispatch.h"
00024
#undef WWSB_NOFE
00025 #define WWSB_FE
00026
#include "dispatch.h"
00027
#undef WWSB_FE
00028
00029
#if defined(FE_SB)
00030
00031
00032
NTSTATUS
00033
DoSrvWriteConsole(
00034 IN OUT PCSR_API_MSG m,
00035 IN OUT PCSR_REPLY_STATUS ReplyStatus,
00036 IN
PCONSOLE_INFORMATION Console,
00037 IN
PHANDLE_DATA HandleData
00038 )
00039 {
00040
if (CONSOLE_IS_DBCS_OUTPUTCP(Console))
00041
return FE_DoSrvWriteConsole(m,ReplyStatus,Console,HandleData);
00042
else
00043
return SB_DoSrvWriteConsole(m,ReplyStatus,Console,HandleData);
00044 }
00045
00046
NTSTATUS
00047
WriteOutputString(
00048 IN
PSCREEN_INFORMATION ScreenInfo,
00049 IN PVOID Buffer,
00050 IN COORD WriteCoord,
00051 IN ULONG StringType,
00052 IN OUT PULONG NumRecords,
00053 OUT PULONG NumColumns OPTIONAL
00054 )
00055 {
00056
PCONSOLE_INFORMATION Console = ScreenInfo->Console;
00057
00058
if (CONSOLE_IS_DBCS_OUTPUTCP(Console))
00059
return FE_WriteOutputString(ScreenInfo, Buffer, WriteCoord, StringType, NumRecords, NumColumns);
00060
else
00061
return SB_WriteOutputString(ScreenInfo, Buffer, WriteCoord, StringType, NumRecords, NumColumns);
00062 }
00063
00064
00065
VOID
00066
WriteRectToScreenBuffer(
00067 PBYTE Source,
00068 COORD SourceSize,
00069 PSMALL_RECT SourceRect,
00070
PSCREEN_INFORMATION ScreenInfo,
00071 COORD TargetPoint,
00072 IN UINT Codepage
00073 )
00074 {
00075
PCONSOLE_INFORMATION Console = ScreenInfo->
Console;
00076
00077
if (CONSOLE_IS_DBCS_OUTPUTCP(Console))
00078 FE_WriteRectToScreenBuffer(Source,SourceSize,SourceRect,ScreenInfo,TargetPoint,Codepage);
00079
else
00080 SB_WriteRectToScreenBuffer(Source,SourceSize,SourceRect,ScreenInfo,TargetPoint,Codepage);
00081 }
00082
00083
VOID
00084
WriteToScreen(
00085 IN
PSCREEN_INFORMATION ScreenInfo,
00086 PSMALL_RECT Region
00087 )
00088 {
00089
PCONSOLE_INFORMATION Console = ScreenInfo->Console;
00090
00091
if (CONSOLE_IS_DBCS_OUTPUTCP(Console))
00092 FE_WriteToScreen(ScreenInfo, Region);
00093
else
00094 SB_WriteToScreen(ScreenInfo, Region);
00095 }
00096
00097
VOID
00098
WriteRegionToScreen(
00099 IN
PSCREEN_INFORMATION ScreenInfo,
00100 IN PSMALL_RECT Region
00101 )
00102 {
00103
PCONSOLE_INFORMATION Console = ScreenInfo->Console;
00104
00105
if (CONSOLE_IS_DBCS_OUTPUTCP(Console))
00106 FE_WriteRegionToScreen(ScreenInfo, Region);
00107
else
00108 SB_WriteRegionToScreen(ScreenInfo, Region);
00109 }
00110
00111
NTSTATUS
00112
FillOutput(
00113 IN
PSCREEN_INFORMATION ScreenInfo,
00114 IN WORD Element,
00115 IN COORD WriteCoord,
00116 IN ULONG ElementType,
00117 IN OUT PULONG Length
00118 )
00119 {
00120
PCONSOLE_INFORMATION Console = ScreenInfo->Console;
00121
00122
if (CONSOLE_IS_DBCS_OUTPUTCP(Console))
00123
return FE_FillOutput(ScreenInfo, Element, WriteCoord, ElementType, Length);
00124
else
00125
return SB_FillOutput(ScreenInfo, Element, WriteCoord, ElementType, Length);
00126 }
00127
00128
VOID
00129
FillRectangle(
00130 IN CHAR_INFO Fill,
00131 IN OUT
PSCREEN_INFORMATION ScreenInfo,
00132 IN PSMALL_RECT TargetRect
00133 )
00134 {
00135
PCONSOLE_INFORMATION Console = ScreenInfo->Console;
00136
00137
if (CONSOLE_IS_DBCS_OUTPUTCP(Console))
00138 FE_FillRectangle(Fill, ScreenInfo, TargetRect);
00139
else
00140 SB_FillRectangle(Fill, ScreenInfo, TargetRect);
00141 }
00142
00143
00144 ULONG
00145
DoWriteConsole(
00146 IN OUT PCSR_API_MSG m,
00147 IN
PCONSOLE_INFORMATION Console,
00148 IN PCSR_THREAD Thread
00149 )
00150 {
00151
if (CONSOLE_IS_DBCS_OUTPUTCP(Console))
00152
return FE_DoWriteConsole(m,Console,Thread);
00153
else
00154
return SB_DoWriteConsole(m,Console,Thread);
00155 }
00156
00157
00158
NTSTATUS
00159
WriteChars(
00160 IN
PSCREEN_INFORMATION ScreenInfo,
00161 IN PWCHAR lpBufferBackupLimit,
00162 IN PWCHAR lpBuffer,
00163 IN PWCHAR lpRealUnicodeString,
00164 IN OUT PDWORD NumBytes,
00165 OUT PLONG NumSpaces OPTIONAL,
00166 IN SHORT OriginalXPosition,
00167 IN DWORD dwFlags,
00168 OUT PSHORT ScrollY OPTIONAL
00169 )
00170 {
00171
PCONSOLE_INFORMATION Console = ScreenInfo->Console;
00172
00173
if (CONSOLE_IS_DBCS_OUTPUTCP(Console))
00174
return FE_WriteChars(ScreenInfo,lpBufferBackupLimit,lpBuffer,lpRealUnicodeString,NumBytes,NumSpaces,OriginalXPosition,dwFlags,ScrollY);
00175
else
00176
return SB_WriteChars(ScreenInfo,lpBufferBackupLimit,lpBuffer,lpRealUnicodeString,NumBytes,NumSpaces,OriginalXPosition,dwFlags,ScrollY);
00177 }
00178
00179
00180
00181
NTSTATUS
00182
AdjustCursorPosition(
00183 IN
PSCREEN_INFORMATION ScreenInfo,
00184 IN COORD CursorPosition,
00185 IN BOOL KeepCursorVisible,
00186 OUT PSHORT ScrollY OPTIONAL
00187 )
00188 {
00189
PCONSOLE_INFORMATION Console = ScreenInfo->Console;
00190
00191
if (CONSOLE_IS_DBCS_OUTPUTCP(Console))
00192
return FE_AdjustCursorPosition(ScreenInfo, CursorPosition, KeepCursorVisible, ScrollY);
00193
else
00194
return SB_AdjustCursorPosition(ScreenInfo, CursorPosition, KeepCursorVisible, ScrollY);
00195 }
00196
00197
NTSTATUS
00198
TranslateOutputToAnsiUnicode(
00199 IN
PCONSOLE_INFORMATION Console,
00200 IN OUT PCHAR_INFO OutputBuffer,
00201 IN COORD Size,
00202 IN OUT PCHAR_INFO OutputBufferR
00203 )
00204 {
00205
if (CONSOLE_IS_DBCS_OUTPUTCP(Console))
00206
return FE_TranslateOutputToAnsiUnicode(Console,OutputBuffer,Size,OutputBufferR);
00207
else
00208
return SB_TranslateOutputToAnsiUnicode(Console,OutputBuffer,Size);
00209 }
00210
00211
NTSTATUS
00212
TranslateOutputToUnicode(
00213 IN
PCONSOLE_INFORMATION Console,
00214 IN OUT PCHAR_INFO OutputBuffer,
00215 IN COORD Size)
00216 {
00217
if (CONSOLE_IS_DBCS_OUTPUTCP(Console))
00218
return FE_TranslateOutputToUnicode(Console,OutputBuffer,Size);
00219
else
00220
return SB_TranslateOutputToUnicode(Console,OutputBuffer,Size);
00221 }
00222
00223
NTSTATUS
00224
TranslateOutputToOemUnicode(
00225 IN
PCONSOLE_INFORMATION Console,
00226 IN OUT PCHAR_INFO OutputBuffer,
00227 IN COORD Size,
00228 IN BOOL fRemoveDbcsMark
00229 )
00230 {
00231
if (CONSOLE_IS_DBCS_OUTPUTCP(Console))
00232
return FE_TranslateOutputToOemUnicode(Console,OutputBuffer,Size,fRemoveDbcsMark);
00233
else
00234
return SB_TranslateOutputToOemUnicode(Console,OutputBuffer,Size);
00235 }
00236
00237
NTSTATUS
00238
TranslateOutputToOem(
00239 IN
PCONSOLE_INFORMATION Console,
00240 IN OUT PCHAR_INFO OutputBuffer,
00241 IN COORD Size
00242 )
00243 {
00244
if (CONSOLE_IS_DBCS_OUTPUTCP(Console))
00245
return FE_TranslateOutputToOem(Console,OutputBuffer,Size);
00246
else
00247
return SB_TranslateOutputToOem(Console,OutputBuffer,Size);
00248 }
00249
00250 ULONG
00251
TranslateInputToUnicode(
00252 IN
PCONSOLE_INFORMATION Console,
00253 IN OUT PINPUT_RECORD InputRecords,
00254 IN ULONG NumRecords,
00255 IN OUT PINPUT_RECORD DBCSLeadByte
00256 )
00257 {
00258
if (CONSOLE_IS_DBCS_CP(Console))
00259
return FE_TranslateInputToUnicode(Console,InputRecords,NumRecords,DBCSLeadByte);
00260
else
00261
return SB_TranslateInputToUnicode(Console,InputRecords,NumRecords);
00262 }
00263
00264 ULONG
00265
TranslateInputToOem(
00266 IN
PCONSOLE_INFORMATION Console,
00267 IN OUT PINPUT_RECORD InputRecords,
00268 IN ULONG NumRecords,
00269 IN ULONG UnicodeLength,
00270 OUT PINPUT_RECORD DbcsLeadInpRec
00271 )
00272 {
00273
if (CONSOLE_IS_DBCS_CP(Console))
00274
return FE_TranslateInputToOem(Console,InputRecords,NumRecords,UnicodeLength,DbcsLeadInpRec);
00275
else
00276
return SB_TranslateInputToOem(Console,InputRecords,NumRecords);
00277 }
00278
00279 WCHAR
00280
CharToWchar(
00281 IN
PCONSOLE_INFORMATION Console,
00282 IN UINT Codepage,
00283 IN
char *Ch
00284 )
00285 {
00286 WCHAR wc;
00287
if (CONSOLE_IS_DBCS_CP(Console))
00288 {
00289
if (
IsDBCSLeadByteConsole(*Ch, &Console->OutputCPInfo))
00290 {
00291
ConvertOutputToUnicode(Console->OutputCP,
00292 Ch,
00293 2,
00294 &wc,
00295 1);
00296 }
00297
else
00298 {
00299
ConvertOutputToUnicode(Console->OutputCP,
00300 Ch,
00301 1,
00302 &wc,
00303 1);
00304 }
00305 }
00306
else
00307 {
00308 wc = SB_CharToWchar(Codepage, *Ch);
00309 }
00310
return wc;
00311 }
00312
00313
00314
#ifdef i386
00315
VOID
00316 WriteRegionToScreenHW(
00317 IN
PSCREEN_INFORMATION ScreenInfo,
00318 IN PSMALL_RECT Region
00319 )
00320 {
00321
if (CONSOLE_IS_DBCS_OUTPUTCP(ScreenInfo->Console))
00322
FE_WriteRegionToScreenHW(ScreenInfo,Region);
00323
else
00324 SB_WriteRegionToScreenHW(ScreenInfo,Region);
00325 }
00326
#endif
00327
00328
#endif