#
# Copyright (c) 2001, 2008, 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 public interface.

SUNWprivate_1.1 {
	global:
		JNI_OnLoad;

                Java_sun_java2d_x11_X11PMBlitLoops_nativeBlit;
		Java_sun_java2d_x11_X11PMBlitBgLoops_nativeBlitBg;
		Java_sun_java2d_x11_X11Renderer_XFillSpans;
		Java_sun_java2d_x11_X11Renderer_XDrawArc;
		Java_sun_java2d_x11_X11Renderer_XDrawLine;
		Java_sun_java2d_x11_X11Renderer_XDrawOval;
		Java_sun_java2d_x11_X11Renderer_XDrawPoly;
		Java_sun_java2d_x11_X11Renderer_XDrawRect;
		Java_sun_java2d_x11_X11Renderer_XDrawRoundRect;
                Java_sun_java2d_x11_X11Renderer_XDoPath;
		Java_sun_java2d_x11_X11Renderer_XFillArc;
		Java_sun_java2d_x11_X11Renderer_XFillOval;
		Java_sun_java2d_x11_X11Renderer_XFillPoly;
		Java_sun_java2d_x11_X11Renderer_XFillRect;
		Java_sun_java2d_x11_X11Renderer_XFillRoundRect;
		Java_sun_java2d_x11_X11Renderer_devCopyArea;
		Java_sun_java2d_x11_X11SurfaceData_initIDs;
		Java_sun_java2d_x11_X11SurfaceData_initOps;
		Java_sun_java2d_x11_X11SurfaceData_isDrawableValid;
		Java_sun_java2d_x11_X11SurfaceData_initSurface;
		Java_sun_java2d_x11_X11SurfaceData_setInvalid;
                Java_sun_java2d_x11_X11SurfaceData_XCreateGC;
                Java_sun_java2d_x11_X11SurfaceData_XResetClip;
                Java_sun_java2d_x11_X11SurfaceData_XSetClip;
                Java_sun_java2d_x11_X11SurfaceData_XSetCopyMode;
                Java_sun_java2d_x11_X11SurfaceData_XSetXorMode;
                Java_sun_java2d_x11_X11SurfaceData_XSetForeground;

		X11SurfaceData_GetOps;
		Java_java_awt_Font_initIDs;
                Java_sun_font_FontConfigManager_getFontConfig;
                Java_sun_font_FontConfigManager_getFontConfigAASettings;
                Java_sun_font_FontConfigManager_getFontConfigVersion;
		Java_sun_awt_X11FontManager_getFontPath;

		Java_sun_awt_FontDescriptor_initIDs;
		Java_sun_awt_PlatformFont_initIDs;

		Java_sun_print_CUPSPrinter_initIDs;
		Java_sun_print_CUPSPrinter_getCupsServer;
		Java_sun_print_CUPSPrinter_getCupsPort;
		Java_sun_print_CUPSPrinter_canConnect;	
		Java_sun_print_CUPSPrinter_getMedia;
		Java_sun_print_CUPSPrinter_getPageSizes;

		# libfontmanager entry points
		AWTIsHeadless;
		AWTCountFonts;
                AWTLoadFont;
                AWTFreeFont;
                AWTFontAscent;
                AWTFontDescent;
                AWTFontMinByte1;
                AWTFontMaxByte1;
                AWTFontMinCharOrByte2;
                AWTFontMaxCharOrByte2;
                AWTFontDefaultChar;
                AWTFontPerChar;
                AWTFontMaxBounds;
                AWTFontTextExtents16;
                AWTFreeChar;
                AWTFontGenerateImage;
                AWTCharAdvance;
                AWTCharLBearing;
                AWTCharRBearing;
                AWTCharAscent;
                AWTCharDescent;
                AWTDrawGlyphList;
                AccelGlyphCache_RemoveAllCellInfos;


	local:
		*;
};

