Jacek Caban : kernel32: Move Beep implementation to conhost.
Alexandre Julliard
julliard at winehq.org
Tue Sep 22 15:46:42 CDT 2020
Module: wine
Branch: master
Commit: 810873eb7561e147dff871aa20315e930d1f01bb
URL: https://source.winehq.org/git/wine.git/?a=commit;h=810873eb7561e147dff871aa20315e930d1f01bb
Author: Jacek Caban <jacek at codeweavers.com>
Date: Tue Sep 22 16:48:04 2020 +0200
kernel32: Move Beep implementation to conhost.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/kernel32/console.c | 17 +++--------------
include/wine/condrv.h | 1 +
programs/conhost/conhost.c | 9 +++++++++
3 files changed, 13 insertions(+), 14 deletions(-)
diff --git a/dlls/kernel32/console.c b/dlls/kernel32/console.c
index fc83b2db12..24f86a9e51 100644
--- a/dlls/kernel32/console.c
+++ b/dlls/kernel32/console.c
@@ -23,21 +23,10 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-/* Reference applications:
- * - IDA (interactive disassembler) full version 3.75. Works.
- * - LYNX/W32. Works mostly, some keys crash it.
- */
-
-#include "config.h"
-#include "wine/port.h"
-
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include <limits.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
#define NONAMELESSUNION
#include "ntstatus.h"
@@ -84,9 +73,9 @@ HWND WINAPI GetConsoleWindow(void)
*/
BOOL WINAPI Beep( DWORD dwFreq, DWORD dwDur )
{
- static const char beep = '\a';
- /* dwFreq and dwDur are ignored by Win95 */
- if (isatty(2)) write( 2, &beep, 1 );
+ /* FIXME: we should not require a console to be attached */
+ DeviceIoControl( RtlGetCurrentPeb()->ProcessParameters->ConsoleHandle,
+ IOCTL_CONDRV_BEEP, NULL, 0, NULL, 0, NULL, NULL );
return TRUE;
}
diff --git a/include/wine/condrv.h b/include/wine/condrv.h
index a5633998db..dd870c2157 100644
--- a/include/wine/condrv.h
+++ b/include/wine/condrv.h
@@ -38,6 +38,7 @@
#define IOCTL_CONDRV_GET_TITLE CTL_CODE(FILE_DEVICE_CONSOLE, 16, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_CONDRV_SET_TITLE CTL_CODE(FILE_DEVICE_CONSOLE, 17, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CONDRV_CTRL_EVENT CTL_CODE(FILE_DEVICE_CONSOLE, 18, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+#define IOCTL_CONDRV_BEEP CTL_CODE(FILE_DEVICE_CONSOLE, 19, METHOD_BUFFERED, FILE_ANY_ACCESS)
/* console output ioctls */
#define IOCTL_CONDRV_WRITE_CONSOLE CTL_CODE(FILE_DEVICE_CONSOLE, 30, METHOD_BUFFERED, FILE_WRITE_ACCESS)
diff --git a/programs/conhost/conhost.c b/programs/conhost/conhost.c
index 82cee8bdf0..a775e74961 100644
--- a/programs/conhost/conhost.c
+++ b/programs/conhost/conhost.c
@@ -2569,6 +2569,15 @@ static NTSTATUS console_input_ioctl( struct console *console, unsigned int code,
if (in_size % sizeof(WCHAR) || *out_size) return STATUS_INVALID_PARAMETER;
return set_console_title( console, in_data, in_size );
+ case IOCTL_CONDRV_BEEP:
+ if (in_size || *out_size) return STATUS_INVALID_PARAMETER;
+ if (console->is_unix)
+ {
+ tty_write( console, "\a", 1 );
+ tty_sync( console );
+ }
+ return STATUS_SUCCESS;
+
default:
FIXME( "unsupported ioctl %x\n", code );
return STATUS_NOT_SUPPORTED;
More information about the wine-cvs
mailing list