|
View:
New views
1 Messages
—
Rating Filter:
Alert me
|
|
|
winenas.drv: Remove broken driver---
From 88fde5ad95a33dc2da29757605891ccc5047c12f Mon Sep 17 00:00:00 2001 From: mlankhorst <mlankhorst@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 - -@MAKE_DLL_RULES@ - -@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@...> - * - * 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@...> - * - * 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@...> - * - * 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 |
| Free embeddable forum powered by Nabble | Forum Help |