kernel32: Use IOCTL_CONDRV_WRITE_OUTPUT in CONSOLE_WriteChars.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
db886f0923
commit
98bee7881a
|
@ -689,25 +689,24 @@ LONG CALLBACK CONSOLE_HandleCtrlC( EXCEPTION_POINTERS *eptr )
|
|||
* WriteConsoleOutput helper: hides server call semantics
|
||||
* writes a string at a given pos with standard attribute
|
||||
*/
|
||||
static int CONSOLE_WriteChars(HANDLE hCon, LPCWSTR lpBuffer, int nc, COORD* pos)
|
||||
static int CONSOLE_WriteChars(HANDLE handle, const WCHAR *str, size_t length, COORD *coord)
|
||||
{
|
||||
int written = -1;
|
||||
struct condrv_write_output_params *params;
|
||||
DWORD written = 0, size;
|
||||
|
||||
if (!nc) return 0;
|
||||
if (!length) return 0;
|
||||
|
||||
SERVER_START_REQ( write_console_output )
|
||||
{
|
||||
req->handle = console_handle_unmap(hCon);
|
||||
req->x = pos->X;
|
||||
req->y = pos->Y;
|
||||
req->mode = CHAR_INFO_MODE_TEXTSTDATTR;
|
||||
req->wrap = FALSE;
|
||||
wine_server_add_data( req, lpBuffer, nc * sizeof(WCHAR) );
|
||||
if (!wine_server_call_err( req )) written = reply->written;
|
||||
}
|
||||
SERVER_END_REQ;
|
||||
|
||||
if (written > 0) pos->X += written;
|
||||
size = sizeof(*params) + length * sizeof(WCHAR);
|
||||
if (!(params = HeapAlloc( GetProcessHeap(), 0, size ))) return FALSE;
|
||||
params->mode = CHAR_INFO_MODE_TEXTSTDATTR;
|
||||
params->x = coord->X;
|
||||
params->y = coord->Y;
|
||||
params->width = 0;
|
||||
memcpy( params + 1, str, length * sizeof(*str) );
|
||||
if (DeviceIoControl( handle, IOCTL_CONDRV_WRITE_OUTPUT, params, size,
|
||||
&written, sizeof(written), NULL, NULL ))
|
||||
coord->X += written;
|
||||
HeapFree( GetProcessHeap(), 0, params );
|
||||
return written;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue