#
# Copyright (c) 2005, 2007, Oracle and/or its affiliates. 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.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.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:
	    *;
};
