--- /dev/null
+/*
+ * PROJECT: ReactOS Sound System "MME Buddy" Library
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: lib/drivers/sound/mmebuddy/functiontable.c
+ *
+ * PURPOSE: Routes function calls through a function table, calling
+ * implementation-defined routines or a default function, depending
+ * on configuration.
+ *
+ * PROGRAMMERS: Andrew Greenwood (silverblade@reactos.org)
+*/
+
+#include "precomp.h"
+
+/*
+ Attaches a function table to a sound device. Any NULL entries in this
+ table are automatically set to point to a default routine to handle
+ the appropriate function.
+*/
+MMRESULT
+SetSoundDeviceFunctionTable(
+ IN PSOUND_DEVICE SoundDevice,
+ IN PMMFUNCTION_TABLE FunctionTable)
+{
+ VALIDATE_MMSYS_PARAMETER( IsValidSoundDevice(SoundDevice) );
+ VALIDATE_MMSYS_PARAMETER( FunctionTable );
+
+ /* Zero out the existing function table (if present) */
+ ZeroMemory(&SoundDevice->FunctionTable, sizeof(MMFUNCTION_TABLE));
+
+ if ( ! FunctionTable )
+ return MMSYSERR_INVALPARAM;
+
+ /* Fill in the client-supplied functions */
+ CopyMemory(&SoundDevice->FunctionTable,
+ FunctionTable,
+ sizeof(MMFUNCTION_TABLE));
+
+ return MMSYSERR_NOERROR;
+}
+
+/*
+ Retrieves the function table for a sound device, as previously set using
+ SetSoundDeviceFunctionTable.
+*/
+MMRESULT
+GetSoundDeviceFunctionTable(
+ IN PSOUND_DEVICE SoundDevice,
+ OUT PMMFUNCTION_TABLE* FunctionTable)
+{
+ VALIDATE_MMSYS_PARAMETER( IsValidSoundDevice(SoundDevice) );
+ VALIDATE_MMSYS_PARAMETER( FunctionTable );
+
+ *FunctionTable = &SoundDevice->FunctionTable;
+
+ return MMSYSERR_NOERROR;
+}