ReactOS 0.4.15-dev-8236-g99f0937
console.c File Reference
#include "precomp.h"
#include <cjkcode.h>
#include "wcwidth.c"
Include dependency graph for console.c:

Go to the source code of this file.

Macros

#define OUTPUT_BUFFER_SIZE   4096
 
#define IS_FULL_WIDTH(wch)    (((USHORT)(wch) >= 0x0080) && (mk_wcwidth_cjk(wch) == 2))
 

Functions

VOID ConInDisable (VOID)
 
VOID ConInEnable (VOID)
 
VOID ConInFlush (VOID)
 
VOID ConInKey (PINPUT_RECORD lpBuffer)
 
VOID ConInString (LPTSTR lpInput, DWORD dwLength)
 
VOID ConOutChar (TCHAR c)
 
VOID ConErrChar (TCHAR c)
 
VOID __cdecl ConFormatMessage (PCON_STREAM Stream, DWORD MessageId,...)
 
BOOL ConPrintfVPaging (PCON_PAGER Pager, BOOL StartPaging, LPTSTR szFormat, va_list arg_ptr)
 
BOOL __cdecl ConOutPrintfPaging (BOOL StartPaging, LPTSTR szFormat,...)
 
VOID ConOutResPaging (BOOL StartPaging, UINT resID)
 
VOID SetCursorXY (SHORT x, SHORT y)
 
VOID GetCursorXY (PSHORT x, PSHORT y)
 
SHORT GetCursorX (VOID)
 
SHORT GetCursorY (VOID)
 
VOID SetCursorType (BOOL bInsert, BOOL bVisible)
 
VOID GetScreenSize (PSHORT maxx, PSHORT maxy)
 
BOOL ConGetDefaultAttributes (PWORD pwDefAttr)
 
BOOL ConSetTitle (IN LPCTSTR lpConsoleTitle)
 
VOID ConRingBell (HANDLE hOutput)
 
BOOL ConSetScreenColor (HANDLE hOutput, WORD wColor, BOOL bFill)
 
SIZE_T ConGetTextWidthW (PCWSTR pszText)
 
SIZE_T ConGetTextWidthA (PCSTR pszText)
 

Variables

UINT InputCodePage
 
UINT OutputCodePage
 
CON_SCREEN StdOutScreen = INIT_CON_SCREEN(StdOut)
 
CON_PAGER StdOutPager = INIT_CON_PAGER(&StdOutScreen)
 

Macro Definition Documentation

◆ IS_FULL_WIDTH

#define IS_FULL_WIDTH (   wch)     (((USHORT)(wch) >= 0x0080) && (mk_wcwidth_cjk(wch) == 2))

Definition at line 337 of file console.c.

◆ OUTPUT_BUFFER_SIZE

#define OUTPUT_BUFFER_SIZE   4096

Definition at line 22 of file console.c.

Function Documentation

◆ ConErrChar()

VOID ConErrChar ( TCHAR  c)

Definition at line 128 of file console.c.

129{
130 ConWrite(StdErr, &c, 1);
131}
#define StdErr
Definition: fc.c:15
const GLubyte * c
Definition: glext.h:8905
INT __stdcall ConWrite(IN PCON_STREAM Stream, IN PCTCH szStr, IN DWORD len)
Definition: outstream.c:85

◆ ConFormatMessage()

VOID __cdecl ConFormatMessage ( PCON_STREAM  Stream,
DWORD  MessageId,
  ... 
)

Definition at line 133 of file console.c.

134{
135 INT Len;
136 va_list arg_ptr;
137
138 va_start(arg_ptr, MessageId);
141 NULL,
142 MessageId,
144 &arg_ptr);
145 va_end(arg_ptr);
146
147 if (Len <= 0)
149}
char * va_list
Definition: acmsvcex.h:78
#define va_end(ap)
Definition: acmsvcex.h:90
#define va_start(ap, A)
Definition: acmsvcex.h:91
#define STRING_CONSOLE_ERROR
Definition: resource.h:6
void ConResPrintf(FILE *fp, UINT nID,...)
Definition: fc.c:33
#define Len
Definition: deflate.h:82
#define NULL
Definition: types.h:112
static IStream Stream
Definition: htmldoc.c:1115
INT ConMsgPrintfV(IN PCON_STREAM Stream, IN DWORD dwFlags, IN LPCVOID lpSource OPTIONAL, IN DWORD dwMessageId, IN DWORD dwLanguageId, IN va_list *Arguments OPTIONAL)
Definition: outstream.c:1030
#define LANG_USER_DEFAULT
Definition: tnerror.cpp:50
int32_t INT
Definition: typedefs.h:58
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:423

◆ ConGetDefaultAttributes()

BOOL ConGetDefaultAttributes ( PWORD  pwDefAttr)

Definition at line 255 of file console.c.

256{
258 HANDLE hConsole;
260
261 /* Do not modify *pwDefAttr if we fail, in which case use default attributes */
262
263 hConsole = CreateFile(_T("CONOUT$"), GENERIC_READ|GENERIC_WRITE,
265 OPEN_EXISTING, 0, NULL);
266 if (hConsole == INVALID_HANDLE_VALUE)
267 return FALSE; // No default console
268
269 Success = GetConsoleScreenBufferInfo(hConsole, &csbi);
270 if (Success)
271 *pwDefAttr = csbi.wAttributes;
272
273 CloseHandle(hConsole);
274 return Success;
275}
BOOL WINAPI GetConsoleScreenBufferInfo(IN HANDLE hConsoleOutput, OUT PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo)
Definition: console.c:595
#define FALSE
Definition: types.h:117
#define CloseHandle
Definition: compat.h:739
#define OPEN_EXISTING
Definition: compat.h:775
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define GENERIC_READ
Definition: compat.h:135
#define FILE_SHARE_READ
Definition: compat.h:136
@ Success
Definition: eventcreate.c:712
unsigned int BOOL
Definition: ntddk_ex.h:94
#define FILE_SHARE_WRITE
Definition: nt_native.h:681
#define GENERIC_WRITE
Definition: nt_native.h:90
#define _T(x)
Definition: vfdio.h:22
#define CreateFile
Definition: winbase.h:3749

Referenced by Initialize().

◆ ConGetTextWidthA()

SIZE_T ConGetTextWidthA ( PCSTR  pszText)

Definition at line 358 of file console.c.

359{
360 int cchMax;
361 PWSTR pszWide;
362 SIZE_T cxWidth;
363
364 cchMax = MultiByteToWideChar(OutputCodePage, 0, pszText, -1, NULL, 0);
365 pszWide = cmd_alloc(cchMax * sizeof(WCHAR));
366 MultiByteToWideChar(OutputCodePage, 0, pszText, -1, pszWide, cchMax);
367 cxWidth = ConGetTextWidthW(pszWide);
368 cmd_free(pszWide);
369 return cxWidth;
370}
UINT cchMax
SIZE_T ConGetTextWidthW(PCWSTR pszText)
Definition: console.c:340
UINT OutputCodePage
Definition: console.c:26
#define cmd_free(ptr)
Definition: cmddbg.h:31
#define cmd_alloc(size)
Definition: cmddbg.h:29
#define MultiByteToWideChar
Definition: compat.h:110
uint16_t * PWSTR
Definition: typedefs.h:56
ULONG_PTR SIZE_T
Definition: typedefs.h:80
__wchar_t WCHAR
Definition: xmlstorage.h:180

◆ ConGetTextWidthW()

SIZE_T ConGetTextWidthW ( PCWSTR  pszText)

Definition at line 340 of file console.c.

341{
342 SIZE_T ich, cxWidth;
343
345 return _tcslen(pszText);
346
347 for (ich = cxWidth = 0; pszText[ich]; ++ich)
348 {
349 if (IS_FULL_WIDTH(pszText[ich]))
350 cxWidth += 2;
351 else
352 ++cxWidth;
353 }
354
355 return cxWidth;
356}
#define IS_FULL_WIDTH(wch)
Definition: console.c:337
#define IsCJKCodePage(CodePage)
Definition: cjkcode.h:27
#define _tcslen
Definition: xmlstorage.h:198

Referenced by ConGetTextWidthA().

◆ ConInDisable()

VOID ConInDisable ( VOID  )

Definition at line 36 of file console.c.

37{
39 DWORD dwMode;
40
41 GetConsoleMode(hInput, &dwMode);
42 dwMode &= ~ENABLE_PROCESSED_INPUT;
43 SetConsoleMode(hInput, dwMode);
44}
HANDLE WINAPI GetStdHandle(IN DWORD nStdHandle)
Definition: console.c:203
BOOL WINAPI GetConsoleMode(HANDLE hConsoleHandle, LPDWORD lpMode)
Definition: console.c:1569
BOOL WINAPI DECLSPEC_HOTPATCH SetConsoleMode(HANDLE hConsoleHandle, DWORD dwMode)
Definition: console.c:1606
unsigned long DWORD
Definition: ntddk_ex.h:95
#define STD_INPUT_HANDLE
Definition: winbase.h:267

Referenced by FilePromptYN(), FilePromptYNA(), and PagePrompt().

◆ ConInEnable()

VOID ConInEnable ( VOID  )

Definition at line 46 of file console.c.

47{
49 DWORD dwMode;
50
51 GetConsoleMode(hInput, &dwMode);
52 dwMode |= ENABLE_PROCESSED_INPUT;
53 SetConsoleMode(hInput, dwMode);
54}
#define ENABLE_PROCESSED_INPUT
Definition: wincon.h:78

Referenced by FilePromptYN(), FilePromptYNA(), and PagePrompt().

◆ ConInFlush()

VOID ConInFlush ( VOID  )

Definition at line 56 of file console.c.

57{
59}
BOOL WINAPI FlushConsoleInputBuffer(IN HANDLE hConsoleInput)
Definition: console.c:220

Referenced by CommandChoice().

◆ ConInKey()

VOID ConInKey ( PINPUT_RECORD  lpBuffer)

Definition at line 61 of file console.c.

62{
64 DWORD dwRead;
65
66 if (hInput == INVALID_HANDLE_VALUE)
67 WARN ("Invalid input handle!!!\n");
68
69 do
70 {
71 ReadConsoleInput(hInput, lpBuffer, 1, &dwRead);
72 if (lpBuffer->EventType == KEY_EVENT &&
73 lpBuffer->Event.KeyEvent.bKeyDown)
74 {
75 break;
76 }
77 }
78 while (TRUE);
79}
#define WARN(fmt,...)
Definition: debug.h:115
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
Definition: db.cpp:175
#define TRUE
Definition: types.h:120
#define ReadConsoleInput
Definition: wincon.h:778
#define KEY_EVENT
Definition: wincon.h:128

Referenced by CommandChoice(), FilePromptYN(), FilePromptYNA(), PagePrompt(), and ReadCommand().

◆ ConInString()

VOID ConInString ( LPTSTR  lpInput,
DWORD  dwLength 
)

Definition at line 81 of file console.c.

82{
83 DWORD dwOldMode;
84 DWORD dwRead = 0;
86
87 LPTSTR p;
88 PCHAR pBuf;
89
90#ifdef _UNICODE
91 pBuf = (PCHAR)cmd_alloc(dwLength - 1);
92#else
93 pBuf = lpInput;
94#endif
95 ZeroMemory(lpInput, dwLength * sizeof(TCHAR));
97 GetConsoleMode(hFile, &dwOldMode);
98
100
101 ReadFile(hFile, (PVOID)pBuf, dwLength - 1, &dwRead, NULL);
102
103#ifdef _UNICODE
104 MultiByteToWideChar(InputCodePage, 0, pBuf, dwRead, lpInput, dwLength - 1);
105 cmd_free(pBuf);
106#endif
107 for (p = lpInput; *p; p++)
108 {
109 if (*p == _T('\r')) // Terminate at the carriage-return.
110 {
111 *p = _T('\0');
112 break;
113 }
114 }
115
116 SetConsoleMode(hFile, dwOldMode);
117}
UINT InputCodePage
Definition: console.c:25
#define ReadFile(a, b, c, d, e)
Definition: compat.h:742
static DWORD DWORD * dwLength
Definition: fusion.c:86
GLfloat GLfloat p
Definition: glext.h:8902
#define PCHAR
Definition: match.c:90
_In_ HANDLE hFile
Definition: mswsock.h:90
char * PCHAR
Definition: typedefs.h:51
#define ZeroMemory
Definition: winbase.h:1712
#define ENABLE_ECHO_INPUT
Definition: wincon.h:80
#define ENABLE_LINE_INPUT
Definition: wincon.h:79
char TCHAR
Definition: xmlstorage.h:189
CHAR * LPTSTR
Definition: xmlstorage.h:192

◆ ConOutChar()

◆ ConOutPrintfPaging()

BOOL __cdecl ConOutPrintfPaging ( BOOL  StartPaging,
LPTSTR  szFormat,
  ... 
)

Definition at line 171 of file console.c.

172{
173 BOOL bRet;
174 va_list arg_ptr;
175
176 va_start(arg_ptr, szFormat);
177 bRet = ConPrintfVPaging(&StdOutPager, StartPaging, szFormat, arg_ptr);
178 va_end(arg_ptr);
179 return bRet;
180}
CON_PAGER StdOutPager
Definition: console.c:30
BOOL ConPrintfVPaging(PCON_PAGER Pager, BOOL StartPaging, LPTSTR szFormat, va_list arg_ptr)
Definition: console.c:155

Referenced by cmd_type(), CommandDir(), and DoTypeFile().

◆ ConOutResPaging()

VOID ConOutResPaging ( BOOL  StartPaging,
UINT  resID 
)

◆ ConPrintfVPaging()

BOOL ConPrintfVPaging ( PCON_PAGER  Pager,
BOOL  StartPaging,
LPTSTR  szFormat,
va_list  arg_ptr 
)

Definition at line 155 of file console.c.

156{
157 // INT len;
159
160 /* Return if no string has been given */
161 if (szFormat == NULL)
162 return TRUE;
163
164 /*len =*/ _vstprintf(szOut, szFormat, arg_ptr);
165
166 // return ConPutsPaging(Pager, PagePrompt, StartPaging, szOut);
167 return ConWritePaging(Pager, PagePrompt, StartPaging,
168 szOut, wcslen(szOut));
169}
#define OUTPUT_BUFFER_SIZE
Definition: console.c:22
#define _vstprintf
Definition: tchar.h:540
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
BOOL ConWritePaging(IN PCON_PAGER Pager, IN PAGE_PROMPT PagePrompt, IN BOOL StartPaging, IN PCTCH szStr, IN DWORD len)
Definition: pager.c:549

Referenced by ConOutPrintfPaging(), and DirPrintf().

◆ ConRingBell()

VOID ConRingBell ( HANDLE  hOutput)

Definition at line 287 of file console.c.

288{
289#if 0
290 /* Emit an error beep sound */
291 if (IsConsoleHandle(hOutput))
292 Beep(800, 200);
293 else if (IsTTYHandle(hOutput))
294 ConOutPuts(_T("\a")); // BEL character 0x07
295 else
296#endif
297 MessageBeep(-1);
298}
#define ConOutPuts(szStr)
Definition: console.h:29
BOOL WINAPI Beep(IN DWORD dwFreq, IN DWORD dwDuration)
Definition: deviceio.c:48
#define IsConsoleHandle(h)
Definition: console.h:14
BOOL IsTTYHandle(IN HANDLE hHandle)
Definition: utils.c:393
BOOL WINAPI MessageBeep(_In_ UINT uType)

Referenced by cmd_beep().

◆ ConSetScreenColor()

BOOL ConSetScreenColor ( HANDLE  hOutput,
WORD  wColor,
BOOL  bFill 
)

Definition at line 302 of file console.c.

303{
304 DWORD dwWritten;
306 COORD coPos;
307
308 /* Foreground and Background colors can't be the same */
309 if ((wColor & 0x0F) == (wColor & 0xF0) >> 4)
310 return FALSE;
311
312 /* Fill the whole background if needed */
313 if (bFill)
314 {
315 GetConsoleScreenBufferInfo(hOutput, &csbi);
316
317 coPos.X = 0;
318 coPos.Y = 0;
320 wColor & 0x00FF,
321 csbi.dwSize.X * csbi.dwSize.Y,
322 coPos,
323 &dwWritten);
324 }
325
326 /* Set the text attribute */
327 SetConsoleTextAttribute(hOutput, wColor & 0x00FF);
328 return TRUE;
329}
BOOL WINAPI SetConsoleTextAttribute(IN HANDLE hConsoleOutput, IN WORD wAttributes)
Definition: console.c:672
BOOL WINAPI FillConsoleOutputAttribute(IN HANDLE hConsoleOutput, IN WORD wAttribute, IN DWORD nLength, IN COORD dwWriteCoord, OUT LPDWORD lpNumberOfAttrsWritten)
Definition: console.c:525
WORD wColor
Definition: bl.h:1338
ULONG Y
Definition: bl.h:1340
ULONG X
Definition: bl.h:1339
SHORT Y
Definition: blue.h:27
SHORT X
Definition: blue.h:26

Referenced by CommandColor(), and Initialize().

◆ ConSetTitle()

BOOL ConSetTitle ( IN LPCTSTR  lpConsoleTitle)

Definition at line 280 of file console.c.

281{
282 /* Now really set the console title */
283 return SetConsoleTitle(lpConsoleTitle);
284}
#define SetConsoleTitle
Definition: wincon.h:783

Referenced by cmd_title(), ResetConTitle(), and SetConTitle().

◆ GetCursorX()

SHORT GetCursorX ( VOID  )

Definition at line 210 of file console.c.

211{
213
215 return csbi.dwCursorPosition.X;
216}
#define STD_OUTPUT_HANDLE
Definition: winbase.h:268

Referenced by ReadCommand().

◆ GetCursorXY()

VOID GetCursorXY ( PSHORT  x,
PSHORT  y 
)

Definition at line 200 of file console.c.

201{
203
205
206 *x = csbi.dwCursorPosition.X;
207 *y = csbi.dwCursorPosition.Y;
208}
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548

Referenced by ReadCommand().

◆ GetCursorY()

SHORT GetCursorY ( VOID  )

Definition at line 218 of file console.c.

Referenced by PagePrompt(), PrintPrompt(), and ReadCommand().

◆ GetScreenSize()

VOID GetScreenSize ( PSHORT  maxx,
PSHORT  maxy 
)

Definition at line 236 of file console.c.

237{
239
241 {
242 csbi.dwSize.X = 80;
243 csbi.dwSize.Y = 25;
244 }
245
246 if (maxx) *maxx = csbi.dwSize.X;
247 if (maxy) *maxy = csbi.dwSize.Y;
248}
SHORT maxx
Definition: cmdinput.c:115
SHORT maxy
Definition: cmdinput.c:116

Referenced by CommandScreen(), DirPrintWideList(), and PagePrompt().

◆ SetCursorType()

VOID SetCursorType ( BOOL  bInsert,
BOOL  bVisible 
)

Definition at line 226 of file console.c.

227{
229
230 cci.dwSize = bInsert ? 10 : 99;
231 cci.bVisible = bVisible;
232
234}
BOOL WINAPI SetConsoleCursorInfo(IN HANDLE hConsoleOutput, IN const CONSOLE_CURSOR_INFO *lpConsoleCursorInfo)
Definition: console.c:618
static BOOL bInsert
Definition: cmdinput.c:121

Referenced by ReadCommand().

◆ SetCursorXY()

VOID SetCursorXY ( SHORT  x,
SHORT  y 
)

Definition at line 191 of file console.c.

192{
193 COORD coPos;
194
195 coPos.X = x;
196 coPos.Y = y;
198}
BOOL WINAPI SetConsoleCursorPosition(IN HANDLE hConsoleOutput, IN COORD dwCursorPosition)
Definition: console.c:641

Referenced by ClearCommandLine(), CommandScreen(), PagePrompt(), and ReadCommand().

Variable Documentation

◆ InputCodePage

UINT InputCodePage

Definition at line 25 of file console.c.

Referenced by _tmain(), cmd_start(), ConInString(), Execute(), and ReadCommand().

◆ OutputCodePage

◆ StdOutPager

Definition at line 30 of file console.c.

Referenced by ConOutPrintfPaging(), ConOutResPaging(), and DirPrintf().

◆ StdOutScreen

Definition at line 29 of file console.c.