Bug fixes
[reactos.git] / reactos / lib / kernel32 / misc / console.c
1 #include <windows.h>
2 #include <ddk/ntddk.h>
3
4 HANDLE StdInput = NULL;
5 HANDLE StdOutput = NULL;
6 HANDLE StdError = NULL;
7
8
9
10
11 #define FSCTL_GET_CONSOLE_SCREEN_BUFFER_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 254, DO_DIRECT_IO, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
12 #define FSCTL_SET_CONSOLE_SCREEN_BUFFER_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 255, DO_DIRECT_IO, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
13
14 HANDLE
15 STDCALL
16 GetStdHandle(
17 DWORD nStdHandle
18 )
19 {
20 if ( nStdHandle == STD_INPUT_HANDLE )
21 return StdInput;
22 if ( nStdHandle == STD_OUTPUT_HANDLE )
23 return StdOutput;
24 if ( nStdHandle == STD_ERROR_HANDLE )
25 return StdError;
26 /*
27 if ( nStdHandle == STD_AUX_HANDLE )
28 return StdError;
29 if ( nStdHandle == STD_PRINT_HANDLE )
30 return StdError;
31 */
32 return NULL;
33
34 }
35
36 WINBOOL
37 STDCALL
38 WriteConsoleA(
39 HANDLE hConsoleOutput,
40 CONST VOID *lpBuffer,
41 DWORD nNumberOfCharsToWrite,
42 LPDWORD lpNumberOfCharsWritten,
43 LPVOID lpReserved
44 )
45 {
46 return WriteFile(hConsoleOutput, lpBuffer, nNumberOfCharsToWrite,lpNumberOfCharsWritten, lpReserved);
47 }
48
49
50 WINBOOL
51 STDCALL
52 ReadConsoleA(
53 HANDLE hConsoleInput,
54 LPVOID lpBuffer,
55 DWORD nNumberOfCharsToRead,
56 LPDWORD lpNumberOfCharsRead,
57 LPVOID lpReserved
58 )
59 {
60 return ReadFile(hConsoleInput,lpBuffer,nNumberOfCharsToRead,lpNumberOfCharsRead,lpReserved);
61 }
62
63 WINBOOL
64 STDCALL
65 AllocConsole( VOID )
66 {
67 StdInput = CreateFile("\\Keyboard",
68 FILE_GENERIC_READ,
69 0,
70 NULL,
71 OPEN_EXISTING,
72 0,
73 NULL);
74
75 StdOutput = CreateFile("\\BlueScreen",
76 FILE_GENERIC_WRITE|FILE_GENERIC_READ,
77 0,
78 NULL,
79 OPEN_EXISTING,
80 0,
81 NULL);
82
83 StdError = StdOutput;
84
85 return TRUE;
86 }
87
88
89 WINBOOL
90 STDCALL
91 FreeConsole( VOID )
92 {
93 return TRUE;
94 }
95
96
97 WINBOOL
98 STDCALL
99 GetConsoleScreenBufferInfo(
100 HANDLE hConsoleOutput,
101 PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo
102 )
103 {
104 DWORD dwBytesReturned;
105 if( !DeviceIoControl(hConsoleOutput,
106 FSCTL_GET_CONSOLE_SCREEN_BUFFER_INFO,
107 NULL,0,
108 lpConsoleScreenBufferInfo,sizeof(CONSOLE_SCREEN_BUFFER_INFO),&dwBytesReturned,NULL ))
109 return FALSE;
110
111 return TRUE;
112 }
113
114 WINBOOL
115 STDCALL
116 SetConsoleCursorPosition(
117 HANDLE hConsoleOutput,
118 COORD dwCursorPosition
119 )
120 {
121 DWORD dwBytesReturned;
122 CONSOLE_SCREEN_BUFFER_INFO ConsoleScreenBufferInfo;
123
124 if( !GetConsoleScreenBufferInfo(hConsoleOutput,&ConsoleScreenBufferInfo) )
125 return FALSE;
126 // ConsoleScreenBufferInfo.dwCursorPosition.X = dwCursorPosition.X;
127 // ConsoleScreenBufferInfo.dwCursorPosition.Y = dwCursorPosition.Y;
128 return TRUE;
129 if( !DeviceIoControl(
130 hConsoleOutput,
131 FSCTL_SET_CONSOLE_SCREEN_BUFFER_INFO,
132 &ConsoleScreenBufferInfo,
133 sizeof(CONSOLE_SCREEN_BUFFER_INFO),
134 NULL,
135 0,
136 &dwBytesReturned,
137 NULL ))
138 return FALSE;
139
140 return TRUE;
141 }
142
143 WINBOOL
144 STDCALL
145 FillConsoleOutputCharacterA(
146 HANDLE hConsoleOutput,
147 CHAR cCharacter,
148 DWORD nLength,
149 COORD dwWriteCoord,
150 LPDWORD lpNumberOfCharsWritten
151 )
152 {
153 return FillConsoleOutputCharacterW(hConsoleOutput,
154 (WCHAR) cCharacter,nLength, dwWriteCoord,lpNumberOfCharsWritten);
155 }
156
157 WINBOOL
158 STDCALL
159 FillConsoleOutputCharacterW(
160 HANDLE hConsoleOutput,
161 WCHAR cCharacter,
162 DWORD nLength,
163 COORD dwWriteCoord,
164 LPDWORD lpNumberOfCharsWritten
165 )
166 {
167 return FALSE;
168 }