winenas.drv: Remove broken driver
Maarten Lankhorst
m.b.lankhorst at gmail.com
Sat Nov 7 07:45:13 CST 2009
---
-------------- next part --------------
From 88fde5ad95a33dc2da29757605891ccc5047c12f Mon Sep 17 00:00:00 2001
From: mlankhorst <mlankhorst at eee.(none)>
Date: Sat, 7 Nov 2009 13:34:54 +0000
Subject: [PATCH] winenas.drv: Remove broken driver
---
dlls/winenas.drv/Makefile.in | 16 -
dlls/winenas.drv/audio.c | 1502 -------------------------------------
dlls/winenas.drv/nas.c | 85 ---
dlls/winenas.drv/nas.h | 28 -
dlls/winenas.drv/winenas.drv.spec | 2 -
programs/winecfg/Bg.rc | 1 -
programs/winecfg/Cs.rc | 1 -
programs/winecfg/Da.rc | 1 -
programs/winecfg/De.rc | 1 -
programs/winecfg/En.rc | 1 -
programs/winecfg/Es.rc | 1 -
programs/winecfg/Fi.rc | 1 -
programs/winecfg/Fr.rc | 1 -
programs/winecfg/Hu.rc | 1 -
programs/winecfg/It.rc | 1 -
programs/winecfg/Ja.rc | 1 -
programs/winecfg/Ko.rc | 1 -
programs/winecfg/Lt.rc | 1 -
programs/winecfg/Nl.rc | 1 -
programs/winecfg/No.rc | 1 -
programs/winecfg/Pl.rc | 1 -
programs/winecfg/Pt.rc | 1 -
programs/winecfg/Ro.rc | 1 -
programs/winecfg/Ru.rc | 1 -
programs/winecfg/Si.rc | 1 -
programs/winecfg/Sv.rc | 1 -
programs/winecfg/Tr.rc | 1 -
programs/winecfg/Zh.rc | 2 -
programs/winecfg/audio.c | 1 -
programs/winecfg/resource.h | 1 -
30 files changed, 0 insertions(+), 1659 deletions(-)
delete mode 100644 dlls/winenas.drv/Makefile.in
delete mode 100644 dlls/winenas.drv/audio.c
delete mode 100644 dlls/winenas.drv/nas.c
delete mode 100644 dlls/winenas.drv/nas.h
delete mode 100644 dlls/winenas.drv/winenas.drv.spec
diff --git a/dlls/winenas.drv/Makefile.in b/dlls/winenas.drv/Makefile.in
deleted file mode 100644
index 94bbb2e..0000000
--- a/dlls/winenas.drv/Makefile.in
+++ /dev/null
@@ -1,16 +0,0 @@
-TOPSRCDIR = @top_srcdir@
-TOPOBJDIR = ../..
-SRCDIR = @srcdir@
-VPATH = @srcdir@
-MODULE = winenas.drv
-IMPORTS = dxguid uuid winmm user32 kernel32
-EXTRAINCL = @X_CFLAGS@
-EXTRALIBS = @NASLIBS@
-
-C_SRCS = \
- audio.c \
- nas.c
-
- at MAKE_DLL_RULES@
-
- at DEPENDENCIES@ # everything below this line is overwritten by make depend
diff --git a/dlls/winenas.drv/audio.c b/dlls/winenas.drv/audio.c
deleted file mode 100644
index 10d0b73..0000000
--- a/dlls/winenas.drv/audio.c
+++ /dev/null
@@ -1,1502 +0,0 @@
-/* -*- tab-width: 8; c-basic-offset: 4 -*- */
-/*
- * Wine Driver for NAS Network Audio System
- * http://radscan.com/nas.html
- *
- * Copyright 1994 Martin Ayotte
- * 1999 Eric Pouech (async playing in waveOut/waveIn)
- * 2000 Eric Pouech (loops in waveOut)
- * 2002 Chris Morgan (aRts version of this file)
- * 2002 Nicolas Escuder (NAS version of this file)
- *
- * Copyright 2002 Nicolas Escuder <n.escuder at alineanet.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-/* NOTE:
- * with nas we cannot stop the audio that is already in
- * the servers buffer.
- *
- * FIXME:
- * pause in waveOut does not work correctly in loop mode
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-# include <sys/time.h>
-#endif
-#include <fcntl.h>
-#include <math.h>
-
-#define FRAG_SIZE 1024
-#define FRAG_COUNT 10
-
-/* avoid type conflicts */
-#define INT8 X_INT8
-#define INT16 X_INT16
-#define INT32 X_INT32
-#define INT64 X_INT64
-#define BOOL X_BOOL
-#define BYTE X_BYTE
-#ifdef HAVE_AUDIO_AUDIOLIB_H
-#include <audio/audiolib.h>
-#endif
-#ifdef HAVE_AUDIO_SOUNDLIB_H
-#include <audio/soundlib.h>
-#endif
-#undef INT8
-#undef INT16
-#undef INT32
-#undef INT64
-#undef LONG64
-#undef BOOL
-#undef BYTE
-
-#include "windef.h"
-#include "winbase.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "winerror.h"
-#include "mmddk.h"
-#include "dsound.h"
-#include "dsdriver.h"
-#include "nas.h"
-#include "wine/unicode.h"
-#include "wine/debug.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(wave);
-
-/* Allow 1% deviation for sample rates (some ES137x cards) */
-#define NEAR_MATCH(rate1,rate2) (((100*((int)(rate1)-(int)(rate2)))/(rate1))==0)
-
-#ifdef HAVE_NAS
-
-static AuServer *AuServ;
-
-#define MAX_WAVEOUTDRV (1)
-
-/* state diagram for waveOut writing:
- *
- * +---------+-------------+---------------+---------------------------------+
- * | state | function | event | new state |
- * +---------+-------------+---------------+---------------------------------+
- * | | open() | | STOPPED |
- * | PAUSED | write() | | PAUSED |
- * | STOPPED | write() | <thrd create> | PLAYING |
- * | PLAYING | write() | HEADER | PLAYING |
- * | (other) | write() | <error> | |
- * | (any) | pause() | PAUSING | PAUSED |
- * | PAUSED | restart() | RESTARTING | PLAYING (if no thrd => STOPPED) |
- * | (any) | reset() | RESETTING | STOPPED |
- * | (any) | close() | CLOSING | CLOSED |
- * +---------+-------------+---------------+---------------------------------+
- */
-
-/* states of the playing device */
-#define WINE_WS_PLAYING 0
-#define WINE_WS_PAUSED 1
-#define WINE_WS_STOPPED 2
-#define WINE_WS_CLOSED 3
-
-/* events to be send to device */
-enum win_wm_message {
- WINE_WM_PAUSING = WM_USER + 1, WINE_WM_RESTARTING, WINE_WM_RESETTING, WINE_WM_HEADER,
- WINE_WM_UPDATE, WINE_WM_BREAKLOOP, WINE_WM_CLOSING
-};
-
-typedef struct {
- enum win_wm_message msg; /* message identifier */
- DWORD_PTR param; /* parameter for this message */
- HANDLE hEvent; /* if message is synchronous, handle of event for synchro */
-} RING_MSG;
-
-/* implement an in-process message ring for better performance
- * (compared to passing thru the server)
- * this ring will be used by the input (resp output) record (resp playback) routine
- */
-#define NAS_RING_BUFFER_INCREMENT 64
-typedef struct {
- RING_MSG * messages;
- int ring_buffer_size;
- int msg_tosave;
- int msg_toget;
- HANDLE msg_event;
- CRITICAL_SECTION msg_crst;
-} MSG_RING;
-
-typedef struct {
- volatile int state; /* one of the WINE_WS_ manifest constants */
- WAVEOPENDESC waveDesc;
- WORD wFlags;
- PCMWAVEFORMAT format;
- WAVEOUTCAPSW caps;
- int Id;
-
- int open;
- AuServer *AuServ;
- AuDeviceID AuDev;
- AuFlowID AuFlow;
- BOOL FlowStarted;
-
- DWORD writeBytes;
- DWORD freeBytes;
- DWORD sendBytes;
-
- DWORD BufferSize; /* size of whole buffer in bytes */
-
- char* SoundBuffer;
- long BufferUsed;
-
- DWORD volume_left; /* volume control information */
- DWORD volume_right;
-
- LPWAVEHDR lpQueuePtr; /* start of queued WAVEHDRs (waiting to be notified) */
- LPWAVEHDR lpPlayPtr; /* start of not yet fully played buffers */
-
- LPWAVEHDR lpLoopPtr; /* pointer of first buffer in loop, if any */
- DWORD dwLoops; /* private copy of loop counter */
-
- DWORD PlayedTotal; /* number of bytes actually played since opening */
- DWORD WrittenTotal; /* number of bytes written to the audio device since opening */
-
- /* synchronization stuff */
- HANDLE hStartUpEvent;
- HANDLE hThread;
- DWORD dwThreadID;
- MSG_RING msgRing;
-} WINE_WAVEOUT;
-
-static WINE_WAVEOUT WOutDev [MAX_WAVEOUTDRV];
-
-static DWORD wodDsCreate(UINT wDevID, PIDSDRIVER* drv);
-static DWORD wodDsDesc(UINT wDevID, PDSDRIVERDESC desc);
-
-
-/* NASFUNC */
-static AuBool event_handler(AuServer* aud, AuEvent* ev, AuEventHandlerRec* hnd);
-static int nas_init(void);
-static int nas_end(void);
-
-static int nas_finddev(WINE_WAVEOUT* wwo);
-static int nas_open(WINE_WAVEOUT* wwo);
-static int nas_free(WINE_WAVEOUT* wwo);
-static int nas_close(WINE_WAVEOUT* wwo);
-static void buffer_resize(WINE_WAVEOUT* wwo, int len);
-static int nas_add_buffer(WINE_WAVEOUT* wwo);
-static int nas_send_buffer(WINE_WAVEOUT* wwo);
-
-/* These strings used only for tracing */
-static const char * const wodPlayerCmdString[] = {
- "WINE_WM_PAUSING",
- "WINE_WM_RESTARTING",
- "WINE_WM_RESETTING",
- "WINE_WM_HEADER",
- "WINE_WM_UPDATE",
- "WINE_WM_BREAKLOOP",
- "WINE_WM_CLOSING",
-};
-
-static const char * const nas_elementnotify_kinds[] = {
- "LowWater",
- "HighWater",
- "State",
- "Unknown"
-};
-
-static const char * const nas_states[] = {
- "Stop",
- "Start",
- "Pause",
- "Any"
-};
-
-static const char * const nas_reasons[] = {
- "User",
- "Underrun",
- "Overrun",
- "EOF",
- "Watermark",
- "Hardware",
- "Any"
-};
-
-static const char* nas_reason(unsigned int reason)
-{
- if (reason > 6) reason = 6;
- return nas_reasons[reason];
-}
-
-static const char* nas_elementnotify_kind(unsigned int kind)
-{
- if (kind > 2) kind = 3;
- return nas_elementnotify_kinds[kind];
-}
-
-
-#if 0
-static const char* nas_event_type(unsigned int type)
-{
- static const char * const nas_event_types[] =
- {
- "Undefined",
- "Undefined",
- "ElementNotify",
- "GrabNotify",
- "MonitorNotify",
- "BucketNotify",
- "DeviceNotify"
- };
-
- if (type > 6) type = 0;
- return nas_event_types[type];
-}
-#endif
-
-
-static const char* nas_state(unsigned int state)
-{
- if (state > 3) state = 3;
- return nas_states[state];
-}
-
-static DWORD bytes_to_mmtime(LPMMTIME lpTime, DWORD position,
- PCMWAVEFORMAT* format)
-{
- TRACE("wType=%04X wBitsPerSample=%u nSamplesPerSec=%u nChannels=%u nAvgBytesPerSec=%u\n",
- lpTime->wType, format->wBitsPerSample, format->wf.nSamplesPerSec,
- format->wf.nChannels, format->wf.nAvgBytesPerSec);
- TRACE("Position in bytes=%u\n", position);
-
- switch (lpTime->wType) {
- case TIME_SAMPLES:
- lpTime->u.sample = position / (format->wBitsPerSample / 8 * format->wf.nChannels);
- TRACE("TIME_SAMPLES=%u\n", lpTime->u.sample);
- break;
- case TIME_MS:
- lpTime->u.ms = 1000.0 * position / (format->wBitsPerSample / 8 * format->wf.nChannels * format->wf.nSamplesPerSec);
- TRACE("TIME_MS=%u\n", lpTime->u.ms);
- break;
- case TIME_SMPTE:
- lpTime->u.smpte.fps = 30;
- position = position / (format->wBitsPerSample / 8 * format->wf.nChannels);
- position += (format->wf.nSamplesPerSec / lpTime->u.smpte.fps) - 1; /* round up */
- lpTime->u.smpte.sec = position / format->wf.nSamplesPerSec;
- position -= lpTime->u.smpte.sec * format->wf.nSamplesPerSec;
- lpTime->u.smpte.min = lpTime->u.smpte.sec / 60;
- lpTime->u.smpte.sec -= 60 * lpTime->u.smpte.min;
- lpTime->u.smpte.hour = lpTime->u.smpte.min / 60;
- lpTime->u.smpte.min -= 60 * lpTime->u.smpte.hour;
- lpTime->u.smpte.fps = 30;
- lpTime->u.smpte.frame = position * lpTime->u.smpte.fps / format->wf.nSamplesPerSec;
- TRACE("TIME_SMPTE=%02u:%02u:%02u:%02u\n",
- lpTime->u.smpte.hour, lpTime->u.smpte.min,
- lpTime->u.smpte.sec, lpTime->u.smpte.frame);
- break;
- default:
- WARN("Format %d not supported, using TIME_BYTES !\n", lpTime->wType);
- lpTime->wType = TIME_BYTES;
- /* fall through */
- case TIME_BYTES:
- lpTime->u.cb = position;
- TRACE("TIME_BYTES=%u\n", lpTime->u.cb);
- break;
- }
- return MMSYSERR_NOERROR;
-}
-
-/*======================================================================*
- * Low level WAVE implementation *
- *======================================================================*/
-#if 0
-/* Volume functions derived from Alsaplayer source */
-/* length is the number of 16 bit samples */
-static void volume_effect16(void *bufin, void* bufout, int length, int left,
- int right, int nChannels)
-{
- short *d_out = bufout;
- short *d_in = bufin;
- int i, v;
-
-/*
- TRACE("length == %d, nChannels == %d\n", length, nChannels);
-*/
-
- if (right == -1) right = left;
-
- for(i = 0; i < length; i+=(nChannels))
- {
- v = (int) ((*(d_in++) * left) / 100);
- *(d_out++) = (v>32767) ? 32767 : ((v<-32768) ? -32768 : v);
- if(nChannels == 2)
- {
- v = (int) ((*(d_in++) * right) / 100);
- *(d_out++) = (v>32767) ? 32767 : ((v<-32768) ? -32768 : v);
- }
- }
-}
-
-/* length is the number of 8 bit samples */
-static void volume_effect8(void *bufin, void* bufout, int length, int left,
- int right, int nChannels)
-{
- char *d_out = bufout;
- char *d_in = bufin;
- int i, v;
-
-/*
- TRACE("length == %d, nChannels == %d\n", length, nChannels);
-*/
-
- if (right == -1) right = left;
-
- for(i = 0; i < length; i+=(nChannels))
- {
- v = (char) ((*(d_in++) * left) / 100);
- *(d_out++) = (v>255) ? 255 : ((v<0) ? 0 : v);
- if(nChannels == 2)
- {
- v = (char) ((*(d_in++) * right) / 100);
- *(d_out++) = (v>255) ? 255 : ((v<0) ? 0 : v);
- }
- }
-}
-#endif
-
-/******************************************************************
- * NAS_CloseDevice
- *
- */
-static void NAS_CloseDevice(WINE_WAVEOUT* wwo)
-{
- TRACE("NAS_CloseDevice\n");
- nas_close(wwo);
-}
-
-/******************************************************************
- * NAS_WaveClose
- */
-LONG NAS_WaveClose(void)
-{
- nas_end(); /* free up nas server */
- return 1;
-}
-
-/******************************************************************
- * NAS_WaveInit
- *
- * Initialize internal structures from NAS server info
- */
-LONG NAS_WaveInit(void)
-{
- int i;
- if (!nas_init()) return MMSYSERR_ERROR;
-
- /* initialize all device handles to -1 */
- for (i = 0; i < MAX_WAVEOUTDRV; ++i)
- {
- static const WCHAR ini[] = {'N','A','S',' ','W','A','V','E','O','U','T',' ','D','r','i','v','e','r',0};
- memset(&WOutDev[i].caps, 0, sizeof(WOutDev[i].caps)); /* zero out caps values */
-
- WOutDev[i].AuServ = AuServ;
- WOutDev[i].AuDev = AuNone;
- WOutDev[i].Id = i;
- WOutDev[i].caps.wMid = 0x00FF; /* Manufac ID */
- WOutDev[i].caps.wPid = 0x0001; /* Product ID */
- strcpyW(WOutDev[i].caps.szPname, ini);
- WOutDev[i].AuFlow = 0;
- WOutDev[i].caps.vDriverVersion = 0x0100;
- WOutDev[i].caps.dwFormats = 0x00000000;
- WOutDev[i].caps.dwSupport = WAVECAPS_VOLUME;
-
- WOutDev[i].caps.wChannels = 2;
- WOutDev[i].caps.dwSupport |= WAVECAPS_LRVOLUME;
-
- WOutDev[i].caps.dwFormats |= WAVE_FORMAT_4M08;
- WOutDev[i].caps.dwFormats |= WAVE_FORMAT_4S08;
- WOutDev[i].caps.dwFormats |= WAVE_FORMAT_4S16;
- WOutDev[i].caps.dwFormats |= WAVE_FORMAT_4M16;
- WOutDev[i].caps.dwFormats |= WAVE_FORMAT_2M08;
- WOutDev[i].caps.dwFormats |= WAVE_FORMAT_2S08;
- WOutDev[i].caps.dwFormats |= WAVE_FORMAT_2M16;
- WOutDev[i].caps.dwFormats |= WAVE_FORMAT_2S16;
- WOutDev[i].caps.dwFormats |= WAVE_FORMAT_1M08;
- WOutDev[i].caps.dwFormats |= WAVE_FORMAT_1S08;
- WOutDev[i].caps.dwFormats |= WAVE_FORMAT_1M16;
- WOutDev[i].caps.dwFormats |= WAVE_FORMAT_1S16;
- }
-
-
- return 0;
-}
-
-/******************************************************************
- * NAS_InitRingMessage
- *
- * Initialize the ring of messages for passing between driver's caller and playback/record
- * thread
- */
-static int NAS_InitRingMessage(MSG_RING* mr)
-{
- mr->msg_toget = 0;
- mr->msg_tosave = 0;
- mr->msg_event = CreateEventW(NULL, FALSE, FALSE, NULL);
- mr->ring_buffer_size = NAS_RING_BUFFER_INCREMENT;
- mr->messages = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,mr->ring_buffer_size * sizeof(RING_MSG));
- InitializeCriticalSection(&mr->msg_crst);
- mr->msg_crst.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": MSG_RING.msg_crst");
- return 0;
-}
-
-/******************************************************************
- * NAS_DestroyRingMessage
- *
- */
-static int NAS_DestroyRingMessage(MSG_RING* mr)
-{
- CloseHandle(mr->msg_event);
- HeapFree(GetProcessHeap(),0,mr->messages);
- mr->msg_crst.DebugInfo->Spare[0] = 0;
- DeleteCriticalSection(&mr->msg_crst);
- return 0;
-}
-
-/******************************************************************
- * NAS_AddRingMessage
- *
- * Inserts a new message into the ring (should be called from DriverProc derived routines)
- */
-static int NAS_AddRingMessage(MSG_RING* mr, enum win_wm_message msg, DWORD param, BOOL wait)
-{
- HANDLE hEvent = INVALID_HANDLE_VALUE;
-
- EnterCriticalSection(&mr->msg_crst);
- if ((mr->msg_toget == ((mr->msg_tosave + 1) % mr->ring_buffer_size)))
- {
- int old_ring_buffer_size = mr->ring_buffer_size;
- mr->ring_buffer_size += NAS_RING_BUFFER_INCREMENT;
- TRACE("omr->ring_buffer_size=%d\n",mr->ring_buffer_size);
- mr->messages = HeapReAlloc(GetProcessHeap(),0,mr->messages, mr->ring_buffer_size * sizeof(RING_MSG));
- /* Now we need to rearrange the ring buffer so that the new
- buffers just allocated are in between mr->msg_tosave and
- mr->msg_toget.
- */
- if (mr->msg_tosave < mr->msg_toget)
- {
- memmove(&(mr->messages[mr->msg_toget + NAS_RING_BUFFER_INCREMENT]),
- &(mr->messages[mr->msg_toget]),
- sizeof(RING_MSG)*(old_ring_buffer_size - mr->msg_toget)
- );
- mr->msg_toget += NAS_RING_BUFFER_INCREMENT;
- }
- }
- if (wait)
- {
- hEvent = CreateEventW(NULL, FALSE, FALSE, NULL);
- if (hEvent == INVALID_HANDLE_VALUE)
- {
- ERR("can't create event !?\n");
- LeaveCriticalSection(&mr->msg_crst);
- return 0;
- }
- if (mr->msg_toget != mr->msg_tosave && mr->messages[mr->msg_toget].msg != WINE_WM_HEADER)
- FIXME("two fast messages in the queue!!!!\n");
-
- /* fast messages have to be added at the start of the queue */
- mr->msg_toget = (mr->msg_toget + mr->ring_buffer_size - 1) % mr->ring_buffer_size;
-
- mr->messages[mr->msg_toget].msg = msg;
- mr->messages[mr->msg_toget].param = param;
- mr->messages[mr->msg_toget].hEvent = hEvent;
- }
- else
- {
- mr->messages[mr->msg_tosave].msg = msg;
- mr->messages[mr->msg_tosave].param = param;
- mr->messages[mr->msg_tosave].hEvent = INVALID_HANDLE_VALUE;
- mr->msg_tosave = (mr->msg_tosave + 1) % mr->ring_buffer_size;
- }
-
- LeaveCriticalSection(&mr->msg_crst);
-
- SetEvent(mr->msg_event); /* signal a new message */
-
- if (wait)
- {
- /* wait for playback/record thread to have processed the message */
- WaitForSingleObject(hEvent, INFINITE);
- CloseHandle(hEvent);
- }
-
- return 1;
-}
-
-/******************************************************************
- * NAS_RetrieveRingMessage
- *
- * Get a message from the ring. Should be called by the playback/record thread.
- */
-static int NAS_RetrieveRingMessage(MSG_RING* mr, enum win_wm_message *msg,
- DWORD_PTR *param, HANDLE *hEvent)
-{
- EnterCriticalSection(&mr->msg_crst);
-
- if (mr->msg_toget == mr->msg_tosave) /* buffer empty ? */
- {
- LeaveCriticalSection(&mr->msg_crst);
- return 0;
- }
-
- *msg = mr->messages[mr->msg_toget].msg;
- mr->messages[mr->msg_toget].msg = 0;
- *param = mr->messages[mr->msg_toget].param;
- *hEvent = mr->messages[mr->msg_toget].hEvent;
- mr->msg_toget = (mr->msg_toget + 1) % mr->ring_buffer_size;
- LeaveCriticalSection(&mr->msg_crst);
- return 1;
-}
-
-/*======================================================================*
- * Low level WAVE OUT implementation *
- *======================================================================*/
-
-/**************************************************************************
- * wodNotifyClient [internal]
- */
-static DWORD wodNotifyClient(WINE_WAVEOUT* wwo, WORD wMsg, DWORD_PTR dwParam1,
- DWORD_PTR dwParam2)
-{
- TRACE("wMsg = 0x%04x dwParm1 = %08lX dwParam2 = %08lX\n", wMsg, dwParam1, dwParam2);
-
- switch (wMsg) {
- case WOM_OPEN:
- case WOM_CLOSE:
- case WOM_DONE:
- if (wwo->wFlags != DCB_NULL &&
- !DriverCallback(wwo->waveDesc.dwCallback, wwo->wFlags, (HDRVR)wwo->waveDesc.hWave,
- wMsg, wwo->waveDesc.dwInstance, dwParam1, dwParam2)) {
- WARN("can't notify client !\n");
- return MMSYSERR_ERROR;
- }
- break;
- default:
- FIXME("Unknown callback message %u\n", wMsg);
- return MMSYSERR_INVALPARAM;
- }
- return MMSYSERR_NOERROR;
-}
-
-/**************************************************************************
- * wodUpdatePlayedTotal [internal]
- *
- */
-static BOOL wodUpdatePlayedTotal(WINE_WAVEOUT* wwo)
-{
- wwo->PlayedTotal = wwo->WrittenTotal;
- return TRUE;
-}
-
-/**************************************************************************
- * wodPlayer_BeginWaveHdr [internal]
- *
- * Makes the specified lpWaveHdr the currently playing wave header.
- * If the specified wave header is a begin loop and we're not already in
- * a loop, setup the loop.
- */
-static void wodPlayer_BeginWaveHdr(WINE_WAVEOUT* wwo, LPWAVEHDR lpWaveHdr)
-{
- wwo->lpPlayPtr = lpWaveHdr;
-
- if (!lpWaveHdr) return;
-
- if (lpWaveHdr->dwFlags & WHDR_BEGINLOOP) {
- if (wwo->lpLoopPtr) {
- WARN("Already in a loop. Discarding loop on this header (%p)\n", lpWaveHdr);
- TRACE("Already in a loop. Discarding loop on this header (%p)\n", lpWaveHdr);
- } else {
- TRACE("Starting loop (%dx) with %p\n", lpWaveHdr->dwLoops, lpWaveHdr);
- wwo->lpLoopPtr = lpWaveHdr;
- /* Windows does not touch WAVEHDR.dwLoops,
- * so we need to make an internal copy */
- wwo->dwLoops = lpWaveHdr->dwLoops;
- }
- }
-}
-
-/**************************************************************************
- * wodPlayer_PlayPtrNext [internal]
- *
- * Advance the play pointer to the next waveheader, looping if required.
- */
-static LPWAVEHDR wodPlayer_PlayPtrNext(WINE_WAVEOUT* wwo)
-{
- LPWAVEHDR lpWaveHdr = wwo->lpPlayPtr;
-
- if ((lpWaveHdr->dwFlags & WHDR_ENDLOOP) && wwo->lpLoopPtr) {
- /* We're at the end of a loop, loop if required */
- if (--wwo->dwLoops > 0) {
- wwo->lpPlayPtr = wwo->lpLoopPtr;
- } else {
- /* Handle overlapping loops correctly */
- if (wwo->lpLoopPtr != lpWaveHdr && (lpWaveHdr->dwFlags & WHDR_BEGINLOOP)) {
- FIXME("Correctly handled case ? (ending loop buffer also starts a new loop)\n");
- /* shall we consider the END flag for the closing loop or for
- * the opening one or for both ???
- * code assumes for closing loop only
- */
- } else {
- lpWaveHdr = lpWaveHdr->lpNext;
- }
- wwo->lpLoopPtr = NULL;
- wodPlayer_BeginWaveHdr(wwo, lpWaveHdr);
- }
- } else {
- /* We're not in a loop. Advance to the next wave header */
- wodPlayer_BeginWaveHdr(wwo, lpWaveHdr = lpWaveHdr->lpNext);
- }
- return lpWaveHdr;
-}
-
-/**************************************************************************
- * wodPlayer_NotifyCompletions [internal]
- *
- * Notifies and remove from queue all wavehdrs which have been played to
- * the speaker (ie. they have cleared the audio device). If force is true,
- * we notify all wavehdrs and remove them all from the queue even if they
- * are unplayed or part of a loop.
- */
-static DWORD wodPlayer_NotifyCompletions(WINE_WAVEOUT* wwo, BOOL force)
-{
- LPWAVEHDR lpWaveHdr;
-
- /* Start from lpQueuePtr and keep notifying until:
- * - we hit an unwritten wavehdr
- * - we hit the beginning of a running loop
- * - we hit a wavehdr which hasn't finished playing
- */
- wodUpdatePlayedTotal(wwo);
-
- while ((lpWaveHdr = wwo->lpQueuePtr) && (force || (lpWaveHdr != wwo->lpPlayPtr &&
- lpWaveHdr != wwo->lpLoopPtr && lpWaveHdr->reserved <= wwo->PlayedTotal))) {
-
- wwo->lpQueuePtr = lpWaveHdr->lpNext;
-
- lpWaveHdr->dwFlags &= ~WHDR_INQUEUE;
- lpWaveHdr->dwFlags |= WHDR_DONE;
-
- wodNotifyClient(wwo, WOM_DONE, (DWORD_PTR)lpWaveHdr, 0);
- }
- return (lpWaveHdr && lpWaveHdr != wwo->lpPlayPtr && lpWaveHdr != wwo->lpLoopPtr) ?
- 1 : 1;
-}
-
-/**************************************************************************
- * wodPlayer_Reset [internal]
- *
- * wodPlayer helper. Resets current output stream.
- */
-static void wodPlayer_Reset(WINE_WAVEOUT* wwo, BOOL reset)
-{
- wodUpdatePlayedTotal(wwo);
- wodPlayer_NotifyCompletions(wwo, FALSE); /* updates current notify list */
-
- /* we aren't able to flush any data that has already been written */
- /* to nas, otherwise we would do the flushing here */
-
- nas_free(wwo);
-
- if (reset) {
- enum win_wm_message msg;
- DWORD_PTR param;
- HANDLE ev;
-
- /* remove any buffer */
- wodPlayer_NotifyCompletions(wwo, TRUE);
-
- wwo->lpPlayPtr = wwo->lpQueuePtr = wwo->lpLoopPtr = NULL;
- wwo->state = WINE_WS_STOPPED;
- wwo->PlayedTotal = wwo->WrittenTotal = 0;
-
- /* remove any existing message in the ring */
- EnterCriticalSection(&wwo->msgRing.msg_crst);
-
- /* return all pending headers in queue */
- while (NAS_RetrieveRingMessage(&wwo->msgRing, &msg, ¶m, &ev))
- {
- TRACE("flushing msg\n");
- if (msg != WINE_WM_HEADER)
- {
- FIXME("shouldn't have headers left\n");
- SetEvent(ev);
- continue;
- }
- ((LPWAVEHDR)param)->dwFlags &= ~WHDR_INQUEUE;
- ((LPWAVEHDR)param)->dwFlags |= WHDR_DONE;
-
- wodNotifyClient(wwo, WOM_DONE, param, 0);
- }
- ResetEvent(wwo->msgRing.msg_event);
- LeaveCriticalSection(&wwo->msgRing.msg_crst);
- } else {
- if (wwo->lpLoopPtr) {
- /* complicated case, not handled yet (could imply modifying the loop counter */
- FIXME("Pausing while in loop isn't correctly handled yet, expec strange results\n");
- wwo->lpPlayPtr = wwo->lpLoopPtr;
- wwo->WrittenTotal = wwo->PlayedTotal; /* this is wrong !!! */
- } else {
- /* the data already written is going to be played, so take */
- /* this fact into account here */
- wwo->PlayedTotal = wwo->WrittenTotal;
- }
- wwo->state = WINE_WS_PAUSED;
- }
-}
-
-/**************************************************************************
- * wodPlayer_ProcessMessages [internal]
- */
-static void wodPlayer_ProcessMessages(WINE_WAVEOUT* wwo)
-{
- LPWAVEHDR lpWaveHdr;
- enum win_wm_message msg;
- DWORD_PTR param;
- HANDLE ev;
-
- while (NAS_RetrieveRingMessage(&wwo->msgRing, &msg, ¶m, &ev)) {
- TRACE("Received %s %lx\n", wodPlayerCmdString[msg - WM_USER - 1], param);
- switch (msg) {
- case WINE_WM_PAUSING:
- wodPlayer_Reset(wwo, FALSE);
- SetEvent(ev);
- break;
- case WINE_WM_RESTARTING:
- wwo->state = WINE_WS_PLAYING;
- SetEvent(ev);
- break;
- case WINE_WM_HEADER:
- lpWaveHdr = (LPWAVEHDR)param;
-
- /* insert buffer at the end of queue */
- {
- LPWAVEHDR* wh;
- for (wh = &(wwo->lpQueuePtr); *wh; wh = &((*wh)->lpNext));
- *wh = lpWaveHdr;
- }
- if (!wwo->lpPlayPtr)
- wodPlayer_BeginWaveHdr(wwo,lpWaveHdr);
- if (wwo->state == WINE_WS_STOPPED)
- wwo->state = WINE_WS_PLAYING;
- break;
- case WINE_WM_RESETTING:
- wodPlayer_Reset(wwo, TRUE);
- SetEvent(ev);
- break;
- case WINE_WM_UPDATE:
- wodUpdatePlayedTotal(wwo);
- SetEvent(ev);
- break;
- case WINE_WM_BREAKLOOP:
- if (wwo->state == WINE_WS_PLAYING && wwo->lpLoopPtr != NULL) {
- /* ensure exit at end of current loop */
- wwo->dwLoops = 1;
- }
- SetEvent(ev);
- break;
- case WINE_WM_CLOSING:
- /* sanity check: this should not happen since the device must have been reset before */
- if (wwo->lpQueuePtr || wwo->lpPlayPtr) ERR("out of sync\n");
- wwo->hThread = 0;
- wwo->state = WINE_WS_CLOSED;
- SetEvent(ev);
- ExitThread(0);
- /* shouldn't go here */
- default:
- FIXME("unknown message %d\n", msg);
- break;
- }
- }
-}
-
-/**************************************************************************
- * wodPlayer [internal]
- */
-static DWORD CALLBACK wodPlayer(LPVOID pmt)
-{
- WORD uDevID = (DWORD_PTR)pmt;
- WINE_WAVEOUT* wwo = &WOutDev[uDevID];
-
- wwo->state = WINE_WS_STOPPED;
- SetEvent(wwo->hStartUpEvent);
-
- for (;;) {
-
- if (wwo->FlowStarted) {
- AuHandleEvents(wwo->AuServ);
-
- if (wwo->state == WINE_WS_PLAYING && wwo->freeBytes && wwo->BufferUsed)
- nas_send_buffer(wwo);
- }
-
- if (wwo->BufferUsed <= FRAG_SIZE && wwo->writeBytes > 0)
- wodPlayer_NotifyCompletions(wwo, FALSE);
-
- WaitForSingleObject(wwo->msgRing.msg_event, 20);
- wodPlayer_ProcessMessages(wwo);
-
- while(wwo->lpPlayPtr) {
- wwo->lpPlayPtr->reserved = wwo->WrittenTotal + wwo->lpPlayPtr->dwBufferLength;
- nas_add_buffer(wwo);
- wodPlayer_PlayPtrNext(wwo);
- }
- return 0;
- }
-}
-
-/**************************************************************************
- * wodGetDevCaps [internal]
- */
-static DWORD wodGetDevCaps(WORD wDevID, LPWAVEOUTCAPSW lpCaps, DWORD dwSize)
-{
- TRACE("(%u, %p, %u);\n", wDevID, lpCaps, dwSize);
-
- if (lpCaps == NULL) return MMSYSERR_NOTENABLED;
-
- if (wDevID >= MAX_WAVEOUTDRV) {
- TRACE("MAX_WAVOUTDRV reached !\n");
- return MMSYSERR_BADDEVICEID;
- }
-
- memcpy(lpCaps, &WOutDev[wDevID].caps, min(dwSize, sizeof(*lpCaps)));
- return MMSYSERR_NOERROR;
-}
-
-/**************************************************************************
- * wodOpen [internal]
- */
-static DWORD wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
-{
- WINE_WAVEOUT* wwo;
-
- TRACE("wodOpen (%u, %p, %08X);\n", wDevID, lpDesc, dwFlags);
-
- if (lpDesc == NULL) {
- WARN("Invalid Parameter !\n");
- return MMSYSERR_INVALPARAM;
- }
- if (wDevID >= MAX_WAVEOUTDRV) {
- TRACE("MAX_WAVOUTDRV reached !\n");
- return MMSYSERR_BADDEVICEID;
- }
-
- /* if this device is already open tell the app that it is allocated */
-
- wwo = &WOutDev[wDevID];
-
- if(wwo->open)
- {
- TRACE("device already allocated\n");
- return MMSYSERR_ALLOCATED;
- }
-
-
- /* only PCM format is supported so far... */
- if (lpDesc->lpFormat->wFormatTag != WAVE_FORMAT_PCM ||
- lpDesc->lpFormat->nChannels == 0 ||
- lpDesc->lpFormat->nSamplesPerSec == 0 ||
- (lpDesc->lpFormat->wBitsPerSample!=8 && lpDesc->lpFormat->wBitsPerSample!=16)) {
- WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n",
- lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels,
- lpDesc->lpFormat->nSamplesPerSec);
- return WAVERR_BADFORMAT;
- }
-
- if (dwFlags & WAVE_FORMAT_QUERY) {
- TRACE("Query format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n",
- lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels,
- lpDesc->lpFormat->nSamplesPerSec);
- return MMSYSERR_NOERROR;
- }
-
- /* direct sound not supported, ignore the flag */
- dwFlags &= ~WAVE_DIRECTSOUND;
-
- wwo->wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK);
-
- wwo->waveDesc = *lpDesc;
- memcpy(&wwo->format, lpDesc->lpFormat, sizeof(PCMWAVEFORMAT));
-
- if (wwo->format.wBitsPerSample == 0) {
- WARN("Resetting zeroed wBitsPerSample\n");
- wwo->format.wBitsPerSample = 8 *
- (wwo->format.wf.nAvgBytesPerSec /
- wwo->format.wf.nSamplesPerSec) /
- wwo->format.wf.nChannels;
- }
-
- if (!nas_open(wwo))
- return MMSYSERR_ALLOCATED;
-
- NAS_InitRingMessage(&wwo->msgRing);
-
- /* create player thread */
- if (!(dwFlags & WAVE_DIRECTSOUND)) {
- wwo->hStartUpEvent = CreateEventW(NULL, FALSE, FALSE, NULL);
- wwo->hThread = CreateThread(NULL, 0, wodPlayer, (LPVOID)(DWORD_PTR)wDevID,
- 0, &(wwo->dwThreadID));
- if (wwo->hThread)
- SetThreadPriority(wwo->hThread, THREAD_PRIORITY_TIME_CRITICAL);
- WaitForSingleObject(wwo->hStartUpEvent, INFINITE);
- CloseHandle(wwo->hStartUpEvent);
- } else {
- wwo->hThread = INVALID_HANDLE_VALUE;
- wwo->dwThreadID = 0;
- }
- wwo->hStartUpEvent = INVALID_HANDLE_VALUE;
-
- TRACE("stream=0x%lx, BufferSize=%d\n", (long)wwo->AuServ, wwo->BufferSize);
-
- TRACE("wBitsPerSample=%u nAvgBytesPerSec=%u nSamplesPerSec=%u nChannels=%u nBlockAlign=%u\n",
- wwo->format.wBitsPerSample, wwo->format.wf.nAvgBytesPerSec,
- wwo->format.wf.nSamplesPerSec, wwo->format.wf.nChannels,
- wwo->format.wf.nBlockAlign);
-
- return wodNotifyClient(wwo, WOM_OPEN, 0L, 0L);
-}
-
-/**************************************************************************
- * wodClose [internal]
- */
-static DWORD wodClose(WORD wDevID)
-{
- DWORD ret = MMSYSERR_NOERROR;
- WINE_WAVEOUT* wwo;
-
- TRACE("(%u);\n", wDevID);
-
- if (wDevID >= MAX_WAVEOUTDRV || AuServ == NULL)
- {
- WARN("bad device ID !\n");
- return MMSYSERR_BADDEVICEID;
- }
-
- wwo = &WOutDev[wDevID];
- if (wwo->lpQueuePtr) {
- WARN("buffers still playing !\n");
- ret = WAVERR_STILLPLAYING;
- } else {
- TRACE("imhere[3-close]\n");
- if (wwo->hThread != INVALID_HANDLE_VALUE) {
- NAS_AddRingMessage(&wwo->msgRing, WINE_WM_CLOSING, 0, TRUE);
- }
-
- NAS_DestroyRingMessage(&wwo->msgRing);
-
- NAS_CloseDevice(wwo); /* close the stream and clean things up */
-
- ret = wodNotifyClient(wwo, WOM_CLOSE, 0L, 0L);
- }
- return ret;
-}
-
-/**************************************************************************
- * wodWrite [internal]
- *
- */
-static DWORD wodWrite(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize)
-{
- TRACE("(%u, %p, %08X);\n", wDevID, lpWaveHdr, dwSize);
-
- /* first, do the sanity checks... */
- if (wDevID >= MAX_WAVEOUTDRV || AuServ == NULL)
- {
- WARN("bad dev ID !\n");
- return MMSYSERR_BADDEVICEID;
- }
-
- if (lpWaveHdr->lpData == NULL || !(lpWaveHdr->dwFlags & WHDR_PREPARED))
- {
- TRACE("unprepared\n");
- return WAVERR_UNPREPARED;
- }
-
- if (lpWaveHdr->dwFlags & WHDR_INQUEUE)
- {
- TRACE("still playing\n");
- return WAVERR_STILLPLAYING;
- }
-
- lpWaveHdr->dwFlags &= ~WHDR_DONE;
- lpWaveHdr->dwFlags |= WHDR_INQUEUE;
- lpWaveHdr->lpNext = 0;
-
- TRACE("adding ring message\n");
- NAS_AddRingMessage(&WOutDev[wDevID].msgRing, WINE_WM_HEADER, (DWORD_PTR)lpWaveHdr, FALSE);
-
- return MMSYSERR_NOERROR;
-}
-
-/**************************************************************************
- * wodPause [internal]
- */
-static DWORD wodPause(WORD wDevID)
-{
- TRACE("(%u);!\n", wDevID);
-
- if (wDevID >= MAX_WAVEOUTDRV || AuServ == NULL)
- {
- WARN("bad device ID !\n");
- return MMSYSERR_BADDEVICEID;
- }
-
- TRACE("imhere[3-PAUSING]\n");
- NAS_AddRingMessage(&WOutDev[wDevID].msgRing, WINE_WM_PAUSING, 0, TRUE);
-
- return MMSYSERR_NOERROR;
-}
-
-/**************************************************************************
- * wodRestart [internal]
- */
-static DWORD wodRestart(WORD wDevID)
-{
- TRACE("(%u);\n", wDevID);
-
- if (wDevID >= MAX_WAVEOUTDRV || AuServ == NULL)
- {
- WARN("bad device ID !\n");
- return MMSYSERR_BADDEVICEID;
- }
-
- if (WOutDev[wDevID].state == WINE_WS_PAUSED) {
- TRACE("imhere[3-RESTARTING]\n");
- NAS_AddRingMessage(&WOutDev[wDevID].msgRing, WINE_WM_RESTARTING, 0, TRUE);
- }
-
- /* FIXME: is NotifyClient with WOM_DONE right ? (Comet Busters 1.3.3 needs this notification) */
- /* FIXME: Myst crashes with this ... hmm -MM
- return wodNotifyClient(wwo, WOM_DONE, 0L, 0L);
- */
-
- return MMSYSERR_NOERROR;
-}
-
-/**************************************************************************
- * wodReset [internal]
- */
-static DWORD wodReset(WORD wDevID)
-{
- TRACE("(%u);\n", wDevID);
-
- if (wDevID >= MAX_WAVEOUTDRV || AuServ == NULL)
- {
- WARN("bad device ID !\n");
- return MMSYSERR_BADDEVICEID;
- }
-
- TRACE("imhere[3-RESET]\n");
- NAS_AddRingMessage(&WOutDev[wDevID].msgRing, WINE_WM_RESETTING, 0, TRUE);
-
- return MMSYSERR_NOERROR;
-}
-
-/**************************************************************************
- * wodGetPosition [internal]
- */
-static DWORD wodGetPosition(WORD wDevID, LPMMTIME lpTime, DWORD uSize)
-{
- WINE_WAVEOUT* wwo;
-
- TRACE("%u, %p, %u);\n", wDevID, lpTime, uSize);
-
- if (wDevID >= MAX_WAVEOUTDRV || AuServ == NULL)
- {
- WARN("bad device ID !\n");
- return MMSYSERR_BADDEVICEID;
- }
-
- if (lpTime == NULL) return MMSYSERR_INVALPARAM;
-
- wwo = &WOutDev[wDevID];
-#if 0
- NAS_AddRingMessage(&wwo->msgRing, WINE_WM_UPDATE, 0, TRUE);
-#endif
-
- return bytes_to_mmtime(lpTime, wwo->WrittenTotal, &wwo->format);
-}
-
-/**************************************************************************
- * wodBreakLoop [internal]
- */
-static DWORD wodBreakLoop(WORD wDevID)
-{
- TRACE("(%u);\n", wDevID);
-
- if (wDevID >= MAX_WAVEOUTDRV || AuServ == NULL)
- {
- WARN("bad device ID !\n");
- return MMSYSERR_BADDEVICEID;
- }
- NAS_AddRingMessage(&WOutDev[wDevID].msgRing, WINE_WM_BREAKLOOP, 0, TRUE);
- return MMSYSERR_NOERROR;
-}
-
-/**************************************************************************
- * wodGetVolume [internal]
- */
-static DWORD wodGetVolume(WORD wDevID, LPDWORD lpdwVol)
-{
- DWORD left, right;
-
- left = WOutDev[wDevID].volume_left;
- right = WOutDev[wDevID].volume_right;
-
- TRACE("(%u, %p);\n", wDevID, lpdwVol);
-
- *lpdwVol = ((left * 0xFFFFl) / 100) + (((right * 0xFFFFl) / 100) << 16);
-
- return MMSYSERR_NOERROR;
-}
-
-/**************************************************************************
- * wodSetVolume [internal]
- */
-static DWORD wodSetVolume(WORD wDevID, DWORD dwParam)
-{
- DWORD left, right;
-
- left = (LOWORD(dwParam) * 100) / 0xFFFFl;
- right = (HIWORD(dwParam) * 100) / 0xFFFFl;
-
- TRACE("(%u, %08X);\n", wDevID, dwParam);
-
- WOutDev[wDevID].volume_left = left;
- WOutDev[wDevID].volume_right = right;
-
- return MMSYSERR_NOERROR;
-}
-
-/**************************************************************************
- * wodGetNumDevs [internal]
- */
-static DWORD wodGetNumDevs(void)
-{
- return MAX_WAVEOUTDRV;
-}
-
-/**************************************************************************
- * wodMessage (WINENAS.@)
- */
-DWORD WINAPI NAS_wodMessage(UINT wDevID, UINT wMsg, DWORD dwUser,
- DWORD_PTR dwParam1, DWORD_PTR dwParam2)
-{
- TRACE("(%u, %04X, %08X, %08lX, %08lX);\n", wDevID, wMsg, dwUser, dwParam1, dwParam2);
-
- switch (wMsg) {
- case DRVM_INIT:
- case DRVM_EXIT:
- case DRVM_ENABLE:
- case DRVM_DISABLE:
- /* FIXME: Pretend this is supported */
- return 0;
- case WODM_OPEN: return wodOpen (wDevID, (LPWAVEOPENDESC)dwParam1, dwParam2);
- case WODM_CLOSE: return wodClose (wDevID);
- case WODM_WRITE: return wodWrite (wDevID, (LPWAVEHDR)dwParam1, dwParam2);
- case WODM_PAUSE: return wodPause (wDevID);
- case WODM_GETPOS: return wodGetPosition (wDevID, (LPMMTIME)dwParam1, dwParam2);
- case WODM_BREAKLOOP: return wodBreakLoop (wDevID);
- case WODM_PREPARE: return MMSYSERR_NOTSUPPORTED;
- case WODM_UNPREPARE: return MMSYSERR_NOTSUPPORTED;
- case WODM_GETDEVCAPS: return wodGetDevCaps (wDevID, (LPWAVEOUTCAPSW)dwParam1, dwParam2);
- case WODM_GETNUMDEVS: return wodGetNumDevs ();
- case WODM_GETPITCH: return MMSYSERR_NOTSUPPORTED;
- case WODM_SETPITCH: return MMSYSERR_NOTSUPPORTED;
- case WODM_GETPLAYBACKRATE: return MMSYSERR_NOTSUPPORTED;
- case WODM_SETPLAYBACKRATE: return MMSYSERR_NOTSUPPORTED;
- case WODM_GETVOLUME: return wodGetVolume (wDevID, (LPDWORD)dwParam1);
- case WODM_SETVOLUME: return wodSetVolume (wDevID, dwParam1);
- case WODM_RESTART: return wodRestart (wDevID);
- case WODM_RESET: return wodReset (wDevID);
-
- case DRV_QUERYDSOUNDIFACE: return wodDsCreate (wDevID, (PIDSDRIVER*)dwParam1);
- case DRV_QUERYDSOUNDDESC: return wodDsDesc (wDevID, (PDSDRIVERDESC)dwParam1);
- default:
- FIXME("unknown message %d!\n", wMsg);
- }
- return MMSYSERR_NOTSUPPORTED;
-}
-
-/*======================================================================*
- * Low level DSOUND implementation *
- *======================================================================*/
-static DWORD wodDsCreate(UINT wDevID, PIDSDRIVER* drv)
-{
- /* we can't perform memory mapping as we don't have a file stream
- interface with nas like we do with oss */
- MESSAGE("This sound card s driver does not support direct access\n");
- MESSAGE("The (slower) DirectSound HEL mode will be used instead.\n");
- return MMSYSERR_NOTSUPPORTED;
-}
-
-static DWORD wodDsDesc(UINT wDevID, PDSDRIVERDESC desc)
-{
- memset(desc, 0, sizeof(*desc));
- strcpy(desc->szDesc, "Wine NAS DirectSound Driver");
- strcpy(desc->szDrvname, "winenas.drv");
- return MMSYSERR_NOERROR;
-}
-
-static int nas_init(void) {
- TRACE("NAS INIT\n");
- if (!(AuServ = AuOpenServer(NULL, 0, NULL, 0, NULL, NULL)))
- return 0;
-
- return 1;
-}
-
-static int nas_finddev(WINE_WAVEOUT* wwo) {
- int i;
-
- for (i = 0; i < AuServerNumDevices(wwo->AuServ); i++) {
- if ((AuDeviceKind(AuServerDevice(wwo->AuServ, i)) ==
- AuComponentKindPhysicalOutput) &&
- AuDeviceNumTracks(AuServerDevice(wwo->AuServ, i)) == wwo->format.wf.nChannels)
- {
- wwo->AuDev = AuDeviceIdentifier(AuServerDevice(wwo->AuServ, i));
- break;
- }
- }
-
- if (wwo->AuDev == AuNone)
- return 0;
- return 1;
-}
-
-static int nas_open(WINE_WAVEOUT* wwo) {
- AuElement elements[3];
-
- if (!wwo->AuServ)
- return 0;
-
- if (!nas_finddev(wwo))
- return 0;
-
- if (!(wwo->AuFlow = AuCreateFlow(wwo->AuServ, NULL)))
- return 0;
-
- wwo->BufferSize = FRAG_SIZE * FRAG_COUNT;
-
- AuMakeElementImportClient(&elements[0], wwo->format.wf.nSamplesPerSec,
- wwo->format.wBitsPerSample == 16 ? AuFormatLinearSigned16LSB : AuFormatLinearUnsigned8,
- wwo->format.wf.nChannels, AuTrue, wwo->BufferSize, wwo->BufferSize / 2, 0, NULL);
-
- AuMakeElementExportDevice(&elements[1], 0, wwo->AuDev, wwo->format.wf.nSamplesPerSec,
- AuUnlimitedSamples, 0, NULL);
-
- AuSetElements(wwo->AuServ, wwo->AuFlow, AuTrue, 2, elements, NULL);
-
- AuRegisterEventHandler(wwo->AuServ, AuEventHandlerIDMask, 0, wwo->AuFlow,
- event_handler, (AuPointer) wwo);
-
-
- wwo->PlayedTotal = 0;
- wwo->WrittenTotal = 0;
- wwo->open = 1;
-
- wwo->BufferUsed = 0;
- wwo->writeBytes = 0;
- wwo->freeBytes = 0;
- wwo->sendBytes = 0;
- wwo->SoundBuffer = NULL;
- wwo->FlowStarted = 0;
-
- AuStartFlow(wwo->AuServ, wwo->AuFlow, NULL);
- AuPauseFlow(wwo->AuServ, wwo->AuFlow, NULL);
- wwo->FlowStarted = 1;
-
- return 1;
-}
-
-static AuBool
-event_handler(AuServer* aud, AuEvent* ev, AuEventHandlerRec* hnd)
-{
- WINE_WAVEOUT *wwo = hnd->data;
- switch (ev->type) {
-
- case AuEventTypeElementNotify: {
- AuElementNotifyEvent* event = (AuElementNotifyEvent *)ev;
-
-
- switch (event->kind) {
- case AuElementNotifyKindLowWater:
- wwo->freeBytes += event->num_bytes;
- if (wwo->writeBytes > 0)
- wwo->sendBytes += event->num_bytes;
- if (wwo->freeBytes && wwo->BufferUsed)
- nas_send_buffer(wwo);
- break;
-
- case AuElementNotifyKindState:
- TRACE("ev: kind %s state %s->%s reason %s numbytes %ld freeB %u\n",
- nas_elementnotify_kind(event->kind),
- nas_state(event->prev_state),
- nas_state(event->cur_state),
- nas_reason(event->reason),
- event->num_bytes, wwo->freeBytes);
-
- if (event->cur_state == AuStatePause && event->reason != AuReasonUser) {
- wwo->freeBytes += event->num_bytes;
- if (wwo->writeBytes > 0)
- wwo->sendBytes += event->num_bytes;
- if (wwo->sendBytes > wwo->writeBytes)
- wwo->sendBytes = wwo->writeBytes;
- if (wwo->freeBytes && wwo->BufferUsed)
- nas_send_buffer(wwo);
- }
- break;
- }
- }
- }
- return AuTrue;
-}
-
-static void
-buffer_resize(WINE_WAVEOUT* wwo, int len)
-{
- void *newbuf = HeapAlloc(GetProcessHeap(), 0, wwo->BufferUsed + len);
- void *oldbuf = wwo->SoundBuffer;
- memcpy(newbuf, oldbuf, wwo->BufferUsed);
- wwo->SoundBuffer = newbuf;
- HeapFree(GetProcessHeap(), 0, oldbuf);
-}
-
-static int nas_add_buffer(WINE_WAVEOUT* wwo) {
- int len = wwo->lpPlayPtr->dwBufferLength;
-
- buffer_resize(wwo, len);
- memcpy(wwo->SoundBuffer + wwo->BufferUsed, wwo->lpPlayPtr->lpData, len);
- wwo->BufferUsed += len;
- wwo->WrittenTotal += len;
- return len;
-}
-
-static int nas_send_buffer(WINE_WAVEOUT* wwo) {
- int oldb , len;
- char *ptr, *newdata;
- newdata = NULL;
- oldb = len = 0;
-
- if (wwo->freeBytes <= 0)
- return 0;
-
- if (wwo->SoundBuffer == NULL || wwo->BufferUsed == 0) {
- return 0;
- }
-
- if (wwo->BufferUsed <= wwo->freeBytes) {
- len = wwo->BufferUsed;
- ptr = wwo->SoundBuffer;
- } else {
- len = wwo->freeBytes;
- ptr = HeapAlloc(GetProcessHeap(), 0, len);
- memcpy(ptr,wwo->SoundBuffer,len);
- newdata = HeapAlloc(GetProcessHeap(), 0, wwo->BufferUsed - len);
- memcpy(newdata, wwo->SoundBuffer + len, wwo->BufferUsed - len);
- }
-
- TRACE("envoye de %d bytes / %lu bytes / freeBytes %u\n", len, wwo->BufferUsed, wwo->freeBytes);
-
- AuWriteElement(wwo->AuServ, wwo->AuFlow, 0, len, ptr, AuFalse, NULL);
-
- wwo->BufferUsed -= len;
- wwo->freeBytes -= len;
- wwo->writeBytes += len;
-
- HeapFree(GetProcessHeap(), 0, ptr);
-
- wwo->SoundBuffer = NULL;
-
- if (newdata != NULL)
- wwo->SoundBuffer = newdata;
-
- return len;
-}
-
-static int nas_free(WINE_WAVEOUT* wwo)
-{
-
- if (!wwo->FlowStarted && wwo->BufferUsed) {
- AuStartFlow(wwo->AuServ, wwo->AuFlow, NULL);
- wwo->FlowStarted = 1;
- }
-
- while (wwo->BufferUsed || wwo->writeBytes != wwo->sendBytes) {
- if (wwo->freeBytes)
- nas_send_buffer(wwo);
- AuHandleEvents(wwo->AuServ);
- }
-
- AuFlush(wwo->AuServ);
- return TRUE;
-}
-
-static int nas_close(WINE_WAVEOUT* wwo)
-{
- AuEvent ev;
-
- nas_free(wwo);
-
- AuStopFlow(wwo->AuServ, wwo->AuFlow, NULL);
- AuDestroyFlow(wwo->AuServ, wwo->AuFlow, NULL);
- AuFlush(wwo->AuServ);
- AuNextEvent(wwo->AuServ, AuTrue, &ev);
- AuDispatchEvent(wwo->AuServ, &ev);
-
- wwo->AuFlow = 0;
- wwo->open = 0;
- wwo->BufferUsed = 0;
- wwo->freeBytes = 0;
- wwo->SoundBuffer = NULL;
- return 1;
-}
-
-static int nas_end(void)
-{
- if (AuServ)
- {
- AuCloseServer(AuServ);
- AuServ = 0;
- }
- return 1;
-}
-
-#else /* !HAVE_NAS */
-
-/**************************************************************************
- * wodMessage (WINENAS.@)
- */
-DWORD WINAPI NAS_wodMessage(WORD wDevID, WORD wMsg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2)
-{
- FIXME("(%u, %04X, %08X, %08X, %08X):stub\n", wDevID, wMsg, dwUser, dwParam1, dwParam2);
- return MMSYSERR_NOTENABLED;
-}
-#endif
diff --git a/dlls/winenas.drv/nas.c b/dlls/winenas.drv/nas.c
deleted file mode 100644
index aaf12cc..0000000
--- a/dlls/winenas.drv/nas.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* -*- tab-width: 8; c-basic-offset: 4 -*- */
-/*
- *
- * Wine Driver for NAS Network Audio System
- * http://radscan.com/nas.html
- *
- * Copyright 2002 Nicolas Escuder <n.escuder at alineanet.com>
- *
- * Code massively copied from Eric Pouech's OSS driver
- * and Chris Morgan aRts driver
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-#include "config.h"
-
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "mmddk.h"
-#include "nas.h"
-
-#ifdef HAVE_NAS
-
-/**************************************************************************
- * NAS_drvOpen [internal]
- */
-static LRESULT NAS_drvOpen(LPSTR str)
-{
- return 1;
-}
-
-/**************************************************************************
- * NAS_drvClose [internal]
- */
-static LRESULT NAS_drvClose(DWORD_PTR dwDevID)
-{
- return 1;
-}
-#endif /* #ifdef HAVE_NAS */
-
-
-/**************************************************************************
- * DriverProc (WINENAS.@)
- */
-LRESULT CALLBACK NAS_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg,
- LPARAM dwParam1, LPARAM dwParam2)
-{
-/* EPP TRACE("(%08lX, %04X, %08lX, %08lX, %08lX)\n", */
-/* EPP dwDevID, hDriv, wMsg, dwParam1, dwParam2); */
-
- switch(wMsg) {
-#ifdef HAVE_NAS
- case DRV_LOAD: NAS_WaveInit();
-/* NAS_MidiInit(); FIXME: no midi */
- return 1;
- case DRV_FREE: return NAS_WaveClose();
- case DRV_OPEN: return NAS_drvOpen((LPSTR)dwParam1);
- case DRV_CLOSE: return NAS_drvClose(dwDevID);
- case DRV_ENABLE: return 1;
- case DRV_DISABLE: return 1;
- case DRV_QUERYCONFIGURE: return 1;
- case DRV_CONFIGURE: MessageBoxA(0, "NAS MultiMedia Driver !", "NAS Driver", MB_OK); return 1;
- case DRV_INSTALL: return DRVCNF_RESTART;
- case DRV_REMOVE: return DRVCNF_RESTART;
-#endif
- default:
- return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
- }
-}
diff --git a/dlls/winenas.drv/nas.h b/dlls/winenas.drv/nas.h
deleted file mode 100644
index 603d87b..0000000
--- a/dlls/winenas.drv/nas.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Definition for NAS driver : wine multimedia system
- *
- * Copyright 2002 Nicolas Escuder <n.escuder at alineanet.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-#ifndef __WINE_NAS_H
-#define __WINE_NAS_H
-
-extern LONG NAS_WaveInit(void);
-extern LONG NAS_WaveClose(void);
-
-typedef unsigned int AFormat;
-
-#endif /* __WINE_NAS_H */
diff --git a/dlls/winenas.drv/winenas.drv.spec b/dlls/winenas.drv/winenas.drv.spec
deleted file mode 100644
index 8bee11c..0000000
--- a/dlls/winenas.drv/winenas.drv.spec
+++ /dev/null
@@ -1,2 +0,0 @@
-@ stdcall -private DriverProc(long long long long long) NAS_DriverProc
-@ stdcall -private wodMessage(long long long long long) NAS_wodMessage
diff --git a/programs/winecfg/Bg.rc b/programs/winecfg/Bg.rc
index 5555ad2..3182ee7 100644
--- a/programs/winecfg/Bg.rc
+++ b/programs/winecfg/Bg.rc
@@ -280,7 +280,6 @@ BEGIN
IDS_DRIVER_ESOUND "EsounD Driver"
IDS_DRIVER_OSS "OSS Driver"
IDS_DRIVER_JACK "JACK Driver"
- IDS_DRIVER_NAS "NAS Driver"
IDS_DRIVER_AUDIOIO "Audio IO (Solaris) Driver"
IDS_DRIVER_COREAUDIO "CoreAudio Driver"
IDS_OPEN_DRIVER_ERROR "Couldn't open %s!"
diff --git a/programs/winecfg/Cs.rc b/programs/winecfg/Cs.rc
index f3116d7..3dedcb4 100644
--- a/programs/winecfg/Cs.rc
+++ b/programs/winecfg/Cs.rc
@@ -280,7 +280,6 @@ BEGIN
IDS_DRIVER_ESOUND "Ovladaè EsounD"
IDS_DRIVER_OSS "Ovladaè OSS"
IDS_DRIVER_JACK "Ovladaè JACK"
- IDS_DRIVER_NAS "Ovladaè NAS"
IDS_DRIVER_AUDIOIO "Ovladaè Audio IO (Solaris)"
IDS_DRIVER_COREAUDIO "Ovladaè CoreAudio"
IDS_OPEN_DRIVER_ERROR "Nemohu otevøít %s!"
diff --git a/programs/winecfg/Da.rc b/programs/winecfg/Da.rc
index 64e022b..f886e26 100644
--- a/programs/winecfg/Da.rc
+++ b/programs/winecfg/Da.rc
@@ -274,7 +274,6 @@ BEGIN
IDS_DRIVER_ESOUND "EsounD-driver"
IDS_DRIVER_OSS "OSS-driver"
IDS_DRIVER_JACK "JACK-driver"
- IDS_DRIVER_NAS "NAS-driver"
IDS_DRIVER_AUDIOIO "Audio IO (Solaris)-driver"
IDS_DRIVER_COREAUDIO "CoreAudio-driver"
IDS_OPEN_DRIVER_ERROR "Kunne ikke åbne %s!"
diff --git a/programs/winecfg/De.rc b/programs/winecfg/De.rc
index fa5bbe5..1fcb809 100644
--- a/programs/winecfg/De.rc
+++ b/programs/winecfg/De.rc
@@ -286,7 +286,6 @@ BEGIN
IDS_DRIVER_ESOUND "EsounD-Treiber"
IDS_DRIVER_OSS "OSS-Treiber"
IDS_DRIVER_JACK "JACK-Treiber"
- IDS_DRIVER_NAS "NAS-Treiber"
IDS_DRIVER_AUDIOIO "Audio-IO-Treiber (Solaris)"
IDS_DRIVER_COREAUDIO "CoreAudio-Treiber"
IDS_OPEN_DRIVER_ERROR "Konnte %s nicht öffnen!"
diff --git a/programs/winecfg/En.rc b/programs/winecfg/En.rc
index 490314a..253de3d 100644
--- a/programs/winecfg/En.rc
+++ b/programs/winecfg/En.rc
@@ -286,7 +286,6 @@ BEGIN
IDS_DRIVER_ESOUND "EsounD Driver"
IDS_DRIVER_OSS "OSS Driver"
IDS_DRIVER_JACK "JACK Driver"
- IDS_DRIVER_NAS "NAS Driver"
IDS_DRIVER_AUDIOIO "Audio IO (Solaris) Driver"
IDS_DRIVER_COREAUDIO "CoreAudio Driver"
IDS_OPEN_DRIVER_ERROR "Couldn't open %s!"
diff --git a/programs/winecfg/Es.rc b/programs/winecfg/Es.rc
index 423c783..8f0d0f1 100644
--- a/programs/winecfg/Es.rc
+++ b/programs/winecfg/Es.rc
@@ -274,7 +274,6 @@ BEGIN
IDS_DRIVER_ESOUND "Manejador EsounD"
IDS_DRIVER_OSS "Manejador OSS"
IDS_DRIVER_JACK "Manejador JACK"
- IDS_DRIVER_NAS "Manejador NAS"
IDS_DRIVER_AUDIOIO "Manejador Audio IO (Solaris)"
IDS_DRIVER_COREAUDIO "Manejador CoreAudio"
IDS_OPEN_DRIVER_ERROR "¡No se ha podido abrir %s!"
diff --git a/programs/winecfg/Fi.rc b/programs/winecfg/Fi.rc
index 957b87d..efe8a8e 100644
--- a/programs/winecfg/Fi.rc
+++ b/programs/winecfg/Fi.rc
@@ -274,7 +274,6 @@ BEGIN
IDS_DRIVER_ESOUND "EsounD Driver"
IDS_DRIVER_OSS "OSS Driver"
IDS_DRIVER_JACK "JACK Driver"
- IDS_DRIVER_NAS "NAS Driver"
IDS_DRIVER_AUDIOIO "Audio IO (Solaris) Driver"
IDS_DRIVER_COREAUDIO "CoreAudio Driver"
IDS_OPEN_DRIVER_ERROR "Couldn't open %s!"
diff --git a/programs/winecfg/Fr.rc b/programs/winecfg/Fr.rc
index f84cff6..46222ae 100644
--- a/programs/winecfg/Fr.rc
+++ b/programs/winecfg/Fr.rc
@@ -288,7 +288,6 @@ BEGIN
IDS_DRIVER_ESOUND "Pilote EsounD"
IDS_DRIVER_OSS "Pilote OSS"
IDS_DRIVER_JACK "Pilote JACK"
- IDS_DRIVER_NAS "Pilote NAS"
IDS_DRIVER_AUDIOIO "Pilote Audio IO (Solaris)"
IDS_DRIVER_COREAUDIO "Pilote CoreAudio"
IDS_OPEN_DRIVER_ERROR "Impossible d'ouvrir %s !"
diff --git a/programs/winecfg/Hu.rc b/programs/winecfg/Hu.rc
index 7c4e4fc..0c43cfe 100644
--- a/programs/winecfg/Hu.rc
+++ b/programs/winecfg/Hu.rc
@@ -274,7 +274,6 @@ BEGIN
IDS_DRIVER_ESOUND "EsounD Driver"
IDS_DRIVER_OSS "OSS Driver"
IDS_DRIVER_JACK "JACK Driver"
- IDS_DRIVER_NAS "NAS Driver"
IDS_DRIVER_AUDIOIO "Audio IO (Solaris) Driver"
IDS_DRIVER_COREAUDIO "CoreAudio Driver"
IDS_OPEN_DRIVER_ERROR "Couldn't open %s!"
diff --git a/programs/winecfg/It.rc b/programs/winecfg/It.rc
index 29deea2..059a236 100644
--- a/programs/winecfg/It.rc
+++ b/programs/winecfg/It.rc
@@ -288,7 +288,6 @@ BEGIN
IDS_DRIVER_ESOUND "Driver Esound"
IDS_DRIVER_OSS "Driver OSS"
IDS_DRIVER_JACK "Driver JACK"
- IDS_DRIVER_NAS "Driver NAS"
IDS_DRIVER_AUDIOIO "Driver Audio IO (Solaris)"
IDS_DRIVER_COREAUDIO "Driver CoreAudio"
IDS_OPEN_DRIVER_ERROR "Impossibile aprire %s!"
diff --git a/programs/winecfg/Ja.rc b/programs/winecfg/Ja.rc
index ff03564..11ce156 100644
--- a/programs/winecfg/Ja.rc
+++ b/programs/winecfg/Ja.rc
@@ -289,7 +289,6 @@ BEGIN
IDS_DRIVER_ESOUND "EsounD ã??ã?©ã?¤ã??"
IDS_DRIVER_OSS "OSS ã??ã?©ã?¤ã??"
IDS_DRIVER_JACK "JACK ã??ã?©ã?¤ã??"
- IDS_DRIVER_NAS "NAS ã??ã?©ã?¤ã??"
IDS_DRIVER_AUDIOIO "Audio IO (Solaris) ã??ã?©ã?¤ã??"
IDS_DRIVER_COREAUDIO "CoreAudio ã??ã?©ã?¤ã??"
IDS_OPEN_DRIVER_ERROR "%sã??ã?ªã?¼ã??ã?³ã?§ã??ã?¾ã??ã??!"
diff --git a/programs/winecfg/Ko.rc b/programs/winecfg/Ko.rc
index b30ce87..96da0ab 100644
--- a/programs/winecfg/Ko.rc
+++ b/programs/winecfg/Ko.rc
@@ -289,7 +289,6 @@ BEGIN
IDS_DRIVER_ESOUND "EsounD µå¶óÀ̹ö"
IDS_DRIVER_OSS "OSS µå¶óÀ̹ö"
IDS_DRIVER_JACK "JACK µå¶óÀ̹ö"
- IDS_DRIVER_NAS "NAS µå¶óÀ̹ö"
IDS_DRIVER_AUDIOIO "Audio IO (Solaris) µå¶óÀ̹ö"
IDS_DRIVER_COREAUDIO "CoreAudio µå¶óÀ̹ö"
IDS_OPEN_DRIVER_ERROR "%s¸¦ ¿ ¼ö ¾ø½À´Ï´Ù!"
diff --git a/programs/winecfg/Lt.rc b/programs/winecfg/Lt.rc
index 1a9d0fa..38f01c9 100644
--- a/programs/winecfg/Lt.rc
+++ b/programs/winecfg/Lt.rc
@@ -287,7 +287,6 @@ BEGIN
IDS_DRIVER_ESOUND "EsounD tvarkyklÄ?"
IDS_DRIVER_OSS "OSS tvarkyklÄ?"
IDS_DRIVER_JACK "JACK tvarkyklÄ?"
- IDS_DRIVER_NAS "NAS tvarkyklÄ?"
IDS_DRIVER_AUDIOIO "Audio IO (Solaris) tvarkyklÄ?"
IDS_DRIVER_COREAUDIO "CoreAudio tvarkyklÄ?"
IDS_OPEN_DRIVER_ERROR "Nepavyko atverti %s!"
diff --git a/programs/winecfg/Nl.rc b/programs/winecfg/Nl.rc
index 5783033..0b5362d 100644
--- a/programs/winecfg/Nl.rc
+++ b/programs/winecfg/Nl.rc
@@ -287,7 +287,6 @@ BEGIN
IDS_DRIVER_ESOUND "EsounD Stuurprogramma"
IDS_DRIVER_OSS "OSS Stuurprogramma"
IDS_DRIVER_JACK "JACK Stuurprogramma"
- IDS_DRIVER_NAS "NAS Stuurprogramma"
IDS_DRIVER_AUDIOIO "Audio IO (Solaris) Stuurprogramma"
IDS_DRIVER_COREAUDIO "CoreAudio Stuurprogramma"
IDS_OPEN_DRIVER_ERROR "%s kon niet worden geopend!"
diff --git a/programs/winecfg/No.rc b/programs/winecfg/No.rc
index fc89482..48b8437 100644
--- a/programs/winecfg/No.rc
+++ b/programs/winecfg/No.rc
@@ -274,7 +274,6 @@ BEGIN
IDS_DRIVER_ESOUND "EsounD-driver"
IDS_DRIVER_OSS "OSS-driver"
IDS_DRIVER_JACK "JACK-driver"
- IDS_DRIVER_NAS "NAS-driver"
IDS_DRIVER_AUDIOIO "Audio IO (Solaris)-driver"
IDS_DRIVER_COREAUDIO "CoreAudio-driver"
IDS_OPEN_DRIVER_ERROR "Klarte ikke åpne %s."
diff --git a/programs/winecfg/Pl.rc b/programs/winecfg/Pl.rc
index 9422f34..1a30c9f 100644
--- a/programs/winecfg/Pl.rc
+++ b/programs/winecfg/Pl.rc
@@ -277,7 +277,6 @@ BEGIN
IDS_DRIVER_ESOUND "Sterownik EsounD"
IDS_DRIVER_OSS "Sterownik OSS"
IDS_DRIVER_JACK "Sterownik JACK"
- IDS_DRIVER_NAS "Sterownik NAS"
IDS_DRIVER_AUDIOIO "Sterownik Audio IO (Solaris)"
IDS_DRIVER_COREAUDIO "Sterownik CoreAudio"
IDS_OPEN_DRIVER_ERROR "Nie mogê otworzyæ %s!"
diff --git a/programs/winecfg/Pt.rc b/programs/winecfg/Pt.rc
index 3d2ee2d..49a4f4b 100644
--- a/programs/winecfg/Pt.rc
+++ b/programs/winecfg/Pt.rc
@@ -474,7 +474,6 @@ BEGIN
IDS_DRIVER_ESOUND "Controlador EsounD"
IDS_DRIVER_OSS "Controlador OSS"
IDS_DRIVER_JACK "Controlador JACK"
- IDS_DRIVER_NAS "Controlador NAS"
IDS_DRIVER_AUDIOIO "Controlador ES de Ã?udio (Solaris)"
IDS_DRIVER_COREAUDIO "Controlador CoreAudio"
IDS_OPEN_DRIVER_ERROR "Não é possÃvel abrir %s!"
diff --git a/programs/winecfg/Ro.rc b/programs/winecfg/Ro.rc
index c031ea8..73f7d4a 100644
--- a/programs/winecfg/Ro.rc
+++ b/programs/winecfg/Ro.rc
@@ -286,7 +286,6 @@ BEGIN
IDS_DRIVER_ESOUND "Driver Esound"
IDS_DRIVER_OSS "Driver OSS"
IDS_DRIVER_JACK "Driver JACK"
- IDS_DRIVER_NAS "Driver NAS"
IDS_DRIVER_AUDIOIO "Driver Audio IO (Solaris)"
IDS_DRIVER_COREAUDIO "Driver CoreAudio"
IDS_OPEN_DRIVER_ERROR "Nu pot deschide %s!"
diff --git a/programs/winecfg/Ru.rc b/programs/winecfg/Ru.rc
index 58252ba..6e6b681 100644
--- a/programs/winecfg/Ru.rc
+++ b/programs/winecfg/Ru.rc
@@ -291,7 +291,6 @@ BEGIN
IDS_DRIVER_ESOUND "EsounD дÑ?айвеÑ?"
IDS_DRIVER_OSS "OSS дÑ?айвеÑ?"
IDS_DRIVER_JACK "JACK дÑ?айвеÑ?"
- IDS_DRIVER_NAS "NAS дÑ?айвеÑ?"
IDS_DRIVER_AUDIOIO "Audio IO (Solaris) дÑ?айвеÑ?"
IDS_DRIVER_COREAUDIO "CoreAudio дÑ?айвеÑ?"
IDS_OPEN_DRIVER_ERROR "Ð?евозможно оÑ?кÑ?Ñ?Ñ?Ñ? %s!"
diff --git a/programs/winecfg/Si.rc b/programs/winecfg/Si.rc
index eec1658..b11daa5 100644
--- a/programs/winecfg/Si.rc
+++ b/programs/winecfg/Si.rc
@@ -276,7 +276,6 @@ BEGIN
IDS_DRIVER_ESOUND "EsounD gonilnik"
IDS_DRIVER_OSS "OSS gonilnik"
IDS_DRIVER_JACK "JACK gonilnik"
- IDS_DRIVER_NAS "NAS gonilnik"
IDS_DRIVER_AUDIOIO "Audio IO (Solaris) gonilnik"
IDS_DRIVER_COREAUDIO "CoreAudio gonilnik"
IDS_OPEN_DRIVER_ERROR "Gonilnika %s ni mogoÄ?e odpreti!"
diff --git a/programs/winecfg/Sv.rc b/programs/winecfg/Sv.rc
index d724afa..1ec9a68 100644
--- a/programs/winecfg/Sv.rc
+++ b/programs/winecfg/Sv.rc
@@ -274,7 +274,6 @@ BEGIN
IDS_DRIVER_ESOUND "EsounD-drivrutin"
IDS_DRIVER_OSS "OSS-drivrutin"
IDS_DRIVER_JACK "JACK-drivrutin"
- IDS_DRIVER_NAS "NAS-drivrutin"
IDS_DRIVER_AUDIOIO "Audio IO-drivrutin (Solaris)"
IDS_DRIVER_COREAUDIO "CoreAudio Driver"
IDS_OPEN_DRIVER_ERROR "Kunde inte öppna %s!"
diff --git a/programs/winecfg/Tr.rc b/programs/winecfg/Tr.rc
index 89ddb23..8586bbe 100644
--- a/programs/winecfg/Tr.rc
+++ b/programs/winecfg/Tr.rc
@@ -274,7 +274,6 @@ BEGIN
IDS_DRIVER_ESOUND "EsounD Sürücüsü"
IDS_DRIVER_OSS "OSS Sürücüsü"
IDS_DRIVER_JACK "JACK Sürücüsü"
- IDS_DRIVER_NAS "NAS Sürücüsü"
IDS_DRIVER_AUDIOIO "Audio IO (Solaris) Sürücüsü"
IDS_DRIVER_COREAUDIO "CoreAudio Sürücüsü"
IDS_OPEN_DRIVER_ERROR "%s açýlamadý!"
diff --git a/programs/winecfg/Zh.rc b/programs/winecfg/Zh.rc
index 14ac5c3..66a8859 100644
--- a/programs/winecfg/Zh.rc
+++ b/programs/winecfg/Zh.rc
@@ -279,7 +279,6 @@ BEGIN
IDS_DRIVER_ESOUND "EsounD 驱�"
IDS_DRIVER_OSS "OSS 驱�"
IDS_DRIVER_JACK "JACK 驱�"
- IDS_DRIVER_NAS "NAS 驱�"
IDS_DRIVER_AUDIOIO "Audio IO (Solaris) 驱�"
IDS_DRIVER_COREAUDIO "CoreAudio 驱�"
IDS_OPEN_DRIVER_ERROR "æ? æ³?æ??å¼? %s !"
@@ -580,7 +579,6 @@ BEGIN
IDS_DRIVER_ESOUND "EsounD é©?å??"
IDS_DRIVER_OSS "OSS é©?å??"
IDS_DRIVER_JACK "JACK é©?å??"
- IDS_DRIVER_NAS "NAS é©?å??"
IDS_DRIVER_AUDIOIO "Audio IO (Solaris) é©?å??"
IDS_DRIVER_COREAUDIO "CoreAudio é©?å??"
IDS_OPEN_DRIVER_ERROR "ç?¡æ³?é??å?? %s ï¼?"
diff --git a/programs/winecfg/audio.c b/programs/winecfg/audio.c
index 9f8a0a2..67eeaa2 100644
--- a/programs/winecfg/audio.c
+++ b/programs/winecfg/audio.c
@@ -93,7 +93,6 @@ static const AUDIO_DRIVER sAudioDrivers[] = {
{IDS_DRIVER_OSS, "oss"},
{IDS_DRIVER_COREAUDIO, "coreaudio"},
{IDS_DRIVER_JACK, "jack"},
- {IDS_DRIVER_NAS, "nas"},
{IDS_DRIVER_ESOUND, "esd"},
{IDS_DRIVER_AUDIOIO, "audioio"},
{0, ""}
diff --git a/programs/winecfg/resource.h b/programs/winecfg/resource.h
index f006861..a707bd9 100644
--- a/programs/winecfg/resource.h
+++ b/programs/winecfg/resource.h
@@ -191,7 +191,6 @@
#define IDS_DRIVER_ESOUND 8306
#define IDS_DRIVER_OSS 8307
#define IDS_DRIVER_JACK 8308
-#define IDS_DRIVER_NAS 8309
#define IDS_DRIVER_AUDIOIO 8310
#define IDS_DRIVER_COREAUDIO 8311
#define IDS_OPEN_DRIVER_ERROR 8312
--
1.6.5.2
More information about the wine-patches
mailing list