Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

dispatch.c

Go to the documentation of this file.
00001 /*++ 00002 00003 Copyright (c) 1985 - 1999, Microsoft Corporation 00004 00005 Module Name: 00006 00007 dispatch.c 00008 00009 Abstract: 00010 00011 Author: 00012 00013 KazuM Apr.19.1996 00014 00015 Revision History: 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, // this value is valid even for error cases 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 // region is inclusive 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 // this value is valid even for error cases 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, // in : ASCII byte count 00269 IN ULONG UnicodeLength, // in : Number of events (char count) 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

Generated on Sat May 15 19:39:45 2004 for test by doxygen 1.3.7