#
# Copyright 2005-2007 Sun Microsystems, Inc.  All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Sun designates this
# particular file as subject to the "Classpath" exception as provided
# by Sun in the LICENSE file that accompanied this code.
#
# This code 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 General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#

# Define library interface.

SUNWprivate_1.1 {
	global:
            Java_com_sun_media_sound_DirectAudioDevice_nAvailable;
            Java_com_sun_media_sound_DirectAudioDevice_nClose;
            Java_com_sun_media_sound_DirectAudioDevice_nFlush;
            Java_com_sun_media_sound_DirectAudioDevice_nGetBufferSize;
            Java_com_sun_media_sound_DirectAudioDevice_nGetBytePosition;
            Java_com_sun_media_sound_DirectAudioDevice_nGetFormats;
            Java_com_sun_media_sound_DirectAudioDevice_nIsStillDraining;
            Java_com_sun_media_sound_DirectAudioDevice_nOpen;
            Java_com_sun_media_sound_DirectAudioDevice_nRead;
            Java_com_sun_media_sound_DirectAudioDevice_nRequiresServicing;
            Java_com_sun_media_sound_DirectAudioDevice_nService;
            Java_com_sun_media_sound_DirectAudioDevice_nSetBytePosition;
            Java_com_sun_media_sound_DirectAudioDevice_nStart;
            Java_com_sun_media_sound_DirectAudioDevice_nStop;
            Java_com_sun_media_sound_DirectAudioDevice_nWrite;
            Java_com_sun_media_sound_DirectAudioDeviceProvider_nGetNumDevices;
            Java_com_sun_media_sound_DirectAudioDeviceProvider_nNewDirectAudioDeviceInfo;
            Java_com_sun_media_sound_MidiInDevice_nClose;
            Java_com_sun_media_sound_MidiInDevice_nGetMessages;
            Java_com_sun_media_sound_MidiInDevice_nGetTimeStamp;
            Java_com_sun_media_sound_MidiInDevice_nOpen;
            Java_com_sun_media_sound_MidiInDevice_nStart;
            Java_com_sun_media_sound_MidiInDevice_nStop;
            Java_com_sun_media_sound_MidiInDeviceProvider_nGetDescription;
            Java_com_sun_media_sound_MidiInDeviceProvider_nGetName;
            Java_com_sun_media_sound_MidiInDeviceProvider_nGetNumDevices;
            Java_com_sun_media_sound_MidiInDeviceProvider_nGetVendor;
            Java_com_sun_media_sound_MidiInDeviceProvider_nGetVersion;
            Java_com_sun_media_sound_MidiOutDevice_nClose;
            Java_com_sun_media_sound_MidiOutDevice_nGetTimeStamp;
            Java_com_sun_media_sound_MidiOutDevice_nOpen;
            Java_com_sun_media_sound_MidiOutDevice_nSendLongMessage;
            Java_com_sun_media_sound_MidiOutDevice_nSendShortMessage;
            Java_com_sun_media_sound_MidiOutDeviceProvider_nGetDescription;
            Java_com_sun_media_sound_MidiOutDeviceProvider_nGetName;
            Java_com_sun_media_sound_MidiOutDeviceProvider_nGetNumDevices;
            Java_com_sun_media_sound_MidiOutDeviceProvider_nGetVendor;
            Java_com_sun_media_sound_MidiOutDeviceProvider_nGetVersion;
            Java_com_sun_media_sound_Platform_nGetExtraLibraries;
            Java_com_sun_media_sound_Platform_nGetLibraryForFeature;
            Java_com_sun_media_sound_Platform_nIsBigEndian;
            Java_com_sun_media_sound_Platform_nIsSigned8;
            Java_com_sun_media_sound_PortMixer_nClose;
            Java_com_sun_media_sound_PortMixer_nControlGetFloatValue;
            Java_com_sun_media_sound_PortMixer_nControlGetIntValue;
            Java_com_sun_media_sound_PortMixer_nControlSetFloatValue;
            Java_com_sun_media_sound_PortMixer_nControlSetIntValue;
            Java_com_sun_media_sound_PortMixer_nGetControls;
            Java_com_sun_media_sound_PortMixer_nGetPortCount;
            Java_com_sun_media_sound_PortMixer_nGetPortName;
            Java_com_sun_media_sound_PortMixer_nGetPortType;
            Java_com_sun_media_sound_PortMixer_nOpen;
            Java_com_sun_media_sound_PortMixerProvider_nGetNumDevices;
            Java_com_sun_media_sound_PortMixerProvider_nNewPortMixerInfo;
	local:
	    *;
};
