James Hawkins wrote:
Changelog:
- take audio autodetection out of winecfg and put it in winmm
- if driver is not found in the registry or the driver fails to
load, then autodetect driver
Thanks for another cool patch. It lessens the burden on the user. CC'ing ros-kernel as explained below.
Index: dlls/winmm/lolvldrv.c
RCS file: /home/wine/wine/dlls/winmm/lolvldrv.c,v retrieving revision 1.58 diff -u -r1.58 lolvldrv.c --- dlls/winmm/lolvldrv.c 1 Jun 2004 19:40:48 -0000 1.58 +++ dlls/winmm/lolvldrv.c 25 Jul 2004 22:05:54 -0000 @@ -30,6 +30,8 @@ #include "winver.h" #include "winemm.h" #include "wine/debug.h" +#include "config.h" +#include "wine/port.h"
WINE_DEFAULT_DEBUG_CHANNEL(winmm);
@@ -711,6 +713,80 @@ }
/**************************************************************************
- MMDRV_AutoDetectDriver [internal]
- modified from programs/winecfg/audio.c
- */
+BOOL MMDRV_AutoDetectDriver(void) +{
- struct stat buf;
- const char *argv_new[4];
- int fd;
- char *driversFound[10];
- char *name[10];
- int numFound = 0;
- argv_new[0] = "/bin/sh";
I think the ReactOS people may have a few comments to make on this, now that they are using this DLL in ReactOS.
- argv_new[1] = "-c";
- argv_new[3] = NULL;
- /* try to detect arts */
- argv_new[2] = "ps awx|grep artsd|grep -v grep|grep artsd > /dev/null";
- if(!spawnvp(_P_WAIT, "/bin/sh", argv_new))
- {
driversFound[numFound] = "winearts.drv";
name[numFound] = "aRts";
numFound++;
- }
- /* try to detect jack */
- argv_new[2] = "ps awx|grep jackd|grep -v grep|grep jackd > /dev/null";
- if(!spawnvp(_P_WAIT, "/bin/sh", argv_new))
- {
driversFound[numFound] = "winejack.drv";
name[numFound] = "jack";
numFound++;
- }
- /* try to detect nas */
- /* TODO */
- /* try to detect audioIO (solaris) */
- /* TODO */
- /* try to detect alsa */
- if(!stat("/proc/asound", &buf))
- {
driversFound[numFound] = "winealsa.drv";
name[numFound] = "Alsa";
numFound++;
- }
- /* try to detect oss */
- fd = open("/dev/dsp", O_WRONLY | O_NONBLOCK);
- if(fd)
- {
close(fd);
driversFound[numFound] = "wineoss.drv";
name[numFound] = "OSS";
numFound++;
- }
- if (numFound == 0)
- {
TRACE("Could not detect any audio devices/servers");
return FALSE;
- }
- /* TODO: possibly smarter handling of multiple drivers? */
- TRACE("Found driver %s\n", name[0]);
- return MMDRV_Install(driversFound[0], driversFound[0], FALSE);
+}
+/**************************************************************************
MMDRV_InitFromRegistry [internal]
*/ static BOOL MMDRV_InitFromRegistry(void) @@ -729,7 +805,9 @@ }
size = sizeof(buffer);
- if (!RegQueryValueExA(hKey, "Drivers", 0, &type, (LPVOID)buffer, &size)) {
- BOOL keyQueried = !RegQueryValueExA(hKey, "Drivers", 0, &type,
(LPVOID)buffer, &size);
This is only available in C99. We try to make Wine compile with as many C compilers as possible, including gcc 2.95, which doesn't allow this sort of thing.
- if (keyQueried) { p1 = buffer; while (p1) { p2 = strchr(p1, ';');
@@ -738,7 +816,11 @@ p1 = p2; } }
- /* if no driver specified in reg or driver fails to load then autodetect */
- if (!keyQueried || !ret)
ret |= MMDRV_AutoDetectDriver();
/* finish with mappers */ size = sizeof(buffer); if (!RegQueryValueExA(hKey, "WaveMapper", 0, &type, (LPVOID)buffer, &size))
Rob