2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: lib/kernel32/misc/console.c
5 * PURPOSE: Win32 server console functions
9 * 19990204 EA SetConsoleTitleA
13 /* INCLUDES ******************************************************************/
15 #include <ddk/ntddk.h>
16 #include <ddk/ntddblue.h>
21 #include <csrss/csrss.h>
22 #include <ntdll/csr.h>
25 #include <kernel32/kernel32.h>
27 /* FUNCTIONS *****************************************************************/
29 WINBOOL STDCALL
CloseConsoleHandle(HANDLE Handle
)
33 BOOLEAN
IsConsoleHandle(HANDLE Handle
)
35 if ((((ULONG
)Handle
) & 0x10000003) == 0x3)
43 /*--------------------------------------------------------------
46 HANDLE STDCALL
GetStdHandle(DWORD nStdHandle
)
48 PRTL_USER_PROCESS_PARAMETERS Ppb
;
50 // DbgPrint("GetStdHandle(nStdHandle %d)\n",nStdHandle);
52 SetLastError(ERROR_SUCCESS
); /* OK */
53 // DbgPrint("NtCurrentPeb() %x\n", NtCurrentPeb());
54 Ppb
= NtCurrentPeb()->ProcessParameters
;
55 // DbgPrint("Ppb %x\n", Ppb);
56 // DbgPrint("Ppb->OutputHandle %x\n", Ppb->OutputHandle);
59 case STD_INPUT_HANDLE
: return Ppb
->InputHandle
;
60 case STD_OUTPUT_HANDLE
: return Ppb
->OutputHandle
;
61 case STD_ERROR_HANDLE
: return Ppb
->ErrorHandle
;
63 SetLastError( ERROR_INVALID_PARAMETER
);
64 return INVALID_HANDLE_VALUE
;
68 /*--------------------------------------------------------------
71 WINBASEAPI BOOL WINAPI
SetStdHandle(DWORD nStdHandle
,
74 PRTL_USER_PROCESS_PARAMETERS Ppb
;
76 Ppb
= NtCurrentPeb()->ProcessParameters
;
78 /* More checking needed? */
79 if (hHandle
== INVALID_HANDLE_VALUE
)
81 SetLastError( ERROR_INVALID_HANDLE
);
85 SetLastError(ERROR_SUCCESS
); /* OK */
88 case STD_INPUT_HANDLE
:
89 Ppb
->InputHandle
= hHandle
;
91 case STD_OUTPUT_HANDLE
:
92 Ppb
->OutputHandle
= hHandle
;
94 case STD_ERROR_HANDLE
:
95 Ppb
->ErrorHandle
= hHandle
;
98 SetLastError( ERROR_INVALID_PARAMETER
);
103 /*--------------------------------------------------------------
106 WINBOOL STDCALL
WriteConsoleA(HANDLE hConsoleOutput
,
107 CONST VOID
*lpBuffer
,
108 DWORD nNumberOfCharsToWrite
,
109 LPDWORD lpNumberOfCharsWritten
,
112 PCSRSS_API_REQUEST Request
;
113 CSRSS_API_REPLY Reply
;
116 Request
= HeapAlloc(GetProcessHeap(),
118 sizeof(CSRSS_API_REQUEST
) + nNumberOfCharsToWrite
);
124 Request
->Type
= CSRSS_WRITE_CONSOLE
;
125 Request
->Data
.WriteConsoleRequest
.ConsoleHandle
= hConsoleOutput
;
126 Request
->Data
.WriteConsoleRequest
.NrCharactersToWrite
=
127 nNumberOfCharsToWrite
;
128 // DbgPrint("nNumberOfCharsToWrite %d\n", nNumberOfCharsToWrite);
129 // DbgPrint("Buffer %s\n", Request->Data.WriteConsoleRequest.Buffer);
130 memcpy(Request
->Data
.WriteConsoleRequest
.Buffer
,
132 nNumberOfCharsToWrite
);
134 Status
= CsrClientCallServer(Request
,
136 sizeof(CSRSS_API_REQUEST
) +
137 nNumberOfCharsToWrite
,
138 sizeof(CSRSS_API_REPLY
));
139 if (!NT_SUCCESS(Status
))
144 HeapFree(GetProcessHeap(),
148 if (lpNumberOfCharsWritten
!= NULL
)
150 *lpNumberOfCharsWritten
=
151 Reply
.Data
.WriteConsoleReply
.NrCharactersWritten
;
158 /*--------------------------------------------------------------
161 WINBOOL STDCALL
ReadConsoleA(HANDLE hConsoleInput
,
163 DWORD nNumberOfCharsToRead
,
164 LPDWORD lpNumberOfCharsRead
,
167 CSRSS_API_REQUEST Request
;
168 PCSRSS_API_REPLY Reply
;
171 Reply
= HeapAlloc(GetProcessHeap(),
173 sizeof(CSRSS_API_REPLY
) + nNumberOfCharsToRead
);
179 Request
.Type
= CSRSS_READ_CONSOLE
;
180 Request
.Data
.ReadConsoleRequest
.ConsoleHandle
= hConsoleInput
;
181 Request
.Data
.ReadConsoleRequest
.NrCharactersToRead
=
182 nNumberOfCharsToRead
;
184 Status
= CsrClientCallServer(&Request
,
186 sizeof(CSRSS_API_REQUEST
),
187 sizeof(CSRSS_API_REPLY
) +
188 nNumberOfCharsToRead
);
189 // DbgPrint( "Csrss Returned\n" );
190 if (!NT_SUCCESS(Status
) || !NT_SUCCESS(Reply
->Status
))
192 DbgPrint( "CSR returned error in ReadConsole\n" );
193 HeapFree( GetProcessHeap(), 0, Reply
);
196 if( Reply
->Status
== STATUS_PENDING
)
198 //DbgPrint( "Read pending, waiting on object %x\n", Reply->Data.ReadConsoleReply.EventHandle );
199 Status
= NtWaitForSingleObject( Reply
->Data
.ReadConsoleReply
.EventHandle
, FALSE
, 0 );
200 if( !NT_SUCCESS( Status
) )
202 DbgPrint( "Wait for console input failed!\n" );
203 HeapFree( GetProcessHeap(), 0, Reply
);
206 Status
= CsrClientCallServer( &Request
, Reply
, sizeof( CSRSS_API_REQUEST
), sizeof( CSRSS_API_REPLY
) + nNumberOfCharsToRead
);
207 if( !NT_SUCCESS( Status
) || !NT_SUCCESS( Reply
->Status
) )
209 SetLastError( RtlNtStatusToDosError( Reply
->Status
) );
210 HeapFree( GetProcessHeap(), 0, Reply
);
214 if (lpNumberOfCharsRead
!= NULL
)
216 *lpNumberOfCharsRead
=
217 Reply
->Data
.ReadConsoleReply
.NrCharactersRead
;
220 Reply
->Data
.ReadConsoleReply
.Buffer
,
221 Reply
->Data
.ReadConsoleReply
.NrCharactersRead
);
222 HeapFree(GetProcessHeap(),
230 /*--------------------------------------------------------------
233 WINBOOL STDCALL
AllocConsole(VOID
)
235 CSRSS_API_REQUEST Request
;
236 CSRSS_API_REPLY Reply
;
239 Request
.Type
= CSRSS_ALLOC_CONSOLE
;
240 Status
= CsrClientCallServer( &Request
, &Reply
, sizeof( CSRSS_API_REQUEST
), sizeof( CSRSS_API_REPLY
) );
241 if( !NT_SUCCESS( Status
) || !NT_SUCCESS( Reply
.Status
) )
242 DbgPrint( "AllocConsole Failed\n" );
243 SetStdHandle( STD_INPUT_HANDLE
, Reply
.Data
.AllocConsoleReply
.ConsoleHandle
);
244 SetStdHandle( STD_OUTPUT_HANDLE
, Reply
.Data
.AllocConsoleReply
.ConsoleHandle
);
245 SetStdHandle( STD_ERROR_HANDLE
, Reply
.Data
.AllocConsoleReply
.ConsoleHandle
);
250 /*--------------------------------------------------------------
253 WINBOOL STDCALL
FreeConsole(VOID
)
255 DbgPrint("FreeConsole() is unimplemented");
259 /*--------------------------------------------------------------
260 * GetConsoleScreenBufferInfo
264 GetConsoleScreenBufferInfo(
265 HANDLE hConsoleOutput
,
266 PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo
269 DWORD dwBytesReturned
;
271 if ( !DeviceIoControl(
273 IOCTL_CONSOLE_GET_SCREEN_BUFFER_INFO
,
276 lpConsoleScreenBufferInfo
,
277 sizeof(CONSOLE_SCREEN_BUFFER_INFO
),
283 SetLastError(0); /* FIXME: What error code? */
286 SetLastError(ERROR_SUCCESS
); /* OK */
291 /*--------------------------------------------------------------
292 * SetConsoleCursorPosition
296 SetConsoleCursorPosition(
297 HANDLE hConsoleOutput
,
298 COORD dwCursorPosition
301 DWORD dwBytesReturned
;
302 CONSOLE_SCREEN_BUFFER_INFO ConsoleScreenBufferInfo
;
304 if( !GetConsoleScreenBufferInfo(hConsoleOutput
,&ConsoleScreenBufferInfo
) )
306 SetLastError(0); /* FIXME: What error code? */
309 ConsoleScreenBufferInfo
.dwCursorPosition
.X
= dwCursorPosition
.X
;
310 ConsoleScreenBufferInfo
.dwCursorPosition
.Y
= dwCursorPosition
.Y
;
312 if( !DeviceIoControl(
314 IOCTL_CONSOLE_SET_SCREEN_BUFFER_INFO
,
315 &ConsoleScreenBufferInfo
,
316 sizeof(CONSOLE_SCREEN_BUFFER_INFO
),
327 /*--------------------------------------------------------------
328 * FillConsoleOutputCharacterA
332 FillConsoleOutputCharacterA(
333 HANDLE hConsoleOutput
,
337 LPDWORD lpNumberOfCharsWritten
340 DWORD dwBytesReturned
;
341 OUTPUT_CHARACTER Buffer
;
343 Buffer
.cCharacter
= cCharacter
;
344 Buffer
.nLength
= nLength
;
345 Buffer
.dwCoord
= dwWriteCoord
;
347 if (DeviceIoControl (hConsoleOutput
,
348 IOCTL_CONSOLE_FILL_OUTPUT_CHARACTER
,
350 sizeof(OUTPUT_CHARACTER
),
352 sizeof(OUTPUT_CHARACTER
),
356 *lpNumberOfCharsWritten
= Buffer
.dwTransfered
;
360 *lpNumberOfCharsWritten
= 0;
365 /*--------------------------------------------------------------
366 * FillConsoleOutputCharacterW
370 FillConsoleOutputCharacterW(
371 HANDLE hConsoleOutput
,
375 LPDWORD lpNumberOfCharsWritten
383 /*--------------------------------------------------------------
390 HANDLE hConsoleInput
,
391 PINPUT_RECORD lpBuffer
,
393 LPDWORD lpNumberOfEventsRead
401 /*--------------------------------------------------------------
408 HANDLE hConsoleInput
,
409 PINPUT_RECORD lpBuffer
,
411 LPDWORD lpNumberOfEventsRead
419 /*--------------------------------------------------------------
426 HANDLE hConsoleInput
,
427 PINPUT_RECORD lpBuffer
,
429 LPDWORD lpNumberOfEventsRead
436 for (i
=0; (stat
&& i
< nLength
);)
438 stat
= ReadFile(hConsoleInput
,
439 &lpBuffer
[i
].Event
.KeyEvent
,
440 sizeof(KEY_EVENT_RECORD
),
445 lpBuffer
[i
].EventType
= KEY_EVENT
;
449 if (lpNumberOfEventsRead
!= NULL
)
451 *lpNumberOfEventsRead
= i
;
457 /*--------------------------------------------------------------
464 HANDLE hConsoleInput
,
465 PINPUT_RECORD lpBuffer
,
467 LPDWORD lpNumberOfEventsRead
475 /*--------------------------------------------------------------
482 HANDLE hConsoleInput
,
483 CONST INPUT_RECORD
*lpBuffer
,
485 LPDWORD lpNumberOfEventsWritten
493 /*--------------------------------------------------------------
500 HANDLE hConsoleInput
,
501 CONST INPUT_RECORD
*lpBuffer
,
503 LPDWORD lpNumberOfEventsWritten
511 /*--------------------------------------------------------------
518 HANDLE hConsoleOutput
,
522 PSMALL_RECT lpReadRegion
530 /*--------------------------------------------------------------
537 HANDLE hConsoleOutput
,
541 PSMALL_RECT lpReadRegion
548 /*--------------------------------------------------------------
549 * WriteConsoleOutputA
555 HANDLE hConsoleOutput
,
556 CONST CHAR_INFO
*lpBuffer
,
559 PSMALL_RECT lpWriteRegion
567 /*--------------------------------------------------------------
568 * WriteConsoleOutputW
574 HANDLE hConsoleOutput
,
575 CONST CHAR_INFO
*lpBuffer
,
578 PSMALL_RECT lpWriteRegion
586 /*--------------------------------------------------------------
587 * ReadConsoleOutputCharacterA
592 ReadConsoleOutputCharacterA(
593 HANDLE hConsoleOutput
,
597 LPDWORD lpNumberOfCharsRead
600 DWORD dwBytesReturned
;
601 OUTPUT_CHARACTER Buffer
;
603 Buffer
.dwCoord
= dwReadCoord
;
605 if (DeviceIoControl (hConsoleOutput
,
606 IOCTL_CONSOLE_READ_OUTPUT_CHARACTER
,
608 sizeof(OUTPUT_CHARACTER
),
614 *lpNumberOfCharsRead
= Buffer
.dwTransfered
;
618 *lpNumberOfCharsRead
= 0;
623 /*--------------------------------------------------------------
624 * ReadConsoleOutputCharacterW
629 ReadConsoleOutputCharacterW(
630 HANDLE hConsoleOutput
,
634 LPDWORD lpNumberOfCharsRead
642 /*--------------------------------------------------------------
643 * ReadConsoleOutputAttribute
648 ReadConsoleOutputAttribute(
649 HANDLE hConsoleOutput
,
653 LPDWORD lpNumberOfAttrsRead
656 DWORD dwBytesReturned
;
657 OUTPUT_ATTRIBUTE Buffer
;
659 Buffer
.dwCoord
= dwReadCoord
;
661 if (DeviceIoControl (hConsoleOutput
,
662 IOCTL_CONSOLE_READ_OUTPUT_ATTRIBUTE
,
664 sizeof(OUTPUT_ATTRIBUTE
),
670 *lpNumberOfAttrsRead
= Buffer
.dwTransfered
;
674 *lpNumberOfAttrsRead
= 0;
680 /*--------------------------------------------------------------
681 * WriteConsoleOutputCharacterA
686 WriteConsoleOutputCharacterA(
687 HANDLE hConsoleOutput
,
691 LPDWORD lpNumberOfCharsWritten
694 DWORD dwBytesReturned
;
695 OUTPUT_CHARACTER Buffer
;
697 Buffer
.dwCoord
= dwWriteCoord
;
699 if (DeviceIoControl (hConsoleOutput
,
700 IOCTL_CONSOLE_WRITE_OUTPUT_CHARACTER
,
702 sizeof(OUTPUT_CHARACTER
),
708 *lpNumberOfCharsWritten
= Buffer
.dwTransfered
;
712 *lpNumberOfCharsWritten
= 0;
717 /*--------------------------------------------------------------
718 * WriteConsoleOutputCharacterW
723 WriteConsoleOutputCharacterW(
724 HANDLE hConsoleOutput
,
728 LPDWORD lpNumberOfCharsWritten
737 /*--------------------------------------------------------------
738 * WriteConsoleOutputAttribute
743 WriteConsoleOutputAttribute(
744 HANDLE hConsoleOutput
,
745 CONST WORD
*lpAttribute
,
748 LPDWORD lpNumberOfAttrsWritten
751 DWORD dwBytesReturned
;
752 OUTPUT_ATTRIBUTE Buffer
;
754 Buffer
.dwCoord
= dwWriteCoord
;
756 if (DeviceIoControl (hConsoleOutput
,
757 IOCTL_CONSOLE_WRITE_OUTPUT_ATTRIBUTE
,
759 sizeof(OUTPUT_ATTRIBUTE
),
765 *lpNumberOfAttrsWritten
= Buffer
.dwTransfered
;
769 *lpNumberOfAttrsWritten
= 0;
775 /*--------------------------------------------------------------
776 * FillConsoleOutputAttribute
781 FillConsoleOutputAttribute(
782 HANDLE hConsoleOutput
,
786 LPDWORD lpNumberOfAttrsWritten
789 DWORD dwBytesReturned
;
790 OUTPUT_ATTRIBUTE Buffer
;
792 Buffer
.wAttribute
= wAttribute
;
793 Buffer
.nLength
= nLength
;
794 Buffer
.dwCoord
= dwWriteCoord
;
796 if (DeviceIoControl (hConsoleOutput
,
797 IOCTL_CONSOLE_FILL_OUTPUT_ATTRIBUTE
,
799 sizeof(OUTPUT_ATTRIBUTE
),
801 sizeof(OUTPUT_ATTRIBUTE
),
805 *lpNumberOfAttrsWritten
= Buffer
.dwTransfered
;
809 *lpNumberOfAttrsWritten
= 0;
815 /*--------------------------------------------------------------
822 HANDLE hConsoleHandle
,
827 DWORD dwBytesReturned
;
829 if (DeviceIoControl (hConsoleHandle
,
830 IOCTL_CONSOLE_GET_MODE
,
834 sizeof(CONSOLE_MODE
),
838 *lpMode
= Buffer
.dwMode
;
839 SetLastError (ERROR_SUCCESS
);
843 SetLastError(0); /* FIXME: What error code? */
848 /*--------------------------------------------------------------
849 * GetNumberOfConsoleInputEvents
854 GetNumberOfConsoleInputEvents(
855 HANDLE hConsoleInput
,
856 LPDWORD lpNumberOfEvents
864 /*--------------------------------------------------------------
865 * GetLargestConsoleWindowSize
870 GetLargestConsoleWindowSize(
871 HANDLE hConsoleOutput
875 COORD Coord
= {80,25};
883 /*--------------------------------------------------------------
884 * GetConsoleCursorInfo
889 GetConsoleCursorInfo(
890 HANDLE hConsoleOutput
,
891 PCONSOLE_CURSOR_INFO lpConsoleCursorInfo
894 DWORD dwBytesReturned
;
896 if (DeviceIoControl (hConsoleOutput
,
897 IOCTL_CONSOLE_GET_CURSOR_INFO
,
901 sizeof(CONSOLE_CURSOR_INFO
),
910 /*--------------------------------------------------------------
911 * GetNumberOfConsoleMouseButtons
916 GetNumberOfConsoleMouseButtons(
917 LPDWORD lpNumberOfMouseButtons
925 /*--------------------------------------------------------------
932 HANDLE hConsoleHandle
,
937 DWORD dwBytesReturned
;
939 Buffer
.dwMode
= dwMode
;
941 if (DeviceIoControl (hConsoleHandle
,
942 IOCTL_CONSOLE_SET_MODE
,
944 sizeof(CONSOLE_MODE
),
950 SetLastError (ERROR_SUCCESS
);
954 SetLastError(0); /* FIXME: What error code? */
959 /*--------------------------------------------------------------
960 * SetConsoleActiveScreenBuffer
965 SetConsoleActiveScreenBuffer(
966 HANDLE hConsoleOutput
974 /*--------------------------------------------------------------
975 * FlushConsoleInputBuffer
980 FlushConsoleInputBuffer(
989 /*--------------------------------------------------------------
990 * SetConsoleScreenBufferSize
995 SetConsoleScreenBufferSize(
996 HANDLE hConsoleOutput
,
1004 /*--------------------------------------------------------------
1005 * SetConsoleCursorInfo
1010 SetConsoleCursorInfo(
1011 HANDLE hConsoleOutput
,
1012 CONST CONSOLE_CURSOR_INFO
*lpConsoleCursorInfo
1015 DWORD dwBytesReturned
;
1017 if (DeviceIoControl (hConsoleOutput
,
1018 IOCTL_CONSOLE_SET_CURSOR_INFO
,
1019 (PCONSOLE_CURSOR_INFO
)lpConsoleCursorInfo
,
1020 sizeof(CONSOLE_CURSOR_INFO
),
1031 /*--------------------------------------------------------------
1032 * ScrollConsoleScreenBufferA
1037 ScrollConsoleScreenBufferA(
1038 HANDLE hConsoleOutput
,
1039 CONST SMALL_RECT
*lpScrollRectangle
,
1040 CONST SMALL_RECT
*lpClipRectangle
,
1041 COORD dwDestinationOrigin
,
1042 CONST CHAR_INFO
*lpFill
1050 /*--------------------------------------------------------------
1051 * ScrollConsoleScreenBufferW
1056 ScrollConsoleScreenBufferW(
1057 HANDLE hConsoleOutput
,
1058 CONST SMALL_RECT
*lpScrollRectangle
,
1059 CONST SMALL_RECT
*lpClipRectangle
,
1060 COORD dwDestinationOrigin
,
1061 CONST CHAR_INFO
*lpFill
1069 /*--------------------------------------------------------------
1070 * SetConsoleWindowInfo
1075 SetConsoleWindowInfo(
1076 HANDLE hConsoleOutput
,
1078 CONST SMALL_RECT
*lpConsoleWindow
1086 /*--------------------------------------------------------------
1087 * SetConsoleTextAttribute
1092 SetConsoleTextAttribute(
1093 HANDLE hConsoleOutput
,
1097 DWORD dwBytesReturned
;
1099 if (!DeviceIoControl (hConsoleOutput
,
1100 IOCTL_CONSOLE_SET_TEXT_ATTRIBUTE
,
1112 /*--------------------------------------------------------------
1113 * SetConsoleCtrlHandler
1118 SetConsoleCtrlHandler(
1119 PHANDLER_ROUTINE HandlerRoutine
,
1128 /*--------------------------------------------------------------
1129 * GenerateConsoleCtrlEvent
1134 GenerateConsoleCtrlEvent(
1136 DWORD dwProcessGroupId
1144 /*--------------------------------------------------------------
1147 #define MAX_CONSOLE_TITLE_LENGTH 80
1153 LPWSTR lpConsoleTitle
,
1162 /*--------------------------------------------------------------
1171 LPSTR lpConsoleTitle
,
1175 wchar_t WideTitle
[MAX_CONSOLE_TITLE_LENGTH
];
1176 DWORD nWideTitle
= sizeof WideTitle
;
1179 if (!lpConsoleTitle
|| !nSize
) return 0;
1180 nWideTitle
= GetConsoleTitleW( (LPWSTR
) WideTitle
, nWideTitle
);
1181 if (!nWideTitle
) return 0;
1183 if ( (nWritten
= WideCharToMultiByte(
1184 CP_ACP
, // ANSI code page
1185 0, // performance and mapping flags
1186 (LPWSTR
) WideTitle
, // address of wide-character string
1187 nWideTitle
, // number of characters in string
1188 lpConsoleTitle
, // address of buffer for new string
1189 nSize
, // size of buffer
1194 lpConsoleTitle
[nWritten
] = '\0';
1202 /*--------------------------------------------------------------
1209 LPCWSTR lpConsoleTitle
1217 /*--------------------------------------------------------------
1226 LPCSTR lpConsoleTitle
1229 wchar_t WideTitle
[MAX_CONSOLE_TITLE_LENGTH
];
1230 char AnsiTitle
[MAX_CONSOLE_TITLE_LENGTH
];
1233 if (!lpConsoleTitle
) return FALSE
;
1234 ZeroMemory( WideTitle
, sizeof WideTitle
);
1235 nWideTitle
= lstrlenA(lpConsoleTitle
);
1244 AnsiTitle
[nWideTitle
] = '\0';
1246 if ( MultiByteToWideChar(
1247 CP_ACP
, // ANSI code page
1248 MB_PRECOMPOSED
, // character-type options
1249 AnsiTitle
, // address of string to map
1250 nWideTitle
, // number of characters in string
1251 (LPWSTR
) WideTitle
, // address of wide-character buffer
1252 (-1) // size of buffer: -1=...\0
1255 return SetConsoleTitleW( (LPWSTR
) WideTitle
);
1262 /*--------------------------------------------------------------
1269 HANDLE hConsoleInput
,
1271 DWORD nNumberOfCharsToRead
,
1272 LPDWORD lpNumberOfCharsRead
,
1281 /*--------------------------------------------------------------
1288 HANDLE hConsoleOutput
,
1289 CONST VOID
*lpBuffer
,
1290 DWORD nNumberOfCharsToWrite
,
1291 LPDWORD lpNumberOfCharsWritten
,
1300 /*--------------------------------------------------------------
1301 * CreateConsoleScreenBuffer
1306 CreateConsoleScreenBuffer(
1307 DWORD dwDesiredAccess
,
1309 CONST SECURITY_ATTRIBUTES
*lpSecurityAttributes
,
1311 LPVOID lpScreenBufferData
1319 /*--------------------------------------------------------------
1325 GetConsoleCP( VOID
)
1328 return CP_OEMCP
; /* FIXME */
1332 /*--------------------------------------------------------------
1347 /*--------------------------------------------------------------
1348 * GetConsoleOutputCP
1353 GetConsoleOutputCP( VOID
)
1356 return 0; /* FIXME */
1360 /*--------------------------------------------------------------
1361 * SetConsoleOutputCP